Skip to content

Commit ce88a97

Browse files
pepakrizclaude
andcommitted
docs(readme): fix key derivation table to match code
Evolu's path was listed as 24'/0' (actually the reserved Cashu path), the Cashu row was missing, and a Nostr row/paragraph described derivation code that doesn't exist in the repo. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
1 parent 91244d9 commit ce88a97

1 file changed

Lines changed: 11 additions & 11 deletions

File tree

README.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -186,26 +186,26 @@ after accounts exist.
186186

187187
| Consumer | Path `P` | Result |
188188
| --- | --- | --- |
189-
| Evolu master owner | `m/83696968'/39'/0'/24'/0'` | `E` as the 32-byte Evolu owner secret |
189+
| Cashu wallet (reserved, unused) | `m/83696968'/39'/0'/24'/0'` | index `0'` is set aside; nothing derives from it yet |
190+
| Evolu master owner | `m/83696968'/39'/0'/24'/1'` | `E` as the 32-byte Evolu owner secret |
190191
| Default Spark wallet | `m/83696968'/39'/0'/12'/0'` | `E[0:16]` as the 16-byte Spark wallet secret |
191-
| Nostr profile `i` | `m/44'/1237'/i'/0/0` | `K.privateKey` as the Nostr private key |
192192

193-
Nostr profile `0` follows NIP-06 and deliberately uses `K.privateKey` directly;
194-
using `E` would break NIP-06 compatibility. The Spark wallet secret is stored
195-
as hex and used as BIP-39 entropy: wallet initialization and the settings UI
196-
encode it as a 12-word mnemonic (never the raw secret), so the wallet can also
197-
be restored in any BIP-39-compatible Spark client.
193+
The Spark wallet secret is stored as hex and used as BIP-39 entropy: wallet
194+
initialization and the settings UI encode it as a 12-word mnemonic (never the
195+
raw secret), so the wallet can also be restored in any BIP-39-compatible Spark
196+
client. There is no Cashu wallet yet — the path is reserved so that when one
197+
ships, its secret won't collide with an index already used by something else.
198198

199199
`S` itself is backed up as a single [SLIP-39](https://github.com/satoshilabs/slips/blob/master/slip-0039.md)
200200
20-word recovery mnemonic (`src/core/modules/shared/key-derivation.ts`, via
201201
the `slip39-ts` library), encoded as one group with a 1-of-1 threshold — there
202202
is currently no multi-share Shamir splitting, so the phrase is the sole backup
203203
of `S` and must be treated with the same care as a BIP-39 seed phrase. SLIP-39
204204
mnemonics use their own wordlist and checksum and are not interchangeable with
205-
BIP-39 mnemonics. The mnemonic's identifier is derived deterministically (see
206-
table above) rather than randomized, so encoding the same `S` always produces
207-
the same recovery phrase. 256-bit master keys and their 33-word recovery
208-
mnemonics are not supported.
205+
BIP-39 mnemonics. The mnemonic's identifier (SLIP-39's 15-bit metadata field)
206+
is derived deterministically from `S` via HMAC-SHA512 rather than randomized,
207+
so encoding the same `S` always produces the same recovery phrase. 256-bit
208+
master keys and their 33-word recovery mnemonics are not supported.
209209

210210
## CLI
211211

0 commit comments

Comments
 (0)