diff --git a/Source/sha.cpp b/Source/sha.cpp index 38d84f91a..472c88d20 100644 --- a/Source/sha.cpp +++ b/Source/sha.cpp @@ -5,53 +5,27 @@ */ #include "all.h" -SHA1Context sgSHA1[3]; - -void SHA1Clear() -{ - memset(sgSHA1, 0, sizeof(sgSHA1)); -} +/** + * Define the SHA1 circular left shift macro + */ +#define SHA1CircularShift(bits, word) \ + (((word) << (bits)) | ((word) >> (32 - (bits)))) -void SHA1Result(int n, char Message_Digest[SHA1HashSize]) -{ - DWORD *Message_Digest_Block; - int i; - Message_Digest_Block = (DWORD *)Message_Digest; - if (Message_Digest) { - for (i = 0; i < 5; i++) { - *Message_Digest_Block = sgSHA1[n].state[i]; - Message_Digest_Block++; - } - } -} - -void SHA1Calculate(int n, const char *data, char Message_Digest[SHA1HashSize]) -{ - SHA1Input(&sgSHA1[n], data, 64); - if (Message_Digest) - SHA1Result(n, Message_Digest); -} +SHA1Context sgSHA1[3]; -void SHA1Input(SHA1Context *context, const char *message_array, int len) +static void SHA1Init(SHA1Context *context) { - int i, count; - - count = context->count[0] + 8 * len; - if (count < context->count[0]) - context->count[1]++; - - context->count[0] = count; - context->count[1] += len >> 29; - - for (i = len; i >= 64; i -= 64) { - memcpy(context->buffer, message_array, sizeof(context->buffer)); - SHA1ProcessMessageBlock(context); - message_array += 64; - } + context->count[0] = 0; + context->count[1] = 0; + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; + context->state[4] = 0xC3D2E1F0; } -void SHA1ProcessMessageBlock(SHA1Context *context) +static void SHA1ProcessMessageBlock(SHA1Context *context) { int i, temp; int W[80]; @@ -114,18 +88,51 @@ void SHA1ProcessMessageBlock(SHA1Context *context) context->state[4] += E; } -void SHA1Reset(int n) +static void SHA1Input(SHA1Context *context, const char *message_array, int len) { - SHA1Init(&sgSHA1[n]); + int i, count; + + count = context->count[0] + 8 * len; + if (count < context->count[0]) + context->count[1]++; + + context->count[0] = count; + context->count[1] += len >> 29; + + for (i = len; i >= 64; i -= 64) { + memcpy(context->buffer, message_array, sizeof(context->buffer)); + SHA1ProcessMessageBlock(context); + message_array += 64; + } } -void SHA1Init(SHA1Context *context) +void SHA1Clear() { - context->count[0] = 0; - context->count[1] = 0; - context->state[0] = 0x67452301; - context->state[1] = 0xEFCDAB89; - context->state[2] = 0x98BADCFE; - context->state[3] = 0x10325476; - context->state[4] = 0xC3D2E1F0; + memset(sgSHA1, 0, sizeof(sgSHA1)); +} + +void SHA1Result(int n, char Message_Digest[SHA1HashSize]) +{ + DWORD *Message_Digest_Block; + int i; + + Message_Digest_Block = (DWORD *)Message_Digest; + if (Message_Digest) { + for (i = 0; i < 5; i++) { + *Message_Digest_Block = sgSHA1[n].state[i]; + Message_Digest_Block++; + } + } +} + +void SHA1Calculate(int n, const char *data, char Message_Digest[SHA1HashSize]) +{ + SHA1Input(&sgSHA1[n], data, 64); + if (Message_Digest) + SHA1Result(n, Message_Digest); +} + +void SHA1Reset(int n) +{ + SHA1Init(&sgSHA1[n]); } diff --git a/Source/sha.h b/Source/sha.h index 7dc287743..e88f34b92 100644 --- a/Source/sha.h +++ b/Source/sha.h @@ -6,21 +6,11 @@ #ifndef __SHA_H__ #define __SHA_H__ -/** - * Define the SHA1 circular left shift macro - */ -#define SHA1CircularShift(bits, word) \ - (((word) << (bits)) | ((word) >> (32 - (bits)))) #define SHA1HashSize 20 -//sha - void SHA1Clear(); void SHA1Result(int n, char Message_Digest[SHA1HashSize]); void SHA1Calculate(int n, const char *data, char Message_Digest[SHA1HashSize]); -void SHA1Input(SHA1Context *context, const char *message_array, int len); -void SHA1ProcessMessageBlock(SHA1Context *context); void SHA1Reset(int n); -void SHA1Init(SHA1Context *context); #endif /* __SHA_H__ */