aboutsummaryrefslogtreecommitdiff
path: root/src/message_digest.c
diff options
context:
space:
mode:
authorCharles Cabergs <me@cacharle.xyz>2020-08-03 13:02:41 +0200
committerCharles Cabergs <me@cacharle.xyz>2020-08-03 13:02:41 +0200
commit93af56873184ab9ed9b17590da142eb4a90722d8 (patch)
tree874b683ce7b0d512cd673ab953f3f14aecb70d40 /src/message_digest.c
parent49005573d3f6ee9123e827f71e694434b29251af (diff)
downloadft_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.c22
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);