From ae059b08c40a5e48254a682783835a14ae1bc995 Mon Sep 17 00:00:00 2001 From: Simonas Karuzas Date: Tue, 29 Jun 2021 11:48:14 +0300 Subject: [PATCH] feat(sdr): returns UniqueVerifiableCredential BREAKING CHANGE: `getVerifiableCredentialsForSdr` and `validatePresentationAgainstSdr` now returns { hash: string, verifiableCredential: VerifiableCredential} instead of `VerifiableCredential` Fixes: #496 --- __tests__/shared/handleSdrMessage.ts | 5 +++-- packages/cli/src/sdr.ts | 8 ++++---- .../selective-disclosure/plugin.schema.json | 17 ++++++++++++++++- .../src/__tests__/validate-presentation.test.ts | 2 +- .../selective-disclosure/src/action-handler.ts | 8 ++++++-- packages/selective-disclosure/src/types.ts | 5 ++--- 6 files changed, 32 insertions(+), 13 deletions(-) diff --git a/__tests__/shared/handleSdrMessage.ts b/__tests__/shared/handleSdrMessage.ts index 5327c19b07..2c87aa6171 100644 --- a/__tests__/shared/handleSdrMessage.ts +++ b/__tests__/shared/handleSdrMessage.ts @@ -117,7 +117,8 @@ export default (testContext: { }, }) - expect(credentials[0].credentials[0]).toHaveProperty('proof.jwt') + expect(credentials[0].credentials[0]).toHaveProperty('hash') + expect(credentials[0].credentials[0]).toHaveProperty('verifiableCredential.proof.jwt') }) it('should create verifiable presentation', async () => { @@ -138,7 +139,7 @@ export default (testContext: { '@context': ['https://www.w3.org/2018/credentials/v1'], type: ['VerifiablePresentation'], issuanceDate: new Date().toISOString(), - verifiableCredential: credentials[0].credentials, + verifiableCredential: credentials[0].credentials.map(c => c.verifiableCredential), }, proofFormat: 'jwt', save: true, diff --git a/packages/cli/src/sdr.ts b/packages/cli/src/sdr.ts index 3ca510b39c..ad17c5cdc9 100644 --- a/packages/cli/src/sdr.ts +++ b/packages/cli/src/sdr.ts @@ -303,13 +303,13 @@ sdr name: item.claimType + ' ' + (item.essential ? '(essential)' : '') + item.reason, choices: item.credentials.map((c) => ({ name: - c.credentialSubject[item.claimType] + + c.verifiableCredential.credentialSubject[item.claimType] + ' (' + - c.type.join(',') + + c.verifiableCredential.type.join(',') + ') issued by: ' + - c.issuer.id + + c.verifiableCredential.issuer.id + ' ' + - shortDate(c.issuanceDate) + + shortDate(c.verifiableCredential.issuanceDate) + ' ago', value: c, })), diff --git a/packages/selective-disclosure/plugin.schema.json b/packages/selective-disclosure/plugin.schema.json index a435b1aa68..3bc96afca8 100644 --- a/packages/selective-disclosure/plugin.schema.json +++ b/packages/selective-disclosure/plugin.schema.json @@ -369,7 +369,7 @@ "credentials": { "type": "array", "items": { - "$ref": "#/components/schemas/VerifiableCredential" + "$ref": "#/components/schemas/UniqueVerifiableCredential" } } }, @@ -379,6 +379,21 @@ ], "description": "The credentials that make up a response of a Selective Disclosure" }, + "UniqueVerifiableCredential": { + "type": "object", + "properties": { + "hash": { + "type": "string" + }, + "verifiableCredential": { + "$ref": "#/components/schemas/VerifiableCredential" + } + }, + "required": [ + "hash", + "verifiableCredential" + ] + }, "IValidatePresentationAgainstSdrArgs": { "type": "object", "properties": { diff --git a/packages/selective-disclosure/src/__tests__/validate-presentation.test.ts b/packages/selective-disclosure/src/__tests__/validate-presentation.test.ts index f60d4d96e5..652bfcc672 100644 --- a/packages/selective-disclosure/src/__tests__/validate-presentation.test.ts +++ b/packages/selective-disclosure/src/__tests__/validate-presentation.test.ts @@ -91,7 +91,7 @@ describe('@veramo/selective-disclosure-helper', () => { const result = await actionHandler.validatePresentationAgainstSdr({ presentation, sdr }, context) - expect(result.claims[0].credentials[0].credentialSubject['firstName']).toEqual('Alice') + expect(result.claims[0].credentials[0].verifiableCredential.credentialSubject['firstName']).toEqual('Alice') expect(result.valid).toEqual(true) }) diff --git a/packages/selective-disclosure/src/action-handler.ts b/packages/selective-disclosure/src/action-handler.ts index 1835ba4f8c..bd26bd60d9 100644 --- a/packages/selective-disclosure/src/action-handler.ts +++ b/packages/selective-disclosure/src/action-handler.ts @@ -19,6 +19,7 @@ import { } from './types' import { schema } from './' import { createJWT } from 'did-jwt' +import { blake2bHex } from 'blakejs' import Debug from 'debug' /** @@ -148,7 +149,7 @@ export class SelectiveDisclosure implements IAgentPlugin { result.push({ ...credentialRequest, - credentials: credentials.map((c) => c.verifiableCredential), + credentials, }) } return result @@ -214,7 +215,10 @@ export class SelectiveDisclosure implements IAgentPlugin { claims.push({ ...credentialRequest, - credentials, + credentials: credentials.map(vc => ({ + hash: blake2bHex(JSON.stringify(vc)), + verifiableCredential: vc + })), }) } return { valid, claims } diff --git a/packages/selective-disclosure/src/types.ts b/packages/selective-disclosure/src/types.ts index a36bd6ad1c..a0d5aaf4a3 100644 --- a/packages/selective-disclosure/src/types.ts +++ b/packages/selective-disclosure/src/types.ts @@ -3,10 +3,9 @@ import { IDIDManager, IKeyManager, IPluginMethodMap, - VerifiableCredential, VerifiablePresentation, } from '@veramo/core' -import { IDataStoreORM } from '@veramo/data-store' +import { IDataStoreORM, UniqueVerifiableCredential } from '@veramo/data-store' import { ICredentialIssuer } from '@veramo/credential-w3c' /** @@ -113,7 +112,7 @@ export interface ICredentialRequestInput { * @beta */ export interface ICredentialsForSdr extends ICredentialRequestInput { - credentials: VerifiableCredential[] + credentials: UniqueVerifiableCredential[] } /**