From ba90d12d1de1cedca8114a9a674d9b5bbee7f9d0 Mon Sep 17 00:00:00 2001 From: Joao Santos Date: Wed, 26 May 2021 17:19:54 -0300 Subject: [PATCH 1/2] fromJSON with partialPresentations --- __test__/creds/VerifiableCredential.test.js | 12 +++++ .../creds/fixtures/filteredIdDocument-v2.json | 53 +++++++++++++++++++ package-lock.json | 36 +++++++++---- package.json | 2 +- src/creds/VerifiableCredential.js | 6 ++- 5 files changed, 95 insertions(+), 14 deletions(-) create mode 100644 __test__/creds/fixtures/filteredIdDocument-v2.json diff --git a/__test__/creds/VerifiableCredential.test.js b/__test__/creds/VerifiableCredential.test.js index b949d7b2..ceeac683 100644 --- a/__test__/creds/VerifiableCredential.test.js +++ b/__test__/creds/VerifiableCredential.test.js @@ -9,6 +9,7 @@ const credentialDefinitions = require('../../src/creds/definitions'); const SchemaGenerator = require('../../src/schemas/generator/SchemaGenerator'); const MiniCryptoManagerImpl = require('../../src/services/MiniCryptoManagerImpl'); const CredentialSignerVerifier = require('../../src/creds/CredentialSignerVerifier'); +const filteredCredentialJson = require('./fixtures/filteredIdDocument-v2.json'); // eslint-disable-next-line max-len const prvBase58 = 'xprv9s21ZrQH143K4aBUwUW6GVec7Y6oUEBqrt2WWaXyxjh2pjofNc1of44BLufn4p1t7Jq4EPzm5C9sRxCuBYJdHu62jhgfyPm544sNjtH7x8S'; @@ -390,6 +391,17 @@ describe('Unit tests for Verifiable Credentials', () => { issueCountry, placeOfBirth, dateOfBirth, dateOfExpiry, nationality, evidences], '1', ); expect(credential).toBeDefined(); + const filtered = credential.filter(['claim-cvc:Document.dateOfBirth-v1']); + expect(filtered).toBeDefined(); + }); + + it('Should hydrate a partial presentation', () => { + const presentation = VC.fromJSON(filteredCredentialJson, true); + expect(presentation).toBeDefined(); + + expect(() => { + VC.fromJSON(filteredCredentialJson); + }).toThrow(); }); it('Should create alt:Identity-v1 credential', () => { diff --git a/__test__/creds/fixtures/filteredIdDocument-v2.json b/__test__/creds/fixtures/filteredIdDocument-v2.json new file mode 100644 index 00000000..fa556492 --- /dev/null +++ b/__test__/creds/fixtures/filteredIdDocument-v2.json @@ -0,0 +1,53 @@ +{ + "id": "f471b5f8-6ad6-4782-968d-f2924145fa54", + "issuer": "", + "issuanceDate": "2021-05-26T20:11:12.082Z", + "identifier": "credential-cvc:IdDocument-v2", + "expirationDate": null, + "version": "1", + "type": [ + "Credential", + "credential-cvc:IdDocument-v2" + ], + "transient": false, + "claim": { + "document": { + "dateOfBirth": { + "day": 20, + "month": 3, + "year": 1978 + } + } + }, + "proof": { + "type": "CvcMerkleProof2018", + "merkleRoot": "9d424cbc30d418ed42f1b1031fa4fdef273e6b371637b4c8e5184a566b9d27cc", + "anchor": "TBD (Civic Blockchain Attestation)", + "leaves": [ + { + "identifier": "claim-cvc:Document.dateOfBirth-v1", + "value": "urn:dateOfBirth.day:f0bbfa2a35fc0dfa27a2620691feedde6fff1c522817b546e730740f7339354d:20|urn:dateOfBirth.month:75e6e5fa1f03d6b985862e7ad1467405e0c482df64e6ed1692312aaba7d4d951:3|urn:dateOfBirth.year:c4d7200e945ef41009be24127cdd394d17a7bc0330d3b1b19270372543ff6517:1978|", + "claimPath": "document.dateOfBirth", + "targetHash": "3fdb18a8022d009da8eda7b353ebfdaad91ad4d6256f647e174ac16448d42f6d", + "node": [ + { + "left": "72e6f2e8c817048bb82442371202c9c078cabbacb7739ce4781f68855b362ca8" + }, + { + "right": "aae76d0dd2b272496a4ccc799cd60a329da4d78742b9e4f8792c4a3b4259d414" + }, + { + "right": "9c4a9d7c1d1a76dd3c8aa274d6cf8de8cd5ed4658162c84db409e8c0dab422ea" + }, + { + "left": "03024ff54437b7d65ad908229977e8603f3f5451a611ec88235775db23d522f5" + }, + { + "right": "b8dc070cacd5d604ec328cfee7d396e3a6ba5011a616049126d37460f7280154" + } + ] + } + ] + }, + "granted": null +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 189660f7..f5d7ece5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@identity.com/credential-commons", - "version": "1.2.6", + "version": "1.2.7", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3136,16 +3136,30 @@ } }, "browserslist": { - "version": "4.16.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.3.tgz", - "integrity": "sha512-vIyhWmIkULaq04Gt93txdh+j02yX/JzlyhLYbV3YQCn/zvES3JnY7TifHHvvr1w5hTDluNKMkV05cs4vy8Q7sw==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001181", - "colorette": "^1.2.1", - "electron-to-chromium": "^1.3.649", + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", - "node-releases": "^1.1.70" + "node-releases": "^1.1.71" + }, + "dependencies": { + "caniuse-lite": { + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.739", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.739.tgz", + "integrity": "sha512-+LPJVRsN7hGZ9EIUUiWCpO7l4E3qBYHNadazlucBfsXBbccDFNKUBAgzE68FnkWGJPwD/AfKhSzL+G+Iqb8A4A==", + "dev": true + } } }, "bs58": { @@ -8811,9 +8825,9 @@ } }, "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "normalize-package-data": { diff --git a/package.json b/package.json index 6da054c7..10997b3a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@identity.com/credential-commons", - "version": "1.2.6", + "version": "1.2.7", "author": "Identity.com Community", "license": "MIT", "description": "Verifiable Credential and Attestation Library", diff --git a/src/creds/VerifiableCredential.js b/src/creds/VerifiableCredential.js index 242dd148..0918247a 100644 --- a/src/creds/VerifiableCredential.js +++ b/src/creds/VerifiableCredential.js @@ -746,11 +746,13 @@ VerifiableCredentialBaseConstructor.isMatchCredentialMeta = isMatchCredentialMet * @param {*} verifiableCredentialJSON * @returns VerifiableCredentialBaseConstructor */ -VerifiableCredentialBaseConstructor.fromJSON = (verifiableCredentialJSON) => { +VerifiableCredentialBaseConstructor.fromJSON = (verifiableCredentialJSON, partialPresentation = false) => { const definition = getCredentialDefinition(verifiableCredentialJSON.identifier, verifiableCredentialJSON.version); - verifyRequiredClaimsFromJSON(definition, verifiableCredentialJSON); + if (!partialPresentation) { + verifyRequiredClaimsFromJSON(definition, verifiableCredentialJSON); + } const newObj = new VerifiableCredentialBaseConstructor(verifiableCredentialJSON.identifier, verifiableCredentialJSON.issuer); From d9cd3afbc5e74d79815431754449ec2a3bcf71da Mon Sep 17 00:00:00 2001 From: Joao Santos Date: Wed, 26 May 2021 17:56:58 -0300 Subject: [PATCH 2/2] fix dependency --- package-lock.json | 42 ++++++++++++++++++++++++++++++++++-------- package.json | 2 +- 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index f5d7ece5..e0376ad8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1539,13 +1539,14 @@ "dev": true }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-7.2.4.tgz", + "integrity": "sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==", + "dev": true, "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, @@ -5281,6 +5282,24 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + } } }, "has": { @@ -8294,9 +8313,10 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -13644,6 +13664,12 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", diff --git a/package.json b/package.json index 10997b3a..990ecd90 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "jest-html-reporter": "^2.3.0", "request-debug": "^0.2.0", "rimraf": "^2.6.2", - "ajv": "^6.5.2" + "ajv": "^7.2.4" }, "dependencies": { "@identity.com/uca": "github:civicteam/uca",