Skip to content

fix: E2E fallback to legacy auth when token unavailable - #104

Merged
blaspat merged 1 commit into
mainfrom
fix/e2e-resolve-token
Aug 5, 2026
Merged

fix: E2E fallback to legacy auth when token unavailable#104
blaspat merged 1 commit into
mainfrom
fix/e2e-resolve-token

Conversation

@blaspat

@blaspat blaspat commented Aug 5, 2026

Copy link
Copy Markdown
Owner

What

Add resolve_token() to TokenStore for E2E handshake key derivation, and gracefully fall back to legacy auth when a pre-v0.1.2 paired node has no stored raw token.

Why

The E2E PAKE handshake (PR #102) mixes the raw pairing token into the HKDF. Nodes paired before v0.1.2 only have a token hash stored — no raw token. Without this fix, those nodes get TokenStoreErrorhello_err → disconnected. Now they silently fall back to legacy plaintext-token auth instead.

Changes

  • tokens.py_StoredRecord gets optional token field; create_token() stores the raw token; new resolve_token() returns it
  • wsserver/server.py — catch TokenStoreError in E2E key exchange → fall back to legacy auth; conditional hello_ack (ECDH params only when E2E is active)

The E2E handshake needs the raw pairing token to derive the HKDF
handshake key, but TokenStore only stored SHA-256 hashes. This adds:

- token field to _StoredRecord (Fernet-encrypted at rest)
- resolve_token(name) method to retrieve raw token
- Graceful fallback to legacy auth when token not available
  (nodes paired before this fix get plaintext auth until re-paired)

Also fixes auth logic: E2E proof verification now correctly skips
the legacy token_store.validate() call instead of overwriting
is_valid=True with the (empty) auth.token.

Signed-off-by: Blasius Patrick <blasius.patrick@gmail.com>
@blaspat
blaspat merged commit ecb0503 into main Aug 5, 2026
4 checks passed
@blaspat
blaspat deleted the fix/e2e-resolve-token branch August 5, 2026 02:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant