| From b08766c8e46956daba010044b00c97f78b598780 Mon Sep 17 00:00:00 2001 |
| From: Michael Santos <michael.santos@gmail.com> |
| Date: Sun, 24 May 2015 10:55:02 -0400 |
| Subject: [PATCH] Namespace SHA functions |
| |
| Fix statically linking against libstrophe by renaming the internal SHA |
| functions: |
| |
| https://github.com/strophe/libstrophe/issues/40 |
| |
| Although the same function names are used by libstrophe and OpenSSL, |
| the signatures and contexts of the SHA functions differ, resulting in |
| a segfault if the OpenSSL versions are substituted. |
| |
| [Upstream commit: https://github.com/msantos/libstrophe/commit/b08766c8e46956daba010044b00c97f78b598780] |
| Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com> |
| --- |
| src/auth.c | 8 ++++---- |
| src/scram.c | 22 +++++++++++----------- |
| src/sha1.c | 30 +++++++++++++++--------------- |
| src/sha1.h | 6 +++--- |
| 4 files changed, 33 insertions(+), 33 deletions(-) |
| |
| diff --git a/src/auth.c b/src/auth.c |
| index b06f18c..3506977 100644 |
| --- a/src/auth.c |
| +++ b/src/auth.c |
| @@ -1187,10 +1187,10 @@ int _handle_component_auth(xmpp_conn_t * const conn) |
| /* Feed the session id and passphrase to the algorithm. |
| * We need to compute SHA1(session_id + passphrase) |
| */ |
| - SHA1_Init(&mdctx); |
| - SHA1_Update(&mdctx, (uint8_t*)conn->stream_id, strlen(conn->stream_id)); |
| - SHA1_Update(&mdctx, (uint8_t*)conn->pass, strlen(conn->pass)); |
| - SHA1_Final(&mdctx, md_value); |
| + xmpp_SHA1_Init(&mdctx); |
| + xmpp_SHA1_Update(&mdctx, (uint8_t*)conn->stream_id, strlen(conn->stream_id)); |
| + xmpp_SHA1_Update(&mdctx, (uint8_t*)conn->pass, strlen(conn->pass)); |
| + xmpp_SHA1_Final(&mdctx, md_value); |
| |
| digest = xmpp_alloc(conn->ctx, 2*sizeof(md_value)+1); |
| if (digest) { |
| diff --git a/src/scram.c b/src/scram.c |
| index 5cce168..6e420e1 100644 |
| --- a/src/scram.c |
| +++ b/src/scram.c |
| @@ -37,9 +37,9 @@ static void SHA1(const uint8_t* data, size_t len, |
| uint8_t digest[SHA1_DIGEST_SIZE]) |
| { |
| SHA1_CTX ctx; |
| - SHA1_Init(&ctx); |
| - SHA1_Update(&ctx, data, len); |
| - SHA1_Final(&ctx, digest); |
| + xmpp_SHA1_Init(&ctx); |
| + xmpp_SHA1_Update(&ctx, data, len); |
| + xmpp_SHA1_Final(&ctx, digest); |
| } |
| |
| static void HMAC_SHA1(const uint8_t *key, size_t key_len, |
| @@ -66,15 +66,15 @@ static void HMAC_SHA1(const uint8_t *key, size_t key_len, |
| key_opad[i] = key_pad[i] ^ opad; |
| } |
| |
| - SHA1_Init(&ctx); |
| - SHA1_Update(&ctx, key_ipad, BLOCK_SIZE); |
| - SHA1_Update(&ctx, text, len); |
| - SHA1_Final(&ctx, sha_digest); |
| + xmpp_SHA1_Init(&ctx); |
| + xmpp_SHA1_Update(&ctx, key_ipad, BLOCK_SIZE); |
| + xmpp_SHA1_Update(&ctx, text, len); |
| + xmpp_SHA1_Final(&ctx, sha_digest); |
| |
| - SHA1_Init(&ctx); |
| - SHA1_Update(&ctx, key_opad, BLOCK_SIZE); |
| - SHA1_Update(&ctx, sha_digest, SHA1_DIGEST_SIZE); |
| - SHA1_Final(&ctx, digest); |
| + xmpp_SHA1_Init(&ctx); |
| + xmpp_SHA1_Update(&ctx, key_opad, BLOCK_SIZE); |
| + xmpp_SHA1_Update(&ctx, sha_digest, SHA1_DIGEST_SIZE); |
| + xmpp_SHA1_Final(&ctx, digest); |
| } |
| |
| static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, |
| diff --git a/src/sha1.c b/src/sha1.c |
| index 9af4f04..b60b325 100644 |
| --- a/src/sha1.c |
| +++ b/src/sha1.c |
| @@ -202,7 +202,7 @@ static void SHA1_Transform(uint32_t state[5], const uint8_t buffer[64]) |
| |
| |
| /* SHA1Init - Initialize new context */ |
| -void SHA1_Init(SHA1_CTX* context) |
| +void xmpp_SHA1_Init(SHA1_CTX* context) |
| { |
| /* SHA1 initialization constants */ |
| context->state[0] = 0x67452301; |
| @@ -215,7 +215,7 @@ void SHA1_Init(SHA1_CTX* context) |
| |
| |
| /* Run your data through this. */ |
| -void SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len) |
| +void xmpp_SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len) |
| { |
| size_t i, j; |
| |
| @@ -244,7 +244,7 @@ void SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len) |
| |
| |
| /* Add padding and return the message digest. */ |
| -void SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]) |
| +void xmpp_SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]) |
| { |
| uint32_t i; |
| uint8_t finalcount[8]; |
| @@ -253,11 +253,11 @@ void SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]) |
| finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)] |
| >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */ |
| } |
| - SHA1_Update(context, (uint8_t *)"\200", 1); |
| + xmpp_SHA1_Update(context, (uint8_t *)"\200", 1); |
| while ((context->count[0] & 504) != 448) { |
| - SHA1_Update(context, (uint8_t *)"\0", 1); |
| + xmpp_SHA1_Update(context, (uint8_t *)"\0", 1); |
| } |
| - SHA1_Update(context, finalcount, 8); /* Should cause a SHA1_Transform() */ |
| + xmpp_SHA1_Update(context, finalcount, 8); /* Should cause a SHA1_Transform() */ |
| for (i = 0; i < SHA1_DIGEST_SIZE; i++) { |
| digest[i] = (uint8_t) |
| ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255); |
| @@ -300,12 +300,12 @@ FILE* file; |
| return(-1); |
| } |
| } |
| - SHA1_Init(&context); |
| + xmpp_SHA1_Init(&context); |
| while (!feof(file)) { /* note: what if ferror(file) */ |
| i = fread(buffer, 1, 16384, file); |
| - SHA1_Update(&context, buffer, i); |
| + xmpp_SHA1_Update(&context, buffer, i); |
| } |
| - SHA1_Final(&context, digest); |
| + xmpp_SHA1_Final(&context, digest); |
| fclose(file); |
| for (i = 0; i < SHA1_DIGEST_SIZE/4; i++) { |
| for (j = 0; j < 4; j++) { |
| @@ -358,9 +358,9 @@ int main(int argc, char** argv) |
| fprintf(stdout, "verifying SHA-1 implementation... "); |
| |
| for (k = 0; k < 2; k++){ |
| - SHA1_Init(&context); |
| - SHA1_Update(&context, (uint8_t*)test_data[k], strlen(test_data[k])); |
| - SHA1_Final(&context, digest); |
| + xmpp_SHA1_Init(&context); |
| + xmpp_SHA1_Update(&context, (uint8_t*)test_data[k], strlen(test_data[k])); |
| + xmpp_SHA1_Final(&context, digest); |
| digest_to_hex(digest, output); |
| |
| if (strcmp(output, test_results[k])) { |
| @@ -372,10 +372,10 @@ int main(int argc, char** argv) |
| } |
| } |
| /* million 'a' vector we feed separately */ |
| - SHA1_Init(&context); |
| + xmpp_SHA1_Init(&context); |
| for (k = 0; k < 1000000; k++) |
| - SHA1_Update(&context, (uint8_t*)"a", 1); |
| - SHA1_Final(&context, digest); |
| + xmpp_SHA1_Update(&context, (uint8_t*)"a", 1); |
| + xmpp_SHA1_Final(&context, digest); |
| digest_to_hex(digest, output); |
| if (strcmp(output, test_results[2])) { |
| fprintf(stdout, "FAIL\n"); |
| diff --git a/src/sha1.h b/src/sha1.h |
| index 10266cb..7ff48d7 100644 |
| --- a/src/sha1.h |
| +++ b/src/sha1.h |
| @@ -23,9 +23,9 @@ typedef struct { |
| |
| #define SHA1_DIGEST_SIZE 20 |
| |
| -void SHA1_Init(SHA1_CTX* context); |
| -void SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len); |
| -void SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]); |
| +void xmpp_SHA1_Init(SHA1_CTX* context); |
| +void xmpp_SHA1_Update(SHA1_CTX* context, const uint8_t* data, const size_t len); |
| +void xmpp_SHA1_Final(SHA1_CTX* context, uint8_t digest[SHA1_DIGEST_SIZE]); |
| |
| #ifdef __cplusplus |
| } |