diff options
| author | Charles Cabergs <me@cacharle.xyz> | 2020-08-03 13:02:41 +0200 |
|---|---|---|
| committer | Charles Cabergs <me@cacharle.xyz> | 2020-08-03 13:02:41 +0200 |
| commit | 93af56873184ab9ed9b17590da142eb4a90722d8 (patch) | |
| tree | 874b683ce7b0d512cd673ab953f3f14aecb70d40 /src/message_digest.c | |
| parent | 49005573d3f6ee9123e827f71e694434b29251af (diff) | |
| download | ft_ssl-93af56873184ab9ed9b17590da142eb4a90722d8.tar.gz ft_ssl-93af56873184ab9ed9b17590da142eb4a90722d8.tar.bz2 ft_ssl-93af56873184ab9ed9b17590da142eb4a90722d8.zip | |
Fixing sha1 by reversing bytes since it was designed for big endian
Diffstat (limited to 'src/message_digest.c')
| -rw-r--r-- | src/message_digest.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/message_digest.c b/src/message_digest.c index c696780..122d40d 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 13:56:26 by charles ### ########.fr */ +/* Updated: 2020/08/03 12:56:52 by charles ### ########.fr */ /* */ /* ************************************************************************** */ @@ -32,8 +32,18 @@ char *message_digest(t_message_digest_param *param, uint8_t *message_origin, uin ft_memcpy(message, message_origin, size); ft_memset(message + size, 0x0, padding_size); message[size] |= 1 << 7; - *((uint64_t*)(message + size + padding_size - sizeof(uint64_t))) = size * 8; + *((uint64_t*)(message + size + padding_size - sizeof(uint64_t))) = + param->big_endian ? reverse_bytes64(size * 8) : (size * 8); size += padding_size; + + for (size_t j = 0; j < size; j++) + { + if (j % 8 == 0) + printf("\n"); + printf("%02x ", message[j]); + } + printf("\n"); + i = 0; while (i < size) { @@ -47,6 +57,14 @@ char *message_digest(t_message_digest_param *param, uint8_t *message_origin, uin i += param->chunk_size; } free(message); + if (param->big_endian) + { + for (i = 0; i < param->compression_state_size / param->compression_state_stride; i++) + ((uint32_t*)local_state)[i] = + param->compression_state_stride == sizeof(uint32_t) + ? reverse_bytes32(((uint32_t*)local_state)[i]) + : reverse_bytes64(((uint64_t*)local_state)[i]); + } ret = bytes_to_str(local_state, param->compression_state_size); free(local_state); return (ret); |
