Skip to content

NIP-46: verify NIP-44 RPC encryption works with Amber and Primal #334

@dmnyc

Description

@dmnyc

Problem

NIP-46 JSON-RPC messages between app and signer are encrypted. Older signers use NIP-04; newer signers (notably Primal's mobile signer) use NIP-44 and may reject NIP-04.

Zapcooking relies on `NDKNip46Signer` from `@nostr-dev-kit/ndk` to handle this. We don't currently have a documented test matrix confirming that NDK's NIP-46 implementation can pair and round-trip a signing request against:

  • Amber (Android)
  • Primal (iOS and Android)
  • Any other signer a contributor brings

Without this, Primal-iOS users may silently fail to pair (or pair but fail to sign) and we won't know until a user files a bug.

Proposed test matrix

For each signer × each URI form (`bunker://`, `nostrconnect://`, scan QR), verify:

Step Expected
Initial pairing Success within 60 s on local wifi
`get_public_key` returns User's actual npub (not the signer's own pubkey)
`sign_event` on a kind-1 note Signed event received back; publishable to a relay
`nip44_encrypt` / `nip44_decrypt` DM Roundtrips with a test peer
Reconnect after app restart Session restored from localStorage without re-pairing
Logout + re-pair with same signer Fresh pairing succeeds, no stale state

Deliverables

  1. A written test log — matrix of signer × operation × result — stored in `docs/dev/NIP46_SIGNER_COMPAT.md` (new file) and updated as more signers are tested.
  2. If any NIP-44-only signer fails: a specific reproduction and the NDK version it fails against. Fix-or-upgrade decision then lives in a follow-up issue.
  3. If all pass: the doc becomes the supported-signer reference and we can confidently point users to it.

Out of scope

  • Test automation. Manual testing is fine — NIP-46 signer apps live on real devices.
  • Changes to the NIP-46 code. This is an investigation; any code changes fall out of what we find.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions