Passkey interoperability
Credential access comes first: use the original RP and a provider available on the destination device. Sharing an RP string does not authorize another website or native app. Migration recovers compatible data and checks the same public key before registering a new credential at passkeys.nostrwot.com; it does not transfer the original credential.
The recovery protocol uses kind 31777, PRF input keytr-v1 and a discoverable user handle containing the author’s 32 public-key bytes. Single-key recovery uses Keytr PRF v1. Seed/vault recovery uses the typed v4 proposal and explicit versioned schemas; deployed v1-only apps cannot be assumed to understand it. Match the exact coordinate, encoding, HKDF context, AAD and schema in the protocol reference.
Verify event signatures and authenticated context before import, then derive and compare the expected public key. Reject unknown schemas and invalid payloads. Test independent fixtures and real provider/device behavior; a successful local blob write does not prove synchronization.
The SDK’s nostr-wot-passkey-recovery provider envelope and the extension’s nostr-wot-passkey-vault encrypted snapshot are different formats. Handle the extension format through its parser and migration path; restoreRecovery rejects unknown blobs. Refresh recovery after account changes and keep a file fallback.