Skip to content

feat(trust-registry): Pillar B — idprova-trust-registry open library (TrustList sign/verify + RFC 6962 Merkle federation + resolver) - #78

Merged
pratyushsood24 merged 2 commits into
mainfrom
feat/pillar-b-issuer-trust-registry
Jun 26, 2026
Merged

feat(trust-registry): Pillar B — idprova-trust-registry open library (TrustList sign/verify + RFC 6962 Merkle federation + resolver)#78
pratyushsood24 merged 2 commits into
mainfrom
feat/pillar-b-issuer-trust-registry

Conversation

@pratyushsood24

Copy link
Copy Markdown
Contributor

Pillar B — idprova-trust-registry (neutral Issuer Trust Registry + cross-standard resolver)

Third of the three KYA commercial-spine pillars (A merged in #76; C in #77). This turns the design skeleton into a working OPEN library.

Open-core boundary (held)

Per the accepted open-core decision, the free/paid line is at operation/governance/scale — never the protocol or verify path. This public crate ships the open library; the commercial operator/enterprise edition (governance workflow, RBAC/SCIM, HSM custody, multi-operator federation management, live mirroring) stays in a separate component.

What's implemented (open primitives)

  • store — SQLite (rusqlite + r2d2) issuer store; parameterized queries; time-windowed may_attest (Active + within validity window + claim in credential_types).
  • authority — curated TrustList JCS-sign (Ed25519) + offline verify_signed_list. Sign and verify canonicalize the identical TrustList { proof: None } struct → deterministic by construction (no hand-built JSON drift).
  • federation — RFC 6962-style BLAKE3 Merkle log: inclusion + consistency proof generation AND verification, signed tree heads (sign/verify over size ‖ root ‖ sequence). Domain-separated leaf (0x00) / node (0x01) hashing. mirror() is a documented open-core boundary stub (validates the peer URL via the SSRF guard, then returns the operator-edition error).
  • resolverDidAidBackend resolves did:aid: against the trust store; other envelope variants return None (cross-standard mapping table is a documented follow-up).
  • api — wires GET /trust-list (signed), GET /issuers/:did, GET /issuers?claim_type=, POST /resolve, GET /healthz.

Tests (10, all green locally)

sign/verify round-trip + tamper; store round-trip + claim filter; may_attest rules (Active/Suspended/expired/wrong-claim); Merkle inclusion + tamper; consistency (3→7 non-complete and 4→7 / 2→3 complete-subtree seed branch); STH sign/verify; resolver did:aid; boundary stub.

CI hygiene

Build provenance

Codegen by the GLM worker (z.ai glm-5.2) under the orchestrate/review model; Claude reviewed every module and rewrote the consistency-proof verifiers + main.rs, and added the complete-subtree test.

Follow-ups (non-blocking)

  • Cross-standard envelope→did:aid mapping table (WBA keyid / AP2 / MCP / Entra).
  • signer_keyid is hex; multibase for consistency with A/C later.

pratyushsood24 and others added 2 commits June 27, 2026 09:09
…s-standard resolver design + skeleton

Adds idprova-trust-registry: curated, offline-verifiable signed TrustList (sovereign/air-gapped) plus a federation spec (append-only signed log, Merkle consistency proofs) and a cross-standard resolver (Web Bot Auth / AP2 / MCP OAuth / Entra -> did:aid). Owns the verified whitespace: no vendor-neutral multi-operator agent registry exists. Design-only skeleton + DESIGN-pillar-b.md (incl. FEDERATION-SPEC) + SPEC.md.

Co-Authored-By: TechBlaze <info@techblaze.com.au>
… store, Merkle federation proofs, resolver

Turns the Pillar B design skeleton into a working OPEN library:
- store: SQLite (rusqlite+r2d2) issuer store + time-windowed may_attest
- authority: curated TrustList JCS-sign (Ed25519) + offline verify_signed_list
  (sign/verify canonicalize the identical TrustList{proof:None} -> deterministic)
- federation: RFC 6962-style BLAKE3 Merkle log — inclusion + consistency proof
  generation AND verification, signed tree heads; mirror() is a documented
  open-core boundary stub (live multi-operator sync = operator/enterprise edition)
- resolver: DidAidBackend resolves did:aid against the store
- api: wires /trust-list, /issuers, /issuers/:did, /resolve handlers
- 10 tests (sign/verify, store, may_attest rules, Merkle inclusion + consistency
  incl. complete-subtree seed branch, STH, resolver, boundary stub)

Open-core line held: library open; governance/RBAC/HSM/admission-workflow and
live federation management stay in the separate commercial component.

Co-Authored-By: TechBlaze <info@techblaze.com.au>
@pratyushsood24
pratyushsood24 force-pushed the feat/pillar-b-issuer-trust-registry branch from 8105370 to d21c519 Compare June 26, 2026 23:10
@pratyushsood24
pratyushsood24 merged commit 73b5f81 into main Jun 26, 2026
6 of 7 checks passed
@pratyushsood24
pratyushsood24 deleted the feat/pillar-b-issuer-trust-registry branch June 26, 2026 23:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant