Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions examples/simple_repeater/MyMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -807,6 +807,18 @@ void MyMesh::clearStats() {
((SimpleMeshTables *)getTables())->resetStats();
}

void MyMesh::regenerateKeys(uint8_t byte) {
if (byte >0 && byte < 0xff){
MESH_DEBUG_PRINTLN("Generating new keypair");
mesh::LocalIdentity new_id = radio_new_identity();

while (new_id.pub_key[0] != byte) {
new_id = radio_new_identity();
}
saveIdentity(new_id);
}
}

void MyMesh::handleCommand(uint32_t sender_timestamp, char *command, char *reply) {
while (*command == ' ')
command++; // skip leading spaces
Expand Down
1 change: 1 addition & 0 deletions examples/simple_repeater/MyMesh.h
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,7 @@ class MyMesh : public mesh::Mesh, public CommonCLICallbacks {

void saveIdentity(const mesh::LocalIdentity& new_id) override;
void clearStats() override;
void regenerateKeys(uint8_t byte);
void handleCommand(uint32_t sender_timestamp, char* command, char* reply);
void loop();

Expand Down
23 changes: 23 additions & 0 deletions src/helpers/CommonCLI.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,29 @@ 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 ", 15) == 0) {
// Parse first hex digit
int value = 0;
if (command[15] >= '0' && command[15] <= '9')
value = (command[15] - '0') << 4;
else if (command[15] >= 'a' && command[15] <= 'f')
value = (command[15] - 'a' + 10) << 4;
else if (command[15] >= 'A' && command[15] <= 'F')
value = (command[15] - 'A' + 10) << 4;
// Parse second hex digit
if (command[16] >= '0' && command[16] <= '9')
value |= (command[16] - '0');
else if (command[16] >= 'a' && command[16] <= 'f')
value |= (command[16] - 'a' + 10);
else if (command[16] >= 'A' && command[16] <= 'F')
value |= (command[16] - 'A' + 10);
// regenerate key pair
MESH_DEBUG_PRINTLN("Generating new keypair");
if ((value > 0) && (value < 0xff)){
_callbacks->regenerateKeys(value);
_board->reboot(); // doesn't return
}
sprintf(reply, "> ERROR");
/*
* GET commands
*/
Expand Down
1 change: 1 addition & 0 deletions src/helpers/CommonCLI.h
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class CommonCLICallbacks {
virtual mesh::LocalIdentity& getSelfId() = 0;
virtual void saveIdentity(const mesh::LocalIdentity& new_id) = 0;
virtual void clearStats() = 0;
virtual void regenerateKeys(uint8_t byte) = 0;
virtual void applyTempRadioParams(float freq, float bw, uint8_t sf, uint8_t cr, int timeout_mins) = 0;

virtual void setBridgeState(bool enable) {
Expand Down