Signup ceremony: paste URI, validate against posta-server, passkey + PRF #5
Labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
posta/chat#5
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Parent
#2
What to build
End-to-end signup. A user clicks the invite URL minted in Slice 2 (
/register?code=<code>), sees a single textarea labeled "Paste yourposta+v1://URI", and submits. The backend parses the URI, callsGET <server>/api/v1/identitywith the pasted bearer token to validate, then runs the WebAuthn registration ceremony with the PRF extension. On ceremony success, AES-256-GCM-encrypts the bearer token using the PRF-derived key and stores the user row; the invite is marked consumed atomically with the row insert. Any failure leaves the invite reusable.Acceptance criteria
/register?code=<valid>returns the paste page/register?code=<expired|consumed|unknown>returns a generic "this invite link is invalid" page/identityreturns "token rejected by your posta-server"navigator.credentials.create()credential_idandcredential_public_key/(will resolve to inbox after Slice 5)internal/authcover: PRF-derived AES-GCM encrypt+decrypt roundtrip; ceremony state machine rejects malformed challenges; same PRF output decrypts the same ciphertext deterministicallyBlocked by