-
-
Notifications
You must be signed in to change notification settings - Fork 863
Support working with ed25519 seeds in addition to raw keypairs. #1055
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: dev
Are you sure you want to change the base?
Changes from all commits
a2df373
ecd0cfc
6836015
528bf3f
c086bd9
34db931
b948369
fed8d36
03a13ae
1a7b361
eb33284
879d29e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| github: meshcore-dev |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -535,6 +535,17 @@ void CommonCLI::handleSetCmd(uint32_t sender_timestamp, char* command, char* rep | |
| } else { | ||
| strcpy(reply, "Error, bad key"); | ||
| } | ||
| } else if (memcmp(config, "prv.seed ", 9) == 0) { | ||
| uint8_t seed[SEED_SIZE]; | ||
| bool success = mesh::Utils::fromHex(seed, SEED_SIZE, &config[9]); | ||
| if (success) { | ||
| mesh::LocalIdentity new_id; | ||
| new_id.readFrom(seed, SEED_SIZE); | ||
| _callbacks->saveIdentity(new_id); | ||
| strcpy(reply, "OK"); | ||
| } else { | ||
| strcpy(reply, "Error, invalid seed"); | ||
| } | ||
| } else if (memcmp(config, "name ", 5) == 0) { | ||
| if (isValidName(&config[5])) { | ||
| StrHelper::strncpy(_prefs->node_name, &config[5], sizeof(_prefs->node_name)); | ||
|
|
@@ -758,9 +769,14 @@ void CommonCLI::handleGetCmd(uint32_t sender_timestamp, char* command, char* rep | |
| sprintf(reply, "> %s", _prefs->guest_password); | ||
| } else if (sender_timestamp == 0 && memcmp(config, "prv.key", 7) == 0) { // from serial command line only | ||
| uint8_t prv_key[PRV_KEY_SIZE]; | ||
| int len = _callbacks->getSelfId().writeTo(prv_key, PRV_KEY_SIZE); | ||
| auto len = _callbacks->getSelfId().writePrvkeyTo(prv_key, PRV_KEY_SIZE); | ||
| mesh::Utils::toHex(tmp, prv_key, len); | ||
| sprintf(reply, "> %s", tmp); | ||
| } else if (sender_timestamp == 0 && memcmp(config, "prv.seed", 8) == 0) { // from serial command line only | ||
| uint8_t seed[SEED_SIZE]; | ||
| auto len = _callbacks->getSelfId().writeSeedTo(seed, SEED_SIZE); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. for devices that update firmware, but keep their existing identity, I'd assume this will just provide an output of full zeros. Probably fine, as you could check for full zeros to know there's no seed available. But wondering if it should return an error message instead...
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Assuming you mean here devices that were seeded before this code: yes, LocalIdentity::readFrom() zeroes the seed and then attempts to read over it if the seed is in the identity store, so if the identity were stored from an older revision it'll stay zeroed and this will output a zero string. I suppose returning an error would be more helpful but we should have something in the docs to say more than the firmware itself can.
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @liamcottle lmk if you have a preference here. If #1065 gets merged before this I'll add unit tests to prove the above assertion (and this one) and do a zero-check on |
||
| mesh::Utils::toHex(tmp, seed, len); | ||
| sprintf(reply, "> %s", tmp); | ||
| } else if (memcmp(config, "name", 4) == 0) { | ||
| sprintf(reply, "> %s", _prefs->node_name); | ||
| } else if (memcmp(config, "repeat", 6) == 0) { | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,10 @@ | ||
| #pragma once | ||
|
|
||
| #include <helpers/ESP32Board.h> | ||
|
|
||
| class TETHEliteBoard : public ESP32Board { | ||
| public: | ||
| const char* getManufacturerName() const override { | ||
| return "LilyGO T-ETH Elite"; | ||
| } | ||
| }; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,99 @@ | ||
| [LilyGo_TETH_Elite_sx1262] | ||
| extends = esp32_base | ||
| board = esp32s3box | ||
| board_build.partitions = default_16MB.csv | ||
| board_upload.flash_size = 16MB | ||
| build_flags = | ||
| ${esp32_base.build_flags} | ||
| -I variants/lilygo_teth_elite | ||
| -D BOARD_HAS_PSRAM | ||
| -D LILYGO_TETH_ELITE | ||
| -D LILYGO_T_ETH_ELITE_ESP32S3 | ||
| -D ARDUINO_USB_CDC_ON_BOOT=1 | ||
| -D P_LORA_DIO_1=8 | ||
| -D P_LORA_NSS=40 | ||
| -D P_LORA_RESET=46 | ||
| -D P_LORA_BUSY=16 | ||
| -D P_LORA_SCLK=10 | ||
| -D P_LORA_MISO=9 | ||
| -D P_LORA_MOSI=11 | ||
| -D P_LORA_TX_LED=38 | ||
| -D SX126X_DIO2_AS_RF_SWITCH=true | ||
| -D SX126X_DIO3_TCXO_VOLTAGE=1.8 | ||
| -D SX126X_CURRENT_LIMIT=140 | ||
| -D USE_SX1262 | ||
| -D RADIO_CLASS=CustomSX1262 | ||
| -D WRAPPER_CLASS=CustomSX1262Wrapper | ||
| -D LORA_TX_POWER=8 | ||
| -D SX126X_RX_BOOSTED_GAIN=1 | ||
| build_src_filter = ${esp32_base.build_src_filter} | ||
| +<../variants/lilygo_teth_elite> | ||
| lib_deps = | ||
| ${esp32_base.lib_deps} | ||
|
|
||
| [env:LilyGo_TETH_Elite_sx1262_repeater] | ||
| extends = LilyGo_TETH_Elite_sx1262 | ||
| build_flags = | ||
| ${LilyGo_TETH_Elite_sx1262.build_flags} | ||
| -D ADVERT_NAME='"T-ETH Elite Repeater"' | ||
| -D ADVERT_LAT=0.0 | ||
| -D ADVERT_LON=0.0 | ||
| -D ADMIN_PASSWORD='"password"' | ||
| -D MAX_NEIGHBOURS=50 | ||
| ; -D MESH_PACKET_LOGGING=1 | ||
| ; -D MESH_DEBUG=1 | ||
| build_src_filter = ${LilyGo_TETH_Elite_sx1262.build_src_filter} | ||
| +<../examples/simple_repeater> | ||
| lib_deps = | ||
| ${LilyGo_TETH_Elite_sx1262.lib_deps} | ||
| ${esp32_ota.lib_deps} | ||
|
|
||
| [env:LilyGo_TETH_Elite_sx1262_room_server] | ||
| extends = LilyGo_TETH_Elite_sx1262 | ||
| build_flags = | ||
| ${LilyGo_TETH_Elite_sx1262.build_flags} | ||
| -D ADVERT_NAME='"T-ETH Elite Room"' | ||
| -D ADVERT_LAT=0.0 | ||
| -D ADVERT_LON=0.0 | ||
| -D ADMIN_PASSWORD='"password"' | ||
| -D ROOM_PASSWORD='"hello"' | ||
| ; -D MESH_PACKET_LOGGING=1 | ||
| ; -D MESH_DEBUG=1 | ||
| build_src_filter = ${LilyGo_TETH_Elite_sx1262.build_src_filter} | ||
| +<../examples/simple_room_server> | ||
| lib_deps = | ||
| ${LilyGo_TETH_Elite_sx1262.lib_deps} | ||
| ${esp32_ota.lib_deps} | ||
|
|
||
| [env:LilyGo_TETH_Elite_sx1262_companion_radio_usb] | ||
| extends = LilyGo_TETH_Elite_sx1262 | ||
| build_flags = | ||
| ${LilyGo_TETH_Elite_sx1262.build_flags} | ||
| -D MAX_CONTACTS=350 | ||
| -D MAX_GROUP_CHANNELS=40 | ||
| -D OFFLINE_QUEUE_SIZE=256 | ||
| ; -D MESH_PACKET_LOGGING=1 | ||
| ; -D MESH_DEBUG=1 | ||
| build_src_filter = ${LilyGo_TETH_Elite_sx1262.build_src_filter} | ||
| +<../examples/companion_radio/*.cpp> | ||
| lib_deps = | ||
| ${LilyGo_TETH_Elite_sx1262.lib_deps} | ||
| densaugeo/base64 @ ~1.4.0 | ||
|
|
||
| [env:LilyGo_TETH_Elite_sx1262_companion_radio_ble] | ||
| extends = LilyGo_TETH_Elite_sx1262 | ||
| build_flags = | ||
| ${LilyGo_TETH_Elite_sx1262.build_flags} | ||
| -D MAX_CONTACTS=350 | ||
| -D MAX_GROUP_CHANNELS=40 | ||
| -D BLE_PIN_CODE=123456 | ||
| -D BLE_DEBUG_LOGGING=1 | ||
| -D OFFLINE_QUEUE_SIZE=256 | ||
| ; -D MESH_PACKET_LOGGING=1 | ||
| ; -D MESH_DEBUG=1 | ||
| build_src_filter = ${LilyGo_TETH_Elite_sx1262.build_src_filter} | ||
| +<helpers/esp32/*.cpp> | ||
| +<../examples/companion_radio/*.cpp> | ||
| lib_deps = | ||
| ${LilyGo_TETH_Elite_sx1262.lib_deps} | ||
| densaugeo/base64 @ ~1.4.0 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,43 @@ | ||
| #include <Arduino.h> | ||
| #include "target.h" | ||
|
|
||
| TETHEliteBoard board; | ||
|
|
||
| static SPIClass spi(HSPI); | ||
| RADIO_CLASS radio = new Module(P_LORA_NSS, P_LORA_DIO_1, P_LORA_RESET, P_LORA_BUSY, spi); | ||
| WRAPPER_CLASS radio_driver(radio, board); | ||
|
|
||
| ESP32RTCClock fallback_clock; | ||
| AutoDiscoverRTCClock rtc_clock(fallback_clock); | ||
| SensorManager sensors; | ||
|
|
||
| #ifndef LORA_CR | ||
| #define LORA_CR 5 | ||
| #endif | ||
|
|
||
| bool radio_init() { | ||
| fallback_clock.begin(); | ||
| rtc_clock.begin(Wire); | ||
|
|
||
| return radio.std_init(&spi); | ||
| } | ||
|
|
||
| uint32_t radio_get_rng_seed() { | ||
| return radio.random(0x7FFFFFFF); | ||
| } | ||
|
|
||
| void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr) { | ||
| radio.setFrequency(freq); | ||
| radio.setSpreadingFactor(sf); | ||
| radio.setBandwidth(bw); | ||
| radio.setCodingRate(cr); | ||
| } | ||
|
|
||
| void radio_set_tx_power(int8_t dbm) { | ||
| radio.setOutputPower(dbm); | ||
| } | ||
|
|
||
| mesh::LocalIdentity radio_new_identity() { | ||
| RadioNoiseListener rng(radio); | ||
| return mesh::LocalIdentity(&rng); | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,20 @@ | ||
| #pragma once | ||
|
|
||
| #define RADIOLIB_STATIC_ONLY 1 | ||
| #include <RadioLib.h> | ||
| #include <helpers/radiolib/RadioLibWrappers.h> | ||
| #include <helpers/radiolib/CustomSX1262Wrapper.h> | ||
| #include <helpers/AutoDiscoverRTCClock.h> | ||
| #include <helpers/SensorManager.h> | ||
| #include "TETHEliteBoard.h" | ||
|
|
||
| extern TETHEliteBoard board; | ||
| extern WRAPPER_CLASS radio_driver; | ||
| extern AutoDiscoverRTCClock rtc_clock; | ||
| extern SensorManager sensors; | ||
|
|
||
| bool radio_init(); | ||
| uint32_t radio_get_rng_seed(); | ||
| void radio_set_params(float freq, float bw, uint8_t sf, uint8_t cr); | ||
| void radio_set_tx_power(int8_t dbm); | ||
| mesh::LocalIdentity radio_new_identity(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Since there's no length validation for the provided seed, is there any issue with providing a seed that's too short or too long? I guess the remainder would just be all zeros...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Utils::fromHex() does a check that
strlen(src_hex)==dest_size*2, so it should give an error with a seed that's too short or too long (I'd test but I'm across an ocean from my nearest spare repeater until the weekend.)