@@ -26,7 +26,9 @@ Even if an attacker gains access to your network, they **cannot** install unsign
2626
2727- ** ESP32 Arduino Core 3.3.0+**
2828- ** Python 3.6+** with ` cryptography ` library
29+ <!-- vale Espressif-latest.Units = NO -->
2930- ** OTA-capable partition scheme** (e.g., "Minimal SPIFFS (1.9MB APP with OTA)")
31+ <!-- vale Espressif-latest.Units = YES -->
3032
3133## Quick Start Guide
3234
@@ -52,13 +54,17 @@ python bin_signing.py --extract-pubkey private_key.pem --out public_key.pem
5254
53551 . Copy ` public_key.h ` (generated in step 1) to this sketch directory
54562 . Open ` SignedOTA.ino ` in Arduino IDE
57+ <!-- vale Espressif-latest.TermsSingleCorrectSpelling = NO -->
55583 . Configure WiFi credentials:
5659 ``` cpp
5760 const char *ssid = " YourWiFiSSID" ;
5861 const char *password = " YourWiFiPassword" ;
5962 ```
63+ <!-- vale Espressif-latest.TermsSingleCorrectSpelling = YES -->
64+ <!-- vale Espressif-latest.Units = NO -->
60654 . Select appropriate partition scheme:
6166 - ** Tools → Partition Scheme → "Minimal SPIFFS (1.9MB APP with OTA)"**
67+ <!-- vale Espressif-latest.Units = YES -->
6268
6369### 3. Upload Initial Firmware
6470
@@ -189,9 +195,11 @@ const char *ota_password = "yourpassword"; // Set password
189195** Cause** : Signature verification setup failed, or partition scheme issue
190196
191197** Solutions** :
198+ <!-- vale Espressif-latest.Units = NO -->
1921991 . Check partition scheme (use "Minimal SPIFFS (1.9MB APP with OTA)")
1932002 . Verify ` public_key.h ` is in the sketch directory
1942013 . Check hash and signature algorithm match your key type
202+ <!-- vale Espressif-latest.Units = YES -->
195203
196204### "End Failed" Error
197205
@@ -208,7 +216,7 @@ const char *ota_password = "yourpassword"; // Set password
208216** Cause** : Network timeout or connection issue
209217
210218** Solutions** :
211- 1 . Check WiFi signal strength
219+ 1 . Check Wi-Fi signal strength
2122202 . Ensure device is reachable on the network
2132213 . Try increasing timeout: ` ArduinoOTA.setTimeout(5000) `
214222
@@ -219,7 +227,7 @@ const char *ota_password = "yourpassword"; // Set password
219227** Solutions** :
2202281 . Verify device is on the same network
2212292 . Check firewall settings aren't blocking port 3232
222- 3 . Ensure WiFi signal strength is adequate
230+ 3 . Ensure Wi-Fi signal strength is adequate
2232314 . If using password protection, ensure the password is correct
2242325 . Try: ` python <ARDUINO_ROOT>/tools/espota.py -i <device-ip> -f firmware_signed.bin -d `
225233
@@ -242,10 +250,12 @@ const char *ota_password = "yourpassword"; // Set password
242250
243251### What This Does NOT Protect Against
244252
253+ <!-- vale Espressif-latest.Cursing = NO -->
245254- ❌ Physical access (USB flashing still works)
246255- ❌ Downgrade attacks (no version checking by default)
247256- ❌ Replay attacks (no timestamp/nonce by default)
248257- ❌ Key compromise (if private key is stolen)
258+ <!-- vale Espressif-latest.Cursing = YES -->
249259
250260### Additional Security
251261
0 commit comments