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.