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(relay): device-signed DID ceremony endpoint (MM-90)" #27

Summary#

  • Phase 1 (crypto crate): Added verify_genesis_op pure function and VerifiedGenesisOp struct to crates/crypto/src/plc.rs. Takes a signed genesis op JSON string and a rotation key, verifies the ECDSA-SHA256 signature, derives the DID (SHA-256 of signed CBOR → base32-lowercase, first 24 chars), and returns extracted op fields.
  • Phase 2 (relay crate): Rewrote POST /v1/dids handler in crates/relay/src/routes/create_did.rs. Replaced relay-signing model with device-signing: client submits a pre-signed genesis op, relay verifies it and promotes the account. Added semantic validation (handle, PDS endpoint, rotation key match), retry resilience via pending_did pre-store, atomic account promotion transaction, and DID document construction from verified op fields.
  • Tests: 5 crypto unit tests (AC1.1–AC1.5) + 9 relay integration tests (AC2.1–AC2.6, AC3.1–AC3.7, AC4.1–AC4.3). All 269 workspace tests pass.
  • Bruno: Updated create-did.bru to new request shape (rotationKeyPublic + signedCreationOp).

Test Plan#

  • cargo test --workspace — 269 tests pass, 0 failures
  • cargo clippy --workspace -- -D warnings — zero warnings
  • cargo fmt --all --check — clean
  • Review docs/test-plans/2026-03-13-MM-90.md for manual verification steps (Bruno API collection, end-to-end DID ceremony flow, semantic validation isolation scenarios)
Labels

None yet.

assignee

None yet.

Participants 1
AT URI
at://did:web:malpercio.dev/sh.tangled.repo.pull/3mgziikj7jg22
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