|
|
|
|
@ -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]); |
|
|
|
|
} |
|
|
|
|
|