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:
6:19aa835f2bbb
Parent:
5:06cd9c8afa0b
--- a/MD5.cpp	Thu Sep 12 15:08:51 2013 +0000
+++ b/MD5.cpp	Thu Sep 12 16:03:43 2013 +0000
@@ -50,33 +50,34 @@
     return 16;
 }
 
-void MD5::update(uint8_t *in, uint32_t length)
+void MD5::update(uint8_t *data, uint32_t length)
 {
     if(length < 64-bufferLength)
     {
-        memcpy(&buffer[bufferLength], in, length);
+        memcpy(&buffer[bufferLength], data, length);
         bufferLength += length;
         totalBufferLength += length;
         return;
     }
     int offset = 64-bufferLength;
-    memcpy(&buffer[bufferLength], in, offset);
+    memcpy(&buffer[bufferLength], data, offset);
     computeRounds(&a, &b, &c, &d, buffer);
     while(length-offset > 64)
     {
-        memcpy(buffer, &in[offset], 64);
+        memcpy(buffer, &data[offset], 64);
         computeRounds(&a, &b, &c, &d, buffer);
         offset += 64;
     }
     if(offset > length)
         offset -= 64;
     bufferLength = length - offset;
-    memcpy(buffer, &in[offset], bufferLength);
+    memcpy(buffer, &data[offset], bufferLength);
     totalBufferLength += length;
 }
 
-void MD5::finalize(uint8_t *digest)
+void MD5::finalize(uint8_t *hash)
 {
+    uint32_t *hash2 = (uint32_t*)hash;
     uint16_t padding;
     if(totalBufferLength % 64 < 56)
         padding = 56 - (totalBufferLength % 64);
@@ -99,10 +100,10 @@
     memcpy(&buffer[60], &lengthBitHigh, 4);
     computeRounds(&a, &b, &c, &d, buffer);
 
-    memcpy(digest, &a, 4);
-    memcpy(&digest[4], &b, 4);
-    memcpy(&digest[8], &c, 4);
-    memcpy(&digest[12], &d, 4);
+    hash2[0] = a;
+    hash2[1] = b;
+    hash2[2] = c;
+    hash2[3] = d;
     // reset state
     a = A;
     b = B;
@@ -112,9 +113,52 @@
     bufferLength = 0;
 }
 
+
+void MD5::computeHash(uint8_t *hash, uint8_t *data, uint32_t length)
+{
+    uint32_t *hash2 = (uint32_t*)hash;
+    uint64_t lengthBit = length << 3;
+    uint16_t padding;
+    if(length % 64 < 56)
+        padding = 56 - (length % 64);
+    else
+        padding = 56 + (64 - (length % 64));
+        
+    uint32_t a = A, b = B, c = C, d = D;
+    while(length >= 64)
+    {
+        computeRounds(&a, &b, &c, &d, data);
+        data += 64;
+        length -= 64;
+    }
+    uint8_t buffer[64];
+    memcpy(buffer, data, length);
+    buffer[length++] = 0x80;
+    padding--;
+    if(padding+length == 56)
+        memset(&buffer[length], 0, padding);
+    else
+    {
+        memset(&buffer[length], 0, 64-length);
+        computeRounds(&a, &b, &c, &d, data);
+        memset(buffer, 0, 56);
+    }
+
+    uint32_t lengthBitLow = lengthBit;
+    uint32_t lengthBitHigh = lengthBit >> 32;
+    memcpy(&buffer[56], &lengthBitLow, 4);
+    memcpy(&buffer[60], &lengthBitHigh, 4);
+    
+    computeRounds(&a, &b, &c, &d, buffer);
+    
+    hash2[0] = a;
+    hash2[1] = b;
+    hash2[2] = c;
+    hash2[3] = d;
+}
+
 void MD5::computeRounds(uint32_t *a2, uint32_t *b2, uint32_t *c2, uint32_t *d2, uint8_t *buffer)
 {
-
     uint32_t a = *a2, b = *b2, c = *c2, d = *d2;
     uint32_t tmpA = a, tmpB = b, tmpC = c, tmpD = d;
 
@@ -152,45 +196,3 @@
     *c2 = c + tmpC;
     *d2 = d + tmpD;
 }
-
-void MD5::computeDigest(uint8_t *digest, uint8_t *msg, uint32_t length)
-{
-    uint64_t lengthBit = length << 3;
-    uint16_t padding;
-    if(length % 64 < 56)
-        padding = 56 - (length % 64);
-    else
-        padding = 56 + (64 - (length % 64));
-        
-    uint32_t a = A, b = B, c = C, d = D;
-    while(length >= 64)
-    {
-        computeRounds(&a, &b, &c, &d, msg);
-        msg += 64;
-        length -= 64;
-    }
-    uint8_t buffer[64];
-    memcpy(buffer, msg, length);
-    buffer[length++] = 0x80;
-    padding--;
-    if(padding+length == 56)
-        memset(&buffer[length], 0, padding);
-    else
-    {
-        memset(&buffer[length], 0, 64-length);
-        computeRounds(&a, &b, &c, &d, msg);
-        memset(buffer, 0, 56);
-    }
-
-    uint32_t lengthBitLow = lengthBit;
-    uint32_t lengthBitHigh = lengthBit >> 32;
-    memcpy(&buffer[56], &lengthBitLow, 4);
-    memcpy(&buffer[60], &lengthBitHigh, 4);
-    
-    computeRounds(&a, &b, &c, &d, buffer);
-    
-    memcpy(digest, &a, 4);
-    memcpy(&digest[4], &b, 4);
-    memcpy(&digest[8], &c, 4);
-    memcpy(&digest[12], &d, 4);
-}
\ No newline at end of file