Regenerate public key on boot, to avoid accidental mismatch. (#4916)

* Regenerate public key on boot, to avoid accidental mismatch.

* Fix ifdefs
This commit is contained in:
Jonathan Bennett 2024-09-30 17:06:31 -05:00 committed by GitHub
parent bce7d73cc6
commit dd587419c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -132,19 +132,10 @@ NodeDB::NodeDB()
config.security.serial_enabled = config.device.serial_enabled; config.security.serial_enabled = config.device.serial_enabled;
config.security.is_managed = config.device.is_managed; config.security.is_managed = config.device.is_managed;
} }
#if !(MESHTASTIC_EXCLUDE_PKI)
// Calculate Curve25519 public and private keys #if !(MESHTASTIC_EXCLUDE_PKI_KEYGEN || MESHTASTIC_EXCLUDE_PKI)
printBytes("Old Pubkey", config.security.public_key.bytes, 32);
if (config.security.private_key.size == 32 && config.security.public_key.size == 32) {
LOG_INFO("Using saved PKI keys\n");
owner.public_key.size = config.security.public_key.size;
memcpy(owner.public_key.bytes, config.security.public_key.bytes, config.security.public_key.size);
crypto->setDHPrivateKey(config.security.private_key.bytes);
} else {
#if !(MESHTASTIC_EXCLUDE_PKI_KEYGEN)
bool keygenSuccess = false; bool keygenSuccess = false;
if (config.security.private_key.size == 32) { if (config.security.private_key.size == 32) {
LOG_INFO("Calculating PKI Public Key\n");
if (crypto->regeneratePublicKey(config.security.public_key.bytes, config.security.private_key.bytes)) { if (crypto->regeneratePublicKey(config.security.public_key.bytes, config.security.private_key.bytes)) {
keygenSuccess = true; keygenSuccess = true;
} }
@ -156,15 +147,16 @@ NodeDB::NodeDB()
if (keygenSuccess) { if (keygenSuccess) {
config.security.public_key.size = 32; config.security.public_key.size = 32;
config.security.private_key.size = 32; config.security.private_key.size = 32;
printBytes("New Pubkey", config.security.public_key.bytes, 32);
owner.public_key.size = 32; owner.public_key.size = 32;
memcpy(owner.public_key.bytes, config.security.public_key.bytes, 32); memcpy(owner.public_key.bytes, config.security.public_key.bytes, 32);
} }
#else #elif !(MESHTASTIC_EXCLUDE_PKI)
LOG_INFO("No PKI keys set, and generation disabled!\n"); // Calculate Curve25519 public and private keys
#endif if (config.security.private_key.size == 32 && config.security.public_key.size == 32) {
owner.public_key.size = config.security.public_key.size;
memcpy(owner.public_key.bytes, config.security.public_key.bytes, config.security.public_key.size);
crypto->setDHPrivateKey(config.security.private_key.bytes);
} }
#endif #endif
info->user = TypeConversions::ConvertToUserLite(owner); info->user = TypeConversions::ConvertToUserLite(owner);