intiial commit

Dependencies:   MAX8614X USBDevice max32630hsp_test

Files at this revision

API Documentation at this revision

Comitter:
phonemacro
Date:
Fri Aug 17 00:11:10 2018 +0000
Parent:
20:39857996a7c7
Child:
22:1be3a5f0223e
Commit message:
Clean the code a little bit

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Thu Aug 16 23:46:00 2018 +0000
+++ b/main.cpp	Fri Aug 17 00:11:10 2018 +0000
@@ -36,6 +36,9 @@
 #include "max32630hsp.h"
 #include "MAX8614X.h"
 #include "USBSerial.h"
+
+//#define DEBUG_ON 1
+
 void executeSha256(MAX8614X &m, uint8_t *challenge, unsigned int challengeLen, bool romID, uint32_t *response);
 bool isTheChipAuthenicated(uint32_t *expectedResponse, uint32_t *chipResponse);
 
@@ -44,7 +47,6 @@
 MAX32630HSP icarus(MAX32630HSP::VIO_1V8);
 //    MAX32630FTHR mbed_board(MAX32630FTHR::VIO_1V8);
 SPI spi(P5_1, P5_2, P5_0); /* mosi, miso, sclk */
-//DigitalOut cs(P3_0);
 DigitalOut cs(P5_3);
 PinName interrupt_pin = P3_2;
 // Virtual serial port over USB
@@ -55,8 +57,8 @@
 DigitalOut bLED(LED3);
 int main()
 {
-    #define CHALLENGE_SZ_NO_SECRET 20
-    uint8_t challenge_A[CHALLENGE_SZ_NO_SECRET] = {  // 160 bit, no ROM
+    #define CHALLENGE8_LEN 20
+    uint8_t challenge_A[CHALLENGE8_LEN] = {  // 160 bit, no ROM
         0x00, 0x00, 0x00, 0x01,
         0x00, 0x00, 0x00, 0x00,
         0x00, 0x00, 0x00, 0x00,
@@ -73,7 +75,7 @@
         0x218e53ee,
         0x904e0c6b
     };
-    uint8_t challenge_1[CHALLENGE_SZ_NO_SECRET] = {  // 160 bit
+    uint8_t challenge_1[CHALLENGE8_LEN] = {  // 160 bit
         0x5e, 0x81, 0x35, 0x24,
         0x56, 0x63, 0xd6, 0x09,
         0x99, 0x8d, 0x7b, 0x0d,
@@ -91,7 +93,7 @@
         0x685981a3
     };
 
-    uint8_t challenge_2[CHALLENGE_SZ_NO_SECRET] = {  // 160 bit, no ROM
+    uint8_t challenge_2[CHALLENGE8_LEN] = {  // 160 bit, no ROM
         0xd2, 0xaa, 0x84, 0xc5,
         0x72, 0x77, 0xf7, 0xe5,
         0xdb, 0x8f, 0xd6, 0x12,
@@ -109,7 +111,7 @@
         0x828afe4d,
         0x9cb3de6d
     };
-    uint8_t challenge_3[CHALLENGE_SZ_NO_SECRET] = {  // 160 bit
+    uint8_t challenge_3[CHALLENGE8_LEN] = {  // 160 bit
         0x21, 0x20, 0x22, 0x80,
         0xcc, 0x9d, 0x45, 0xaa,
         0xb8, 0x13, 0x3e, 0x96,
@@ -126,7 +128,7 @@
         0xfb0fc974,
         0x2da0781e
     };
-    uint8_t challenge_4[CHALLENGE_SZ_NO_SECRET] = {  // 160 bit, no ROM
+    uint8_t challenge_4[CHALLENGE8_LEN] = {  // 160 bit, no ROM
         0x4c, 0x3c, 0x0a, 0xca,
         0x61, 0x8a, 0xbd, 0xf2,
         0x34, 0xd8, 0xb3, 0x41,
@@ -146,25 +148,17 @@
     uint32_t chip_response[RESPONSE_LEN32];
     bool valid = 0;
 
-    #define MAC_SZ 32
 
-
-//    daplink.printf("daplink serial port\r\n");
-//    microUSB.printf("micro USB serial port\r\n");
-    rLED = LED_ON;
+    rLED = LED_OFF;
     gLED = LED_ON;
     bLED = LED_OFF;
 
-    rLED = LED_OFF;
     printf("\r\n\rmax86140 authenication software\r\n");
     MAX8614X m(spi,cs,interrupt_pin);
     m.init();
-    //    MAX8614X m(spi,cs,interrupt_pin);
-//    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]);
 
     //● Compare MAC from MAX86140 wth Host's precalculated MAC.
-    executeSha256(m, challenge_A, CHALLENGE_SZ_NO_SECRET, 1, chip_response);
+    executeSha256(m, challenge_A, CHALLENGE8_LEN, 1, chip_response);
     //● Check PASS or FAIL.
     valid = isTheChipAuthenicated(chip_response, expectedResponse_A_romID);
     if (valid)
@@ -173,7 +167,7 @@
         printf("\r\n             Challenge A failed\r\n\r\n");
 
     //● Compare MAC from MAX86140 wth Host's precalculated MAC.
-    executeSha256(m, challenge_1, CHALLENGE_SZ_NO_SECRET, 1, chip_response);
+    executeSha256(m, challenge_1, CHALLENGE8_LEN, 1, chip_response);
     //● Check PASS or FAIL.
     valid = isTheChipAuthenicated(chip_response, expectedResponse_1_romID);
     if (valid)
@@ -181,21 +175,21 @@
     else
         printf("\r\n             Challenge 1 failed\r\n\r\n");
 
-    executeSha256(m, challenge_2, CHALLENGE_SZ_NO_SECRET, 0, chip_response);
+    executeSha256(m, challenge_2, CHALLENGE8_LEN, 0, chip_response);
     valid = isTheChipAuthenicated(chip_response, expectedResponse_2_noRomID);
     if (valid)
         printf("\r\n             Challenge 2 passed\r\n\r\n");
     else
         printf("\r\n             Challenge 2 failed\r\n\r\n");
 
-    executeSha256(m, challenge_3, CHALLENGE_SZ_NO_SECRET, 1, chip_response);
+    executeSha256(m, challenge_3, CHALLENGE8_LEN, 1, chip_response);
     valid = isTheChipAuthenicated(chip_response, expectedResponse_3_romID);
     if (valid)
         printf("\r\n             Challenge 3 passed\r\n\r\n");
     else
         printf("\r\n             Challenge 3 failed\r\n\r\n");
 
-    executeSha256(m, challenge_4, CHALLENGE_SZ_NO_SECRET, 0, chip_response);
+    executeSha256(m, challenge_4, CHALLENGE8_LEN, 0, chip_response);
     valid = isTheChipAuthenicated(chip_response, expectedResponse_4_noRomID);
     if (valid)
         printf("\r\n             Challenge 4 passed\r\n\r\n");
@@ -220,7 +214,6 @@
     return 1;
 }
 
-#if 0
 void transformData(uint8_t *inData, uint8_t *outData, unsigned int challengeLen)
 {
     int i, j, k;
@@ -232,32 +225,12 @@
         }
     }
 }
-#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 executeSha256(MAX8614X &m, uint8_t *challenge, unsigned int challengeLen, bool romID, uint32_t *response)
 {
     int i, j, k;
     uint8_t macData[256];
-    uint8_t inData[256];
     uint8_t xData[256];
     uint32_t x32Data[64];
     uint32_t tmpData;
@@ -276,6 +249,7 @@
     // Enable Memory Write, Select Bank 0, address 0x00 to 0xFF
     m.writeRegister(MAX8614X::MAX8614X_MEMORY_CONTROL_REG, MAX8614X::MAX8614X_MEMCNTRL_WR_EN_MASK | MAX8614X::MAX8614X_MEMCNTRL_BANK0_MASK);
 
+#ifdef DEBUG_ON
     printf("\r\n Raw Input Data\r\n\r\n");
     for (i = 0; i < challengeLen; i++) {
         if (!(i % 4))
@@ -283,19 +257,11 @@
         printf("%02x", challenge[i]);
     }
     printf("\r\n");
-#if 0
-    k = 0;
-    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);
 
+#ifdef DEBUG_ON
     printf("\r\n Transformed Input Data\r\n\r\n");
     for (i = 0; i < challengeLen; i++) {
         if (!(i % 4))
@@ -303,45 +269,29 @@
         printf("%02x", xData[i]);
     }
         printf("\r\n ");
-        printf("\r\n ");
+#endif
         
     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
-    //- Write command, with ROM ID (0x35) or without ROM ID (0x36), to SHA_CMD register
-   if (romID) {
-        printf("ROMID \r\n");
-//        m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG, MAX8614X::MAX8614X_SHACMD_MAC_ROM_ID);
+    //● Write command, with ROM ID (0x35) or without ROM ID (0x36), to SHA_CMD register
+    if (romID) {
         m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG, MAX8614X::MAX8614X_SHACMD_MAC_ROM_ID);
-//        wait(1);
-}
+    }
     else
-{
-         printf("no ROMID \r\n");
-//       m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG,MAX8614X::MAX8614X_SHACMD_MAC_NO_ROM_ID);
-       m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG,MAX8614X::MAX8614X_SHACMD_MAC_NO_ROM_ID);
-//        wait(1);
-}
-
-
-//    m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG,MAX8614X::MAX8614X_SHACMD_MAC_ROM_ID);
-//    m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG,MAX8614X::MAX8614X_SHACMD_MAC_NO_ROM_ID);
-
+    {
+        m.writeRegister(MAX8614X::MAX8614X_SHA_CMD_REG,MAX8614X::MAX8614X_SHACMD_MAC_NO_ROM_ID);
+    }
 
     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);
-    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]);
     
     //● Wait for SHA_DONE.
     data[0] = 0;
@@ -351,19 +301,27 @@
         k++;
     }
     // ● Read 256 MAC value from RAM using registers MEM_IDX and MEM_DATA.
+#ifdef DEBUG_ON
     printf("\r\n Raw Output\r\n\r\n");
+#endif
     for (i = 64; i < 64+32; i++) {
+#ifdef DEBUG_ON
         if (!(i % 4))
             printf("\r\n ");
+#endif
         m.writeRegister(MAX8614X::MAX8614X_MEMORY_INDEX_REG, i);
         m.readRegister(MAX8614X::MAX8614X_MEMORY_DATA_REG, data, 1);
         xData[i-64] = data[0];
+#ifdef DEBUG_ON
         printf("%02x", data[0]);
+#endif
     } 
+#ifdef DEBUG_ON
     printf("%\r\n");
+#endif
 
     transformData(xData,macData, 32);
-#if 0
+#ifdef DEBUG_ON
     printf("\r\n Formatted Response\r\n\r\n");
     for (i = 0; i < 32; i++) {
         if (!(i % 4))
@@ -376,21 +334,21 @@
      // 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++;
         }
-        
     }
 
+#ifdef DEBUG_ON
     printf("\r\n Formatted Response\r\n\r\n");
+#endif
     for (i = 0; i < responseLen32; i++) {
+#ifdef DEBUG_ON
         printf(" %08X \r\n",x32Data[i]);
+#endif
         response[i] = x32Data[i];
     }
-
-     
 }
\ No newline at end of file