From 178ebf7282ce0c3722419d2c67496768c81f394c Mon Sep 17 00:00:00 2001 From: Matthias Wientapper Date: Sat, 25 Oct 2025 13:20:04 +0200 Subject: [PATCH] * Add cli command to regenerate key pair --- examples/simple_repeater/MyMesh.cpp | 13 +++++++++++++ examples/simple_repeater/MyMesh.h | 1 + src/helpers/CommonCLI.cpp | 5 +++++ src/helpers/CommonCLI.h | 1 + 4 files changed, 20 insertions(+) diff --git a/examples/simple_repeater/MyMesh.cpp b/examples/simple_repeater/MyMesh.cpp index f328c752..2617b2cf 100644 --- a/examples/simple_repeater/MyMesh.cpp +++ b/examples/simple_repeater/MyMesh.cpp @@ -807,6 +807,19 @@ void MyMesh::clearStats() { ((SimpleMeshTables *)getTables())->resetStats(); } +void MyMesh::regenerateKeys() { + MESH_DEBUG_PRINTLN("Generating new keypair"); + mesh::LocalIdentity new_id = radio_new_identity(); + + int count = 0; + while (count < 10 && (new_id.pub_key[0] == 0x00 || new_id.pub_key[0] == 0xFF)) { + new_id = radio_new_identity(); + count++; + } + + saveIdentity(new_id); +} + void MyMesh::handleCommand(uint32_t sender_timestamp, char *command, char *reply) { while (*command == ' ') command++; // skip leading spaces diff --git a/examples/simple_repeater/MyMesh.h b/examples/simple_repeater/MyMesh.h index a9ab251e..60629dc6 100644 --- a/examples/simple_repeater/MyMesh.h +++ b/examples/simple_repeater/MyMesh.h @@ -188,6 +188,7 @@ public: void saveIdentity(const mesh::LocalIdentity& new_id) override; void clearStats() override; + void regenerateKeys() override; void handleCommand(uint32_t sender_timestamp, char* command, char* reply); void loop(); diff --git a/src/helpers/CommonCLI.cpp b/src/helpers/CommonCLI.cpp index b8bb698a..365eb148 100644 --- a/src/helpers/CommonCLI.cpp +++ b/src/helpers/CommonCLI.cpp @@ -245,6 +245,11 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch } else if (memcmp(command, "clear stats", 11) == 0) { _callbacks->clearStats(); strcpy(reply, "(OK - stats reset)"); + } else if (memcmp(command, "regeneratekeys", 14) == 0) { + // regenerate key pair + MESH_DEBUG_PRINTLN("Generating new keypair"); + _callbacks->regenerateKeys(); + _board->reboot(); // doesn't return /* * GET commands */ diff --git a/src/helpers/CommonCLI.h b/src/helpers/CommonCLI.h index ea59aa92..e2b6b63e 100644 --- a/src/helpers/CommonCLI.h +++ b/src/helpers/CommonCLI.h @@ -69,6 +69,7 @@ public: virtual mesh::LocalIdentity& getSelfId() = 0; virtual void saveIdentity(const mesh::LocalIdentity& new_id) = 0; virtual void clearStats() = 0; + virtual void regenerateKeys() = 0; virtual void applyTempRadioParams(float freq, float bw, uint8_t sf, uint8_t cr, int timeout_mins) = 0; virtual void setBridgeState(bool enable) {