aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-08-02 14:19:36 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-08-02 14:19:36 +0200
commitc7ae1f028446165a1f9f4ab6a4bb63f8239c43b0 (patch)
tree242defc35d19ad7a8cc0c5d379c6b60a1fb6d4a7
parent820d554d5fd75cf5d2ec8e2a10403972c78d55ba (diff)
downloadft_ssl-c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0.tar.gz
ft_ssl-c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0.tar.bz2
ft_ssl-c7ae1f028446165a1f9f4ab6a4bb63f8239c43b0.zip
Compression state reset, Error message
-rw-r--r--inc/ft_ssl.h5
m---------libft0
-rw-r--r--src/args.c27
-rw-r--r--src/main.c11
-rw-r--r--src/message_digest.c21
5 files changed, 44 insertions, 20 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 <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* 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 <stdio.h>
@@ -15,6 +15,7 @@
# define FT_SSL_H
# include <stdint.h>
+# include <string.h>
# 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
-Subproject 5d2f925b20ceaea4122c59d2d2c4e7d4ae991fd
+Subproject ad33f31d00cdf5593baa83b63eb5445ef295125
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 <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++;
}
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 <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);
}