From 996c6d204d1e95812e1518fb29ec59b881ff6dd5 Mon Sep 17 00:00:00 2001 From: vmidyllic <74898029+vmidyllic@users.noreply.github.com> Date: Mon, 10 Jul 2023 20:17:39 +0300 Subject: [PATCH] fixed issue with array in query --- src/proof/proof-service.ts | 2 +- tests/proofs/sig.test.ts | 82 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/src/proof/proof-service.ts b/src/proof/proof-service.ts index dd25a977..c79a229d 100644 --- a/src/proof/proof-service.ts +++ b/src/proof/proof-service.ts @@ -796,7 +796,7 @@ export class ProofService implements IProofService { if (Array.isArray(value)) { for (let index = 0; index < value.length; index++) { - values[index] = await Merklizer.hashValue(ldType, value); + values[index] = await Merklizer.hashValue(ldType, value[index]); } } else { values[0] = await Merklizer.hashValue(ldType, value); diff --git a/tests/proofs/sig.test.ts b/tests/proofs/sig.test.ts index 00f5c6c5..fbbcac1a 100644 --- a/tests/proofs/sig.test.ts +++ b/tests/proofs/sig.test.ts @@ -285,6 +285,88 @@ describe('sig proofs', () => { ); }); + it.only('sigv2-merklized-query-array', async () => { + const seedPhraseIssuer: Uint8Array = byteEncoder.encode('seedseedseedseedseedseedseedseed'); + const seedPhrase: Uint8Array = byteEncoder.encode('seedseedseedseedseedseedseeduser'); + + const { did: userDID } = await idWallet.createIdentity({ + method: DidMethod.Iden3, + blockchain: Blockchain.Polygon, + networkId: NetworkId.Mumbai, + seed: seedPhrase, + revocationOpts: { + type: CredentialStatusType.Iden3ReverseSparseMerkleTreeProof, + id: rhsUrl + } + }); + + const { did: issuerDID } = await idWallet.createIdentity({ + method: DidMethod.Iden3, + blockchain: Blockchain.Polygon, + networkId: NetworkId.Mumbai, + seed: seedPhraseIssuer, + revocationOpts: { + type: CredentialStatusType.Iden3ReverseSparseMerkleTreeProof, + id: rhsUrl + } + }); + const claimReq: CredentialRequest = { + credentialSchema: + 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json/KYCAgeCredential-v3.json', + type: 'KYCAgeCredential', + credentialSubject: { + id: userDID.toString(), + birthday: 19960424, + documentType: 99 + }, + expiration: 1693526400, + revocationOpts: { + type: CredentialStatusType.Iden3ReverseSparseMerkleTreeProof, + id: rhsUrl + } + }; + const issuerCred = await idWallet.issueCredential(issuerDID, claimReq); + + await credWallet.save(issuerCred); + + const proofReq: ZeroKnowledgeProofRequest = { + id: 1, + circuitId: CircuitId.AtomicQuerySigV2, + optional: false, + query: { + allowedIssuers: ['*'], + type: claimReq.type, + context: + 'https://raw.githubusercontent.com/iden3/claim-schema-vocab/main/schemas/json-ld/kyc-v3.json-ld', + credentialSubject: { + documentType: { + $in: [99] + } + } + } + }; + + const creds = await credWallet.findByQuery(proofReq.query); + expect(creds.length).to.not.equal(0); + + const credsForMyUserDID = await credWallet.filterByCredentialSubject(creds, userDID); + expect(creds.length).to.equal(1); + + const { proof, vp } = await proofService.generateProof(proofReq, userDID, credsForMyUserDID[0]); + console.log(proof); + + expect(vp).to.be.undefined; + + await checkVerifiablePresentation( + claimReq.type, + userDID, + credsForMyUserDID[0], + proofService, + CircuitId.AtomicQuerySigV2 + ); + }); + + it('sigv2-ipfs-string-eq', async () => { const req = { id: '0d8e91e5-5686-49b5-85e3-2b35538c6a03',