Runs a fixed vLEI-backed relying-party onboarding scenario: dual proof of possession binds a local PID wallet key to a controlled OOR role key; a local registrar issues signed reference access/registration artifacts; the wallet enforces the registered DCQL claim and purpose.
Boundary: Unsolicited reference scenario, not a GLEIF/SPRIND partnership. The real GLEIF Legal-Entity fixture is a separate evidence lane; the runnable OOR, PID, wallet and registrar are synthetic local fixtures. NOT production KYC, eIDAS conformity or official WRPAC/WRPRC conformance.
Proves 'over 18' with a real Groth16/BN254 zero-knowledge proof — the verifier learns the predicate, not identity, and presentations are unlinkable across relying parties.
Boundary: Real ZK on the public route, but classical (Groth16/BN254), single-party trusted setup — reference-grade, not a ceremony.
Issues and presents an EUDI-shaped credential over the standard OID4VCI/OID4VP + SD-JWT VC / mdoc rails, verified against real wallet clients.
Boundary: Interop evidence against standard wallets/clients — NOT a Member-State-notified PID provider.
Reveals only the requested attributes from a credential, blinding the rest via salted-hash commitments (SD-JWT-style).
Boundary: Real selective disclosure (salted-hash); the ZK predicate path is separate (the age route above).
Defense-in-depth: a stolen token fails at the FAPI 2.0 layer (sender-constrained tokens); a rogue client fails at the HAIP layer (attestation chains to a trusted wallet-provider root).
Boundary: Enforcing modes opt-in per endpoint; the wallet-provider root is a configured STAND-IN, NOT EU/eIDAS-accredited.
Tamarin-discharged protocol theorems (symbolic model) backing the privacy/authenticity properties — the 'provable' layer few wallet teams bring.
Boundary: Symbolic (Dolev-Yao) model with stated out-of-band assumptions — provable-security evidence, not a runtime guarantee of the deployed binary.