diff --git a/Makefile.am b/Makefile.am index dadce55..6c63974 100644 --- Makefile.am +++ Makefile.am @@ -21,11 +21,11 @@ libstrophe_la_LDFLAGS = $(SSL_LIBS) $(PARSER_LIBS) libstrophe_la_LDFLAGS += -export-symbols-regex '^xmpp_' libstrophe_la_SOURCES = src/auth.c src/conn.c src/ctx.c \ src/event.c src/handler.c src/hash.c \ - src/jid.c src/md5.c src/sasl.c src/scram.c src/sha1.c \ + src/jid.c src/md5.c src/sasl.c src/scram.c \ src/snprintf.c src/sock.c src/stanza.c src/thread.c \ src/tls_openssl.c src/util.c \ src/common.h src/hash.h src/md5.h src/ostypes.h src/parser.h \ - src/sasl.h src/scram.h src/sha1.h src/sock.h src/thread.h src/tls.h \ + src/sasl.h src/scram.h src/sock.h src/thread.h src/tls.h \ src/util.h if PARSER_EXPAT diff --git a/src/sasl.c b/src/sasl.c index 3d83fd0..9e1b40b 100644 --- src/sasl.c +++ src/sasl.c @@ -21,7 +21,7 @@ #include "ostypes.h" #include "sasl.h" #include "md5.h" -#include "sha1.h" +#include #include "scram.h" #ifdef _WIN32 @@ -355,8 +355,8 @@ char *sasl_scram_sha1(xmpp_ctx_t *ctx, const char *challenge, const char *first_bare, const char *jid, const char *password) { - uint8_t key[SHA1_DIGEST_SIZE]; - uint8_t sign[SHA1_DIGEST_SIZE]; + uint8_t key[SHA_DIGEST_LENGTH]; + uint8_t sign[SHA_DIGEST_LENGTH]; char *r = NULL; char *s = NULL; char *i = NULL; @@ -422,7 +422,7 @@ char *sasl_scram_sha1(xmpp_ctx_t *ctx, const char *challenge, SCRAM_SHA1_ClientKey((uint8_t *)password, strlen(password), (uint8_t *)sval, sval_len, (uint32_t)ival, key); SCRAM_SHA1_ClientSignature(key, (uint8_t *)auth, strlen(auth), sign); - for (j = 0; j < SHA1_DIGEST_SIZE; j++) { + for (j = 0; j < SHA_DIGEST_LENGTH; j++) { sign[j] ^= key[j]; } diff --git a/src/scram.c b/src/scram.c index 5cce168..688028f 100644 --- src/scram.c +++ src/scram.c @@ -19,46 +19,46 @@ #include #include -#include "sha1.h" +#include #include "ostypes.h" #include "scram.h" /* block size for HMAC */ #define BLOCK_SIZE 64 -#if BLOCK_SIZE < SHA1_DIGEST_SIZE -#error BLOCK_SIZE must not be less than SHA1_DIGEST_SIZE +#if BLOCK_SIZE < SHA_DIGEST_LENGTH +#error BLOCK_SIZE must not be less than SHA_DIGEST_LENGTH #endif static const uint8_t ipad = 0x36; static const uint8_t opad = 0x5C; -static void SHA1(const uint8_t* data, size_t len, - uint8_t digest[SHA1_DIGEST_SIZE]) +static void _SHA1(const uint8_t* data, size_t len, + uint8_t digest[SHA_DIGEST_LENGTH]) { - SHA1_CTX ctx; + SHA_CTX ctx; SHA1_Init(&ctx); - SHA1_Update(&ctx, data, len); - SHA1_Final(&ctx, digest); + SHA1_Update(&ctx, (const void*) data, len); + SHA1_Final(digest, &ctx); } static void HMAC_SHA1(const uint8_t *key, size_t key_len, const uint8_t *text, size_t len, - uint8_t digest[SHA1_DIGEST_SIZE]) + uint8_t digest[SHA_DIGEST_LENGTH]) { uint8_t key_pad[BLOCK_SIZE]; uint8_t key_ipad[BLOCK_SIZE]; uint8_t key_opad[BLOCK_SIZE]; - uint8_t sha_digest[SHA1_DIGEST_SIZE]; + uint8_t sha_digest[SHA_DIGEST_LENGTH]; int i; - SHA1_CTX ctx; + SHA_CTX ctx; memset(key_pad, 0, sizeof(key_pad)); if (key_len <= BLOCK_SIZE) { memcpy(key_pad, key, key_len); } else { /* according to RFC2104 */ - SHA1(key, key_len, key_pad); + _SHA1(key, key_len, key_pad); } for (i = 0; i < BLOCK_SIZE; i++) { @@ -67,19 +67,19 @@ static void HMAC_SHA1(const uint8_t *key, size_t key_len, } SHA1_Init(&ctx); - SHA1_Update(&ctx, key_ipad, BLOCK_SIZE); - SHA1_Update(&ctx, text, len); - SHA1_Final(&ctx, sha_digest); + SHA1_Update(&ctx, (const void*) key_ipad, BLOCK_SIZE); + SHA1_Update(&ctx, (const void*) text, len); + SHA1_Final(sha_digest, &ctx); SHA1_Init(&ctx); - SHA1_Update(&ctx, key_opad, BLOCK_SIZE); - SHA1_Update(&ctx, sha_digest, SHA1_DIGEST_SIZE); - SHA1_Final(&ctx, digest); + SHA1_Update(&ctx, (const void*) key_opad, BLOCK_SIZE); + SHA1_Update(&ctx, (const void*) sha_digest, SHA_DIGEST_LENGTH); + SHA1_Final(digest, &ctx); } static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, const uint8_t *salt, size_t salt_len, uint32_t i, - uint8_t digest[SHA1_DIGEST_SIZE]) + uint8_t digest[SHA_DIGEST_LENGTH]) { int j, k; uint8_t tmp[128]; @@ -89,7 +89,7 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, /* assume salt + INT(1) isn't longer than sizeof(tmp) */ assert(salt_len <= sizeof(tmp) - sizeof(int1)); - memset(digest, 0, SHA1_DIGEST_SIZE); + memset(digest, 0, SHA_DIGEST_LENGTH); if (i == 0) { return; } @@ -99,11 +99,11 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, /* 'text' for Hi is a 'key' for HMAC */ HMAC_SHA1(text, len, tmp, salt_len + sizeof(int1), digest); - memcpy(tmp, digest, SHA1_DIGEST_SIZE); + memcpy(tmp, digest, SHA_DIGEST_LENGTH); for (j = 1; j < i; j++) { - HMAC_SHA1(text, len, tmp, SHA1_DIGEST_SIZE, tmp); - for (k = 0; k < SHA1_DIGEST_SIZE; k++) { + HMAC_SHA1(text, len, tmp, SHA_DIGEST_LENGTH, tmp); + for (k = 0; k < SHA_DIGEST_LENGTH; k++) { digest[k] ^= tmp[k]; } } @@ -111,33 +111,33 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, void SCRAM_SHA1_ClientKey(const uint8_t *password, size_t len, const uint8_t *salt, size_t salt_len, uint32_t i, - uint8_t key[SHA1_DIGEST_SIZE]) + uint8_t key[SHA_DIGEST_LENGTH]) { - uint8_t salted[SHA1_DIGEST_SIZE]; + uint8_t salted[SHA_DIGEST_LENGTH]; /* XXX: Normalize(password) is omitted */ SCRAM_SHA1_Hi(password, len, salt, salt_len, i, salted); - HMAC_SHA1(salted, SHA1_DIGEST_SIZE, (uint8_t *)"Client Key", + HMAC_SHA1(salted, SHA_DIGEST_LENGTH, (uint8_t *)"Client Key", strlen("Client Key"), key); } -void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA1_DIGEST_SIZE], +void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA_DIGEST_LENGTH], const uint8_t *AuthMessage, size_t len, - uint8_t sign[SHA1_DIGEST_SIZE]) + uint8_t sign[SHA_DIGEST_LENGTH]) { - uint8_t stored[SHA1_DIGEST_SIZE]; + uint8_t stored[SHA_DIGEST_LENGTH]; - SHA1(ClientKey, SHA1_DIGEST_SIZE, stored); - HMAC_SHA1(stored, SHA1_DIGEST_SIZE, AuthMessage, len, sign); + SHA1(ClientKey, SHA_DIGEST_LENGTH, stored); + HMAC_SHA1(stored, SHA_DIGEST_LENGTH, AuthMessage, len, sign); } -void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA1_DIGEST_SIZE], - const uint8_t ClientSignature[SHA1_DIGEST_SIZE], - uint8_t proof[SHA1_DIGEST_SIZE]) +void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA_DIGEST_LENGTH], + const uint8_t ClientSignature[SHA_DIGEST_LENGTH], + uint8_t proof[SHA_DIGEST_LENGTH]) { int i; - for (i = 0; i < SHA1_DIGEST_SIZE; i++) { + for (i = 0; i < SHA_DIGEST_LENGTH; i++) { proof[i] = ClientKey[i] ^ ClientSignature[i]; } } diff --git a/src/scram.h b/src/scram.h index a0b996b..f81a5b6 100644 --- src/scram.h +++ src/scram.h @@ -19,18 +19,18 @@ /* make sure the stdint.h types are available */ #include "ostypes.h" -#include "sha1.h" +#include void SCRAM_SHA1_ClientKey(const uint8_t *password, size_t len, const uint8_t *salt, size_t salt_len, uint32_t i, - uint8_t key[SHA1_DIGEST_SIZE]); + uint8_t key[SHA_DIGEST_LENGTH]); -void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA1_DIGEST_SIZE], +void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA_DIGEST_LENGTH], const uint8_t *AuthMessage, size_t len, - uint8_t sign[SHA1_DIGEST_SIZE]); + uint8_t sign[SHA_DIGEST_LENGTH]); -void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA1_DIGEST_SIZE], - const uint8_t ClientSignature[SHA1_DIGEST_SIZE], - uint8_t proof[SHA1_DIGEST_SIZE]); +void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA_DIGEST_LENGTH], + const uint8_t ClientSignature[SHA_DIGEST_LENGTH], + uint8_t proof[SHA_DIGEST_LENGTH]); #endif /* __LIBSTROPHE_SCRAM_H__ */