Fork of François Berder Crypto, fixed AES CBC and small rework

Dependents:   AES_example shaun_larada Smartage

Fork of Crypto by Francois Berder

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