aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile4
-rw-r--r--inc/ft_ssl.h (renamed from include/ft_ssl.h)51
-rw-r--r--inc/ft_ssl_md5.h (renamed from include/ft_ssl_md5.h)13
-rw-r--r--inc/ft_ssl_sha256.h (renamed from include/ft_ssl_sha256.h)0
-rw-r--r--src/args.c156
-rw-r--r--src/error.c28
-rw-r--r--src/main.c54
-rw-r--r--src/md5/main.c144
-rw-r--r--src/md5/main_md5.c18
-rw-r--r--src/sha256/main_sha256.c14
10 files changed, 307 insertions, 175 deletions
diff --git a/Makefile b/Makefile
index 5d79214..99f2709 100644
--- a/Makefile
+++ b/Makefile
@@ -6,7 +6,7 @@
# By: cacharle <marvin@42.fr> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ #
# Created: 2020/02/03 20:14:50 by cacharle #+# #+# #
-# Updated: 2020/02/22 11:24:58 by cacharle ### ########.fr #
+# Updated: 2020/07/27 15:01:57 by charles ### ########.fr #
# #
# **************************************************************************** #
@@ -14,7 +14,7 @@ RM = rm -f
MAKE = make
LIBFT_DIR = libft
-INCLUDE_DIR = include
+INCLUDE_DIR = inc
SRC_DIR = src
OBJ_DIR = obj
diff --git a/include/ft_ssl.h b/inc/ft_ssl.h
index be9b4da..f3e3595 100644
--- a/include/ft_ssl.h
+++ b/inc/ft_ssl.h
@@ -6,9 +6,10 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/03 20:27:19 by cacharle #+# #+# */
-/* Updated: 2020/02/22 10:10:30 by cacharle ### ########.fr */
+/* Updated: 2020/07/27 21:38:12 by charles ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stdio.h>
#ifndef FT_SSL_H
# define FT_SSL_H
@@ -16,41 +17,37 @@
# include "libft.h"
# 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_main entry;
-} t_command;
-
-enum
-{
- FLAG_PIPE = 1 << 0,
- FLAG_QUIET = 1 << 1,
- FLAG_REVERSE = 1 << 2,
- FLAG_STRING = 1 << 3
-};
-typedef unsigned char t_flags;
-
-typedef struct
-{
- unsigned char *data;
- int size;
-} t_digest;
-typedef void (*t_func_hash)(char *message, t_digest *digest);
+
+// # 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 char *(*t_func_hash)(char *message);
/*
** error.c
*/
-void fl_error_command(char *command);
+// void error_command(char *command);
/*
** args.c
*/
-int fl_parse_args(char *name, int argc, char **argv, t_func_hash func_hash);
+// int parse_args(char *name, int argc, char **argv, t_func_hash func_hash);
#endif
diff --git a/include/ft_ssl_md5.h b/inc/ft_ssl_md5.h
index b012533..22d0845 100644
--- a/include/ft_ssl_md5.h
+++ b/inc/ft_ssl_md5.h
@@ -6,17 +6,20 @@
/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/02/22 07:14:45 by cacharle #+# #+# */
-/* Updated: 2020/02/22 08:57:06 by cacharle ### ########.fr */
+/* Updated: 2020/07/27 16:36:41 by charles ### ########.fr */
/* */
/* ************************************************************************** */
+#include <stdio.h>
#ifndef FT_SSL_MD5_H
# define FT_SSL_MD5_H
-/*
-** main_md5.c
-*/
+# include <stdlib.h>
+# include <stdint.h>
+# include <stddef.h>
-int fl_main_md5(int argc, char **argv);
+# include "libft.h"
+
+char *message_digest_md5(uint8_t *msg, size_t size);
#endif
diff --git a/include/ft_ssl_sha256.h b/inc/ft_ssl_sha256.h
index 9427f88..9427f88 100644
--- a/include/ft_ssl_sha256.h
+++ b/inc/ft_ssl_sha256.h
diff --git a/src/args.c b/src/args.c
index 6cfdb3f..4cd783a 100644
--- a/src/args.c
+++ b/src/args.c
@@ -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 */
+/* ); */
+/* } */
diff --git a/src/main.c b/src/main.c
index 5bfd97f..b765a62 100644
--- a/src/main.c
+++ b/src/main.c
@@ -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); */
+/* } */