diff options
| -rw-r--r-- | inc/ft_ssl.h | 45 | ||||
| -rw-r--r-- | inc/ft_ssl_sha256.h | 22 | ||||
| m--------- | libft | 0 | ||||
| -rw-r--r-- | src/args.c | 166 | ||||
| -rw-r--r-- | src/error.c | 32 | ||||
| -rw-r--r-- | src/main.c | 83 | ||||
| -rw-r--r-- | src/md5.c (renamed from src/md5/main.c) | 8 | ||||
| -rw-r--r-- | src/message_digest.c | 27 | ||||
| -rw-r--r-- | src/sha256/main_sha256.c | 18 |
9 files changed, 177 insertions, 224 deletions
diff --git a/inc/ft_ssl.h b/inc/ft_ssl.h index c88e7c3..47f149a 100644 --- a/inc/ft_ssl.h +++ b/inc/ft_ssl.h @@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/03 20:27:19 by cacharle #+# #+# */ -/* Updated: 2020/08/01 19:24:12 by charles ### ########.fr */ +/* Updated: 2020/08/02 11:59:54 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include <stdio.h> @@ -26,35 +26,29 @@ typedef struct void *compression_state; size_t compression_state_size; size_t chunk_size; - uint8_t *message; - uint64_t size; } t_message_digest_param; -void *md5_compression_func(void *v_state, uint8_t *chunk); -char *message_digest(t_message_digest_param *param); +void *md5_compression_func(void *v_state, uint8_t *chunk); + +char *message_digest(t_message_digest_param *param, uint8_t *message_origin, uint64_t size); #define MD5_A_INIT 0x67452301 #define MD5_B_INIT 0xefcdab89 #define MD5_C_INIT 0x98badcfe #define MD5_D_INIT 0x10325476 -// # include "ft_ssl_md5.h" -// # include "ft_ssl_sha256.h" - -// typedef int (*t_func_main)(int argc, char **argv); -// -// typedef struct -// { -// char *name; -// t_func_hash func; -// } t_command; -// -// typedef enum -// { -// FLAG_PIPE = 1 << 0, -// FLAG_QUIET = 1 << 1, -// FLAG_REVERSE = 1 << 2, -// } t_flags; +typedef struct +{ + char *name; + t_message_digest_param param; +} t_compression_entry; + +typedef enum +{ + FLAG_QUIET = 1 << 0, + FLAG_REVERSE = 1 << 1, + FLAG_STRING = 1 << 2, +} t_flags; typedef char *(*t_func_hash)(char *message); @@ -62,14 +56,13 @@ typedef char *(*t_func_hash)(char *message); ** error.c */ -// void error_command(char *command); +void error_command(char *command); /* ** args.c */ -// int parse_args(char *name, int argc, char **argv, t_func_hash func_hash); - +int parse_args(int argc, char **argv, char *command, t_message_digest_param *md_param); /* ** utils.c @@ -83,6 +76,6 @@ char *bytes_to_str(uint8_t *bytes, size_t size); ** md5 */ -char *message_digest_md5(uint8_t *msg, size_t size); +char *message_digest_md5(uint8_t *msg, size_t size); #endif diff --git a/inc/ft_ssl_sha256.h b/inc/ft_ssl_sha256.h deleted file mode 100644 index 9427f88..0000000 --- a/inc/ft_ssl_sha256.h +++ /dev/null @@ -1,22 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* ft_ssl_sha256.h :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2020/02/22 07:18:42 by cacharle #+# #+# */ -/* Updated: 2020/02/22 08:57:14 by cacharle ### ########.fr */ -/* */ -/* ************************************************************************** */ - -#ifndef FT_SSL_SHA256_H -# define FT_SSL_SHA256_H - -/* -** main_sha256.c -*/ - -int fl_main_sha256(int argc, char **argv); - -#endif diff --git a/libft b/libft -Subproject ee32953ea79616e72f5428cdf40c834714a891c +Subproject 5d2f925b20ceaea4122c59d2d2c4e7d4ae991fd @@ -6,86 +6,96 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 09:43:42 by cacharle #+# #+# */ -/* Updated: 2020/07/27 14:57:39 by charles ### ########.fr */ +/* Updated: 2020/08/02 11:58:47 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 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); */ -/* } */ +static void st_print_digest_input(t_flags flags, char *input) +{ + if (flags & FLAG_STRING) + ft_putchar('"'); + ft_putstr(input); + if (flags & FLAG_STRING) + ft_putchar('"'); +} + +static void st_print_digest(t_flags flags, char *command, char *input, char *digest_str) +{ + if (!(flags & FLAG_REVERSE) && !(flags & FLAG_QUIET)) + { + ft_putstr(command); //toupper + ft_putchar('('); + st_print_digest_input(flags, input); + ft_putstr(") = "); + } + ft_putstr(digest_str); + if (flags & FLAG_QUIET) + { + ft_putchar('\n'); + return ; + } + if (flags & FLAG_REVERSE) + { + ft_putchar(' '); + st_print_digest_input(flags, input); + } + ft_putchar('\n'); +} + +int parse_args(int argc, char **argv, char *command, t_message_digest_param *md_param) +{ + t_flags flags; + t_ftmem file; + + char *digest_str; + int i; + + flags = 0; + i = 0; + while (i < argc) + { + if (argv[i][0] != '-') + break ; + if (ft_strcmp(argv[i], "-s") == 0) + { + i++; + if (i >= argc) // no string + return 1; + digest_str = message_digest(md_param, (uint8_t*)argv[i], ft_strlen(argv[i])); + if (digest_str == NULL) + return 1; + st_print_digest(flags | FLAG_STRING, command, argv[i], digest_str); + } + else if (ft_strcmp(argv[i], "-p") == 0) + { + if (ft_getfile_fd(STDIN_FILENO, &file) < 0) + return (1); + digest_str = message_digest(md_param, file.data, file.size); + if (digest_str == NULL) + return 1; + write(STDOUT_FILENO, file.data, file.size); + ft_putendl(digest_str); + } + else if (ft_strcmp(argv[i], "-q") == 0) + flags |= FLAG_QUIET; + else if (ft_strcmp(argv[i], "-r") == 0) + flags |= FLAG_REVERSE; + else + return (1); + i++; + } + while (i < argc) + { + if (ft_getfile(argv[i], &file) < 0) + return (1); + digest_str = message_digest(md_param, file.data, file.size); + if (digest_str == NULL) + return 1; + st_print_digest(flags, command, argv[i], digest_str); + free(file.data); + i++; + } + return (0); +} diff --git a/src/error.c b/src/error.c index 96ef3b1..e094a0a 100644 --- a/src/error.c +++ b/src/error.c @@ -6,22 +6,26 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 07:02:59 by cacharle #+# #+# */ -/* Updated: 2020/07/27 14:59:41 by charles ### ########.fr */ +/* Updated: 2020/08/02 09:23:37 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -/* 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 */ -/* ); */ -/* } */ +// use in error message +/* extern t_compression_entry g_compression_table[]; */ + +void error_command(char *command) +{ + // argv[0]? + 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,59 +6,50 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/03 20:29:33 by cacharle #+# #+# */ -/* Updated: 2020/08/01 19:11:50 by charles ### ########.fr */ +/* Updated: 2020/08/02 11:26:50 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -/* static t_command g_commands[] = { */ -/* {"md5", main_md5}, */ -/* {"sha256", main_sha256} */ -/* }; */ +static uint32_t g_md5_state[4] = {MD5_A_INIT, MD5_B_INIT, MD5_C_INIT, MD5_D_INIT}; -/* 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); */ -/* } */ +/* static uint32_t g_sha1_state[5] = {0}; */ -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 (dispatch_command(argv[1], argc - 2, argv + 2)); */ - (void)argc; - t_message_digest_param param; - param.compression_func = md5_compression_func; - param.compression_state = malloc(4 * sizeof(uint32_t)); - param.compression_state_size = 4 * sizeof(uint32_t); - param.chunk_size = 64; - param.message = argv[1]; - param.size = ft_strlen(argv[1]); - - ((uint32_t*)param.compression_state)[0] = MD5_A_INIT; - ((uint32_t*)param.compression_state)[1] = MD5_B_INIT; - ((uint32_t*)param.compression_state)[2] = MD5_C_INIT; - ((uint32_t*)param.compression_state)[3] = MD5_D_INIT; +t_compression_entry g_compression_table[] = { + {"md5", {md5_compression_func, g_md5_state, sizeof(g_md5_state), 64}}, + /* {"sha1", {sha1_compression_func, g_sha1_state, sizeof(g_sha1_state), 64}} */ +}; - printf("%s\n", message_digest(¶m)); +t_message_digest_param *dispatch_command(char *command) +{ + size_t i; + + i = 0; + while (i < sizeof(g_compression_table) / sizeof(t_compression_entry)) + { + if (ft_strcmp(g_compression_table[i].name, command) == 0) + return (&g_compression_table[i].param); + i++; + } + error_command(command); + return (NULL); +} - /* printf("%s\n", message_digest_md5((uint8_t*)argv[1], ft_strlen(argv[1]))); */ - return 0; +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); + } + t_message_digest_param *md_param = dispatch_command(argv[1]); + if (md_param == NULL) + return 1; + return (parse_args(argc - 2, argv + 2, argv[1], md_param)); + + /* printf("%s\n", message_digest(md_param, (uint8_t*)argv[2], ft_strlen(argv[2]))); */ + /* return 0; */ } diff --git a/src/md5/main.c b/src/md5.c index de631bd..561dcbd 100644 --- a/src/md5/main.c +++ b/src/md5.c @@ -1,12 +1,12 @@ /* ************************************************************************** */ /* */ /* ::: :::::::: */ -/* main.c :+: :+: :+: */ +/* md5.c :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 07:20:07 by cacharle #+# #+# */ -/* Updated: 2020/08/01 19:27:06 by charles ### ########.fr */ +/* Updated: 2020/08/02 09:25:59 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,7 +26,7 @@ ** | 448 | 56 | */ -static const int g_shifts_table[64] = { +static const int g_shifts_table[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 @@ -53,7 +53,7 @@ static const uint32_t g_sin_table[64] = { }; -void *md5_compression_func(void *v_state, uint8_t *chunk) +void *md5_compression_func(void *v_state, uint8_t *chunk) { int g; int i; diff --git a/src/message_digest.c b/src/message_digest.c index b08022f..24c1db5 100644 --- a/src/message_digest.c +++ b/src/message_digest.c @@ -6,33 +6,28 @@ /* By: charles <me@cacharle.xyz> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/08/01 15:03:39 by charles #+# #+# */ -/* Updated: 2020/08/01 19:25:07 by charles ### ########.fr */ +/* Updated: 2020/08/02 11:56:27 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -char *message_digest(t_message_digest_param *param) +char *message_digest(t_message_digest_param *param, uint8_t *message_origin, uint64_t size) { size_t i; uint64_t padding_size; uint8_t *message; - padding_size = (64 - (param->size + 8) % 64) + 8; - - message = malloc(param->size + padding_size); - if (message == NULL) + padding_size = (param->chunk_size - (size + sizeof(uint64_t)) % param->chunk_size) + sizeof(uint64_t); + if ((message = malloc(size + padding_size)) == NULL) return (NULL); - ft_memcpy(message, param->message, param->size); - ft_memset(message + param->size, 0x0, padding_size); - - message[param->size] |= 1 << 7; - *((uint64_t*)(message + param->size + padding_size - sizeof(uint64_t))) = - (uint64_t)param->size * 8; - param->size += padding_size; - + ft_memcpy(message, message_origin, size); + ft_memset(message + size, 0x0, padding_size); + message[size] |= 1 << 7; + *((uint64_t*)(message + size + padding_size - sizeof(uint64_t))) = size * 8; + size += padding_size; i = 0; - while (i < param->size) + while (i < size) { param->compression_state = param->compression_func(param->compression_state, message + i); if (param->compression_state == NULL) @@ -42,6 +37,6 @@ char *message_digest(t_message_digest_param *param) } i += param->chunk_size; } - + // FIXME reset state return (bytes_to_str(param->compression_state, param->compression_state_size)); } diff --git a/src/sha256/main_sha256.c b/src/sha256/main_sha256.c deleted file mode 100644 index 817061e..0000000 --- a/src/sha256/main_sha256.c +++ /dev/null @@ -1,18 +0,0 @@ -/* ************************************************************************** */ -/* */ -/* ::: :::::::: */ -/* main_sha256.c :+: :+: :+: */ -/* +:+ +:+ +:+ */ -/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ -/* +#+#+#+#+#+ +#+ */ -/* Created: 2020/02/22 07:19:18 by cacharle #+# #+# */ -/* Updated: 2020/07/27 15:01:15 by charles ### ########.fr */ -/* */ -/* ************************************************************************** */ - -/* #include "ft_ssl_sha256.h" */ -/* */ -/* int main_sha256(int argc, char **argv) */ -/* { */ -/* return (0); */ -/* } */ |
