diff --git a/Source/sha.cpp b/Source/sha.cpp index cb1a91ef5..293f19bc5 100644 --- a/Source/sha.cpp +++ b/Source/sha.cpp @@ -6,41 +6,25 @@ SHA1Context sgSHA1[3]; void __cdecl SHA1Clear() { - memset(sgSHA1, 0, 0x114u); + memset(sgSHA1, 0, sizeof(sgSHA1)); } void __fastcall SHA1Result(int n, char Message_Digest[SHA1HashSize]) { - char *v2; // eax - SHA1Context *v3; // ecx - signed int i; // edx - int v5; // esi - - v2 = Message_Digest; - if ( Message_Digest ) - { - v3 = &sgSHA1[n]; - i = 5; - do - { - v5 = v3->state[0]; - v3 = (SHA1Context *)((char *)v3 + 4); - *(_DWORD *)v2 = v5; - v2 += 4; - --i; - } - while ( i ); - } + DWORD *Message_Digest_Block = (DWORD *)Message_Digest; + if (Message_Digest) { + for (int i = 0; i < 5; i++) { + *Message_Digest_Block = sgSHA1[n].state[i]; + Message_Digest_Block++; + } + } } void __fastcall SHA1Calculate(int n, const char *data, char Message_Digest[SHA1HashSize]) { - int v3; // esi - - v3 = n; - SHA1Input(&sgSHA1[n], data, 64); - if ( Message_Digest ) - SHA1Result(v3, (char *)Message_Digest); + SHA1Input(&sgSHA1[n], data, 64); + if (Message_Digest) + SHA1Result(n, Message_Digest); } void __fastcall SHA1Input(SHA1Context *context, const char *message_array, int len) @@ -75,69 +59,64 @@ void __fastcall SHA1Input(SHA1Context *context, const char *message_array, int l void __fastcall SHA1ProcessMessageBlock(SHA1Context *context) { - int i; // [esp+158h] [ebp-4h] - int temp; // esi - int W[80]; // [esp+Ch] [ebp-150h] - int A, B, C, D, E; // [esp+150h] [ebp-Ch] - - qmemcpy(W, context->buffer, 0x40u); - - for(i = 16; i < 80; i++) - { - W[i] = W[i-16] ^ W[i-14] ^ W[i-8] ^ W[i-3]; - } - - A = context->state[0]; - B = context->state[1]; - C = context->state[2]; - D = context->state[3]; - E = context->state[4]; - - for(i = 0; i < 20; i++) - { - temp = SHA1CircularShift(5,A) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5A827999; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for(i = 20; i < 40; i++) - { - temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for(i = 40; i < 60; i++) - { - temp = SHA1CircularShift(5,A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - for(i = 60; i < 80; i++) - { - temp = SHA1CircularShift(5,A) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6; - E = D; - D = C; - C = SHA1CircularShift(30,B); - B = A; - A = temp; - } - - context->state[0] += A; - context->state[1] += B; - context->state[2] += C; - context->state[3] += D; - context->state[4] += E; + int i; + int temp; + int W[80]; + int A, B, C, D, E; + + qmemcpy(W, context->buffer, sizeof(context->buffer)); + + for (i = 16; i < 80; i++) { + W[i] = W[i - 16] ^ W[i - 14] ^ W[i - 8] ^ W[i - 3]; + } + + A = context->state[0]; + B = context->state[1]; + C = context->state[2]; + D = context->state[3]; + E = context->state[4]; + + for (i = 0; i < 20; i++) { + temp = SHA1CircularShift(5, A) + ((B & C) | ((~B) & D)) + E + W[i] + 0x5A827999; + E = D; + D = C; + C = SHA1CircularShift(30, B); + B = A; + A = temp; + } + + for (i = 20; i < 40; i++) { + temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1; + E = D; + D = C; + C = SHA1CircularShift(30, B); + B = A; + A = temp; + } + + for (i = 40; i < 60; i++) { + temp = SHA1CircularShift(5, A) + ((B & C) | (B & D) | (C & D)) + E + W[i] + 0x8F1BBCDC; + E = D; + D = C; + C = SHA1CircularShift(30, B); + B = A; + A = temp; + } + + for (i = 60; i < 80; i++) { + temp = SHA1CircularShift(5, A) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6; + E = D; + D = C; + C = SHA1CircularShift(30, B); + B = A; + A = temp; + } + + context->state[0] += A; + context->state[1] += B; + context->state[2] += C; + context->state[3] += D; + context->state[4] += E; } void __fastcall SHA1Reset(int n)