Skip to content

Commit 4cf165b

Browse files
author
Louise P
committed
[Function]: Create the function SHA1
1 parent 6eaa9c3 commit 4cf165b

File tree

18 files changed

+282
-4028
lines changed

18 files changed

+282
-4028
lines changed

Makefile

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# By: cpieri <[email protected]> +#+ +:+ +#+ #
77
# +#+#+#+#+#+ +#+ #
88
# Created: 2018/03/15 11:20:25 by cpieri #+# #+# #
9-
# Updated: 2019/12/11 12:37:26 by cpieri ### ########.fr #
9+
# Updated: 2019/12/30 08:54:04 by cpieri ### ########.fr #
1010
# #
1111
# **************************************************************************** #
1212

@@ -35,6 +35,7 @@ DEPS = Makefile \
3535
includes/hash/sha256.h \
3636
includes/hash/hash.h \
3737
includes/hash/md5.h \
38+
includes/hash/sha1.h \
3839
includes/base64/base64.h \
3940
includes/symmetric/symmetric.h \
4041
includes/symmetric/des/des.h \
@@ -57,6 +58,8 @@ SRC_NAME= main.c \
5758
hash/sha256/sha256_utils.c \
5859
hash/md5/md5_utils.c \
5960
hash/md5/md5.c \
61+
hash/sha1/sha1.c \
62+
hash/sha1/sha1_utils.c \
6063
base64/base64.c \
6164
base64/base64_encode.c \
6265
base64/base64_decode.c \

hash.1

-1,001
This file was deleted.

hash.2

-1,001
This file was deleted.

hash.3

-1,001
This file was deleted.

hash.4

-2
This file was deleted.

hash.5

-1,001
This file was deleted.

includes/ft_ssl.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2019/03/06 12:40:02 by cpieri #+# #+# */
9-
/* Updated: 2019/05/08 12:45:25 by cpieri ### ########.fr */
9+
/* Updated: 2019/12/30 09:01:15 by cpieri ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -15,6 +15,7 @@
1515

1616
# include "../libft/include/libft.h"
1717
# include "./hash/md5.h"
18+
# include "./hash/sha1.h"
1819
# include "./hash/sha256.h"
1920
# include "./base64/base64.h"
2021
# include "./symmetric/symmetric.h"

includes/hash/md5.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2019/03/06 12:16:22 by cpieri #+# #+# */
9-
/* Updated: 2019/05/22 10:56:42 by cpieri ### ########.fr */
9+
/* Updated: 2019/12/30 08:36:13 by cpieri ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -40,10 +40,10 @@ typedef struct s_md5
4040
uint32_t *w;
4141
} t_md5;
4242

43-
t_md5_utils func_f(uint32_t b, uint32_t c, uint32_t d, int i);
44-
t_md5_utils func_g(uint32_t b, uint32_t c, uint32_t d, int i);
45-
t_md5_utils func_h(uint32_t b, uint32_t c, uint32_t d, int i);
46-
t_md5_utils func_i(uint32_t b, uint32_t c, uint32_t d, int i);
43+
t_md5_utils func_md5_f(uint32_t b, uint32_t c, uint32_t d, int i);
44+
t_md5_utils func_md5_g(uint32_t b, uint32_t c, uint32_t d, int i);
45+
t_md5_utils func_md5_h(uint32_t b, uint32_t c, uint32_t d, int i);
46+
t_md5_utils func_md5_i(uint32_t b, uint32_t c, uint32_t d, int i);
4747
t_hash *set_hash2md5(t_md5 *e);
4848
void *md5(void *data, size_t len_data);
4949

includes/hash/sha1.h

+53
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/* ************************************************************************** */
2+
/* */
3+
/* ::: :::::::: */
4+
/* sha1.h :+: :+: :+: */
5+
/* +:+ +:+ +:+ */
6+
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
7+
/* +#+#+#+#+#+ +#+ */
8+
/* Created: 2019/12/30 08:05:02 by cpieri #+# #+# */
9+
/* Updated: 2019/12/30 08:59:37 by cpieri ### ########.fr */
10+
/* */
11+
/* ************************************************************************** */
12+
13+
#ifndef SHA1_H
14+
# define SHA1_H
15+
16+
# include "hash.h"
17+
18+
# define SHA1_H0 0x67452301
19+
# define SHA1_H1 0xEFCDAB89
20+
# define SHA1_H2 0x98BADCFE
21+
# define SHA1_H3 0x10325476
22+
# define SHA1_H4 0xC3D2E1F0
23+
24+
typedef struct s_sha1_utils
25+
{
26+
uint32_t f;
27+
uint32_t k;
28+
} t_sha1_utils;
29+
30+
typedef struct s_sha1
31+
{
32+
t_padding p;
33+
uint32_t a;
34+
uint32_t b;
35+
uint32_t c;
36+
uint32_t d;
37+
uint32_t e;
38+
uint32_t h0;
39+
uint32_t h1;
40+
uint32_t h2;
41+
uint32_t h3;
42+
uint32_t h4;
43+
uint32_t *w;
44+
} t_sha1;
45+
46+
t_sha1_utils func_sha1_f(uint32_t b, uint32_t c, uint32_t d);
47+
t_sha1_utils func_sha1_g(uint32_t b, uint32_t c, uint32_t d);
48+
t_sha1_utils func_sha1_h(uint32_t b, uint32_t c, uint32_t d);
49+
t_sha1_utils func_sha1_i(uint32_t b, uint32_t c, uint32_t d);
50+
void *sha1(void *data, size_t len_data);
51+
t_hash *set_hash2sha1(t_sha1 *e);
52+
53+
#endif

libft/Makefile

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
# By: cpieri <[email protected]> +#+ +:+ +#+ #
77
# +#+#+#+#+#+ +#+ #
88
# Created: 2017/11/07 18:38:31 by tmilon #+# #+# #
9-
# Updated: 2019/05/20 21:33:21 by cpieri ### ########.fr #
9+
# Updated: 2019/12/30 09:39:19 by cpieri ### ########.fr #
1010
# #
1111
# **************************************************************************** #
1212

@@ -122,6 +122,7 @@ SRCS = ft_atoi.c \
122122
ft_atol.c \
123123
ft_strbits.c \
124124
ft_membits.c \
125+
ft_left_shift.c \
125126
ft_left_rotate.c \
126127
ft_right_rotate.c \
127128
ft_swap_uint32t.c \

libft/include/libft.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2017/11/09 16:47:24 by cpieri #+# #+# */
9-
/* Updated: 2019/12/17 10:08:06 by cpieri ### ########.fr */
9+
/* Updated: 2019/12/30 09:36:53 by cpieri ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -151,6 +151,7 @@ double ftb_clamp(double toclamp, double min, double max);
151151
/*
152152
** Functions for Bitwise
153153
*/
154+
uint32_t left_shift(uint32_t x, uint32_t nb);
154155
uint32_t left_rotate(uint32_t x, uint32_t nb);
155156
uint32_t right_rotate(uint32_t x, uint32_t nb);
156157
uint32_t swap_uint32t(uint32_t nb);

libft/srcs/ft_left_shift.c

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
/* ************************************************************************** */
2+
/* */
3+
/* ::: :::::::: */
4+
/* ft_left_shift.c :+: :+: :+: */
5+
/* +:+ +:+ +:+ */
6+
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
7+
/* +#+#+#+#+#+ +#+ */
8+
/* Created: 2019/12/30 09:37:01 by cpieri #+# #+# */
9+
/* Updated: 2019/12/30 09:38:17 by cpieri ### ########.fr */
10+
/* */
11+
/* ************************************************************************** */
12+
13+
#include "libft.h"
14+
15+
uint32_t left_shift(uint32_t x, uint32_t nb)
16+
{
17+
return (x << nb);
18+
}

srcs/hash/md5/md5.c

+5-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2019/01/25 15:18:34 by cpieri #+# #+# */
9-
/* Updated: 2019/05/22 11:37:58 by cpieri ### ########.fr */
9+
/* Updated: 2019/12/30 08:36:27 by cpieri ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

@@ -44,7 +44,6 @@ static void padding_md5(t_padding *p, char *data, size_t len)
4444
p->new_len = (448 - (p->nb_bits + 1)) % 512;
4545
p->new_len += p->nb_bits + 64 + 1;
4646
p->new_len /= 8;
47-
printf("Debug: md5 new len: %zu\n", p->new_len);
4847
if (!(p->msg8 = (uint8_t*)ft_memalloc(sizeof(uint8_t) * p->new_len)))
4948
ft_abort("ft_ssl: md5: malloc failed");
5049
ft_memcpy(p->msg8, data, len);
@@ -64,13 +63,13 @@ static void calc_sum(t_md5 *e)
6463
while (i < 64)
6564
{
6665
if (i >= 0 && i <= 15)
67-
tool = func_f(e->b, e->c, e->d, i);
66+
tool = func_md5_f(e->b, e->c, e->d, i);
6867
else if (i >= 16 && i <= 31)
69-
tool = func_g(e->b, e->c, e->d, i);
68+
tool = func_md5_g(e->b, e->c, e->d, i);
7069
else if (i >= 32 && i <= 47)
71-
tool = func_h(e->b, e->c, e->d, i);
70+
tool = func_md5_h(e->b, e->c, e->d, i);
7271
else if (i >= 48 && i <= 63)
73-
tool = func_i(e->b, e->c, e->d, i);
72+
tool = func_md5_i(e->b, e->c, e->d, i);
7473
tmp = e->d;
7574
e->d = e->c;
7675
e->c = e->b;

srcs/hash/md5/md5_utils.c

+5-5
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
77
/* +#+#+#+#+#+ +#+ */
88
/* Created: 2019/02/13 13:34:11 by cpieri #+# #+# */
9-
/* Updated: 2019/05/22 10:54:58 by cpieri ### ########.fr */
9+
/* Updated: 2019/12/30 08:36:03 by cpieri ### ########.fr */
1010
/* */
1111
/* ************************************************************************** */
1212

1313
#include "hash/md5.h"
1414

15-
t_md5_utils func_f(uint32_t b, uint32_t c, uint32_t d, int i)
15+
t_md5_utils func_md5_f(uint32_t b, uint32_t c, uint32_t d, int i)
1616
{
1717
t_md5_utils ret;
1818

@@ -21,7 +21,7 @@ t_md5_utils func_f(uint32_t b, uint32_t c, uint32_t d, int i)
2121
return (ret);
2222
}
2323

24-
t_md5_utils func_g(uint32_t b, uint32_t c, uint32_t d, int i)
24+
t_md5_utils func_md5_g(uint32_t b, uint32_t c, uint32_t d, int i)
2525
{
2626
t_md5_utils ret;
2727

@@ -30,7 +30,7 @@ t_md5_utils func_g(uint32_t b, uint32_t c, uint32_t d, int i)
3030
return (ret);
3131
}
3232

33-
t_md5_utils func_h(uint32_t b, uint32_t c, uint32_t d, int i)
33+
t_md5_utils func_md5_h(uint32_t b, uint32_t c, uint32_t d, int i)
3434
{
3535
t_md5_utils ret;
3636

@@ -39,7 +39,7 @@ t_md5_utils func_h(uint32_t b, uint32_t c, uint32_t d, int i)
3939
return (ret);
4040
}
4141

42-
t_md5_utils func_i(uint32_t b, uint32_t c, uint32_t d, int i)
42+
t_md5_utils func_md5_i(uint32_t b, uint32_t c, uint32_t d, int i)
4343
{
4444
t_md5_utils ret;
4545

srcs/hash/sha1/sha1.c

+110
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
/* ************************************************************************** */
2+
/* */
3+
/* ::: :::::::: */
4+
/* sha1.c :+: :+: :+: */
5+
/* +:+ +:+ +:+ */
6+
/* By: cpieri <[email protected]> +#+ +:+ +#+ */
7+
/* +#+#+#+#+#+ +#+ */
8+
/* Created: 2019/12/30 08:04:36 by cpieri #+# #+# */
9+
/* Updated: 2019/12/31 07:58:25 by cpieri ### ########.fr */
10+
/* */
11+
/* ************************************************************************** */
12+
13+
#include "hash/sha1.h"
14+
#include <stdio.h>
15+
16+
static void padding_sha1(t_padding *p, char *data, size_t len)
17+
{
18+
int i;
19+
20+
i = -1;
21+
p->init_len = len;
22+
p->nb_bits = len * 8;
23+
p->new_len = (448 - (p->nb_bits + 1)) % 512;
24+
p->new_len += p->nb_bits + 64 + 1;
25+
p->new_len /= 8;
26+
if (!(p->msg8 = (uint8_t*)ft_memalloc(sizeof(uint8_t) * p->new_len)))
27+
ft_abort("ft_ssl: sha1: malloc failed");
28+
ft_memcpy(p->msg8, data, len);
29+
p->msg8[len] |= 1 << 7;
30+
while (++i < 8)
31+
p->msg8[p->new_len - 8 + i] = ((uint8_t*)&(p->nb_bits))[7 - i];
32+
p->offest = 0;
33+
}
34+
35+
static void calc_sha1(t_sha1 *e)
36+
{
37+
int i;
38+
uint32_t tmp;
39+
t_sha1_utils tool;
40+
41+
i = 0;
42+
while (i < 80)
43+
{
44+
if (i >= 0 && i <= 19)
45+
tool = func_sha1_f(e->b, e->c, e->d);
46+
else if (i >= 20 && i <= 39)
47+
tool = func_sha1_g(e->b, e->c, e->d);
48+
else if (i >= 40 && i <= 59)
49+
tool = func_sha1_h(e->b, e->c, e->d);
50+
else if (i >= 60 && i <= 79)
51+
tool = func_sha1_i(e->b, e->c, e->d);
52+
tmp = left_rotate(e->a, 5) + tool.f + e->e + tool.k + e->w[i];
53+
e->e = e->d;
54+
e->d = e->c;
55+
e->c = left_rotate(e->b, 30);
56+
e->b = e->a;
57+
e->a = tmp;
58+
i++;
59+
}
60+
}
61+
62+
static uint32_t *create_sha1_w(void *msg_8, size_t offest)
63+
{
64+
int i;
65+
uint32_t *w;
66+
67+
if (!(w = (uint32_t*)ft_memalloc(sizeof(uint32_t) * 80)))
68+
return (NULL);
69+
i = -1;
70+
while (++i < 16)
71+
{
72+
ft_memcpy(&(w[i]), msg_8 + offest + (i * 4), sizeof(uint32_t));
73+
w[i] = swap_uint32t(w[i]);
74+
}
75+
while (i < 80)
76+
{
77+
w[i] = left_rotate((w[i - 3] ^ w[i - 8] ^ w[i - 14] ^ w[i - 16]), 1);
78+
i++;
79+
}
80+
return (w);
81+
}
82+
83+
void *sha1(void *data, size_t len_data)
84+
{
85+
t_sha1 e;
86+
t_hash *sum;
87+
88+
e = (t_sha1){.h0 = SHA1_H0, .h1 = SHA1_H1, .h2 = SHA1_H2, .h3 = SHA1_H3,
89+
.h4 = SHA1_H4, .w = NULL};
90+
padding_sha1(&(e.p), data, len_data);
91+
while (e.p.offest < e.p.new_len)
92+
{
93+
e.a = e.h0;
94+
e.b = e.h1;
95+
e.c = e.h2;
96+
e.d = e.h3;
97+
e.e = e.h4;
98+
e.w = create_sha1_w(e.p.msg8, e.p.offest);
99+
calc_sha1(&e);
100+
ft_memdel((void**)&(e.w));
101+
e.h0 += e.a;
102+
e.h1 += e.b;
103+
e.h2 += e.c;
104+
e.h3 += e.d;
105+
e.h4 += e.e;
106+
e.p.offest += 64;
107+
}
108+
sum = set_hash2sha1(&e);
109+
return (sum);
110+
}

0 commit comments

Comments
 (0)