Show code cell source
const plantumlEncoder = require('plantuml-encoder')
const tslab = require("tslab");
import jwt_decode from "jwt-decode";
Follow a video#
More information about verifiable presentations
Show code cell source
const encodedTriangle = plantumlEncoder.encode(`
@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml
Person_Ext(issuer, "Issuer")
Boundary(b1,"Verification") {
Person(holder, "Holder", $sprite="person2")
Person(verifier, "Verifier")
}
Rel_L(issuer, holder, "issue VC", "Request for offer")
Rel(holder, issuer, "claim", "Response for offer")
Rel_R(verifier, holder, "ask for VCs", "Request for sharing (Presentation Challenge)")
Rel(holder, verifier, "issue signed VP", "VP", $sprite = "&envelope-closed")
@enduml
`)
const urlTriangle = 'http://www.plantuml.com/plantuml/svg/' + encodedTriangle
tslab.display.html(`<img src="${urlTriangle}"/>`)
Flow#
Show code cell source
const encodedFlow = plantumlEncoder.encode(`
title: Affinidi: Share VC Flow
participant "Verifier Service" as verifier
actor "Verifier client , sdk" as client
actor "SDK Holder" as holder
database "Wallet storage" as wallet
participant "Registry" as registry
client -> verifier: BuildCredentialRequest (credentialRequirements)
verifier -> client: 200 [credentialShareRequest]
note over client, verifier: credentialShareRequest signing and credentialShareRequestToken generated
client -> holder: some way deliver (credentialShareRequestToken)
note over client, verifier: deliver way could be as QR code which posted on web, as PN in internal App logic implementation, etc
note over client, verifier: Generating CredentialShareResponseToken based on the credentialShareRequestToken
note over client, verifier
Verification of the Verifier signature on the credentialShareRequestToken
1. Resolve Verifier DID (get publicKey)
2. Verify Verifier signature (using publicKey)
end note
holder -> registry: resolveDid(VerifierDid)
registry -> holder: 200 [DidDocument]
holder -> wallet: getCredentials(credentialShareRequestToken)
wallet -> holder: 200 [credentials]
holder -> holder: Generating VP with credentials inside
holder -> client: some way to call back (VP)
note over verifier, holder
Verifier validate credentials:
1. Resolve Holder DID (get publicKey)
2. Verify Holder signature on JWT (using publicKey)
3. Validate that Holder its a Subject in credentials(optional)
4. Resolve Issuer DID(get publicKey)
5. Verify Issuer signature on each credentials (using publicKey)
Executing internall App logic
end note
client -> registry: resolveDid(HolderDid)
registry -> client: 200 [DidDocument]
client -> registry: resolveDid(IssuerDid)
registry -> client: 200 [DidDocument]
client -> client : do VP Validation
client -> client : do VC Validation
`)
const urlFlow = 'http://www.plantuml.com/plantuml/svg/' + encodedFlow
tslab.display.html(`<img src="${urlFlow}"/>`)
Lets import SDK
const { createWallet } = require('@affinidi/wallet-node-sdk')
const walletFactory = createWallet('AffinityCore')
Lets setup wallets
const accessApiKey = '<your key use affinidi cli to generate a key>'
const options = {
env: 'prod',
accessApiKey:accessApiKey,
}
const verifierWallet = await walletFactory.createWallet(options, 'P@55word!!!')
const holderWallet = await walletFactory.createWallet(options, 'P@55word!!!')
Verifier create Presentation Challenge#
const presentationChallenge = await verifierWallet.generatePresentationChallenge([
{ type: ['VerifiableCredential', 'ContentLike'] },
])
JSON.stringify(jwt_decode(presentationChallenge),null,2)
{
"interactionToken": {
"credentialRequirements": [
{
"type": [
"VerifiableCredential",
"ContentLike"
],
"constraints": []
}
],
"callbackURL": ""
},
"exp": 1663398268356,
"typ": "credentialRequest",
"jti": "038e7a1d81ae3d05",
"iss": "did:elem:EiBsQ5S0kNYU-CkVLHFVQQxSp58gpcQP9zg1nFGTr-avjQ;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBeVptVmxZbU16WkdJNE1UYzJPRGc0TXpRek9EWmxOVFJqTkRKalpqTmtOMll3TjJFMU1UWTVOVEJqWm1NNFpUYzJPRGcxTTJZek56a3dNbVkwWlRZNE1TSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TWpjMk9HVXpNVFUwWlRWallXWTJabVppWm1FM1pHVm1PVE15TXpNMU1EWTJOalU0T0dWaU9HUTROemhqTVdFMk1qRXhaR1kxWXpneVpHUmpNalJpT1dVaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiRnNnRUdlWVhOLTdKN2pPUUpyNjRoaHV5ZmNUWmxuVHRKeXl6SEhXelhRRmVDRTQ4dnYxM0c5TkZXOFo2MElyTHJmTkFtWEpaU0c1cXpMZlRLMDNhSVEifQ",
"kid": "did:elem:EiBsQ5S0kNYU-CkVLHFVQQxSp58gpcQP9zg1nFGTr-avjQ#primary"
}
Lest prepare credential#
const jsonSchema = 'https://schema.affinidi.com/ContentLikeV1-0.json'
const jsonContext = 'https://schema.affinidi.com/ContentLikeV1-0.jsonld'
const id = `claimId:${(Math.random() + 1).toString(36).substring(2)}`
const unsignedVC = {
'@context': ['https://www.w3.org/2018/credentials/v1', jsonContext],
id,
type: ['VerifiableCredential', 'ContentLike'],
holder: {
id: holderWallet.did
},
credentialSubject: {
data: {
url: 'https://www.youtube.com/watch?v=owbkzvLhblk',
date: new Date().toISOString(),
like: true,
score: 10
},
},
credentialSchema: {
id: jsonSchema,
type: 'JsonSchemaValidator2018',
},
issuanceDate: new Date().toISOString(),
expirationDate: '2065-09-10T00:00:00.000Z',
}
const signedCredential = await holderWallet.signUnsignedCredential(unsignedVC)
Create Verifiable Presentation#
const vp = await holderWallet.createPresentationFromChallenge(
presentationChallenge,
[signedCredential],
'youtube.com',
)
JSON.stringify(vp,null,2)
{
"@context": [
"https://www.w3.org/2018/credentials/v1"
],
"id": "presentationId:f461e8a2b035d689",
"type": [
"VerifiablePresentation"
],
"holder": {
"id": "did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBelpXRTJZamsyT1dabU1qZG1ZelppWlRKaE56TTFNREExTW1FMFpqWTNaamt4WWpjelltRmpNemMxT0RCak9UQTJabVUxTnpWbFpEVXpPVEpsTURWaVlTSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TWpSaU9Ea3pNRFJoWmpObE9XTTNaRGxtT0RRNU5qTTJZalUyWldGa056azRNalkyWldNMFlqWTNOR0pqTlRZNE1qVXpZalF6WVdRNE9UVTVNRGt6TURZaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiNl9OUjRVUl83clFHV2gwUzViVy05eXAyY1JSTEpVbTd2TXVaVmxPOHZLdHBMR1FMNTRqZHNkOTNzZ1ladGRTRGJWY2ZCQkROYlRncmNwUGNKRHFIOUEifQ"
},
"verifiableCredential": [
{
"@context": [
"https://www.w3.org/2018/credentials/v1",
"https://schema.affinidi.com/ContentLikeV1-0.jsonld"
],
"id": "claimId:3ei8jmbf5u",
"type": [
"VerifiableCredential",
"ContentLike"
],
"holder": {
"id": "did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBelpXRTJZamsyT1dabU1qZG1ZelppWlRKaE56TTFNREExTW1FMFpqWTNaamt4WWpjelltRmpNemMxT0RCak9UQTJabVUxTnpWbFpEVXpPVEpsTURWaVlTSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TWpSaU9Ea3pNRFJoWmpObE9XTTNaRGxtT0RRNU5qTTJZalUyWldGa056azRNalkyWldNMFlqWTNOR0pqTlRZNE1qVXpZalF6WVdRNE9UVTVNRGt6TURZaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiNl9OUjRVUl83clFHV2gwUzViVy05eXAyY1JSTEpVbTd2TXVaVmxPOHZLdHBMR1FMNTRqZHNkOTNzZ1ladGRTRGJWY2ZCQkROYlRncmNwUGNKRHFIOUEifQ"
},
"credentialSubject": {
"data": {
"url": "https://www.youtube.com/watch?v=owbkzvLhblk",
"date": "2022-09-17T06:54:31.010Z",
"like": true,
"score": 10
}
},
"credentialSchema": {
"id": "https://schema.affinidi.com/ContentLikeV1-0.json",
"type": "JsonSchemaValidator2018"
},
"issuanceDate": "2022-09-17T06:54:31.010Z",
"expirationDate": "2065-09-10T00:00:00.000Z",
"issuer": "did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBelpXRTJZamsyT1dabU1qZG1ZelppWlRKaE56TTFNREExTW1FMFpqWTNaamt4WWpjelltRmpNemMxT0RCak9UQTJabVUxTnpWbFpEVXpPVEpsTURWaVlTSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TWpSaU9Ea3pNRFJoWmpObE9XTTNaRGxtT0RRNU5qTTJZalUyWldGa056azRNalkyWldNMFlqWTNOR0pqTlRZNE1qVXpZalF6WVdRNE9UVTVNRGt6TURZaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiNl9OUjRVUl83clFHV2gwUzViVy05eXAyY1JSTEpVbTd2TXVaVmxPOHZLdHBMR1FMNTRqZHNkOTNzZ1ladGRTRGJWY2ZCQkROYlRncmNwUGNKRHFIOUEifQ",
"proof": {
"type": "EcdsaSecp256k1Signature2019",
"created": "2022-09-17T06:54:31Z",
"verificationMethod": "did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw#primary",
"proofPurpose": "assertionMethod",
"jws": "eyJhbGciOiJFUzI1NksiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..qUwDsQXYF008YwMn1MFG9JQbD8VF7hZYauJf-3bqYMMifqN6J6x7DIXQY6cOHSw3zwLLRRgmVtktJiG1Gd3eXg"
}
}
],
"proof": {
"type": "EcdsaSecp256k1Signature2019",
"created": "2022-09-17T06:54:36Z",
"verificationMethod": "did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw#primary",
"proofPurpose": "authentication",
"challenge": "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpbnRlcmFjdGlvblRva2VuIjp7ImNyZWRlbnRpYWxSZXF1aXJlbWVudHMiOlt7InR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJDb250ZW50TGlrZSJdLCJjb25zdHJhaW50cyI6W119XSwiY2FsbGJhY2tVUkwiOiIifSwiZXhwIjoxNjYzMzk4MjY4MzU2LCJ0eXAiOiJjcmVkZW50aWFsUmVxdWVzdCIsImp0aSI6IjAzOGU3YTFkODFhZTNkMDUiLCJpc3MiOiJkaWQ6ZWxlbTpFaUJzUTVTMGtOWVUtQ2tWTEhGVlFReFNwNThncGNRUDl6ZzFuRkdUci1hdmpRO2VsZW06aW5pdGlhbC1zdGF0ZT1leUp3Y205MFpXTjBaV1FpT2lKbGVVcDJZMGRXZVZsWVVuQmlNalJwVDJsS2FtTnRWbWhrUjFWcFRFTktjbUZYVVdsUGFVbHFZMGhLY0dKWFJubGxVMGx6U1cxR2MxcDVTVFpKYTFaVVRXcFZNbE41U2praUxDSndZWGxzYjJGa0lqb2laWGxLUVZreU9YVmtSMVkwWkVOSk5rbHRhREJrU0VKNlQyazRkbVI2VG5CYVF6VjJZMjFqZG1NeVZtcGtXRXB3WkVocmRtUnFTV2xNUTBwM1pGZEtjMkZYVGt4YVdHdHBUMngwTjBsdGJHdEphbTlwU1ROQ2VXRlhNV2hqYm10cFRFTktNV015Um01YVUwazJTVzVPY0ZveU5YQmliV05wVEVOS01HVllRbXhKYW05cFZUSldhbU5FU1RGT2JYTjRWbTFXZVdGWFduQlpNa1l3WVZjNWRWTXlWalZOYWtGNFQwTkpjMGx1UWpGWmJYaHdXVEIwYkdWVmFHeGxRMGsyU1dwQmVWcHRWbXhaYlUxNldrZEpORTFVWXpKUFJHYzBUWHBSZWs5RVdteE9WRkpxVGtSS2FscHFUbXRPTWxsM1RqSkZNVTFVV1RWT1ZFSnFXbTFOTkZwVVl6SlBSR2N4VFRKWmVrNTZhM2ROYlZrd1dsUlpORTFUU2psTVNITnBZVmRSYVU5cFNXcGpiVlpxWWpOYWJHTnVhMmxNUTBveFl6SkdibHBUU1RaSmJrcHNXVEk1TWxwWVNqVkphWGRwWkVoc2QxcFRTVFpKYkU1c1dUTkJlVTVVV25KTlZscHNZMjFzYldGWFRtaGtSMngyWW10MGJHVlVTWGROVkdkcFRFTktkMlJYU25OaFYwNU1XbGhzU1ZwWVoybFBhVWwzVFdwak1rOUhWWHBOVkZVd1dsUldhbGxYV1RKYWJWcHBXbTFGTTFwSFZtMVBWRTE1VFhwTk1VMUVXVEpPYWxVMFQwZFdhVTlIVVRST2VtaHFUVmRGTWsxcVJYaGFSMWt4V1hwbmVWcEhVbXBOYWxKcFQxZFZhV1pXTUhOSmJVWXhaRWRvYkdKdVVuQlpNa1l3WVZjNWRVbHFjR0pKYVU1M1kyMXNkRmxZU2pWSmJEQnpTVzFHZW1NeVZubGtSMngyWW1zeGJHUkhhSFphUTBrMlYzbEphbU5JU25CaVYwWjVaVk5LWkdaUklpd2ljMmxuYm1GMGRYSmxJam9pUm5OblJVZGxXVmhPTFRkS04ycFBVVXB5TmpSb2FIVjVabU5VV214dVZIUktlWGw2U0VoWGVsaFJSbVZEUlRRNGRuWXhNMGM1VGtaWE9GbzJNRWx5VEhKbVRrRnRXRXBhVTBjMWNYcE1abFJMTUROaFNWRWlmUSIsImtpZCI6ImRpZDplbGVtOkVpQnNRNVMwa05ZVS1Da1ZMSEZWUVF4U3A1OGdwY1FQOXpnMW5GR1RyLWF2alEjcHJpbWFyeSJ9.91747dcc293f1040f74337a3d0f584c9ef3df1d79c79b71d2e5c5bdfbeaf25a22a1f73cf96b4e26931496d837cb5d1044c81a0f745608225abf32ea5f8805c1c",
"domain": "youtube.com",
"jws": "eyJhbGciOiJFUzI1NksiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..-651IUOrbZTWW7z86eC7ED7ivLfdzyYw4sNnLDvq_Ilu4wMJQDVMo1hWp--GRO8Lxk0H3Ntg1_5veAjOqmye7Q"
}
}
Verification#
const result = await verifierWallet.verifyPresentation(vp)
result
{
isValid: true,
did: 'did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBelpXRTJZamsyT1dabU1qZG1ZelppWlRKaE56TTFNREExTW1FMFpqWTNaamt4WWpjelltRmpNemMxT0RCak9UQTJabVUxTnpWbFpEVXpPVEpsTURWaVlTSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TWpSaU9Ea3pNRFJoWmpObE9XTTNaRGxtT0RRNU5qTTJZalUyWldGa056azRNalkyWldNMFlqWTNOR0pqTlRZNE1qVXpZalF6WVdRNE9UVTVNRGt6TURZaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiNl9OUjRVUl83clFHV2gwUzViVy05eXAyY1JSTEpVbTd2TXVaVmxPOHZLdHBMR1FMNTRqZHNkOTNzZ1ladGRTRGJWY2ZCQkROYlRncmNwUGNKRHFIOUEifQ',
challenge: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpbnRlcmFjdGlvblRva2VuIjp7ImNyZWRlbnRpYWxSZXF1aXJlbWVudHMiOlt7InR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJDb250ZW50TGlrZSJdLCJjb25zdHJhaW50cyI6W119XSwiY2FsbGJhY2tVUkwiOiIifSwiZXhwIjoxNjYzMzk4MjY4MzU2LCJ0eXAiOiJjcmVkZW50aWFsUmVxdWVzdCIsImp0aSI6IjAzOGU3YTFkODFhZTNkMDUiLCJpc3MiOiJkaWQ6ZWxlbTpFaUJzUTVTMGtOWVUtQ2tWTEhGVlFReFNwNThncGNRUDl6ZzFuRkdUci1hdmpRO2VsZW06aW5pdGlhbC1zdGF0ZT1leUp3Y205MFpXTjBaV1FpT2lKbGVVcDJZMGRXZVZsWVVuQmlNalJwVDJsS2FtTnRWbWhrUjFWcFRFTktjbUZYVVdsUGFVbHFZMGhLY0dKWFJubGxVMGx6U1cxR2MxcDVTVFpKYTFaVVRXcFZNbE41U2praUxDSndZWGxzYjJGa0lqb2laWGxLUVZreU9YVmtSMVkwWkVOSk5rbHRhREJrU0VKNlQyazRkbVI2VG5CYVF6VjJZMjFqZG1NeVZtcGtXRXB3WkVocmRtUnFTV2xNUTBwM1pGZEtjMkZYVGt4YVdHdHBUMngwTjBsdGJHdEphbTlwU1ROQ2VXRlhNV2hqYm10cFRFTktNV015Um01YVUwazJTVzVPY0ZveU5YQmliV05wVEVOS01HVllRbXhKYW05cFZUSldhbU5FU1RGT2JYTjRWbTFXZVdGWFduQlpNa1l3WVZjNWRWTXlWalZOYWtGNFQwTkpjMGx1UWpGWmJYaHdXVEIwYkdWVmFHeGxRMGsyU1dwQmVWcHRWbXhaYlUxNldrZEpORTFVWXpKUFJHYzBUWHBSZWs5RVdteE9WRkpxVGtSS2FscHFUbXRPTWxsM1RqSkZNVTFVV1RWT1ZFSnFXbTFOTkZwVVl6SlBSR2N4VFRKWmVrNTZhM2ROYlZrd1dsUlpORTFUU2psTVNITnBZVmRSYVU5cFNXcGpiVlpxWWpOYWJHTnVhMmxNUTBveFl6SkdibHBUU1RaSmJrcHNXVEk1TWxwWVNqVkphWGRwWkVoc2QxcFRTVFpKYkU1c1dUTkJlVTVVV25KTlZscHNZMjFzYldGWFRtaGtSMngyWW10MGJHVlVTWGROVkdkcFRFTktkMlJYU25OaFYwNU1XbGhzU1ZwWVoybFBhVWwzVFdwak1rOUhWWHBOVkZVd1dsUldhbGxYV1RKYWJWcHBXbTFGTTFwSFZtMVBWRTE1VFhwTk1VMUVXVEpPYWxVMFQwZFdhVTlIVVRST2VtaHFUVmRGTWsxcVJYaGFSMWt4V1hwbmVWcEhVbXBOYWxKcFQxZFZhV1pXTUhOSmJVWXhaRWRvYkdKdVVuQlpNa1l3WVZjNWRVbHFjR0pKYVU1M1kyMXNkRmxZU2pWSmJEQnpTVzFHZW1NeVZubGtSMngyWW1zeGJHUkhhSFphUTBrMlYzbEphbU5JU25CaVYwWjVaVk5LWkdaUklpd2ljMmxuYm1GMGRYSmxJam9pUm5OblJVZGxXVmhPTFRkS04ycFBVVXB5TmpSb2FIVjVabU5VV214dVZIUktlWGw2U0VoWGVsaFJSbVZEUlRRNGRuWXhNMGM1VGtaWE9GbzJNRWx5VEhKbVRrRnRXRXBhVTBjMWNYcE1abFJMTUROaFNWRWlmUSIsImtpZCI6ImRpZDplbGVtOkVpQnNRNVMwa05ZVS1Da1ZMSEZWUVF4U3A1OGdwY1FQOXpnMW5GR1RyLWF2alEjcHJpbWFyeSJ9.91747dcc293f1040f74337a3d0f584c9ef3df1d79c79b71d2e5c5bdfbeaf25a22a1f73cf96b4e26931496d837cb5d1044c81a0f745608225abf32ea5f8805c1c',
suppliedPresentation: {
'@context': [ 'https://www.w3.org/2018/credentials/v1' ],
id: 'presentationId:f461e8a2b035d689',
type: [ 'VerifiablePresentation' ],
holder: {
id: 'did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw;elem:initial-state=eyJwcm90ZWN0ZWQiOiJleUp2Y0dWeVlYUnBiMjRpT2lKamNtVmhkR1VpTENKcmFXUWlPaUlqY0hKcGJXRnllU0lzSW1Gc1p5STZJa1ZUTWpVMlN5SjkiLCJwYXlsb2FkIjoiZXlKQVkyOXVkR1Y0ZENJNkltaDBkSEJ6T2k4dmR6TnBaQzV2Y21jdmMyVmpkWEpwZEhrdmRqSWlMQ0p3ZFdKc2FXTkxaWGtpT2x0N0ltbGtJam9pSTNCeWFXMWhjbmtpTENKMWMyRm5aU0k2SW5OcFoyNXBibWNpTENKMGVYQmxJam9pVTJWamNESTFObXN4Vm1WeWFXWnBZMkYwYVc5dVMyVjVNakF4T0NJc0luQjFZbXhwWTB0bGVVaGxlQ0k2SWpBelpXRTJZamsyT1dabU1qZG1ZelppWlRKaE56TTFNREExTW1FMFpqWTNaamt4WWpjelltRmpNemMxT0RCak9UQTJabVUxTnpWbFpEVXpPVEpsTURWaVlTSjlMSHNpYVdRaU9pSWpjbVZqYjNabGNua2lMQ0oxYzJGblpTSTZJbkpsWTI5MlpYSjVJaXdpZEhsd1pTSTZJbE5sWTNBeU5UWnJNVlpsY21sbWFXTmhkR2x2Ymt0bGVUSXdNVGdpTENKd2RXSnNhV05MWlhsSVpYZ2lPaUl3TWpSaU9Ea3pNRFJoWmpObE9XTTNaRGxtT0RRNU5qTTJZalUyWldGa056azRNalkyWldNMFlqWTNOR0pqTlRZNE1qVXpZalF6WVdRNE9UVTVNRGt6TURZaWZWMHNJbUYxZEdobGJuUnBZMkYwYVc5dUlqcGJJaU53Y21sdFlYSjVJbDBzSW1GemMyVnlkR2x2YmsxbGRHaHZaQ0k2V3lJamNISnBiV0Z5ZVNKZGZRIiwic2lnbmF0dXJlIjoiNl9OUjRVUl83clFHV2gwUzViVy05eXAyY1JSTEpVbTd2TXVaVmxPOHZLdHBMR1FMNTRqZHNkOTNzZ1ladGRTRGJWY2ZCQkROYlRncmNwUGNKRHFIOUEifQ'
},
verifiableCredential: [ [Object] ],
proof: {
type: 'EcdsaSecp256k1Signature2019',
created: '2022-09-17T06:54:36Z',
verificationMethod: 'did:elem:EiC5XYylCfH47s7dcJt2SpdBg1yS2lyuJpR6J8WAY0swRw#primary',
proofPurpose: 'authentication',
challenge: 'eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpbnRlcmFjdGlvblRva2VuIjp7ImNyZWRlbnRpYWxSZXF1aXJlbWVudHMiOlt7InR5cGUiOlsiVmVyaWZpYWJsZUNyZWRlbnRpYWwiLCJDb250ZW50TGlrZSJdLCJjb25zdHJhaW50cyI6W119XSwiY2FsbGJhY2tVUkwiOiIifSwiZXhwIjoxNjYzMzk4MjY4MzU2LCJ0eXAiOiJjcmVkZW50aWFsUmVxdWVzdCIsImp0aSI6IjAzOGU3YTFkODFhZTNkMDUiLCJpc3MiOiJkaWQ6ZWxlbTpFaUJzUTVTMGtOWVUtQ2tWTEhGVlFReFNwNThncGNRUDl6ZzFuRkdUci1hdmpRO2VsZW06aW5pdGlhbC1zdGF0ZT1leUp3Y205MFpXTjBaV1FpT2lKbGVVcDJZMGRXZVZsWVVuQmlNalJwVDJsS2FtTnRWbWhrUjFWcFRFTktjbUZYVVdsUGFVbHFZMGhLY0dKWFJubGxVMGx6U1cxR2MxcDVTVFpKYTFaVVRXcFZNbE41U2praUxDSndZWGxzYjJGa0lqb2laWGxLUVZreU9YVmtSMVkwWkVOSk5rbHRhREJrU0VKNlQyazRkbVI2VG5CYVF6VjJZMjFqZG1NeVZtcGtXRXB3WkVocmRtUnFTV2xNUTBwM1pGZEtjMkZYVGt4YVdHdHBUMngwTjBsdGJHdEphbTlwU1ROQ2VXRlhNV2hqYm10cFRFTktNV015Um01YVUwazJTVzVPY0ZveU5YQmliV05wVEVOS01HVllRbXhKYW05cFZUSldhbU5FU1RGT2JYTjRWbTFXZVdGWFduQlpNa1l3WVZjNWRWTXlWalZOYWtGNFQwTkpjMGx1UWpGWmJYaHdXVEIwYkdWVmFHeGxRMGsyU1dwQmVWcHRWbXhaYlUxNldrZEpORTFVWXpKUFJHYzBUWHBSZWs5RVdteE9WRkpxVGtSS2FscHFUbXRPTWxsM1RqSkZNVTFVV1RWT1ZFSnFXbTFOTkZwVVl6SlBSR2N4VFRKWmVrNTZhM2ROYlZrd1dsUlpORTFUU2psTVNITnBZVmRSYVU5cFNXcGpiVlpxWWpOYWJHTnVhMmxNUTBveFl6SkdibHBUU1RaSmJrcHNXVEk1TWxwWVNqVkphWGRwWkVoc2QxcFRTVFpKYkU1c1dUTkJlVTVVV25KTlZscHNZMjFzYldGWFRtaGtSMngyWW10MGJHVlVTWGROVkdkcFRFTktkMlJYU25OaFYwNU1XbGhzU1ZwWVoybFBhVWwzVFdwak1rOUhWWHBOVkZVd1dsUldhbGxYV1RKYWJWcHBXbTFGTTFwSFZtMVBWRTE1VFhwTk1VMUVXVEpPYWxVMFQwZFdhVTlIVVRST2VtaHFUVmRGTWsxcVJYaGFSMWt4V1hwbmVWcEhVbXBOYWxKcFQxZFZhV1pXTUhOSmJVWXhaRWRvYkdKdVVuQlpNa1l3WVZjNWRVbHFjR0pKYVU1M1kyMXNkRmxZU2pWSmJEQnpTVzFHZW1NeVZubGtSMngyWW1zeGJHUkhhSFphUTBrMlYzbEphbU5JU25CaVYwWjVaVk5LWkdaUklpd2ljMmxuYm1GMGRYSmxJam9pUm5OblJVZGxXVmhPTFRkS04ycFBVVXB5TmpSb2FIVjVabU5VV214dVZIUktlWGw2U0VoWGVsaFJSbVZEUlRRNGRuWXhNMGM1VGtaWE9GbzJNRWx5VEhKbVRrRnRXRXBhVTBjMWNYcE1abFJMTUROaFNWRWlmUSIsImtpZCI6ImRpZDplbGVtOkVpQnNRNVMwa05ZVS1Da1ZMSEZWUVF4U3A1OGdwY1FQOXpnMW5GR1RyLWF2alEjcHJpbWFyeSJ9.91747dcc293f1040f74337a3d0f584c9ef3df1d79c79b71d2e5c5bdfbeaf25a22a1f73cf96b4e26931496d837cb5d1044c81a0f745608225abf32ea5f8805c1c',
domain: 'youtube.com',
jws: 'eyJhbGciOiJFUzI1NksiLCJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdfQ..-651IUOrbZTWW7z86eC7ED7ivLfdzyYw4sNnLDvq_Ilu4wMJQDVMo1hWp--GRO8Lxk0H3Ntg1_5veAjOqmye7Q'
}
}
}