Issue Credential with Encrypted Status List Issue Verifiable Credential with Encrypted Status List 2021 and index
Issue Verifiable Credential with Encrypted Status List 2021 Resource
There is a specific transaction type for issuing Verifiable Credentials that reference encrypted Status List Resources.
Step 1: Create an encrypted Status List on-ledger
Follow the tutorial here to create an encrypted Status List 2021 Resource on cheqd.
Step 2: Choose index number for Credential
Each encrypted Status List is a bitstring , where each bit represents a Credential which is either revoked or unrevoked (or suspended or unsuspended).
Users should maintain and manage a list of which Credentials match with which specific bitstring indices to be able to revoke or suspend Credentials in the future, and to avoid collisions.
When issuing a Credential, you have the choice of whether to manually specify an index for the Credential within the bitstring, or randomly generate an index number anywhere in the bitstring, or within a given range.
Step 2: Construct Credential Payload with Status List
As mentioned above, when constructing the payload for your Credential, including the encrypted Resource, you have a choice of how you would like to specify the index.
The following parameters may be included:
Parameter Value Optional "revocation"
or "suspension"
number, or set of numbers
Below are a set of examples of how these parameters may be included in Credential payload files for different purposes:
Example Request Format: Random Bitstring index
Copy {
"issuanceOptions" : {
"credential" : {
"credentialSubject" : {
"name" : "tweeddalex" ,
"id" : "did:key:z6MkvG4dpKVpYwYqnwcjRdw8VZ3km4Sisgxm1igaPCFzskxe"
} ,
"issuer" : {
"id" : "did:cheqd:testnet:322761ea-587d-454a-a955-745200301b99"
} ,
"type" : [
"VerifiableCredential"
] ,
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://veramo.io/contexts/profile/v1"
]
}
} ,
"statusOptions" : {
"statusPurpose" : "revocation" ,
"statusListName" : "status-list-2021-encrypted"
}
}
Example Request Format: Specified Bitstring index
Copy {
"issuanceOptions" : {
"credential" : {
"credentialSubject" : {
"name" : "tweeddalex" ,
"id" : "did:key:z6MkvG4dpKVpYwYqnwcjRdw8VZ3km4Sisgxm1igaPCFzskxe"
} ,
"issuer" : {
"id" : "did:cheqd:testnet:322761ea-587d-454a-a955-745200301b99"
} ,
"type" : [
"VerifiableCredential"
] ,
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://veramo.io/contexts/profile/v1"
]
}
} ,
"statusOptions" : {
"statusPurpose" : "revocation" ,
"statusListName" : "status-list-2021-encrypted" ,
"statusListIndex" : 1456
}
}
Example Request Format: Bitstring index within a given range
Copy {
"issuanceOptions" : {
"credential" : {
"credentialSubject" : {
"name" : "tweeddalex" ,
"id" : "did:key:z6MkvG4dpKVpYwYqnwcjRdw8VZ3km4Sisgxm1igaPCFzskxe"
} ,
"issuer" : {
"id" : "did:cheqd:testnet:322761ea-587d-454a-a955-745200301b99"
} ,
"type" : [
"VerifiableCredential"
] ,
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://veramo.io/contexts/profile/v1"
]
}
} ,
"statusOptions" : {
"statusPurpose" : "revocation" ,
"statusListName" : "status-list-2021-encrypted" ,
"statusListRangeStart" : 2000 ,
"statusListRangeEnd" : 3000
}
}
Example Request Format: Bitstring including omitted bits
Copy {
"issuanceOptions" : {
"credential" : {
"credentialSubject" : {
"name" : "tweeddalex" ,
"id" : "did:key:z6MkvG4dpKVpYwYqnwcjRdw8VZ3km4Sisgxm1igaPCFzskxe"
} ,
"issuer" : {
"id" : "did:cheqd:testnet:322761ea-587d-454a-a955-745200301b99"
} ,
"type" : [
"VerifiableCredential"
] ,
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://veramo.io/contexts/profile/v1"
]
}
} ,
"statusOptions" : {
"statusPurpose" : "revocation" ,
"statusListName" : "status-list-2021-encrypted" ,
"statusListRangeStart" : 10 ,
"statusListRangeEnd" : 3000 ,
"indexNotIn" : 13 , 1807, 2434
}
}
Ensure that the "statusPurpose"
and "statusListName"
is the same as the existing Status List on-ledger, created in Step 1 .
Step 3: Execute the transaction
Once you have constructed your payload file, and have saved it as a JSON file, use the transaction below to issue the Verifiable Credential.
Copy veramo execute -m cheqdIssueRevocableCredentialWithStatusList2021 --argsFile path/to/payload.json
Response format
If the transaction is successful, you will get returned a formatted Verifiable Credential, including a populated "credentialStatus"
section.
Example Response Format
Copy Result : {
"credentialSubject" : {
"name" : "tweeddalex" ,
"id" : "did:key:z6MkvG4dpKVpYwYqnwcjRdw8VZ3km4Sisgxm1igaPCFzskxe"
} ,
"issuer" : {
"id" : "did:cheqd:testnet:cc8e5d9f-05f8-4f09-93c5-b9dba4b45404"
} ,
"type" : [
"VerifiableCredential"
] ,
"credentialStatus" : {
"id": "https://resolver.cheqd.net/1.0/identifiers/did:cheqd:testnet:cc8e5d9f-05f8-4f09-93c5-b9dba4b45404?resourceName=testing-payment-rails&resourceType=StatusList2021Revocation#123979",
"type" : "StatusList2021Entry" ,
"statusPurpose" : "revocation" ,
"statusListIndex" : "123979"
} ,
"@context" : [
"https://www.w3.org/2018/credentials/v1" ,
"https://veramo.io/contexts/profile/v1" ,
"https://w3id.org/vc-status-list-2021/v1"
] ,
"issuanceDate" : "2023-08-18T01:39:53.000Z" ,
"proof" : {
"type" : "JwtProof2020" ,
"jwt": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJ2YyI6eyJAY29udGV4dCI6WyJodHRwczovL3d3dy53My5vcmcvMjAxOC9jcmVkZW50aWFscy92MSIsImh0dHBzOi8vdmVyYW1vLmlvL2NvbnRleHRzL3Byb2ZpbGUvdjEiLCJodHRwczovL3czaWQub3JnL3ZjLXN0YXR1cy1saXN0LTIwMjEvdjEiXSwidHlwZSI6WyJWZXJpZmlhYmxlQ3JlZGVudGlhbCJdLCJjcmVkZW50aWFsU3ViamVjdCI6eyJuYW1lIjoidHdlZWRkYWxleCJ9LCJjcmVkZW50aWFsU3RhdHVzIjp7ImlkIjoiaHR0cHM6Ly9yZXNvbHZlci5jaGVxZC5uZXQvMS4wL2lkZW50aWZpZXJzL2RpZDpjaGVxZDp0ZXN0bmV0OmNjOGU1ZDlmLTA1ZjgtNGYwOS05M2M1LWI5ZGJhNGI0NTQwND9yZXNvdXJjZU5hbWU9dGVzdGluZy1wYXltZW50LXJhaWxzJnJlc291cmNlVHlwZT1TdGF0dXNMaXN0MjAyMVJldm9jYXRpb24jMTIzOTc5IiwidHlwZSI6IlN0YXR1c0xpc3QyMDIxRW50cnkiLCJzdGF0dXNQdXJwb3NlIjoicmV2b2NhdGlvbiIsInN0YXR1c0xpc3RJbmRleCI6IjEyMzk3OSJ9fSwic3ViIjoiZGlkOmtleTp6Nk1rdkc0ZHBLVnBZd1lxbndjalJkdzhWWjNrbTRTaXNneG0xaWdhUENGenNreGUiLCJuYmYiOjE2OTIzMjI3OTMsImlzcyI6ImRpZDpjaGVxZDp0ZXN0bmV0OmNjOGU1ZDlmLTA1ZjgtNGYwOS05M2M1LWI5ZGJhNGI0NTQwNCJ9.RPt5D021S0MzUscptUc0CZtK9a2sEvGYOkJkx0EO8xqQwTIQRfL7-Z-ZTbOo2OiHs-kDrXQ8SbTMf2yk1QR_Ag"
}
}