From 84c80e912cb8915e69b24d208205e7636fd53cc5 Mon Sep 17 00:00:00 2001 From: Louise P Date: Mon, 20 Apr 2020 11:16:14 +0200 Subject: [PATCH 1/7] Create branch dev/functions/des --- srcs/symmetric/des/des.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/srcs/symmetric/des/des.c b/srcs/symmetric/des/des.c index 1627800..c479a51 100644 --- a/srcs/symmetric/des/des.c +++ b/srcs/symmetric/des/des.c @@ -6,7 +6,7 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:05:42 by cpieri #+# #+# */ -/* Updated: 2019/05/20 08:09:40 by cpieri ### ########.fr */ +/* Updated: 2020/04/20 11:15:25 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,5 +16,6 @@ void *des(void *opt, size_t len_opt) { (void)len_opt; + // Code return (opt); } \ No newline at end of file From b1e22aa7aaae8a4dcf1dce3ea9934a0b738bb112 Mon Sep 17 00:00:00 2001 From: Louise P Date: Wed, 22 Apr 2020 10:44:33 +0200 Subject: [PATCH 2/7] [Setting]: Creation of master files - Create cbc.c & cbc.h - Create ecb.c & ecb.h --- includes/symmetric/encryption_mode/cbc.h | 0 includes/symmetric/encryption_mode/ecb.h | 0 srcs/symmetric/{ => encryption_mode}/cbc.c | 0 srcs/symmetric/encryption_mode/ecb.c | 15 +++++++++++++++ 4 files changed, 15 insertions(+) create mode 100644 includes/symmetric/encryption_mode/cbc.h create mode 100644 includes/symmetric/encryption_mode/ecb.h rename srcs/symmetric/{ => encryption_mode}/cbc.c (100%) create mode 100644 srcs/symmetric/encryption_mode/ecb.c diff --git a/includes/symmetric/encryption_mode/cbc.h b/includes/symmetric/encryption_mode/cbc.h new file mode 100644 index 0000000..e69de29 diff --git a/includes/symmetric/encryption_mode/ecb.h b/includes/symmetric/encryption_mode/ecb.h new file mode 100644 index 0000000..e69de29 diff --git a/srcs/symmetric/cbc.c b/srcs/symmetric/encryption_mode/cbc.c similarity index 100% rename from srcs/symmetric/cbc.c rename to srcs/symmetric/encryption_mode/cbc.c diff --git a/srcs/symmetric/encryption_mode/ecb.c b/srcs/symmetric/encryption_mode/ecb.c new file mode 100644 index 0000000..c1b6b16 --- /dev/null +++ b/srcs/symmetric/encryption_mode/ecb.c @@ -0,0 +1,15 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ebc.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cpieri +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/22 10:37:44 by cpieri #+# #+# */ +/* Updated: 2020/04/22 10:38:01 by cpieri ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "symmetric/symmetric.h" + +void *ebc(void *msg, void *key, size_t msg_len, size_t key_len); \ No newline at end of file From a6de94f8ab273bdb8de755553349d8439f045b5c Mon Sep 17 00:00:00 2001 From: Louise P Date: Mon, 27 Apr 2020 13:30:47 +0200 Subject: [PATCH 3/7] [Try]: Writing the code of the algo "des" - Create file des_key_schedule.c - Create functions "permute_block" & "des_key_schedule" - Create global tab "g_permute_tab" in des file Next Change: - Continue des try... - Continue the read of doc --- Makefile | 3 +- includes/symmetric/des/des.h | 3 +- srcs/symmetric/des/des.c | 53 ++++++++++++++++++++++++- srcs/symmetric/tools/des_key_schedule.c | 32 +++++++++++++++ 4 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 srcs/symmetric/tools/des_key_schedule.c diff --git a/Makefile b/Makefile index 7cccece..022e601 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: cpieri +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2018/03/15 11:20:25 by cpieri #+# #+# # -# Updated: 2020/02/04 10:12:31 by cpieri ### ########.fr # +# Updated: 2020/04/24 15:10:25 by cpieri ### ########.fr # # # # **************************************************************************** # @@ -82,6 +82,7 @@ SRC_NAME= main.c \ symmetric/symmetric_parsing_pt_f.c \ symmetric/symmetric_parsing_pt_f_2.c \ symmetric/des/des.c \ + symmetric/tools/des_key_schedule.c \ OBJ_NAME= $(SRC_NAME:.c=.o) diff --git a/includes/symmetric/des/des.h b/includes/symmetric/des/des.h index 11ca4a7..306c1a2 100644 --- a/includes/symmetric/des/des.h +++ b/includes/symmetric/des/des.h @@ -6,7 +6,7 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:13:19 by cpieri #+# #+# */ -/* Updated: 2019/05/20 08:09:22 by cpieri ### ########.fr */ +/* Updated: 2020/04/24 15:11:05 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ @@ -17,5 +17,6 @@ # include "../../structure.h" void *des(void *opt, size_t len_opt); +void des_key_schedule(void *key, size_t key_len); #endif diff --git a/srcs/symmetric/des/des.c b/srcs/symmetric/des/des.c index c479a51..a6d6291 100644 --- a/srcs/symmetric/des/des.c +++ b/srcs/symmetric/des/des.c @@ -6,16 +6,65 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:05:42 by cpieri #+# #+# */ -/* Updated: 2020/04/20 11:15:25 by cpieri ### ########.fr */ +/* Updated: 2020/04/27 13:23:55 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" #include "symmetric/symmetric.h" -void *des(void *opt, size_t len_opt) +static const uint8_t g_permute_tab[64] = { + 58, 50, 42, 34, 26, 18, 10, 2, + 60, 52, 44, 36, 28, 20, 12, 4, + 62, 54, 46, 38, 30, 22, 14, 6, + 64, 56, 48, 40, 32, 24, 16, 8, + 57, 49, 41, 33, 25, 17, 9, 1, + 59, 51, 43, 35, 27, 19, 11, 3, + 61, 53, 45, 37, 29, 21, 13, 5, + 63, 55, 47, 39, 31, 23, 15, 7, +}; + +static uint8_t *permute_block(uint8_t *block, size_t len_block) { + uint8_t *result; + int i; + + i = 0; + if (!(result = (uint8_t*)ft_memalloc(sizeof(uint8_t) * 8))) + return (NULL); + ft_membits(block, len_block, sizeof(uint8_t)); + while (i < 64) + { + result[(i / 8) % 8] <<= 1; + if (block[(i / 8) % 8] & (1 << g_permute_tab[i])) + result[(i / 8) % 8] |= (uint8_t)1; + i++; + } + ft_membits(result, len_block, sizeof(uint8_t)); + // tmp |= block & (1 << g_permute_tab[i]); + return (result); +} + +void *des(void *opt, size_t len_opt) +{ + t_opt *opt_cpy; + char *data; + size_t len_data; + size_t offest; + // t_evp *evp_data; + (void)len_opt; + offest = 0; + opt_cpy = opt; + data = opt_cpy->data->data; + len_data = opt_cpy->data->len_data; + while (offest < len_data) + { + permute_block((uint8_t*)(data + offest), 64); + offest += 8; + } + // evp_data = opt_cpy->data->pass; + // des_key_schedule(evp_data->key, evp_data->dk_len); // Code return (opt); } \ No newline at end of file diff --git a/srcs/symmetric/tools/des_key_schedule.c b/srcs/symmetric/tools/des_key_schedule.c new file mode 100644 index 0000000..62a0cb7 --- /dev/null +++ b/srcs/symmetric/tools/des_key_schedule.c @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* des_key_schedule.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cpieri +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/22 11:08:06 by cpieri #+# #+# */ +/* Updated: 2020/04/24 17:07:12 by cpieri ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "symmetric/des/des.h" + +void des_key_schedule(void *key, size_t key_len) +{ + // uint32_t part_1; + // uint32_t part_2; + // uint32_t tmp; + size_t i; + uint8_t *key_cpy; + + i = 0; + key_cpy = (uint8_t*)key; + ft_membits(key_cpy, 8, sizeof(uint8_t)); + while (i < key_len) + { + ft_membits(&key_cpy[i], 1, sizeof(uint8_t)); + i++; + } + +} \ No newline at end of file From b1238baedb8db94fb9e648a7d53e5f13a0c20a13 Mon Sep 17 00:00:00 2001 From: Louise P Date: Mon, 27 Apr 2020 17:21:15 +0200 Subject: [PATCH 4/7] [Update]: Des init algo WIP - Create printer for the permutation of bits - Update & testing the function permute_block (ok) Next Change: - Slip block in 2 blocks of 32 bits - Create function for the cycle --- libft/Makefile | 3 +- libft/include/libft.h | 3 +- libft/srcs/ft_membit_pos.c | 66 ++++++++++++++++++++++++++++++++++++++ srcs/symmetric/des/des.c | 15 ++++----- 4 files changed, 76 insertions(+), 11 deletions(-) create mode 100644 libft/srcs/ft_membit_pos.c diff --git a/libft/Makefile b/libft/Makefile index 49e428d..ef4e758 100644 --- a/libft/Makefile +++ b/libft/Makefile @@ -6,7 +6,7 @@ # By: cpieri +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2017/11/07 18:38:31 by tmilon #+# #+# # -# Updated: 2020/01/06 12:49:31 by cpieri ### ########.fr # +# Updated: 2020/04/27 14:19:05 by cpieri ### ########.fr # # # # **************************************************************************** # @@ -124,6 +124,7 @@ SRCS = ft_atoi.c \ ft_atol.c \ ft_strbits.c \ ft_membits.c \ + ft_membit_pos.c \ ft_left_shift.c \ ft_left_rotate.c \ ft_right_rotate.c \ diff --git a/libft/include/libft.h b/libft/include/libft.h index 552dbee..f1a928e 100644 --- a/libft/include/libft.h +++ b/libft/include/libft.h @@ -6,7 +6,7 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2017/11/09 16:47:24 by cpieri #+# #+# */ -/* Updated: 2020/01/06 12:53:34 by cpieri ### ########.fr */ +/* Updated: 2020/04/27 14:18:20 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ @@ -83,6 +83,7 @@ void ft_bzero(void *s, size_t n); void ft_memdel(void **ap); int ft_memcmp(const void *s1, const void *s2, size_t n); void ft_membits(void *s, size_t len, size_t size); +void ft_membit_pos(void *s, size_t len, size_t size); void ft_memput(void *s, size_t len); /* diff --git a/libft/srcs/ft_membit_pos.c b/libft/srcs/ft_membit_pos.c new file mode 100644 index 0000000..f0abc4c --- /dev/null +++ b/libft/srcs/ft_membit_pos.c @@ -0,0 +1,66 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_membit_pos.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cpieri +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/27 14:07:35 by cpieri #+# #+# */ +/* Updated: 2020/04/27 16:23:33 by cpieri ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "libft.h" + +static void ft_putbits_pos(unsigned char octet) +{ + int z; + int oct; + + oct = octet; + z = 128; + while (z > 0) + { + ft_putstr("|"); + if (oct & z) + ft_putchar('1'); + else + ft_putchar('0'); + z >>= 1; + } +} + +void ft_membit_pos(void *s, size_t len, size_t size) +{ + size_t i; + size_t y; + unsigned char *data; + unsigned char b; + + data = (unsigned char*)s; + i = 0; + ft_putstr("Position: "); + while (i < 64) + { + ft_putstr("|"); + ft_putnbr((i + 1) % 8); + if ((i + 1) % 8 == 0) + ft_putstr("| - "); + i++; + } + ft_putendl(""); + ft_putstr("Bits : "); + i = 0; + while (i < (len * size)) + { + y = 0; + while (y < size) + { + b = data[i] >> ((size - y - 1) * 8); + ft_putbits_pos(data[i++]); + y++; + } + ft_putstr("| - "); + } + ft_putchar('\n'); +} diff --git a/srcs/symmetric/des/des.c b/srcs/symmetric/des/des.c index a6d6291..0235626 100644 --- a/srcs/symmetric/des/des.c +++ b/srcs/symmetric/des/des.c @@ -6,14 +6,14 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:05:42 by cpieri #+# #+# */ -/* Updated: 2020/04/27 13:23:55 by cpieri ### ########.fr */ +/* Updated: 2020/04/27 17:16:45 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" #include "symmetric/symmetric.h" -static const uint8_t g_permute_tab[64] = { +static const uint8_t g_des_ip[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, @@ -32,16 +32,12 @@ static uint8_t *permute_block(uint8_t *block, size_t len_block) i = 0; if (!(result = (uint8_t*)ft_memalloc(sizeof(uint8_t) * 8))) return (NULL); - ft_membits(block, len_block, sizeof(uint8_t)); while (i < 64) { - result[(i / 8) % 8] <<= 1; - if (block[(i / 8) % 8] & (1 << g_permute_tab[i])) - result[(i / 8) % 8] |= (uint8_t)1; + if ((block[(g_des_ip[i] - 1) / 8] >> (7 - ((g_des_ip[i] - 1) % 8))) & 1) + result[i / 8] |= (1 << (7 - (i % 8))); i++; } - ft_membits(result, len_block, sizeof(uint8_t)); - // tmp |= block & (1 << g_permute_tab[i]); return (result); } @@ -49,6 +45,7 @@ void *des(void *opt, size_t len_opt) { t_opt *opt_cpy; char *data; + char *block_permuted; size_t len_data; size_t offest; // t_evp *evp_data; @@ -60,7 +57,7 @@ void *des(void *opt, size_t len_opt) len_data = opt_cpy->data->len_data; while (offest < len_data) { - permute_block((uint8_t*)(data + offest), 64); + block_permuted = permute_block((uint8_t*)(data + offest), 8); offest += 8; } // evp_data = opt_cpy->data->pass; From 725f8a409e59cc53fcb647d7e889166cbf3d252d Mon Sep 17 00:00:00 2001 From: Louise P Date: Wed, 29 Apr 2020 14:51:27 +0200 Subject: [PATCH 5/7] [Update]: Aglo of des WIP - Change function block-permute in des-permute - Slip the block of 64 bits in two block of 32 bits - Permute the second part of block 32 bits in 48 bits Next Change: - Slip the 48 part of block in tiny blocks of 4 bits - Permute the key of 64 bits in 56 bits and 48 bits... --- Makefile | 3 ++- includes/symmetric/des/des.h | 7 ++--- srcs/symmetric/des/des.c | 48 ++++++++++++++++------------------ srcs/symmetric/des/des_tools.c | 30 +++++++++++++++++++++ 4 files changed, 59 insertions(+), 29 deletions(-) create mode 100644 srcs/symmetric/des/des_tools.c diff --git a/Makefile b/Makefile index 022e601..126e0a3 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ # By: cpieri +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2018/03/15 11:20:25 by cpieri #+# #+# # -# Updated: 2020/04/24 15:10:25 by cpieri ### ########.fr # +# Updated: 2020/04/29 11:50:04 by cpieri ### ########.fr # # # # **************************************************************************** # @@ -82,6 +82,7 @@ SRC_NAME= main.c \ symmetric/symmetric_parsing_pt_f.c \ symmetric/symmetric_parsing_pt_f_2.c \ symmetric/des/des.c \ + symmetric/des/des_tools.c \ symmetric/tools/des_key_schedule.c \ OBJ_NAME= $(SRC_NAME:.c=.o) diff --git a/includes/symmetric/des/des.h b/includes/symmetric/des/des.h index 306c1a2..a683f33 100644 --- a/includes/symmetric/des/des.h +++ b/includes/symmetric/des/des.h @@ -6,7 +6,7 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:13:19 by cpieri #+# #+# */ -/* Updated: 2020/04/24 15:11:05 by cpieri ### ########.fr */ +/* Updated: 2020/04/29 11:49:08 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,7 +16,8 @@ # include "../../../libft/include/libft.h" # include "../../structure.h" -void *des(void *opt, size_t len_opt); -void des_key_schedule(void *key, size_t key_len); +void *des(void *opt, size_t len_opt); +uint8_t *des_permute(uint8_t *to_perm, const int *arr, size_t new_len); +void des_key_schedule(void *key, size_t key_len); #endif diff --git a/srcs/symmetric/des/des.c b/srcs/symmetric/des/des.c index 0235626..ca900f0 100644 --- a/srcs/symmetric/des/des.c +++ b/srcs/symmetric/des/des.c @@ -6,46 +6,43 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:05:42 by cpieri #+# #+# */ -/* Updated: 2020/04/27 17:16:45 by cpieri ### ########.fr */ +/* Updated: 2020/04/29 13:48:52 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" #include "symmetric/symmetric.h" -static const uint8_t g_des_ip[64] = { - 58, 50, 42, 34, 26, 18, 10, 2, - 60, 52, 44, 36, 28, 20, 12, 4, - 62, 54, 46, 38, 30, 22, 14, 6, - 64, 56, 48, 40, 32, 24, 16, 8, - 57, 49, 41, 33, 25, 17, 9, 1, - 59, 51, 43, 35, 27, 19, 11, 3, - 61, 53, 45, 37, 29, 21, 13, 5, - 63, 55, 47, 39, 31, 23, 15, 7, +static const int g_des_ip[64] = { + 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, + 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, + 1, 59, 51, 43, 35, 27, 19, 11, 3, 61, 53, 45, 37, 29, 21, 13, 5, 63, 55, 47, + 39, 31, 23, 15, 7 }; -static uint8_t *permute_block(uint8_t *block, size_t len_block) +static const int g_des_cycle[48] = { + 32, 1, 2, 3, 4, 5, 4, 5, 6, 7, 8, 9, 8, 9, 10, 11, 12, 13, 12, 13, 14, 15, + 16, 17, 16, 17, 18, 19, 20, 21, 20, 21, 22, 23, 24, 25, 24, 25, 26, 27, 28, + 29, 28, 29, 30, 31, 32, 1 +}; + +static void des_cycle(uint8_t *block, size_t len_block) { - uint8_t *result; - int i; + uint32_t part_1; + uint32_t part_2; + uint8_t *permute; - i = 0; - if (!(result = (uint8_t*)ft_memalloc(sizeof(uint8_t) * 8))) - return (NULL); - while (i < 64) - { - if ((block[(g_des_ip[i] - 1) / 8] >> (7 - ((g_des_ip[i] - 1) % 8))) & 1) - result[i / 8] |= (1 << (7 - (i % 8))); - i++; - } - return (result); + (void)(len_block); + part_1 = ((uint32_t*)block)[0]; + part_2 = ((uint32_t*)block)[1]; + permute = des_permute(((uint8_t*)(&part_2)), g_des_cycle, 48); } void *des(void *opt, size_t len_opt) { t_opt *opt_cpy; char *data; - char *block_permuted; + uint8_t *block_permuted; size_t len_data; size_t offest; // t_evp *evp_data; @@ -57,7 +54,8 @@ void *des(void *opt, size_t len_opt) len_data = opt_cpy->data->len_data; while (offest < len_data) { - block_permuted = permute_block((uint8_t*)(data + offest), 8); + block_permuted = des_permute((uint8_t*)(data + offest), g_des_ip, 64); + des_cycle(block_permuted, 8); offest += 8; } // evp_data = opt_cpy->data->pass; diff --git a/srcs/symmetric/des/des_tools.c b/srcs/symmetric/des/des_tools.c new file mode 100644 index 0000000..2a03ca4 --- /dev/null +++ b/srcs/symmetric/des/des_tools.c @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* des_tools.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: cpieri +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/29 11:38:58 by cpieri #+# #+# */ +/* Updated: 2020/04/29 11:50:26 by cpieri ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "symmetric/des/des.h" + +uint8_t *des_permute(uint8_t *to_perm, const int *arr, size_t new_len) +{ + uint8_t *result; + size_t i; + + i = 0; + if (!(result = (uint8_t*)ft_memalloc(sizeof(uint8_t) * (new_len / 8)))) + return (NULL); + while (i < new_len) + { + if ((to_perm[(arr[i] - 1) / 8] >> (7 - ((arr[i] - 1) % 8))) & 1) + result[i / 8] |= (1 << (7 - (i % 8))); + i++; + } + return (result); +} \ No newline at end of file From fa79401b7d17e5078d927a88e99979d09bc9448a Mon Sep 17 00:00:00 2001 From: Louise P Date: Mon, 4 May 2020 18:14:35 +0200 Subject: [PATCH 6/7] [Try]: Writing the function of key generator - Re-write the function des_key_schedule - Create structure for the des_key - Progress in the blocks cycle [Next Change]: - Continue the des_key_schedule - Continue the blocks cycle --- includes/symmetric/des/des.h | 12 +++++- srcs/symmetric/des/des.c | 20 +++++----- srcs/symmetric/tools/des_key_schedule.c | 50 +++++++++++++++++-------- 3 files changed, 54 insertions(+), 28 deletions(-) diff --git a/includes/symmetric/des/des.h b/includes/symmetric/des/des.h index a683f33..9856782 100644 --- a/includes/symmetric/des/des.h +++ b/includes/symmetric/des/des.h @@ -6,7 +6,7 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:13:19 by cpieri #+# #+# */ -/* Updated: 2020/04/29 11:49:08 by cpieri ### ########.fr */ +/* Updated: 2020/05/04 12:22:26 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ @@ -16,8 +16,16 @@ # include "../../../libft/include/libft.h" # include "../../structure.h" +typedef struct s_des_key +{ + uint8_t *key_left; + uint8_t *key_right; + size_t len_key_left; + size_t len_key_right; +} t_des_key; + void *des(void *opt, size_t len_opt); uint8_t *des_permute(uint8_t *to_perm, const int *arr, size_t new_len); -void des_key_schedule(void *key, size_t key_len); +t_des_key des_key_schedule(void *key, size_t key_len); #endif diff --git a/srcs/symmetric/des/des.c b/srcs/symmetric/des/des.c index ca900f0..c5b3cd1 100644 --- a/srcs/symmetric/des/des.c +++ b/srcs/symmetric/des/des.c @@ -6,13 +6,15 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:05:42 by cpieri #+# #+# */ -/* Updated: 2020/04/29 13:48:52 by cpieri ### ########.fr */ +/* Updated: 2020/05/04 12:28:03 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" #include "symmetric/symmetric.h" + + static const int g_des_ip[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, @@ -40,19 +42,17 @@ static void des_cycle(uint8_t *block, size_t len_block) void *des(void *opt, size_t len_opt) { - t_opt *opt_cpy; - char *data; - uint8_t *block_permuted; - size_t len_data; - size_t offest; + t_data *data; + t_des_key keys; + uint8_t *block_permuted; + size_t offest; // t_evp *evp_data; (void)len_opt; offest = 0; - opt_cpy = opt; - data = opt_cpy->data->data; - len_data = opt_cpy->data->len_data; - while (offest < len_data) + data = ((t_opt*)opt)->data; + keys = des_key_schedule(((t_evp*)data->pass)->key, ((t_evp*)data->pass)->dk_len); + while (offest < data->len_data) { block_permuted = des_permute((uint8_t*)(data + offest), g_des_ip, 64); des_cycle(block_permuted, 8); diff --git a/srcs/symmetric/tools/des_key_schedule.c b/srcs/symmetric/tools/des_key_schedule.c index 62a0cb7..f90c261 100644 --- a/srcs/symmetric/tools/des_key_schedule.c +++ b/srcs/symmetric/tools/des_key_schedule.c @@ -6,27 +6,45 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/22 11:08:06 by cpieri #+# #+# */ -/* Updated: 2020/04/24 17:07:12 by cpieri ### ########.fr */ +/* Updated: 2020/05/04 15:46:50 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" -void des_key_schedule(void *key, size_t key_len) -{ - // uint32_t part_1; - // uint32_t part_2; - // uint32_t tmp; - size_t i; - uint8_t *key_cpy; +static const int g_des_key_r[28] = { + 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, + 29, 21, 13, 5, 28, 20, 12, 4 +}; + +static const int g_des_key_l[28] = { + 57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, + 27, 19, 11, 3, 60, 52, 44, 36 +}; + +static const int g_des_key_left_shift[16] = { + 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 +}; - i = 0; - key_cpy = (uint8_t*)key; - ft_membits(key_cpy, 8, sizeof(uint8_t)); - while (i < key_len) - { - ft_membits(&key_cpy[i], 1, sizeof(uint8_t)); - i++; - } +static const int g_des_key_32[32] = { + 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, + 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, + 34, 53, 46, 42, 50, 36, 29, 32 +}; + +t_des_key des_key_schedule(void *key, size_t key_len, int i) +{ + t_des_key keys; + uint32_t left_tmp; + uint32_t right_tmp; + int nb; + (void)key_len; + nb = g_des_key_left_shift[i]; + keys.key_left = des_permute(key, g_des_key_l, 28); + keys.key_right = des_permute(key, g_des_key_r, 28); + left_tmp = left_shift(((uint32_t*)keys.key_left)[0], nb); + right_tmp = left_shift(((uint32_t*)keys.key_right)[0], nb); + + return (keys); } \ No newline at end of file From aaaadb47d084bc4312ec4ace007f5fd2ce631976 Mon Sep 17 00:00:00 2001 From: Louise P Date: Tue, 5 May 2020 12:27:21 +0200 Subject: [PATCH 7/7] [Try]: Writing the function of the key gen - Duplicate the function des_key_schedule: - One return struct t_des_keys - Other one return pointer of uint32_t - Create while i < 16 for the cycle [Next Change]: - Writing the xor of key and blocks - Inverse the left block with the right block --- includes/symmetric/des/des.h | 5 +++-- srcs/symmetric/des/des.c | 23 ++++++++++--------- srcs/symmetric/tools/des_key_schedule.c | 30 ++++++++++++++++++++----- 3 files changed, 40 insertions(+), 18 deletions(-) diff --git a/includes/symmetric/des/des.h b/includes/symmetric/des/des.h index 9856782..89bd8b4 100644 --- a/includes/symmetric/des/des.h +++ b/includes/symmetric/des/des.h @@ -6,7 +6,7 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:13:19 by cpieri #+# #+# */ -/* Updated: 2020/05/04 12:22:26 by cpieri ### ########.fr */ +/* Updated: 2020/05/05 12:10:40 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ @@ -26,6 +26,7 @@ typedef struct s_des_key void *des(void *opt, size_t len_opt); uint8_t *des_permute(uint8_t *to_perm, const int *arr, size_t new_len); -t_des_key des_key_schedule(void *key, size_t key_len); +t_des_key des_key_schedule(void *key, size_t key_len, int i); +uint32_t *des_key_schedule_32(void *key, size_t key_len, int i); #endif diff --git a/srcs/symmetric/des/des.c b/srcs/symmetric/des/des.c index c5b3cd1..c2536cc 100644 --- a/srcs/symmetric/des/des.c +++ b/srcs/symmetric/des/des.c @@ -6,15 +6,13 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2019/05/06 10:05:42 by cpieri #+# #+# */ -/* Updated: 2020/05/04 12:28:03 by cpieri ### ########.fr */ +/* Updated: 2020/05/05 12:22:48 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" #include "symmetric/symmetric.h" - - static const int g_des_ip[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 22, 14, 6, 64, 56, 48, 40, 32, 24, 16, 8, 57, 49, 41, 33, 25, 17, 9, @@ -28,22 +26,29 @@ static const int g_des_cycle[48] = { 29, 28, 29, 30, 31, 32, 1 }; -static void des_cycle(uint8_t *block, size_t len_block) +static void des_cycle(uint8_t *block, size_t len_block, void *key, int dk_l) { uint32_t part_1; uint32_t part_2; + uint32_t *key_32; + int i; uint8_t *permute; (void)(len_block); + i = 0; part_1 = ((uint32_t*)block)[0]; part_2 = ((uint32_t*)block)[1]; - permute = des_permute(((uint8_t*)(&part_2)), g_des_cycle, 48); + while (i < 16) + { + permute = des_permute(((uint8_t*)(&part_2)), g_des_cycle, 48); + key_32 = des_key_schedule_32(key, dk_l, i); + i++; + } } void *des(void *opt, size_t len_opt) { t_data *data; - t_des_key keys; uint8_t *block_permuted; size_t offest; // t_evp *evp_data; @@ -51,15 +56,11 @@ void *des(void *opt, size_t len_opt) (void)len_opt; offest = 0; data = ((t_opt*)opt)->data; - keys = des_key_schedule(((t_evp*)data->pass)->key, ((t_evp*)data->pass)->dk_len); while (offest < data->len_data) { block_permuted = des_permute((uint8_t*)(data + offest), g_des_ip, 64); - des_cycle(block_permuted, 8); + des_cycle(block_permuted, 8, ((t_evp*)data->pass)->key, ((t_evp*)data->pass)->dk_len); offest += 8; } - // evp_data = opt_cpy->data->pass; - // des_key_schedule(evp_data->key, evp_data->dk_len); - // Code return (opt); } \ No newline at end of file diff --git a/srcs/symmetric/tools/des_key_schedule.c b/srcs/symmetric/tools/des_key_schedule.c index f90c261..c14e316 100644 --- a/srcs/symmetric/tools/des_key_schedule.c +++ b/srcs/symmetric/tools/des_key_schedule.c @@ -6,15 +6,15 @@ /* By: cpieri +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2020/04/22 11:08:06 by cpieri #+# #+# */ -/* Updated: 2020/05/04 15:46:50 by cpieri ### ########.fr */ +/* Updated: 2020/05/05 12:21:56 by cpieri ### ########.fr */ /* */ /* ************************************************************************** */ #include "symmetric/des/des.h" static const int g_des_key_r[28] = { - 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, - 29, 21, 13, 5, 28, 20, 12, 4 + 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, + 37, 29, 21, 13, 5, 28, 20, 12, 4 }; static const int g_des_key_l[28] = { @@ -26,7 +26,7 @@ static const int g_des_key_left_shift[16] = { 1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28 }; -static const int g_des_key_32[32] = { +static const int g_des_key_32[64] = { 14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32 @@ -45,6 +45,26 @@ t_des_key des_key_schedule(void *key, size_t key_len, int i) keys.key_right = des_permute(key, g_des_key_r, 28); left_tmp = left_shift(((uint32_t*)keys.key_left)[0], nb); right_tmp = left_shift(((uint32_t*)keys.key_right)[0], nb); - return (keys); +} + +uint32_t *des_key_schedule_32(void *key, size_t key_len, int i) +{ + t_des_key keys; + uint32_t left_tmp; + uint32_t right_tmp; + uint32_t *new_key; + int nb; + + (void)key_len; + nb = g_des_key_left_shift[i]; + keys.key_left = des_permute(key, g_des_key_l, 28); + keys.key_right = des_permute(key, g_des_key_r, 28); + left_tmp = left_shift(((uint32_t*)keys.key_left)[0], nb); + right_tmp = left_shift(((uint32_t*)keys.key_right)[0], nb); + new_key = (uint32_t*)ft_memalloc(sizeof(uint32_t) * 2); + new_key[0] = left_tmp; + new_key[1] = right_tmp; + new_key = (uint32_t*)des_permute((uint8_t*)new_key, g_des_key_32, 32); + return (new_key); } \ No newline at end of file