Storybooks for commit ce501dd5b79e4be3c7e2128ddda7785e8f0b6c61

Date
11/3/2026, 10:20:51 PM UTC
Summary
fix(settings): bind the HPKE fields into the passkey skR wrap aad
Description
Because:

- `pkR` is stored in the clear and HPKE `mode_base` authenticates nothing
  a PRF holder can check, so anyone holding the `passkeyWraps` row could
  `Seal` a kB of their choosing to `pkR` and the genuine `skR` would open
  it; the client has no reference kB to compare against.
- The only layer keyed by a secret the row holder lacks is the AES-GCM
  wrap of `skR` under HKDF(prfOut), so its aad must cover the HPKE fields.
- Regenerating the v1 fixture is the README's option 3 and assumes
  `passkeyWraps` is empty in stage and prod; `check:frozen` refuses the
  fixture, hence `--no-verify`.

This commit:

- Seals first, then wraps `skR` under `context || frame(pkR, enc, ct)`;
  `openWrapEnvelope` rebuilds the same aad before unwrapping.
- Adds a resealed-kB rejection test; corrupted HPKE fields now fail at the
  AES layer.
- Regenerates the golden vectors with a throwaway script importing only
  `hpke` and `crypto.subtle`, and re-pins `FIXTURE_SHA256`.
- Updates the README's regeneration recipe for the new aad.

Fixes FXA-14742