ESPSomfy-RTS/test
cjkas 43191ba312 feat: sign tokens with a secret key, compare them in constant time
Tokens were HMAC(serverId, credentials + client IP). serverId is public
(mDNS, MQTT, /loginContext), so anyone who saw a token could test PIN
guesses offline. The key is now 32 random bytes made on first boot in
their own NVS namespace, which no settings save clears and no backup
holds. It is made before WiFi starts, from the bootloader's entropy
source.

Tokens are compared with tokenMatches, which takes the same time
whatever the guess, on the apikey header, the socket upgrade and
/login.

createAPIToken never freed its mbedtls context, so every token it made
leaked: 563 bytes per login on the device, until it ran out of memory
after about 150 logins. It now frees it: 0 bytes over 500 logins.

Every token made before the upgrade is refused once. The web UI asks
for login again, and Home Assistant 3.0 logs in again by itself.

Closes #80

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-27 19:41:43 +01:00
..
e2e feat: sign tokens with a secret key, compare them in constant time 2026-10-27 19:41:43 +01:00
fixtures/proto2 fix: deletes send their removal after the reply; test_reboot waits for the restart 2026-10-25 13:07:17 +01:00
js fix: web UI review findings (step 2b) 2026-10-25 20:43:09 +01:00
stubs fix: only touch the task watchdog from tasks that are subscribed to it 2026-10-21 13:45:04 +02:00
test_apitoken feat: sign tokens with a secret key, compare them in constant time 2026-10-27 19:41:43 +01:00
test_configheader fix: stop the 5 s boot wait, tell the client about a bad restore 2026-10-19 18:08:16 +02:00
test_ethphy feat: keep Ethernet settings independent of the framework 2026-10-19 21:13:49 +02:00
test_frame fix: turn a group's sun flag on, not off, for MQTT sunFlag 1 2026-10-12 20:55:21 +02:00
test_json feat: socket protocol 2 core on ws://host/ws 2026-10-24 11:03:07 +02:00
test_logging refactor: time steps with ElapsedTimer::lap() 2026-10-13 15:39:14 +02:00
test_loginthrottle fix: review findings on the login throttle 2026-10-27 18:44:39 +01:00
test_loopqueue fix: settings ops review findings 2026-10-25 10:27:53 +01:00
test_modeleditor fix: deletes send their removal after the reply; test_reboot waits for the restart 2026-10-25 13:07:17 +01:00
test_motion fix: default a set-favorite request's tilt to the favorite tilt 2026-10-14 15:57:49 +02:00
test_mqttcommands refactor: split the transports into the modules GLOSSARY.md names 2026-10-16 13:47:56 +02:00
test_proto fix: settings ops review findings 2026-10-25 10:27:53 +01:00
test_protoassembly fix: edit ops review findings 2026-10-24 18:10:06 +02:00
test_protoedits fix: edit ops second review findings 2026-10-24 18:29:34 +02:00
test_protoops fix: edit ops second review findings 2026-10-24 18:29:34 +02:00
test_protosettings fix: drop Secure Config Only permissions from protocol 2 2026-10-25 11:11:19 +01:00
test_protoslots fix: protocol 2 core review findings 2026-10-24 13:17:15 +02:00
test_pulse refactor: move the RX pulse decoder into PulseDecoder 2026-10-13 21:21:05 +02:00
test_radioscheduler refactor: name radio jobs as GLOSSARY.md does 2026-10-13 15:13:03 +02:00
test_rollingcode test: cover the radio queue rules, shade TX state, rolling codes and web command hold 2026-10-12 20:26:33 +02:00
test_secrets fix: keep stored secrets when an older UI sends them empty 2026-10-18 20:07:31 +02:00
test_sensors fix: move only the tilt of a tilt-only shade for sun and wind 2026-10-13 21:14:20 +02:00
test_shadebehaviour docs: move open known issues to GitHub, drop the finished plans 2026-10-21 13:27:49 +02:00
test_shadechanges refactor: send shade and group changes once per loop() pass 2026-10-16 10:40:44 +02:00
test_shaderequests fix: command op replies that said ok when nothing was done 2026-10-24 13:46:00 +02:00
test_shadesettings refactor: hold shade settings in ShadeSettings and RemoteSettings 2026-10-16 20:31:39 +02:00
test_shadetx test: name the ticket tests as GLOSSARY.md does 2026-10-13 15:35:15 +02:00
test_snapshot test: prove no read item can outgrow the snapshot unit 2026-10-17 23:29:04 +02:00
test_snapshot_limits test: prove no read item can outgrow the snapshot unit 2026-10-17 23:29:04 +02:00
test_taskwdt fix: only touch the task watchdog from tasks that are subscribed to it 2026-10-21 13:45:04 +02:00
test_txbuffer fix: keep a repeater frame until the radio queue takes it 2026-10-12 18:31:39 +02:00
test_txjob refactor: let one RadioScheduler own the radio job queue 2026-10-12 20:36:32 +02:00
test_utils fix: send socket events only from loop() 2026-10-21 15:27:21 +02:00