Skip to content

V1 API and identities

The product-facing header is sd_jwt_zk/presentation.h. It exposes only the accepted bounded exact-key families; it is not a generic circuit factory.

Presentation policy

PresentationPolicyV1 contains the fields the application must choose:

FieldMeaning
audienceExpected relying-party audience
purposeApplication purpose, separately transcript-bound
nonceFresh replay challenge
time_min, time_maxAccepted request window
issuer_keyExact accepted P-256 issuer key
statusWhether the revocation check is forbidden or required
trusted_snapshotRevocation-list snapshot policy when the check is required

The typed builders are BuildBearerPresentationRequestV1 and BuildHolderPresentationRequestV1. Arbitrary proof identities are not constructible through this API.

Verification boundary

VerifyRelation reports cryptographic validity only and never records a nonce. VerifyPresentation applies local policy, consumes replay state through the caller-supplied store, and returns exactly one closed result:

ResultMeaning
acceptedRelation and local presentation policy passed
malformedCanonical decoding failed
unsupportedVersion, shape, mode, or identity is outside V1
expiredThe accepted time policy failed
replayedThe nonce was already consumed
policy_deniedTyped local policy rejected the presentation
status_requiredA required revocation component was absent or unacceptable
verification_failedThe cryptographic verification failed

Callers should handle every enum value. There is no success-like default.

Accepted identities

V1 accepts the exact-key bearer identity and the ordered holder credential/KB identity pair. Either may be paired with the canonical private revocation identity when the request requires it. Mode downgrade, component reordering, and proof-identity substitution reject.

The bounded vector index shipped in every source archive is fixtures/compact-vectors.json. Installed-consumer examples under tests/downstream compile against the exported SDJWTZK::sd-jwt-zk target.