From c1cbf18c8ffd639e8b292395c6d85bb51898f803 Mon Sep 17 00:00:00 2001 From: Avii Date: Wed, 2 Jul 2025 14:22:48 +0200 Subject: [PATCH] re structure --- lib/sha1/LICENSE | 21 ++++++++++++ lib/sha1/README.md | 59 +++++++++++++++++++++++++++++++++ {src => lib/sha1}/sha1.cpp | 2 +- src/sha1.h => lib/sha1/sha1.hpp | 0 lib/totp/LICENSE | 21 ++++++++++++ lib/totp/README.md | 59 +++++++++++++++++++++++++++++++++ {src => lib/totp}/totp.cpp | 4 +-- src/totp.h => lib/totp/totp.hpp | 2 +- platformio.ini | 10 +----- src/main.cpp | 8 +++-- 10 files changed, 171 insertions(+), 15 deletions(-) create mode 100644 lib/sha1/LICENSE create mode 100644 lib/sha1/README.md rename {src => lib/sha1}/sha1.cpp (94%) rename src/sha1.h => lib/sha1/sha1.hpp (100%) create mode 100644 lib/totp/LICENSE create mode 100644 lib/totp/README.md rename {src => lib/totp}/totp.cpp (94%) rename src/totp.h => lib/totp/totp.hpp (91%) diff --git a/lib/sha1/LICENSE b/lib/sha1/LICENSE new file mode 100644 index 0000000..6de4c0f --- /dev/null +++ b/lib/sha1/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Weravech + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/sha1/README.md b/lib/sha1/README.md new file mode 100644 index 0000000..582ffba --- /dev/null +++ b/lib/sha1/README.md @@ -0,0 +1,59 @@ +Sourced from https://github.com/Netthaw/TOTP-MCU + +TOTP Pure C Library for ALL MCU +==================== + +Library to generate Time-based One-Time Passwords. + +Implements the Time-based One-Time Password algorithm specified in [RFC 6238](https://tools.ietf.org/html/rfc6238). +Supports different time steps and is compatible with tokens that use the same standard (including software ones, like the Google Authenticator app). + +Tested on MCUs: MSP430, RP2040 + +Installation & usage: +-------------------- +First include header to your file +``` +#include +``` +After included, define key ex. Key is ```MyLegoDoor``` +- Note: The format of hmacKey is array of hexadecimal bytes. +- Most websites provide the key encoded in base32 - RFC3548/RFC4648, either upper or lower case. You can use [this site](https://cryptii.com/pipes/base32-to-hex) to convert the base32 string to hex (make sure you upcase it first if it's lowercase and remove all whitespaces). +``` +uint8_t hmacKey[] = {0x4d, 0x79, 0x4c, 0x65, 0x67, 0x6f, 0x44, 0x6f, 0x6f, 0x72}; // Secret key +``` +Instantiate the TOTP class by providing the secret hmacKey, the length of the hmacKey and the Timestep between codes. +``` +TOTP(hmacKey, 10, 30); // Secret key, Secret key length, Timestep (30s) +``` +Use the ```getCodeFromTimestamp()``` function to get a TOTP from a unix epoch timestamp +``` +uint32_t newCode = getCodeFromTimestamp(1557414000); // Current timestamp since Unix epoch in seconds +``` +Or ```getCodeFromTimeStruct()``` if you want to get a TOTP from a tm struct (Time Struct in C), +``` +struct tm datetime; +datetime.tm_hour = 9; +datetime.tm_min = 0; +datetime.tm_sec = 0; +datetime.tm_mday = 13; +datetime.tm_mon = 5; +datetime.tm_year = 2019; +uint32_t newCode = getCodeFromTimeStruct(datetime); +``` + +If the provided unix timestamp isn't in UTC±0, use ```setTimezone()``` before ```getCodeFromTimestamp()``` or ```getCodeFromTimeStruct()``` to offset the time. + +``` +setTimezone(9); // Set timezone +9 Japan +``` + +You can see an example in blink.c + +Thanks to: +---------- + +* Jose Damico, https://github.com/damico/ARDUINO-OATH-TOKEN +* Peter Knight, https://github.com/Cathedrow/Cryptosuite +* Maniacbug, https://github.com/maniacbug/Cryptosuite +* lucadentella, https://github.com/lucadentella/TOTP-Arduino diff --git a/src/sha1.cpp b/lib/sha1/sha1.cpp similarity index 94% rename from src/sha1.cpp rename to lib/sha1/sha1.cpp index 5cc8631..d7976ea 100644 --- a/src/sha1.cpp +++ b/lib/sha1/sha1.cpp @@ -1,5 +1,5 @@ #include -#include "sha1.h" +#include "sha1.hpp" #define SHA1_K0 0x5a827999 #define SHA1_K20 0x6ed9eba1 diff --git a/src/sha1.h b/lib/sha1/sha1.hpp similarity index 100% rename from src/sha1.h rename to lib/sha1/sha1.hpp diff --git a/lib/totp/LICENSE b/lib/totp/LICENSE new file mode 100644 index 0000000..6de4c0f --- /dev/null +++ b/lib/totp/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Weravech + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/lib/totp/README.md b/lib/totp/README.md new file mode 100644 index 0000000..582ffba --- /dev/null +++ b/lib/totp/README.md @@ -0,0 +1,59 @@ +Sourced from https://github.com/Netthaw/TOTP-MCU + +TOTP Pure C Library for ALL MCU +==================== + +Library to generate Time-based One-Time Passwords. + +Implements the Time-based One-Time Password algorithm specified in [RFC 6238](https://tools.ietf.org/html/rfc6238). +Supports different time steps and is compatible with tokens that use the same standard (including software ones, like the Google Authenticator app). + +Tested on MCUs: MSP430, RP2040 + +Installation & usage: +-------------------- +First include header to your file +``` +#include +``` +After included, define key ex. Key is ```MyLegoDoor``` +- Note: The format of hmacKey is array of hexadecimal bytes. +- Most websites provide the key encoded in base32 - RFC3548/RFC4648, either upper or lower case. You can use [this site](https://cryptii.com/pipes/base32-to-hex) to convert the base32 string to hex (make sure you upcase it first if it's lowercase and remove all whitespaces). +``` +uint8_t hmacKey[] = {0x4d, 0x79, 0x4c, 0x65, 0x67, 0x6f, 0x44, 0x6f, 0x6f, 0x72}; // Secret key +``` +Instantiate the TOTP class by providing the secret hmacKey, the length of the hmacKey and the Timestep between codes. +``` +TOTP(hmacKey, 10, 30); // Secret key, Secret key length, Timestep (30s) +``` +Use the ```getCodeFromTimestamp()``` function to get a TOTP from a unix epoch timestamp +``` +uint32_t newCode = getCodeFromTimestamp(1557414000); // Current timestamp since Unix epoch in seconds +``` +Or ```getCodeFromTimeStruct()``` if you want to get a TOTP from a tm struct (Time Struct in C), +``` +struct tm datetime; +datetime.tm_hour = 9; +datetime.tm_min = 0; +datetime.tm_sec = 0; +datetime.tm_mday = 13; +datetime.tm_mon = 5; +datetime.tm_year = 2019; +uint32_t newCode = getCodeFromTimeStruct(datetime); +``` + +If the provided unix timestamp isn't in UTC±0, use ```setTimezone()``` before ```getCodeFromTimestamp()``` or ```getCodeFromTimeStruct()``` to offset the time. + +``` +setTimezone(9); // Set timezone +9 Japan +``` + +You can see an example in blink.c + +Thanks to: +---------- + +* Jose Damico, https://github.com/damico/ARDUINO-OATH-TOKEN +* Peter Knight, https://github.com/Cathedrow/Cryptosuite +* Maniacbug, https://github.com/maniacbug/Cryptosuite +* lucadentella, https://github.com/lucadentella/TOTP-Arduino diff --git a/src/totp.cpp b/lib/totp/totp.cpp similarity index 94% rename from src/totp.cpp rename to lib/totp/totp.cpp index 817c694..f664cdf 100644 --- a/src/totp.cpp +++ b/lib/totp/totp.cpp @@ -1,5 +1,5 @@ -#include "totp.h" -#include "sha1.h" +#include +#include "totp.hpp" uint8_t *_hmacKey; uint8_t _keyLength; diff --git a/src/totp.h b/lib/totp/totp.hpp similarity index 91% rename from src/totp.h rename to lib/totp/totp.hpp index 4044920..335301b 100644 --- a/src/totp.h +++ b/lib/totp/totp.hpp @@ -2,7 +2,7 @@ #define __TOTP_H__ #include -#include "time.h" +#include void TOTP(uint8_t *hmacKey, uint8_t keyLength, uint32_t timeStep); void setTimezone(uint8_t timezone); diff --git a/platformio.ini b/platformio.ini index 7757c08..d0defb1 100644 --- a/platformio.ini +++ b/platformio.ini @@ -1,15 +1,12 @@ [env:m5paper] platform = espressif32 -; platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream board = m5stack-fire framework = arduino upload_speed = 2000000 -; platform_packages = -; framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git monitor_speed = 115200 board_build.partitions = default_16MB.csv build_flags = - -std=gnu++17 + -std=gnu++20 -Ofast -DBOARD_HAS_PSRAM -mfix-esp32-psram-cache-issue @@ -23,8 +20,3 @@ lib_deps = LovyanGFX bblanchon/ArduinoJson knolleary/PubSubClient -; upload_protocol = espota -; upload_port = 192.168.10.104 -; extra_scripts = -; pre:extra_script.py -; upload_flags = --host_port=55910 \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 22fcc55..f2017d4 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,8 +11,7 @@ #include #include -// https://github.com/Netthaw/TOTP-MCU -#include "totp.h" +#include #define LGFX_M5PAPER #define LGFX_USE_V1 @@ -167,6 +166,11 @@ void send(String state) return; } + if (!WiFi.isConnected()) + { + resetWifi(); + } + if (client->connect(SETTINGS->gettext("mqtt:ident"), SETTINGS->gettext("mqtt:username"), SETTINGS->gettext("mqtt:password"))) { client->unsubscribe(SETTINGS->gettext("mqtt:state_topic"));