Available Policies (VC)

expiration

Checks if a credential has expired based on its notAfter claim.

Use case: Ensure credentials are still valid and haven't expired.

Example:

{
  "policy": "expiration"
}

not-before

Validates that a credential is not being used before its notBefore or issuedAt date.

Use case: Prevent premature use of credentials that have future validity dates.

Example:

{
  "policy": "not-before"
}

schema

Validates credential data against a JSON Schema.

Use case: Ensure credential structure and data types match expected schema.

Example:

{
  "policy": "schema",
  "schema": {
    "type": "object",
    "properties": {
      "credentialSubject": {
        "type": "object",
        "properties": {
          "name": { "type": "string" }
        }
      }
    }
  },
  "defaultType": null
}

signature

Verifies the cryptographic signature of a credential.

Use case: Ensure credential authenticity and integrity.

Example:

{
  "policy": "signature"
}

allowed-issuer

Validates that the credential issuer is in an allowed list.

Use case: Restrict credentials to trusted issuers only.

Example:

{
  "policy": "allowed-issuer",
  "allowed_issuer": "did:example:issuer123"
}

Multiple issuers:

{
  "policy": "allowed-issuer",
  "allowed_issuer": ["did:example:issuer1", "did:example:issuer2"]
}

regex

Validates credential data at a specific path using a regular expression.

Use case: Pattern matching for specific credential fields (e.g., email format, ID numbers).

Example:

{
  "policy": "regex",
  "path": "$.credentialSubject.email",
  "regex": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$",
  "regex_options": ["IGNORE_CASE"],
  "allowNull": false
}

credential-status

Checks credential status for different status list formats.

Use case: Verify credential hasn't been revoked or suspended.

Example (W3C StatusList2021):

{
  "policy": "credential-status",
  "argument": {
    "discriminator": "w3c",
    "value": 0,
    "purpose": "revocation",
    "type": "StatusList2021"
  }
}

Example (TokenStatusList):

{
  "policy": "credential-status",
  "argument": {
    "discriminator": "ietf",
    "value": 0
  }
}

Example (Multiple allowed status values):

You can specify multiple allowed status values using the values field. This is useful when you want to accept credentials that are in any of several valid states.

{
  "policy": "credential-status",
  "argument": {
    "discriminator": "ietf",
    "values": [0, 1]
  }
}
{
  "policy": "credential-status",
  "argument": {
    "discriminator": "w3c",
    "values": [0, 1],
    "purpose": "revocation",
    "type": "BitstringStatusList"
  }
}

Example (Multiple BitstringStatusList entries):

{
  "policy": "credential-status",
  "argument": {
    "discriminator": "w3c-list",
    "list" : [
      {
        "value": 0,
        "purpose": "revocation",
        "type": "BitstringStatusList"
      },
      {
        "value": 0,
        "purpose": "suspension",
        "type": "BitstringStatusList"
      }
    ]
  }
}

Note: You can use either value (single value) or values (array of values), but at least one must be provided. When using values, the credential status is considered valid if it matches any of the specified values.


revoked-status-list

Checks revocation status using W3C StatusList2021 format.

Use case: Quick revocation check for StatusList2021 credentials.

Example:

{
  "policy": "revoked-status-list"
}

vical

Validates mdoc credentials using VICAL (Verifiable Issuer Certificate Authority List) data.

Use case: Verify mdoc authenticity and certificate chain using trusted VICAL data.

Example:

{
  "policy": "vical",
  "vical": "base64EncodedVicalData",
  "enableDocumentTypeValidation": false,
  "enableTrustedChainRoot": false,
  "enableSystemTrustAnchors": false,
  "enableRevocation": false
}

webhook

Calls an external HTTP endpoint to verify the credential.

Use case: Delegate verification to external systems or custom validation logic.

Example:

{
  "policy": "webhook",
  "url": "https://api.example.com/verify",
  "basicauth_username": "user",
  "basicauth_password": "pass",
  "bearerauth_token": null
}

Bearer token authentication:

{
  "policy": "webhook",
  "url": "https://api.example.com/verify",
  "bearerauth_token": "your-token-here"
}

Available Policies (VP)

Policies are organized by presentation format. All policies can be referenced by their ID string or configured as JSON objects.

JWT VC JSON Policies

jwt_vc_json/audience-check

Validates that the presentation audience matches the expected audience for the verification session.

Use case: Ensure the presentation is intended for the correct verifier.

Example:

{
  "policy": "jwt_vc_json/audience-check"
}

jwt_vc_json/nonce-check

Validates that the presentation nonce matches the expected nonce for the verification session.

Use case: Prevent replay attacks by ensuring the presentation was created for this specific session.

Example:

{
  "policy": "jwt_vc_json/nonce-check"
}

jwt_vc_json/envelope_signature

Verifies the presentation envelope signature using the holder's public key.

Use case: Ensure the presentation was signed by the holder and hasn't been tampered with.

Example:

{
  "policy": "jwt_vc_json/envelope_signature"
}

SD-JWT Policies

dc+sd-jwt/audience-check

Validates that the SD-JWT presentation audience matches the expected audience for the verification session.

Use case: Ensure the SD-JWT presentation is intended for the correct verifier.

Example:

{
  "policy": "dc+sd-jwt/audience-check"
}

dc+sd-jwt/nonce-check

Validates that the SD-JWT presentation nonce matches the expected nonce for the verification session.

Use case: Prevent replay attacks by ensuring the presentation was created for this specific session.

Example:

{
  "policy": "dc+sd-jwt/nonce-check"
}

dc+sd-jwt/kb-jwt_signature

Verifies the Key Binding JWT (KB-JWT) signature using the holder's public key.

Use case: Ensure the KB-JWT was signed by the holder and binds the presentation to the holder's key.

Example:

{
  "policy": "dc+sd-jwt/kb-jwt_signature"
}

dc+sd-jwt/sd_hash-check

Verifies SD-JWT key binding by recalculating and comparing the SD hash.

Use case: Ensure the presentation hash matches the expected hash, validating key binding integrity.

Example:

{
  "policy": "dc+sd-jwt/sd_hash-check"
}

mdoc Policies

mso_mdoc/device-auth

Verifies device authentication using device signature or MAC.

Use case: Ensure the mdoc presentation was authenticated by the device that holds the credential.

Example:

{
  "policy": "mso_mdoc/device-auth"
}

mso_mdoc/device_key_auth

Verifies holder-verified data authorization using KeyAuthorization from the MSO.

Use case: Ensure holder-verified data elements are authorized according to the issuer's KeyAuthorization.

Example:

{
  "policy": "mso_mdoc/device_key_auth"
}

mso_mdoc/issuer_auth

Verifies issuer authentication by validating the COSE_Sign1 signature using the issuer's certificate chain.

Use case: Ensure the issuer-signed data was authenticated by the credential issuer.

Example:

{
  "policy": "mso_mdoc/issuer_auth"
}

mso_mdoc/issuer_signed_integrity

Verifies issuer-signed data integrity by comparing value digests with the MSO.

Use case: Ensure issuer-signed data hasn't been tampered with by validating digest hashes.

Example:

{
  "policy": "mso_mdoc/issuer_signed_integrity"
}

mso_mdoc/mso

Verifies the Mobile Security Object (MSO) validity, including timestamps and digest algorithm support.

Use case: Ensure the MSO is valid and within its validity period.

Example:

{
  "policy": "mso_mdoc/mso"
}
Last updated on April 13, 2026