Trust Center
What we claim, and what tested it.
The page a due-diligence reviewer opens first. We do not summarise the results — they are listed module by module, and the features we do not support are listed too.
Conformance results
OpenID Foundation conformance suite 5.1.44, executed 2026-09-03. Three plans, 84 modules, 0 failures.
| Role | Plan | Profile | Result |
|---|---|---|---|
| Issuer | oid4vci-1_0-issuer-haip-test-plan sd_jwt_vc · wallet_initiated | OID4VCI 1.0 FINAL + HAIP 1.0 FINAL | passed 54 review 3 skipped 5 failed 0 |
| Verifier | oid4vp-1final-verifier-haip-test-plan x509_hash · request_uri_signed | OID4VP 1.0 FINAL + HAIP 1.0 FINAL | passed 9 skipped 1 failed 0 |
| Wallet | oid4vp-1final-wallet-haip-test-plan sd_jwt_vc · direct_post.jwt | OID4VP 1.0 FINAL + HAIP 1.0 FINAL | passed 6 review 6 failed 0 |
These results were produced by running the suite ourselves. They are not an OpenID Foundation certification, which is a separate process of application, review and listing. Raw execution logs are available on request.
Module-level results
A pass count alone does not tell you which optional features are missing. Here is every module.
Issuer 62
oid4vci-1_0-issuer-metadata-testoid4vci-1_0-issuer-metadata-test-signedoid4vci-1_0-issuer-happy-flowoid4vci-1_0-issuer-happy-flow-additional-requestsoid4vci-1_0-issuer-happy-flow-multiple-clientsoid4vci-1_0-issuer-happy-flow-skip-notificationoid4vci-1_0-issuer-fail-invalid-nonceoid4vci-1_0-issuer-fail-invalid-jwt-proof-signatureoid4vci-1_0-issuer-fail-invalid-key-attestation-signatureoid4vci-1_0-issuer-fail-invalid-client-attestation-signatureoid4vci-1_0-issuer-fail-invalid-client-attestation-pop-signatureoid4vci-1_0-issuer-fail-client-attestation-exp-in-pastoid4vci-1_0-issuer-fail-client-attestation-no-suboid4vci-1_0-issuer-fail-client-attestation-pop-wrong-audoid4vci-1_0-issuer-fail-mismatched-client-attestation-pop-keyoid4vci-1_0-issuer-fail-missing-proofoid4vci-1_0-issuer-fail-unknown-credential-configurationoid4vci-1_0-issuer-fail-unknown-credential-identifieroid4vci-1_0-issuer-fail-on-access-token-in-queryoid4vci-1_0-issuer-happy-flowoid4vci-1_0-issuer-fail-unknown-credential-configurationoid4vci-1_0-issuer-fail-unsupported-encryption-algorithmfapi2-security-profile-final-discovery-end-point-verificationfapi2-security-profile-final-happy-flowfapi2-security-profile-final-user-rejects-authenticationfapi2-security-profile-final-ensure-authorization-request-without-state-successfapi2-security-profile-final-access-token-type-header-case-sensitivityfapi2-security-profile-final-check-dpop-proof-nbf-expfapi2-security-profile-final-ensure-dpopproof-with-iat-10seconds-before-succeedsfapi2-security-profile-final-ensure-dpopproof-with-iat-10seconds-after-succeedsfapi2-security-profile-final-ensure-mismatched-dpop-jkt-failsfapi2-security-profile-final-ensure-token-endpoint-fails-with-mismatched-dpop-proof-jktfapi2-security-profile-final-ensure-token-endpoint-fails-with-mismatched-dpop-jktfapi2-security-profile-final-ensure-dpopproof-at-par-endpoint-binding-successfapi2-security-profile-final-ensure-dpop-auth-code-binding-successfapi2-security-profile-final-ensure-different-state-inside-and-outside-request-objectfapi2-security-profile-final-ensure-authorization-request-with-long-statefapi2-security-profile-final-state-only-outside-request-object-not-usedfapi2-security-profile-final-ensure-request-object-without-redirect-uri-failsfapi2-security-profile-final-ensure-registered-redirect-urifapi2-security-profile-final-ensure-unsigned-authorization-request-without-using-par-failsfapi2-security-profile-final-ensure-redirect-uri-in-authorization-requestfapi2-security-profile-final-ensure-response-type-code-idtoken-failsfapi2-security-profile-final-ensure-response-type-token-failsfapi2-security-profile-final-ensure-client-id-in-token-endpointfapi2-security-profile-final-ensure-holder-of-key-requiredfapi2-security-profile-final-ensure-authorization-code-is-bound-to-clientfapi2-security-profile-final-attempt-reuse-authorization-code-after-one-secondfapi2-security-profile-final-ensure-token-endpoint-fails-with-expired-auth-codefapi2-security-profile-final-dpop-negative-testsfapi2-security-profile-final-refresh-tokenfapi2-security-profile-final-par-ensure-reused-request-uri-prior-to-auth-completion-succeedsfapi2-security-profile-final-par-attempt-reuse-request_urifapi2-security-profile-final-par-attempt-to-use-expired-request_urifapi2-security-profile-final-par-attempt-to-use-request_uri-for-different-clientfapi2-security-profile-final-par-authorization-request-containing-request_uri-form-paramfapi2-security-profile-final-par-attempt-invalid-http-methodfapi2-security-profile-final-par-ensure-pkce-requiredfapi2-security-profile-final-ensure-pkce-code-verifier-requiredfapi2-security-profile-final-incorrect-pkce-code-verifier-rejectedfapi2-security-profile-final-par-plain-pkce-rejectedfapi2-security-profile-final-par-without-duplicate-parameters
Verifier 10
oid4vp-1final-verifier-happy-flowoid4vp-1final-verifier-minimal-cnf-jwkoid4vp-1final-verifier-request-uri-method-postoid4vp-1final-verifier-invalid-kb-jwt-signatureoid4vp-1final-verifier-invalid-credential-signatureoid4vp-1final-verifier-invalid-sd-hashoid4vp-1final-verifier-invalid-kb-jwt-nonceoid4vp-1final-verifier-invalid-kb-jwt-audoid4vp-1final-verifier-kb-jwt-iat-in-pastoid4vp-1final-verifier-kb-jwt-iat-in-future
Wallet 12
happy-flowalternate-happy-flowrequest-uri-method-postfewer-claims-than-availableoptional-credential-setno-claims-in-dcql-querynegative-test-invalid-request-object-signaturenegative-test-mismatched-client-idnegative-test-redirect-uri-with-direct-postnegative-test-missing-noncenegative-test-invalid-client-id-prefixnegative-test-unknown-transaction-data-type
Secure development
- Design
- Requirements from the published specs (HAIP, OID4VCI/VP, FAPI 2.0) are written as acceptance criteria first. We do not retrofit the spec after building.
- Implementation
- Every change goes through a pull request with at least one reviewer.
- Testing
- Unit and integration tests run automatically; protocol behaviour is regression-tested with the OIDF conformance suite.
- Dependencies
- A CycloneDX 1.5 SBOM is produced on every build and retained. 841 components; no strong copyleft (GPL/AGPL).
- Release
- Shipped as container images, pinned by tag.
Vulnerability disclosure
Report to info@hypercerts.com, with [security] in the subject line. Include the affected component and version, minimal reproduction steps and expected impact.
- Acknowledgement
- 3 business days
- Assessment
- 10 business days
- Fix target
- 30–90 days
We do not pursue legal action against good-faith research. Please do not disclose to third parties before a fix, and do not access other people's data or disrupt the service. Contact details are also published at /.well-known/security.txt.
Need anything else for your review?
Raw execution logs, architecture detail and security design documents are available on request.