From 7bd07db2a8a19308f5d08bb563c7a4e24f52437e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Sun, 12 Jun 2022 23:35:59 +0200 Subject: [PATCH 1/2] Remove nRF Crypt Debug --- src/esp32/ESP32CryptoEngine.cpp | 2 - src/mesh/CryptoEngine.cpp | 78 --------------------------------- src/mesh/CryptoEngine.h | 2 - src/nrf52/NRF52CryptoEngine.cpp | 27 +----------- 4 files changed, 2 insertions(+), 107 deletions(-) diff --git a/src/esp32/ESP32CryptoEngine.cpp b/src/esp32/ESP32CryptoEngine.cpp index e80d59661..2003a235b 100644 --- a/src/esp32/ESP32CryptoEngine.cpp +++ b/src/esp32/ESP32CryptoEngine.cpp @@ -49,7 +49,6 @@ class ESP32CryptoEngine : public CryptoEngine */ virtual void encrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes, uint8_t *bytes) override { - hexDump("before", bytes, numBytes, 16); if (key.length > 0) { uint8_t stream_block[16]; static uint8_t scratch[MAX_BLOCKSIZE]; @@ -65,7 +64,6 @@ class ESP32CryptoEngine : public CryptoEngine auto res = mbedtls_aes_crypt_ctr(&aes, numBytes, &nc_off, nonce, stream_block, scratch, bytes); assert(!res); } - hexDump("after", bytes, numBytes, 16); } virtual void decrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes, uint8_t *bytes) override diff --git a/src/mesh/CryptoEngine.cpp b/src/mesh/CryptoEngine.cpp index 8a5ea795d..5e73e3921 100644 --- a/src/mesh/CryptoEngine.cpp +++ b/src/mesh/CryptoEngine.cpp @@ -4,10 +4,6 @@ void CryptoEngine::setKey(const CryptoKey &k) { DEBUG_MSG("Using AES%d key!\n", k.length * 8); - /* for(uint8_t i = 0; i < k.length; i++) - DEBUG_MSG("%02x ", k.bytes[i]); - DEBUG_MSG("\n"); */ - key = k; } @@ -26,78 +22,6 @@ void CryptoEngine::decrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes DEBUG_MSG("WARNING: noop decryption!\n"); } -// Usage: -// hexDump(desc, addr, len, perLine); -// desc: if non-NULL, printed as a description before hex dump. -// addr: the address to start dumping from. -// len: the number of bytes to dump. -// perLine: number of bytes on each output line. - -void CryptoEngine::hexDump (const char * desc, const void * addr, const int len, int perLine) -{ - // Silently ignore silly per-line values. - - if (perLine < 4 || perLine > 64) perLine = 16; - - int i; - unsigned char buff[perLine+1]; - const unsigned char * pc = (const unsigned char *)addr; - - // Output description if given. - - if (desc != NULL) DEBUG_MSG ("%s:\n", desc); - - // Length checks. - - if (len == 0) { - DEBUG_MSG(" ZERO LENGTH\n"); - return; - } - if (len < 0) { - DEBUG_MSG(" NEGATIVE LENGTH: %d\n", len); - return; - } - - // Process every byte in the data. - - for (i = 0; i < len; i++) { - // Multiple of perLine means new or first line (with line offset). - - if ((i % perLine) == 0) { - // Only print previous-line ASCII buffer for lines beyond first. - - if (i != 0) DEBUG_MSG (" %s\n", buff); - - // Output the offset of current line. - - DEBUG_MSG (" %04x ", i); - } - - // Now the hex code for the specific character. - - DEBUG_MSG (" %02x", pc[i]); - - // And buffer a printable ASCII character for later. - - if ((pc[i] < 0x20) || (pc[i] > 0x7e)) // isprint() may be better. - buff[i % perLine] = '.'; - else - buff[i % perLine] = pc[i]; - buff[(i % perLine) + 1] = '\0'; - } - - // Pad out last line if not exactly perLine characters. - - while ((i % perLine) != 0) { - DEBUG_MSG (" "); - i++; - } - - // And print the final ASCII buffer. - - DEBUG_MSG (" %s\n", buff); -} - /** * Init our 128 bit nonce for a new packet */ @@ -108,6 +32,4 @@ void CryptoEngine::initNonce(uint32_t fromNode, uint64_t packetId) // use memcpy to avoid breaking strict-aliasing memcpy(nonce, &packetId, sizeof(uint64_t)); memcpy(nonce + sizeof(uint64_t), &fromNode, sizeof(uint32_t)); - //*((uint64_t *)&nonce[0]) = packetId; - //*((uint32_t *)&nonce[8]) = fromNode; } \ No newline at end of file diff --git a/src/mesh/CryptoEngine.h b/src/mesh/CryptoEngine.h index 39b30a727..1dda7ce31 100644 --- a/src/mesh/CryptoEngine.h +++ b/src/mesh/CryptoEngine.h @@ -56,8 +56,6 @@ class CryptoEngine * a 32 bit block counter (starts at zero) */ void initNonce(uint32_t fromNode, uint64_t packetId); - - void hexDump(const char * desc, const void * addr, const int len, int perLine); }; extern CryptoEngine *crypto; diff --git a/src/nrf52/NRF52CryptoEngine.cpp b/src/nrf52/NRF52CryptoEngine.cpp index 287defdda..42eacfc27 100644 --- a/src/nrf52/NRF52CryptoEngine.cpp +++ b/src/nrf52/NRF52CryptoEngine.cpp @@ -16,7 +16,6 @@ class NRF52CryptoEngine : public CryptoEngine */ virtual void encrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes, uint8_t *bytes) override { - hexDump("before", bytes, numBytes, 16); if (key.length > 16) { DEBUG_MSG("Software encrypt fr=%x, num=%x, numBytes=%d!\n", fromNode, (uint32_t) packetId, numBytes); AES_ctx ctx; @@ -28,7 +27,6 @@ class NRF52CryptoEngine : public CryptoEngine nRFCrypto.begin(); nRFCrypto_AES ctx; uint8_t myLen = ctx.blockLen(numBytes); - DEBUG_MSG("nRF52 encBuf myLen=%d!\n", myLen); char encBuf[myLen] = {0}; initNonce(fromNode, packetId); ctx.begin(); @@ -37,33 +35,12 @@ class NRF52CryptoEngine : public CryptoEngine nRFCrypto.end(); memcpy(bytes, encBuf, numBytes); } - hexDump("after", bytes, numBytes, 16); } virtual void decrypt(uint32_t fromNode, uint64_t packetId, size_t numBytes, uint8_t *bytes) override { - hexDump("before", bytes, numBytes, 16); - if (key.length > 16) { - DEBUG_MSG("Software decrypt fr=%x, num=%x, numBytes=%d!\n", fromNode, (uint32_t) packetId, numBytes); - AES_ctx ctx; - initNonce(fromNode, packetId); - AES_init_ctx_iv(&ctx, key.bytes, nonce); - AES_CTR_xcrypt_buffer(&ctx, bytes, numBytes); - } else if (key.length > 0) { - DEBUG_MSG("nRF52 decrypt fr=%x, num=%x, numBytes=%d!\n", fromNode, (uint32_t) packetId, numBytes); - nRFCrypto.begin(); - nRFCrypto_AES ctx; - uint8_t myLen = ctx.blockLen(numBytes); - DEBUG_MSG("nRF52 decBuf myLen=%d!\n", myLen); - char decBuf[myLen] = {0}; - initNonce(fromNode, packetId); - ctx.begin(); - ctx.Process((char*)bytes, numBytes, nonce, key.bytes, key.length, decBuf, ctx.decryptFlag, ctx.ctrMode); - ctx.end(); - nRFCrypto.end(); - memcpy(bytes, decBuf, numBytes); - } - hexDump("after", bytes, numBytes, 16); + // For CTR, the implementation is the same + encrypt(fromNode, packetId, numBytes, bytes); } private: From 553b35d0ad5d74beccc4796aac9112ac85b82061 Mon Sep 17 00:00:00 2001 From: Ben Meadors Date: Sun, 12 Jun 2022 19:56:32 -0500 Subject: [PATCH 2/2] Consolidate power saving prefs (#1507) * Fixed conversion linter warning * Power saving consolidation * Whoops --- protobufs | 2 +- src/PowerFSM.cpp | 4 ++-- src/mesh/NodeDB.h | 4 ++-- src/mesh/generated/config.pb.h | 15 ++++++--------- src/mesh/generated/localonly.pb.h | 2 +- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/protobufs b/protobufs index e5b5adc19..8f616d3ee 160000 --- a/protobufs +++ b/protobufs @@ -1 +1 @@ -Subproject commit e5b5adc196d3593ab15c04101093443ab8b36c9c +Subproject commit 8f616d3eefd4edc86b915f3d7fae827847bdcd95 diff --git a/src/PowerFSM.cpp b/src/PowerFSM.cpp index 82f73147c..bdfbda87c 100644 --- a/src/PowerFSM.cpp +++ b/src/PowerFSM.cpp @@ -20,14 +20,14 @@ static bool isPowered() // If we are not a router and we already have AC power go to POWER state after init, otherwise go to ON // We assume routers might be powered all the time, but from a low current (solar) source - bool isLowPower = config.power.is_low_power || isRouter; + bool isPowerSavingMode = config.power.is_power_saving || isRouter; /* To determine if we're externally powered, assumptions 1) If we're powered up and there's no battery, we must be getting power externally. (because we'd be dead otherwise) 2) If we detect USB power from the power management chip, we must be getting power externally. */ - return !isLowPower && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); + return !isPowerSavingMode && powerStatus && (!powerStatus->getHasBattery() || powerStatus->getHasUSB()); } static void sdsEnter() diff --git a/src/mesh/NodeDB.h b/src/mesh/NodeDB.h index 0d6d50ee1..2cd3a8331 100644 --- a/src/mesh/NodeDB.h +++ b/src/mesh/NodeDB.h @@ -138,7 +138,7 @@ extern NodeDB nodeDB; /* If is_router is set, we use a number of different default values - # FIXME - after tuning, move these params into the on-device defaults based on is_router and is_low_power + # FIXME - after tuning, move these params into the on-device defaults based on is_router and is_power_saving # prefs.position_broadcast_secs = FIXME possibly broadcast only once an hr prefs.wait_bluetooth_secs = 1 # Don't stay in bluetooth mode @@ -152,7 +152,7 @@ extern NodeDB nodeDB; # get a new GPS position once per day prefs.gps_update_interval = oneday - prefs.is_low_power = True + prefs.is_power_saving = True # allow up to five minutes for each new GPS lock attempt prefs.gps_attempt_time = 300 diff --git a/src/mesh/generated/config.pb.h b/src/mesh/generated/config.pb.h index e59fda04b..45724e61b 100644 --- a/src/mesh/generated/config.pb.h +++ b/src/mesh/generated/config.pb.h @@ -125,10 +125,9 @@ typedef struct _Config_PositionConfig { typedef struct _Config_PowerConfig { Config_PowerConfig_ChargeCurrent charge_current; - bool is_low_power; + bool is_power_saving; bool is_always_powered; uint32_t on_battery_shutdown_after_secs; - bool is_power_saving; float adc_multiplier_override; uint32_t wait_bluetooth_secs; uint32_t mesh_sds_timeout_secs; @@ -192,14 +191,14 @@ extern "C" { #define Config_init_default {0, {Config_DeviceConfig_init_default}} #define Config_DeviceConfig_init_default {_Config_DeviceConfig_Role_MIN, 0, 0, 0, ""} #define Config_PositionConfig_init_default {0, 0, 0, 0, 0, 0, 0} -#define Config_PowerConfig_init_default {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +#define Config_PowerConfig_init_default {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define Config_WiFiConfig_init_default {"", "", 0, 0} #define Config_DisplayConfig_init_default {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0} #define Config_LoRaConfig_init_default {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, {0, 0, 0}} #define Config_init_zero {0, {Config_DeviceConfig_init_zero}} #define Config_DeviceConfig_init_zero {_Config_DeviceConfig_Role_MIN, 0, 0, 0, ""} #define Config_PositionConfig_init_zero {0, 0, 0, 0, 0, 0, 0} -#define Config_PowerConfig_init_zero {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} +#define Config_PowerConfig_init_zero {_Config_PowerConfig_ChargeCurrent_MIN, 0, 0, 0, 0, 0, 0, 0, 0, 0} #define Config_WiFiConfig_init_zero {"", "", 0, 0} #define Config_DisplayConfig_init_zero {0, _Config_DisplayConfig_GpsCoordinateFormat_MIN, 0} #define Config_LoRaConfig_init_zero {0, _Config_LoRaConfig_ModemPreset_MIN, 0, 0, 0, 0, _Config_LoRaConfig_RegionCode_MIN, 0, 0, 0, {0, 0, 0}} @@ -231,10 +230,9 @@ extern "C" { #define Config_PositionConfig_gps_attempt_time_tag 7 #define Config_PositionConfig_position_flags_tag 10 #define Config_PowerConfig_charge_current_tag 1 -#define Config_PowerConfig_is_low_power_tag 2 +#define Config_PowerConfig_is_power_saving_tag 2 #define Config_PowerConfig_is_always_powered_tag 3 #define Config_PowerConfig_on_battery_shutdown_after_secs_tag 4 -#define Config_PowerConfig_is_power_saving_tag 5 #define Config_PowerConfig_adc_multiplier_override_tag 6 #define Config_PowerConfig_wait_bluetooth_secs_tag 7 #define Config_PowerConfig_mesh_sds_timeout_secs_tag 9 @@ -291,10 +289,9 @@ X(a, STATIC, SINGULAR, UINT32, position_flags, 10) #define Config_PowerConfig_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, UENUM, charge_current, 1) \ -X(a, STATIC, SINGULAR, BOOL, is_low_power, 2) \ +X(a, STATIC, SINGULAR, BOOL, is_power_saving, 2) \ X(a, STATIC, SINGULAR, BOOL, is_always_powered, 3) \ X(a, STATIC, SINGULAR, UINT32, on_battery_shutdown_after_secs, 4) \ -X(a, STATIC, SINGULAR, BOOL, is_power_saving, 5) \ X(a, STATIC, SINGULAR, FLOAT, adc_multiplier_override, 6) \ X(a, STATIC, SINGULAR, UINT32, wait_bluetooth_secs, 7) \ X(a, STATIC, SINGULAR, UINT32, mesh_sds_timeout_secs, 9) \ @@ -355,7 +352,7 @@ extern const pb_msgdesc_t Config_LoRaConfig_msg; #define Config_DisplayConfig_size 14 #define Config_LoRaConfig_size 67 #define Config_PositionConfig_size 30 -#define Config_PowerConfig_size 49 +#define Config_PowerConfig_size 47 #define Config_WiFiConfig_size 103 #define Config_size 105 diff --git a/src/mesh/generated/localonly.pb.h b/src/mesh/generated/localonly.pb.h index df0966414..06922a88d 100644 --- a/src/mesh/generated/localonly.pb.h +++ b/src/mesh/generated/localonly.pb.h @@ -126,7 +126,7 @@ extern const pb_msgdesc_t LocalModuleConfig_msg; #define LocalModuleConfig_fields &LocalModuleConfig_msg /* Maximum encoded size of messages (where known) */ -#define LocalConfig_size 317 +#define LocalConfig_size 315 #define LocalModuleConfig_size 282 #ifdef __cplusplus