diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-07-27 21:39:44 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-07-27 21:39:44 +0200 |
| commit | 2e47298639b3e4971e2a7b35d50b57340276435b (patch) | |
| tree | 63d3b3601df765781d61504d45c7b1d2480f356c /src | |
| parent | da4069d389ed0ca56a17da29b9e967bc2acb0dad (diff) | |
| download | ft_ssl-2e47298639b3e4971e2a7b35d50b57340276435b.tar.gz ft_ssl-2e47298639b3e4971e2a7b35d50b57340276435b.tar.bz2 ft_ssl-2e47298639b3e4971e2a7b35d50b57340276435b.zip | |
Disabling previous work temporarily to focus on the algorithm
Diffstat (limited to 'src')
| -rw-r--r-- | src/args.c | 156 | ||||
| -rw-r--r-- | src/error.c | 28 | ||||
| -rw-r--r-- | src/main.c | 54 | ||||
| -rw-r--r-- | src/md5/main.c | 144 | ||||
| -rw-r--r-- | src/md5/main_md5.c | 18 | ||||
| -rw-r--r-- | src/sha256/main_sha256.c | 14 |
6 files changed, 273 insertions, 141 deletions
@@ -6,86 +6,86 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 09:43:42 by cacharle #+# #+# */ -/* Updated: 2020/02/22 10:44:04 by cacharle ### ########.fr */ +/* Updated: 2020/07/27 14:57:39 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -static void st_print_digest_id(t_flags flags, char *id) -{ - if (flags & FLAG_STRING) - ft_putchar('"'); - ft_putstr(id); - if (flags & FLAG_STRING) - ft_putchar('"'); -} - -static void st_print_digest(t_digest *digest, t_flags flags, char *name, char *id) -{ - int i; - - if (!(flags & FLAG_REVERSE) && !(flags & FLAG_QUIET)) - { - ft_putstr(name); - ft_putchar('('); - st_print_digest_id(flags, id); - ft_putstr(") = "); - } - i = -1; - while (++i < digest->size) - ft_putnbr_base(digest->data[i], "0123456789abcdef"); - if (flags & FLAG_QUIET) - return ; - ft_putchar(' '); - st_print_digest_id(flags, id); -} - -int fl_parse_args(char *name, int argc, char **argv, t_func_hash func_hash) -{ - t_flags flags; - t_digest digest; - char *file; - - flags = 0x0; - while (**argv == '-') - { - (*argv)++; - if (**argv == 's') - { - if ((*argv)[1] == '\0') - { - func_hash(*(++argv), &digest); - argc--; - } - else - func_hash(ft_strdup(*argv + 1), &digest); - st_print_digest(&digest, flags, name, ""); - } - else if (**argv == 'p') - flags |= FLAG_PIPE; - else if (**argv == 'q') - flags |= FLAG_QUIET; - else if (**argv == 'r') - flags |= FLAG_REVERSE; - else - return (1); - if (ft_strchr("pqrs", (*argv)[1]) != NULL) - { - **argv = '-'; - continue; - } - argv++; - argc--; - } - while (argc-- > 0) - { - if ((file = ft_read_file(*argv)) == NULL) - return (1); - func_hash(file, &digest); - free(file); - st_print_digest(&digest, flags, name, *argv); - argv++; - } - return (0); -} +/* static void st_print_digest_id(t_flags flags, char *id) */ +/* { */ +/* if (flags & FLAG_STRING) */ +/* ft_putchar('"'); */ +/* ft_putstr(id); */ +/* if (flags & FLAG_STRING) */ +/* ft_putchar('"'); */ +/* } */ +/* */ +/* static void st_print_digest(t_digest *digest, t_flags flags, char *name, char *id) */ +/* { */ +/* int i; */ +/* */ +/* if (!(flags & FLAG_REVERSE) && !(flags & FLAG_QUIET)) */ +/* { */ +/* ft_putstr(name); */ +/* ft_putchar('('); */ +/* st_print_digest_id(flags, id); */ +/* ft_putstr(") = "); */ +/* } */ +/* i = -1; */ +/* while (++i < digest->size) */ +/* ft_putnbr_base(digest->data[i], "0123456789abcdef"); */ +/* if (flags & FLAG_QUIET) */ +/* return ; */ +/* ft_putchar(' '); */ +/* st_print_digest_id(flags, id); */ +/* } */ +/* */ +/* int parse_args(char *name, int argc, char **argv, t_func_hash func_hash) */ +/* { */ +/* t_flags flags; */ +/* t_digest digest; */ +/* char *file; */ +/* */ +/* flags = 0; */ +/* while (**argv == '-') */ +/* { */ +/* (*argv)++; */ +/* if (**argv == 's') */ +/* { */ +/* if ((*argv)[1] == '\0') */ +/* { */ +/* func_hash(*(++argv), &digest); */ +/* argc--; */ +/* } */ +/* else */ +/* func_hash(ft_strdup(*argv + 1), &digest); */ +/* st_print_digest(&digest, flags, name, ""); */ +/* } */ +/* else if (**argv == 'p') */ +/* flags |= FLAG_PIPE; */ +/* else if (**argv == 'q') */ +/* flags |= FLAG_QUIET; */ +/* else if (**argv == 'r') */ +/* flags |= FLAG_REVERSE; */ +/* else */ +/* return (1); */ +/* if (ft_strchr("pqrs", (*argv)[1]) != NULL) */ +/* { */ +/* **argv = '-'; */ +/* continue; */ +/* } */ +/* argv++; */ +/* argc--; */ +/* } */ +/* while (argc-- > 0) */ +/* { */ +/* if ((file = ft_read_file(*argv)) == NULL) */ +/* return (1); */ +/* func_hash(file, &digest); */ +/* free(file); */ +/* st_print_digest(&digest, flags, name, *argv); */ +/* argv++; */ +/* } */ +/* return (0); */ +/* } */ diff --git a/src/error.c b/src/error.c index 1492bde..96ef3b1 100644 --- a/src/error.c +++ b/src/error.c @@ -6,22 +6,22 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 07:02:59 by cacharle #+# #+# */ -/* Updated: 2020/02/22 07:13:57 by cacharle ### ########.fr */ +/* Updated: 2020/07/27 14:59:41 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -void fl_error_command(char *command) -{ - ft_putstr_fd("ft_ssl: Error: '", STDERR_FILENO); - ft_putstr_fd(command, STDERR_FILENO); - ft_putendl_fd("' is an invalid command.", STDERR_FILENO); - ft_putstr_fd("\nStandard commands:\n" - "\nMessage Digest commands:\n" - "md5\n" - "sha256\n" - "\nCipher commands:\n", - STDERR_FILENO - ); -} +/* void error_command(char *command) */ +/* { */ +/* ft_putstr_fd("ft_ssl: Error: '", STDERR_FILENO); */ +/* ft_putstr_fd(command, STDERR_FILENO); */ +/* ft_putendl_fd("' is an invalid command.", STDERR_FILENO); */ +/* ft_putstr_fd("\nStandard commands:\n" */ +/* "\nMessage Digest commands:\n" */ +/* "md5\n" */ +/* "sha256\n" */ +/* "\nCipher commands:\n", */ +/* STDERR_FILENO */ +/* ); */ +/* } */ @@ -6,37 +6,43 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/03 20:29:33 by cacharle #+# #+# */ -/* Updated: 2020/02/22 08:57:39 by cacharle ### ########.fr */ +/* Updated: 2020/07/27 16:27:16 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -static t_command g_commands[] = { - {"md5", fl_main_md5}, - {"sha256", fl_main_sha256} -}; +/* static t_command g_commands[] = { */ +/* {"md5", main_md5}, */ +/* {"sha256", main_sha256} */ +/* }; */ -int fl_dispatch_command(char *command, int argc, char **argv) -{ - unsigned long i; - - i = -1; - while (++i < sizeof(g_commands) / sizeof(t_command)) - if (ft_strcmp(g_commands[i].name, command) == 0) - return (g_commands[i].entry(argc, argv)); - fl_error_command(command); - return (1); -} +/* int dispatch_command(char *command, int argc, char **argv) */ +/* { */ +/* size_t i; */ +/* */ +/* i = 0; */ +/* while (i < sizeof(g_commands) / sizeof(t_command)) */ +/* { */ +/* if (ft_strcmp(g_commands[i].name, command) == 0) */ +/* return (g_commands[i].entry(argc, argv)); */ +/* i++; */ +/* } */ +/* error_command(command); */ +/* return (1); */ +/* } */ int main(int argc, char **argv) { - if (argc == 1) - { - ft_putstr("usage: "); - ft_putstr(argv[0]); - ft_putendl_fd(" command [command opts] [command args]", STDERR_FILENO); - return (1); - } - return (fl_dispatch_command(argv[1], argc - 2, argv + 2)); + /* if (argc == 1) */ + /* { */ + /* ft_putstr("usage: "); */ + /* ft_putstr(argv[0]); */ + /* ft_putendl_fd(" command [command opts] [command args]", STDERR_FILENO); */ + /* return (1); */ + /* } */ + /* return (dispatch_command(argv[1], argc - 2, argv + 2)); */ + (void)argc; + + printf("%s\n", message_digest_md5((uint8_t*)argv[1], ft_strlen(argv[1]))); } diff --git a/src/md5/main.c b/src/md5/main.c new file mode 100644 index 0000000..81ca6ff --- /dev/null +++ b/src/md5/main.c @@ -0,0 +1,144 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/02/22 07:20:07 by cacharle #+# #+# */ +/* Updated: 2020/07/27 17:04:37 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ft_ssl_md5.h" + +const int g_shifts[64] = { + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, // 0..15 + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, // 16..31 + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, // 32..47 + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, // 48..63 +}; + +const uint32_t g_K[64] = { + 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, // 0.. 3 + 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, // 4.. 7 + 0x698098d8, 0x8b44f7af, 0xffff5bb1, 0x895cd7be, // 8..11 + 0x6b901122, 0xfd987193, 0xa679438e, 0x49b40821, // 12..15 + 0xf61e2562, 0xc040b340, 0x265e5a51, 0xe9b6c7aa, // 16..19 + 0xd62f105d, 0x02441453, 0xd8a1e681, 0xe7d3fbc8, // 20..23 + 0x21e1cde6, 0xc33707d6, 0xf4d50d87, 0x455a14ed, // 24..27 + 0xa9e3e905, 0xfcefa3f8, 0x676f02d9, 0x8d2a4c8a, // 28..31 + 0xfffa3942, 0x8771f681, 0x6d9d6122, 0xfde5380c, // 32..35 + 0xa4beea44, 0x4bdecfa9, 0xf6bb4b60, 0xbebfbc70, // 36..39 + 0x289b7ec6, 0xeaa127fa, 0xd4ef3085, 0x04881d05, // 40..43 + 0xd9d4d039, 0xe6db99e5, 0x1fa27cf8, 0xc4ac5665, // 44..47 + 0xf4292244, 0x432aff97, 0xab9423a7, 0xfc93a039, // 48..51 + 0x655b59c3, 0x8f0ccc92, 0xffeff47d, 0x85845dd1, // 52..55 + 0x6fa87e4f, 0xfe2ce6e0, 0xa3014314, 0x4e0811a1, // 56..59 + 0xf7537e82, 0xbd3af235, 0x2ad7d2bb, 0xeb86d391, // 60..63 +}; + +#define A_INIT 0x67452301 +#define B_INIT 0xefcdab89 +#define C_INIT 0x98badcfe +#define D_INIT 0x10325476 + +uint32_t leftrotate(uint32_t x, int s) +{ + return (x << s) | (x >> (32 - s)); +} + +char *message_digest_md5(uint8_t *msg, size_t size) +{ + // padding on 512 bit (64 bytes) + // format: + // 1 bit + // fill with zero start -> (end - 64 bit) + // 64 bit repr of the original len modulo 2^64 (ULONG_MAX) + + + uint8_t *tmp; + + tmp = msg; + + + size_t pad_size = 32 - size % 32; + + /* printf("%lu\n", size % 32); */ + /* printf("%lu\n", 32 - size % 32); */ + /* printf("%lu\n", pad_size); */ + + msg = malloc(size + pad_size); + + ft_memcpy(msg, tmp, size); + ft_memset(msg + size, 0x0, pad_size); + + msg[size] |= 1 << 7; + + + /* printf("%lu\n", size + pad_size - sizeof(uint64_t)); */ + *((uint64_t*)(msg + size + pad_size - sizeof(uint64_t))) = (uint64_t)size; + size += pad_size; + /* printf("%lu: %s\n", size, msg); */ + /* printf("|%02x%02x%02x%02x|\n", msg[24], msg[25], msg[26], msg[27]); */ + + uint32_t a, b, c, d; + + // state initialized to predefined constants + + // block of 512 bit + // 128 bit state (a, b, c, d) + // 4 rounds on each block (128 * 4 = 512) + + uint32_t f; + int g; + int i; + + + size_t chunk_i; + + chunk_i = 0; + while (chunk_i < size) + { + + i = -1; + while (++i < 64) + { + if (i < 16) + { + f = (b & c) | ~(b & d); + g = i; + } + else if (i < 32) + { + f = (b & c) | (c & ~d); + g = (5 * i + 1) % 16; + } + else if (i < 48) + { + f = b ^ c ^ d; + g = (3 * i + 1) % 16; + } + else + { + f = c ^ (b | ~d); + g = (7 * i + 1) % 16; + } + + f += a + g_K[i] + ((uint32_t*)(msg + chunk_i))[g]; + a = d; + d = c; + c = b; + b += leftrotate(f, g_shifts[i]); + } + + chunk_i += 32; + } + + char *ret = malloc(33 * sizeof(char)); + ret[32] = '\0'; + + sprintf(ret, "%08x%08x%08x%08x", a, b, c, d); + + return (ret); +} diff --git a/src/md5/main_md5.c b/src/md5/main_md5.c deleted file mode 100644 index 02dcaa0..0000000 --- a/src/md5/main_md5.c +++ /dev/null @@ -1,18 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* main_md5.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2020/02/22 07:20:07 by cacharle #+# #+# */ -/* Updated: 2020/02/22 08:57:32 by cacharle ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#include "ft_ssl_md5.h" - -int fl_main_md5(int argc, char **argv) -{ - return (0); -} diff --git a/src/sha256/main_sha256.c b/src/sha256/main_sha256.c index 7a83a61..817061e 100644 --- a/src/sha256/main_sha256.c +++ b/src/sha256/main_sha256.c @@ -6,13 +6,13 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 07:19:18 by cacharle #+# #+# */ -/* Updated: 2020/02/22 08:57:22 by cacharle ### ########.fr */ +/* Updated: 2020/07/27 15:01:15 by charles ### ########.fr */ /* */ /* ************************************************************************** */ -#include "ft_ssl_sha256.h" - -int fl_main_sha256(int argc, char **argv) -{ - return (0); -} +/* #include "ft_ssl_sha256.h" */ +/* */ +/* int main_sha256(int argc, char **argv) */ +/* { */ +/* return (0); */ +/* } */ |
