re structure

This commit is contained in:
2025-07-02 14:22:48 +02:00
parent e80990c521
commit c1cbf18c8f
10 changed files with 171 additions and 15 deletions

21
lib/sha1/LICENSE Normal file
View File

@@ -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.

59
lib/sha1/README.md Normal file
View File

@@ -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 <totp.h>
```
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

View File

@@ -1,5 +1,5 @@
#include <string.h>
#include "sha1.h"
#include "sha1.hpp"
#define SHA1_K0 0x5a827999
#define SHA1_K20 0x6ed9eba1

21
lib/totp/LICENSE Normal file
View File

@@ -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.

59
lib/totp/README.md Normal file
View File

@@ -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 <totp.h>
```
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

View File

@@ -1,5 +1,5 @@
#include "totp.h"
#include "sha1.h"
#include <sha1.hpp>
#include "totp.hpp"
uint8_t *_hmacKey;
uint8_t _keyLength;

View File

@@ -2,7 +2,7 @@
#define __TOTP_H__
#include <inttypes.h>
#include "time.h"
#include <time.h>
void TOTP(uint8_t *hmacKey, uint8_t keyLength, uint32_t timeStep);
void setTimezone(uint8_t timezone);

View File

@@ -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

View File

@@ -11,8 +11,7 @@
#include <HTTPClient.h>
#include <PubSubClient.h>
// https://github.com/Netthaw/TOTP-MCU
#include "totp.h"
#include <totp.hpp>
#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"));