Fork of François Berder Crypto, fixed AES CBC and small rework
Dependents: AES_example shaun_larada Smartage
Fork of Crypto by
Diff: SHA1.cpp
- Revision:
- 2:473bac39ae7c
- Parent:
- 1:14a7cea431aa
- Child:
- 3:85c6ee25cf3e
diff -r 14a7cea431aa -r 473bac39ae7c SHA1.cpp --- a/SHA1.cpp Mon Sep 09 12:15:26 2013 +0000 +++ b/SHA1.cpp Mon Sep 09 16:16:24 2013 +0000 @@ -199,52 +199,36 @@ memcpy(buffer, &in[offset], bufferLength); buffer[bufferLength++] = 0x80; padding--; - while(padding > 0) + if(padding+bufferLength+8 == 64) + memset(&buffer[bufferLength], 0, padding); + else { - if(bufferLength == 64) - { - computeBlock(&h0,&h1,&h2,&h3,&h4, buffer); - bufferLength++; - } - buffer[bufferLength++] = 0; - padding--; + memset(&buffer[bufferLength], 0, 64-bufferLength); + padding -= 64-bufferLength; + computeBlock(&h0,&h1,&h2,&h3,&h4, buffer); + memset(buffer, 0, 48); } + uint64_t lengthBit = length * 8; uint32_t lengthBitLow = lengthBit; uint32_t lengthBitHigh = lengthBit >> 32; - uint8_t l[4]; - l[0] = lengthBitLow >> 24; - l[1] = lengthBitLow >> 16; - l[2] = lengthBitLow >> 8; - l[3] = lengthBitLow; - memcpy(&buffer[60], l, 4); - l[0] = lengthBitHigh >> 24; - l[1] = lengthBitHigh >> 16; - l[2] = lengthBitHigh >> 8; - l[3] = lengthBitHigh; - memcpy(&buffer[56], l, 4); + lengthBitLow = __rev(lengthBitLow); + lengthBitHigh = __rev(lengthBitHigh); + memcpy(&buffer[60], &lengthBitLow, 4); + memcpy(&buffer[56], &lengthBitHigh, 4); computeBlock(&h0,&h1,&h2,&h3,&h4, buffer); - digest[0] = h0 >> 24; - digest[1] = h0 >> 16; - digest[2] = h0 >> 8; - digest[3] = h0; - digest[4] = h1 >> 24; - digest[5] = h1 >> 16; - digest[6] = h1 >> 8; - digest[7] = h1; - digest[8] = h2 >> 24; - digest[9] = h2 >> 16; - digest[10] = h2 >> 8; - digest[11] = h2; - digest[12] = h3 >> 24; - digest[13] = h3 >> 16; - digest[14] = h3 >> 8; - digest[15] = h3; - digest[16] = h4 >> 24; - digest[17] = h4 >> 16; - digest[18] = h4 >> 8; - digest[19] = h4; + h0 = __rev(h0); + h1 = __rev(h1); + h2 = __rev(h2); + h3 = __rev(h3); + h4 = __rev(h4); + + memcpy(digest, &h0, 4); + memcpy(&digest[4], &h1, 4); + memcpy(&digest[8], &h2, 4); + memcpy(&digest[12], &h3, 4); + memcpy(&digest[16], &h4, 4); }