intiial commit
Dependencies: MAX8614X USBDevice max32630hsp_test
Diff: main.cpp
- Revision:
- 16:d0f8cf9f160d
- Parent:
- 15:2616528b4007
- Child:
- 17:e260080d3468
diff -r 2616528b4007 -r d0f8cf9f160d main.cpp
--- 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];
}