โ† All docs  ยท  Home

ADR 0003 โ€” Self-signed P-256 identity (federating) + OAuth silos

Context

Federation requires that any server can verify who said what without sharing a secret with the issuer. At the same time, apps that already own their users want to attribute feedback without minting keypairs for everyone.

Decision

Two identities (INVARIANT 4):

  1. Self-signed ECDSA P-256 (the federating identity). Mirrors Mangrove. The public key (SPKI PEM) is the portable issuer id and the JWS kid. Each annotation carries a detached ES256 signature over its RFC 8785 canonical bytes (ADR 0002). Implemented with the pure-Rust p256 crate (RustCrypto, pinned to the stable 0.13 line), so it compiles to native and wasm32. A compact urn:freedback:key:<sha256-of-SPKI> is offered as creator.id.
  2. App-managed OAuth, keyed by composite (app_id, user_id). Creates a local-authority silo: valid within the app's domain, does not federate. The feedback-server's auth middleware accepts either.

Why P-256 (not Ed25519)

Consequences