From 9dc36589ae69f2938469b854b21ba1738469798b Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Tue, 8 Jul 2014 12:50:03 +0200 Subject: Fix SHA1 calculation of long notes sha1_update() modifies the input data, so we need to duplicate the input before calculating the hash. Otherwise, input data longer than 64 bytes will be garbled. Reported-by: Hakan Jerning Signed-off-by: Lukas Fleischer --- src/sha1.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/sha1.c b/src/sha1.c index d32c241..ab3380f 100644 --- a/src/sha1.c +++ b/src/sha1.c @@ -40,6 +40,7 @@ */ #include +#include #include #include "sha1.h" @@ -233,18 +234,21 @@ void sha1_final(sha1_ctx_t * ctx, uint8_t digest[SHA1_DIGESTLEN]) void sha1_digest(const char *data, char *buffer) { + char *buf = strdup(data); sha1_ctx_t ctx; uint8_t digest[SHA1_DIGESTLEN]; int i; sha1_init(&ctx); - sha1_update(&ctx, (const uint8_t *)data, strlen(data)); + sha1_update(&ctx, (const uint8_t *)buf, strlen(buf)); sha1_final(&ctx, (uint8_t *) digest); for (i = 0; i < SHA1_DIGESTLEN; i++) { snprintf(buffer, 3, "%02x", digest[i]); buffer += sizeof(char) * 2; } + + free(buf); } void sha1_stream(FILE * fp, char *buffer) -- cgit v1.2.3-70-g09d2