diff --git a/CLAUDE.md b/CLAUDE.md index ed66c8e..274856b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -31,7 +31,7 @@ No known bugs at the moment ### Version 0.2.0 -No changes at the moment. +No pending tasks at the moment. ## Technical Stack @@ -202,3 +202,19 @@ When editing CLAUDE.md or other markdown files, follow these rules to avoid lint - Empty header values should be treated as missing (null) not empty strings - Constructor parameters added: `allowInsecureHttp` for HTTP on non-localhost in dev mode - Private IP ranges to block: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.0/8, 169.254.0.0/16, 0.0.0.0/8 + +### 2026-01-26 - Server Implementation Alignment + +**Completed:** + +- Verified client implementation against server documentation +- Updated server docs to use RFC 5869 `hash_hkdf()` for key derivation (matching client) +- Added recursive key sorting (`sortKeysRecursive()`) to client `ResponseSignature` +- Client and server now use identical signature algorithms + +**Learnings:** + +- Server and client must use identical key derivation and JSON canonicalization +- Recursive key sorting is essential for nested objects like the `license` object in validate responses +- When updating cryptographic implementations, both client and server documentation must be aligned +- The remote server documentation URL was 404 - local `docs/server-implementation.md` is the source of truth