From c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0 Mon Sep 17 00:00:00 2001 From: Charles Cabergs Date: Sun, 2 Aug 2020 14:19:36 +0200 Subject: Compression state reset, Error message --- inc/ft_ssl.h | 5 +++-- libft | 2 +- src/args.c | 27 +++++++++++++++++++++------ src/main.c | 11 ++++------- src/message_digest.c | 21 ++++++++++++++++----- 5 files changed, 45 insertions(+), 21 deletions(-) diff --git a/inc/ft_ssl.h b/inc/ft_ssl.h index 47f149a..c874287 100644 --- a/inc/ft_ssl.h +++ b/inc/ft_ssl.h @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/03 20:27:19 by cacharle #+# #+# */ -/* Updated: 2020/08/02 11:59:54 by charles ### ########.fr */ +/* Updated: 2020/08/02 14:04:47 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include @@ -15,6 +15,7 @@ # define FT_SSL_H # include +# include # include "libft.h" @@ -23,7 +24,7 @@ typedef void *(*t_compression_func)(void *state, uint8_t *chunk); typedef struct { t_compression_func compression_func; - void *compression_state; + const void *compression_state_init; size_t compression_state_size; size_t chunk_size; } t_message_digest_param; diff --git a/libft b/libft index 5d2f925..ad33f31 160000 --- a/libft +++ b/libft @@ -1 +1 @@ -Subproject commit 5d2f925b20ceaea4122c59d2d2c4e7d4ae991fde +Subproject commit ad33f31d00cdf5593baa83b63eb5445ef2951250 diff --git a/src/args.c b/src/args.c index 41e9e9f..0be7f86 100644 --- a/src/args.c +++ b/src/args.c @@ -6,7 +6,7 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/22 09:43:42 by cacharle #+# #+# */ -/* Updated: 2020/08/02 11:58:47 by charles ### ########.fr */ +/* Updated: 2020/08/02 14:17:15 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,7 +26,7 @@ static void st_print_digest(t_flags flags, char *command, char *input, char *dig if (!(flags & FLAG_REVERSE) && !(flags & FLAG_QUIET)) { ft_putstr(command); //toupper - ft_putchar('('); + ft_putstr(" ("); st_print_digest_input(flags, input); ft_putstr(") = "); } @@ -62,11 +62,12 @@ int parse_args(int argc, char **argv, char *command, t_message_digest_param *md { i++; if (i >= argc) // no string - return 1; + return (1); digest_str = message_digest(md_param, (uint8_t*)argv[i], ft_strlen(argv[i])); if (digest_str == NULL) - return 1; + return (1); st_print_digest(flags | FLAG_STRING, command, argv[i], digest_str); + free(digest_str); } else if (ft_strcmp(argv[i], "-p") == 0) { @@ -74,7 +75,7 @@ int parse_args(int argc, char **argv, char *command, t_message_digest_param *md return (1); digest_str = message_digest(md_param, file.data, file.size); if (digest_str == NULL) - return 1; + return (1); write(STDOUT_FILENO, file.data, file.size); ft_putendl(digest_str); } @@ -83,17 +84,31 @@ int parse_args(int argc, char **argv, char *command, t_message_digest_param *md else if (ft_strcmp(argv[i], "-r") == 0) flags |= FLAG_REVERSE; else + { + ft_putstr_fd("ft_ssl: invalid option -- '", STDERR_FILENO); + ft_putstr_fd(argv[i] + 1, STDERR_FILENO); + ft_putstr_fd("'\n", STDERR_FILENO); return (1); + } i++; } while (i < argc) { if (ft_getfile(argv[i], &file) < 0) - return (1); + { + ft_putstr_fd("ft_ssl: ", STDERR_FILENO); + ft_putstr_fd(argv[i], STDERR_FILENO); + ft_putstr_fd(": ", STDERR_FILENO); + ft_putstr_fd(strerror(errno), STDERR_FILENO); + ft_putstr_fd("\n", STDERR_FILENO); + i++; + continue ; + } 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(digest_str); free(file.data); i++; } diff --git a/src/main.c b/src/main.c index f5898ad..608dc90 100644 --- a/src/main.c +++ b/src/main.c @@ -6,13 +6,13 @@ /* By: cacharle +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/02/03 20:29:33 by cacharle #+# #+# */ -/* Updated: 2020/08/02 11:26:50 by charles ### ########.fr */ +/* Updated: 2020/08/02 14:17:53 by charles ### ########.fr */ /* */ /* ************************************************************************** */ #include "ft_ssl.h" -static uint32_t g_md5_state[4] = {MD5_A_INIT, MD5_B_INIT, MD5_C_INIT, MD5_D_INIT}; +static const uint32_t g_md5_state[4] = {MD5_A_INIT, MD5_B_INIT, MD5_C_INIT, MD5_D_INIT}; /* static uint32_t g_sha1_state[5] = {0}; */ @@ -28,7 +28,7 @@ t_message_digest_param *dispatch_command(char *command) i = 0; while (i < sizeof(g_compression_table) / sizeof(t_compression_entry)) { - if (ft_strcmp(g_compression_table[i].name, command) == 0) + if (ft_strcasecmp(g_compression_table[i].name, command) == 0) return (&g_compression_table[i].param); i++; } @@ -48,8 +48,5 @@ int main(int argc, char **argv) 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; */ + return (parse_args(argc - 2, argv + 2, ft_strtoupper(argv[1]), md_param)); } diff --git a/src/message_digest.c b/src/message_digest.c index 24c1db5..c696780 100644 --- a/src/message_digest.c +++ b/src/message_digest.c @@ -6,7 +6,7 @@ /* By: charles +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/08/01 15:03:39 by charles #+# #+# */ -/* Updated: 2020/08/02 11:56:27 by charles ### ########.fr */ +/* Updated: 2020/08/02 13:56:26 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,10 +17,18 @@ char *message_digest(t_message_digest_param *param, uint8_t *message_origin, uin size_t i; uint64_t padding_size; uint8_t *message; + void *local_state; + char *ret; + local_state = ft_memdup(param->compression_state_init, param->compression_state_size); + if (local_state == NULL) + return (NULL); padding_size = (param->chunk_size - (size + sizeof(uint64_t)) % param->chunk_size) + sizeof(uint64_t); if ((message = malloc(size + padding_size)) == NULL) + { + free(local_state); return (NULL); + } ft_memcpy(message, message_origin, size); ft_memset(message + size, 0x0, padding_size); message[size] |= 1 << 7; @@ -29,14 +37,17 @@ char *message_digest(t_message_digest_param *param, uint8_t *message_origin, uin i = 0; while (i < size) { - param->compression_state = param->compression_func(param->compression_state, message + i); - if (param->compression_state == NULL) + local_state = param->compression_func(local_state, message + i); + if (local_state == NULL) { free(message); + free(local_state); return (NULL); } i += param->chunk_size; } - // FIXME reset state - return (bytes_to_str(param->compression_state, param->compression_state_size)); + free(message); + ret = bytes_to_str(local_state, param->compression_state_size); + free(local_state); + return (ret); } -- cgit