Browse Source

Clean up sha.cpp

pull/25/head
Anders Jenbo 8 years ago committed by Dennis Duda
parent
commit
8c8e1dbe05
  1. 159
      Source/sha.cpp

159
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)

Loading…
Cancel
Save