intiial commit

Dependencies:   MAX8614X USBDevice max32630hsp_test

Files at this revision

API Documentation at this revision

Comitter:
phonemacro
Date:
Thu Aug 16 19:56:38 2018 +0000
Parent:
9:134e7055d767
Child:
11:ec7998257ec2
Commit message:
updated to transform output to U32

Changed in this revision

MAX8614X.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/MAX8614X.lib	Tue Aug 14 07:26:24 2018 +0000
+++ b/MAX8614X.lib	Thu Aug 16 19:56:38 2018 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/teams/MaximIntegrated/code/MAX8614X/#ad8f1059a0c5
+https://os.mbed.com/teams/MaximIntegrated/code/MAX8614X/#6ec3bc44f055
--- a/main.cpp	Tue Aug 14 07:26:24 2018 +0000
+++ b/main.cpp	Thu Aug 16 19:56:38 2018 +0000
@@ -37,7 +37,6 @@
 #include "MAX8614X.h"
 #include "USBSerial.h"
 void executeSha256(uint8_t *challenge, unsigned int challengeLen);
-void executeSha(uint32_t *challenge, unsigned int challengeLen);
 
 
 MAX32630HSP icarus(MAX32630HSP::VIO_1V8);
@@ -61,15 +60,30 @@
 int main()
 {
     #define CHALLENGE_SZ_NO_SECRET 20
-    uint32_t challenge_1[5] = {  // 160 bit = 5*32 bits
-      0x5e813524,
-      0x5663d609,
-      0x998d7b0d,
-      0x52128465,
-      0xcd0de301
+    uint8_t challenge_1[CHALLENGE_SZ_NO_SECRET] = {  // 160 bit
+#if 0
+        0x24, 0x35, 0x81, 0x5e,
+        0x09, 0xd6, 0x63, 0x56,
+        0x0d, 0x7b, 0x8d, 0x99,
+        0x65, 0x84, 0x12, 0x52,
+        0x01, 0xe3, 0x0d, 0xcd
+#endif
+#if 1
+        0x5e, 0x81, 0x35, 0x24,
+        0x56, 0x63, 0xd6, 0x09,
+        0x99, 0x8d, 0x7b, 0x0d,
+        0x52, 0x12, 0x84, 0x65,
+        0xcd, 0x0d, 0xe3, 0x01
+#endif
+#if 0
+1, 0, 0, 0,
+0, 0, 0, 0,
+0, 0, 0, 0,
+0, 0, 0, 0,
+0, 0, 0, 0
+#endif
     };
 
-
     #define MAC_SZ 32
 
 
@@ -85,8 +99,7 @@
 //    m.readRegister(MAX8614X::MAX8614X_PART_ID_REG, data, 1);
 //    printf("device id should be 0x24, reg %02X = %02X\r\n", MAX8614X::MAX8614X_PART_ID_REG, data[0]);
 
-//    executeSha256(challenge_1, CHALLENGE_SZ_NO_SECRET);
-    executeSha(challenge_1, 5);
+    executeSha256(challenge_1, CHALLENGE_SZ_NO_SECRET);
    //● Compare MAC from MAX86140 wth Host's precalculated MAC.
     //● Check PASS or FAIL.
     //● Disable SHA_EN bit ( Write 0 to SHA_EN bit).     
@@ -96,6 +109,7 @@
     }
 }
 
+#if 0
 void transformData(uint8_t *inData, uint8_t *outData, unsigned int challengeLen)
 {
     int i, j, k;
@@ -107,18 +121,37 @@
         }
     }
 }
-
+#endif
+void transformData(uint8_t *inData, uint8_t *outData, unsigned int challengeLen)
+{
+    int i, j, k;
+    k = 0;
+    for (i = 0; i < (challengeLen/4); i++) {
+        for (j = 3; j >= 0; j--) {
+            outData[j+(i*4)] = inData[k];
+//            printf("%02X ",inData[k]);
+            k++;
+        }
+//            printf("\r\n");
+    }
+    for (i=0; i < challengeLen; i++) {
+//        if (!(i % 4))
+//            printf("\r\n ");
+//        printf("%02X ",outData[i]);
+    }
+}
 
 
-//******************************************************************
-void executeSha(uint32_t *challenge, unsigned int challengeLen)
+void executeSha256(uint8_t *challenge, unsigned int challengeLen)
 {
-    int i, j, k, ctr;;
+    int i, j, k;
     uint8_t macData[256];
+    uint8_t inData[256];
     uint8_t xData[256];
+    uint32_t x32Data[64];
     uint32_t tmpData;
+    const unsigned int responseLen32 = 8;
     uint8_t data[5];
-    uint8_t romID;
     MAX8614X m(spi,cs,interrupt_pin);
     //● Enable SHA_DONE Interrupt
     m.writeRegister(MAX8614X::MAX8614X_INT_ENABLE2_REG, MAX8614X::MAX8614X_IE_SHA_DONE_EN);
@@ -134,35 +167,39 @@
 
     printf("\r\n Raw Input Data\r\n\r\n");
     for (i = 0; i < challengeLen; i++) {
-        printf("% 08x\r\n", challenge[i]);
+        if (!(i % 4))
+            printf("\r\n ");
+        printf("%02x", challenge[i]);
     }
     printf("\r\n");
+#if 0
     k = 0;
-    for (i = 0; i < (challengeLen); i++) {
-        tmpData = challenge[i];
-        for (j = 3; j >= 0; j--) {
-            xData[k] = tmpData & 0xFF;
-            tmpData = tmpData >> 8;
-            k++;
-        }
+    for (i = 0; i < (challengeLen/4); i++) {
+    for (j = 3; j >= 0; j--) {
+        
+        inData[j+(i*4)] = challenge[k];
+        k++;
     }
+    }
+#endif
+
+    transformData(challenge, xData, challengeLen);
 
     printf("\r\n Transformed Input Data\r\n\r\n");
-    for (i = 0; i < challengeLen*4; i++) {
+    for (i = 0; i < challengeLen; i++) {
         if (!(i % 4))
             printf("\r\n ");
-            
         printf("%02x", xData[i]);
     }
         printf("\r\n ");
         printf("\r\n ");
         
-    for (i = 0; i < (challengeLen*4); i++) {
+    for (i = 0; i < (challengeLen); i++) {
         m.writeRegister(MAX8614X::MAX8614X_MEMORY_INDEX_REG, i);
         m.writeRegister(MAX8614X::MAX8614X_MEMORY_DATA_REG, xData[i]);
-    }
+    //}
+  }
     printf("%\r\n");
-
     // The message block consists of a 160-bit secret, a 160-bit challenge and 192 bits of constant data. Optionally, the 64-bit
     // ROM ID replaces 64 of the 192 bits of constant data used in the hash operation. 16 bits out of the 160-bit secret and 16
     // bits of ROM ID are programmable–8 bits each in metal and 8 bits each in OTP bits
@@ -171,35 +208,64 @@
 //    m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG,MAX8614X::MAX8614X_SHACMD_MAC_NO_ROM_ID);
 
 
-    m.readRegister(MAX8614X::MAX8614X_INT_STATUS2_REG, data, 1);  // clear the status register
+    m.readRegister(MAX8614X::MAX8614X_SHA_CMD_REG, data, 1);
+    printf("sha cmd reg should be 0x35 mac rom id,  reg %02X = %02X\r\n", MAX8614X::MAX8614X_SHA_CMD_REG, data[0]);
+        m.readRegister(MAX8614X::MAX8614X_INT_STATUS2_REG, data, 1);
+        printf("int status2, reg %02X = %X\r\n", MAX8614X::MAX8614X_INT_STATUS2_REG, data[0]);
     //● Write 1 to SHA_START and 1 to SHA_EN bit.
     m.writeRegister(MAX8614X::MAX8614X_SHA_CFG_REG,MAX8614X::MAX8614X_SHACFG_SHA_EN | MAX8614X::MAX8614X_SHACFG_SHA_START);
-//    //● Wait for SHA_DONE interrupt.
-//    m.clearShaComplete();
-//    data[0] = 0;
-//  while(!m.isShaComplete()) {
+    m.readRegister(MAX8614X::MAX8614X_SHA_CFG_REG, data, 1);
+    printf("sha CFG reg should be 0x3,  reg %02X = %02X\r\n", MAX8614X::MAX8614X_SHA_CFG_REG, data[0]);
     
-    //● Pole the SHA_DONE interrupt.
+    //● Wait for SHA_DONE interrupt.
+    m.clearShaComplete();
     data[0] = 0;
-    ctr = 0;
-    while(!data[0] && ctr++ < 1000 ) {
+//  while(!m.isShaComplete()) {
+    while(!m.isShaComplete() && !data[0] ) {
         m.readRegister(MAX8614X::MAX8614X_INT_STATUS2_REG, data, 1);
+        printf("int status2, reg %02X = %X\r\n", MAX8614X::MAX8614X_INT_STATUS2_REG, data[0]);
+        
     }
     // ● Read 256 MAC value from RAM using registers MEM_IDX and MEM_DATA.
-    printf("Response Data ");
-    if (romID == MAX8614X::MAX8614X_SHACMD_MAC_ROM_ID)
-        printf("with ROM ID\r\n");
-    else if (romID == MAX8614X::MAX8614X_SHACMD_MAC_NO_ROM_ID)
-        printf("with no ROM ID\r\n");
-    else
-        printf(" The SHA CMD register is incorrect!\r\n");
+    printf("\r\n Raw Output\r\n\r\n");
     for (i = 64; i < 64+32; i++) {
         if (!(i % 4))
             printf("\r\n ");
         m.writeRegister(MAX8614X::MAX8614X_MEMORY_INDEX_REG, i);
         m.readRegister(MAX8614X::MAX8614X_MEMORY_DATA_REG, data, 1);
-        macData[i] = data[0];
+        xData[i-64] = data[0];
         printf("%02x", data[0]);
     } 
-     printf("%\r\n");
+    printf("%\r\n");
+
+    transformData(xData,macData, 32);
+#if 0
+    printf("\r\n Formatted Response\r\n\r\n");
+    for (i = 0; i < 32; i++) {
+        if (!(i % 4))
+            printf("\r\n ");
+        printf("%02x", macData[i]);
+    }
+    printf("\r\n\r\n");
+    
+#endif
+     // transform data to Little-Endian
+    k = 0;
+    for (i = 0; i < (responseLen32); i++) {
+        tmpData = challenge[i];
+        x32Data[i] = 0;
+        for (j = 3; j >= 0; j--) {
+            x32Data[i] = x32Data[i] << 8;
+            x32Data[i] |= macData[k] & 0xFF;
+            k++;
+        }
+        
+    }
+
+    printf("\r\n Formatted Response\r\n\r\n");
+    for (i = 0; i < responseLen32; i++) {
+        printf(" %08X \r\n",x32Data[i]);
+    }
+
+     
 }
\ No newline at end of file