Key binding invalid
ERR-P01-IDT-2005 - Key binding invalid
Section titled “ERR-P01-IDT-2005 - Key binding invalid”Summary
Section titled “Summary”The key_binding_jws that ties the X25519 encryption key to the Ed25519
signing identity failed verification.
When this is raised
Section titled “When this is raised”- On
POST /v1/agent/register(client-supplied-key path), the binding JWS is absent, malformed, or fails any of its checks:- not a compact (three-part) JWS, or non-JSON header/payload,
algnotEdDSA, orpurposenot"key-binding",sig_jwk.x/enc_jwk.xdo not match the supplied public keys,slugdoes not match the request slug,expmissing or in the past,- the Ed25519 signature does not verify against the sig key.
- The binding is the proof-of-possession that closes the registration PoP gap: it shows the holder of the sig private key vouches for the enc key.
What to do
Section titled “What to do”- Sign a binding JWS with the agent’s Ed25519 private key over a payload
containing
purpose: "key-binding", the exactsig_jwk/enc_jwkxvalues, the matchingslug, and a futureexp. Pass it askey_binding_jws. - Or sidestep client key management entirely with
generate_keypair: true, which skips the binding step.
Server-side cause
Section titled “Server-side cause”- Raised by:
packages/identity/src/service/register.ts-verifyBindingJws(and the “key_binding_jws is required” guard inregister). - Guard: each
RegisterError('binding_invalid', …)site; mapped toIDENTITY_ERR.binding_invalid(422) inpackages/identity/src/router/register.ts.
Example response
Section titled “Example response”{ "type": "https://citizenry.id/errors/ERR-P01-IDT-2005", "title": "Unprocessable", "status": 422, "code": "ERR-P01-IDT-2005", "message": "binding signature verification failed", "method": "POST", "instance": "/v1/agent/register", "request_url": "https://api.citizenry.id/v1/agent/register", "timestamp": "2026-05-17T07:00:00.000Z"}Related codes
Section titled “Related codes”ERR-P01-IDT-2001- signing JWK invalid.ERR-P01-IDT-2006- encryption JWK invalid.
Changelog
Section titled “Changelog”- 0.1.0 - introduced.