An easy-to-host PDS on the ATProtocol, iPhone and MacOS. Maintain control of your keys and data, always.
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat(identity-wallet): Shamir share backup UI (MM-147) #41

Summary#

  • Relay: POST /v1/dids now generates a fresh per-user 32-byte recovery secret, splits it into 3 Shamir shares via crypto::split_secret(), stores Share 2 in accounts.recovery_share (V010 migration), and returns Share 1 + Share 3 (base32-encoded) in the response
  • Identity wallet Rust: perform_did_ceremony extracts Share 1 → iCloud Keychain ("recovery-share-1"), returns { did, share3 } to the frontend
  • Identity wallet frontend: New ShamirBackupScreen replaces the placeholder — shows iCloud save confirmation, displays Share 3 with copy button + QR code + backup tips, requires confirmation checkbox before proceeding; onboarding state machine gains complete step

Test plan#

  • Build compiles cleanly: cargo build --package relay --package identity-wallet
  • Clippy clean: cargo clippy --package relay --package identity-wallet -- -D warnings
  • Unit tests pass: cargo test --lib --package identity-wallet — new did_ceremony_result_serializes_share3_in_camel_case passes
  • Run app in iOS Simulator: complete onboarding through DID ceremony and verify Shamir backup screen renders with share, copy button, QR code, and confirmation checkbox
  • Verify Share 1 written to Keychain as "recovery-share-1" after DID ceremony
  • Verify Share 2 stored in accounts.recovery_share in relay DB (base32, 52 chars)
  • Verify "I've Saved My Backup" button is disabled until checkbox is checked
  • Verify app advances to complete step after confirmation
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:web:malpercio.dev/sh.tangled.repo.pull/3mhlpskwu6y22
Diff #0

No differences found between the selected revisions.

History

1 round 0 comments
sign up or login to add to the discussion
malpercio.dev submitted #0
patch application failed: error: No valid patches in input (allow with "--allow-empty")
expand 0 comments