diff --git a/core/MySigning.cpp b/core/MySigning.cpp index 37f0085..59590d5 100644 --- a/core/MySigning.cpp +++ b/core/MySigning.cpp @@ -90,7 +90,6 @@ extern bool signerAtsha204SignMsg(MyMessage &msg); #define signerBackendVerifyMsg signerAtsha204VerifyMsg #define signerBackendSignMsg signerAtsha204SignMsg #endif -static bool signerValidatePersonalization(void); static bool skipSign(MyMessage &msg); #else // not MY_SIGNING_FEATURE #define signerBackendCheckTimer() true @@ -103,8 +102,6 @@ static bool signerInternalProcessNonceResponse(MyMessage &msg); void signerInit(void) { #if defined(MY_SIGNING_FEATURE) - (void)signerValidatePersonalization(); - // Read out the signing requirements from EEPROM hwReadConfigBlock((void*)_doSign, (void*)EEPROM_SIGNING_REQUIREMENT_TABLE_ADDRESS, sizeof(_doSign)); @@ -341,33 +338,6 @@ int signerMemcmp(const void* a, const void* b, size_t sz) #if defined(MY_SIGNING_FEATURE) // Helper function to centralize signing/verification exceptions -static bool signerValidatePersonalization(void) -{ -#ifdef MY_SIGNING_SIMPLE_PASSWD - return true; -#else - uint8_t buffer[32]; - uint8_t* hash; - uint8_t checksum; - signerSha256Init(); - hwReadConfigBlock((void*)buffer, (void*)EEPROM_SIGNING_SOFT_HMAC_KEY_ADDRESS, 32); - signerSha256Update(buffer, 32); - hwReadConfigBlock((void*)buffer, (void*)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16); - signerSha256Update(buffer, 16); - hwReadConfigBlock((void*)buffer, (void*)EEPROM_SIGNING_SOFT_SERIAL_ADDRESS, 9); - signerSha256Update(buffer, 9); - hash = signerSha256Final(); - hwReadConfigBlock((void*)&checksum, (void*)EEPROM_PERSONALIZATION_CHECKSUM_ADDRESS, 1); - if (checksum != hash[0]) { - SIGN_DEBUG(PSTR("!SGN:PER:TAMPERED\n")); - return false; - } else { - SIGN_DEBUG(PSTR("SGN:PER:OK\n")); - return true; - } -#endif -} - static bool skipSign(MyMessage &msg) { bool ret = false; diff --git a/core/MySigningAtsha204Soft.cpp b/core/MySigningAtsha204Soft.cpp index 37acff9..fe19d59 100644 --- a/core/MySigningAtsha204Soft.cpp +++ b/core/MySigningAtsha204Soft.cpp @@ -103,8 +103,37 @@ bool signerAtsha204SoftInit(void) _signing_node_serial_info[8] = getNodeId(); } #else - hwReadConfigBlock((void*)_signing_hmac_key, (void*)EEPROM_SIGNING_SOFT_HMAC_KEY_ADDRESS, 32); - hwReadConfigBlock((void*)_signing_node_serial_info, (void*)EEPROM_SIGNING_SOFT_SERIAL_ADDRESS, 9); + uint8_t buffer[32]; + uint8_t* hash; + uint8_t checksum; + + _signing_sha256.init(); + hwReadConfigBlock((void*)buffer, (void*)EEPROM_SIGNING_SOFT_HMAC_KEY_ADDRESS, 32); + for (int i = 0; i < 32; i++) { + _signing_sha256.write(buffer[i]); + } + hwReadConfigBlock((void*)buffer, (void*)EEPROM_RF_ENCRYPTION_AES_KEY_ADDRESS, 16); + for (int i = 0; i < 16; i++) { + _signing_sha256.write(buffer[i]); + } + hwReadConfigBlock((void*)buffer, (void*)EEPROM_SIGNING_SOFT_SERIAL_ADDRESS, 9); + for (int i = 0; i < 9; i++) { + _signing_sha256.write(buffer[i]); + } + hash = _signing_sha256.result(); + hwReadConfigBlock((void*)&checksum, (void*)EEPROM_PERSONALIZATION_CHECKSUM_ADDRESS, 1); + if (checksum != hash[0]) { + SIGN_DEBUG(PSTR("!SGN:PER:TAMPERED\n")); + init_ok = false; + } else { + SIGN_DEBUG(PSTR("SGN:PER:OK\n")); + init_ok = true; + } + + if (init_ok) { + hwReadConfigBlock((void*)_signing_hmac_key, (void*)EEPROM_SIGNING_SOFT_HMAC_KEY_ADDRESS, 32); + hwReadConfigBlock((void*)_signing_node_serial_info, (void*)EEPROM_SIGNING_SOFT_SERIAL_ADDRESS, 9); + } #endif if (!memcmp(_signing_node_serial_info, reset_serial, 9)) { unique_id_t uniqueID;