intiial commit

Dependencies:   MAX8614X USBDevice max32630hsp_test

Revision:
16:d0f8cf9f160d
Parent:
15:2616528b4007
Child:
17:e260080d3468
--- a/main.cpp	Thu Aug 16 21:35:56 2018 +0000
+++ b/main.cpp	Thu Aug 16 22:00:44 2018 +0000
@@ -36,8 +36,10 @@
 #include "max32630hsp.h"
 #include "MAX8614X.h"
 #include "USBSerial.h"
-void executeSha256(MAX8614X &m, uint8_t *challenge, unsigned int challengeLen, bool romID);
+void executeSha256(MAX8614X &m, uint8_t *challenge, unsigned int challengeLen, bool romID, uint32_t *response);
+bool isTheChipAuthenicated(uint32_t *expectedResponse, uint32_t *chipResponse);
 
+#define RESPONSE_LEN32 8
 
 MAX32630HSP icarus(MAX32630HSP::VIO_1V8);
 //    MAX32630FTHR mbed_board(MAX32630FTHR::VIO_1V8);
@@ -97,6 +99,19 @@
         0x12, 0x89, 0xf3, 0x78,
         0x65, 0xb6, 0x0d, 0xeb
     };
+    uint32_t expectedResponse_1_romID[RESPONSE_LEN32] = {  // 160 bit, no ROM
+        0xfe3f805f,
+        0x0af066bc,
+        0xda0f55e2,
+        0x0020ac16,
+        0x13fa3406,
+        0x59d0e5ae,
+        0x79def309,
+        0x685981a3
+    };
+    uint32_t chip_response[RESPONSE_LEN32];
+    bool valid = 0;
+
     #define MAC_SZ 32
 
 
@@ -113,11 +128,16 @@
 //    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(m, challenge_A, CHALLENGE_SZ_NO_SECRET, 1);
-    executeSha256(m, challenge_1, CHALLENGE_SZ_NO_SECRET, 1);
-    executeSha256(m, challenge_2, CHALLENGE_SZ_NO_SECRET, 0);
-    executeSha256(m, challenge_3, CHALLENGE_SZ_NO_SECRET, 1);
-    executeSha256(m, challenge_4, CHALLENGE_SZ_NO_SECRET, 0);
+//    executeSha256(m, challenge_A, CHALLENGE_SZ_NO_SECRET, 1);
+    executeSha256(m, challenge_1, CHALLENGE_SZ_NO_SECRET, 1, chip_response);
+    valid = isTheChipAuthenicated(chip_response, expectedResponse_1_romID);
+    if (valid)
+        printf("\r\n             Challenge 1 passed\r\n\r\n");
+    else
+        printf("\r\n             Challenge 1 failed\r\n\r\n");
+//    executeSha256(m, challenge_2, CHALLENGE_SZ_NO_SECRET, 0);
+//    executeSha256(m, challenge_3, CHALLENGE_SZ_NO_SECRET, 1);
+//    executeSha256(m, challenge_4, CHALLENGE_SZ_NO_SECRET, 0);
     //- Compare MAC from MAX86140 wth Host's precalculated MAC.
     //- Check PASS or FAIL.
     //- Disable SHA_EN bit ( Write 0 to SHA_EN bit).     
@@ -127,6 +147,16 @@
     }
 }
 
+bool isTheChipAuthenicated(uint32_t *expectedResponse, uint32_t * chipResponse)
+{
+    int i;
+    for (i = 0; i < RESPONSE_LEN32; i++) {
+        if (expectedResponse[i] != chipResponse[i])
+            return 0;
+    }
+    return 1;
+}
+
 #if 0
 void transformData(uint8_t *inData, uint8_t *outData, unsigned int challengeLen)
 {
@@ -160,7 +190,7 @@
 }
 
 
-void executeSha256(MAX8614X &m, uint8_t *challenge, unsigned int challengeLen, bool romID)
+void executeSha256(MAX8614X &m, uint8_t *challenge, unsigned int challengeLen, bool romID, uint32_t *response)
 {
     int i, j, k;
     uint8_t macData[256];
@@ -298,6 +328,7 @@
     printf("\r\n Formatted Response\r\n\r\n");
     for (i = 0; i < responseLen32; i++) {
         printf(" %08X \r\n",x32Data[i]);
+        response[i] = x32Data[i];
     }