diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-08-02 14:19:36 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-08-02 14:19:36 +0200 |
| commit | c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0 (patch) | |
| tree | 242defc35d19ad7a8cc0c5d379c6b60a1fb6d4a7 /src | |
| parent | 820d554d5fd75cf5d2ec8e2a10403972c78d55ba (diff) | |
| download | ft_ssl-c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0.tar.gz ft_ssl-c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0.tar.bz2 ft_ssl-c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0.zip | |
Compression state reset, Error message
Diffstat (limited to 'src')
| -rw-r--r-- | src/args.c | 27 | ||||
| -rw-r--r-- | src/main.c | 11 | ||||
| -rw-r--r-- | src/message_digest.c | 21 |
3 files changed, 41 insertions, 18 deletions
@@ -6,7 +6,7 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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++; } @@ -6,13 +6,13 @@ /* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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 <me@cacharle.xyz> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* 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); } |
