diff --git a/package.json b/package.json index 6ae8c0b4..c3a9e104 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@docknetwork/crypto-wasm-ts", - "version": "0.53.0", + "version": "0.54.0", "description": "Typescript abstractions over Dock's Rust crypto library's WASM wrapper", "homepage": "https://github.com/docknetwork/crypto-wasm-ts", "main": "lib/index.js", @@ -38,7 +38,7 @@ "json-stringify-deterministic": "^1.0.11", "lodash": "^4.17.21", "lzutf8": "0.6.3", - "semver": "^7.5.4" + "semver": "^7.6.0" }, "devDependencies": { "@types/jest": "^29.1.0", diff --git a/src/anonymous-credentials/blinded-credential-builder.ts b/src/anonymous-credentials/blinded-credential-builder.ts index d51a8bb5..6084c714 100644 --- a/src/anonymous-credentials/blinded-credential-builder.ts +++ b/src/anonymous-credentials/blinded-credential-builder.ts @@ -2,7 +2,8 @@ import { CredentialBuilderCommon } from './credential-builder-common'; import { IBlindCredentialRequest } from './presentation-specification'; import { BBS_PLUS_SIGNATURE_PARAMS_LABEL_BYTES, - BBS_SIGNATURE_PARAMS_LABEL_BYTES, BDDT16_MAC_PARAMS_LABEL_BYTES, + BBS_SIGNATURE_PARAMS_LABEL_BYTES, + BDDT16_MAC_PARAMS_LABEL_BYTES } from './types-and-consts'; import { BBSCredential, BBSPlusCredential, BDDT16Credential } from './credential'; import { BBSBlindSignature, BBSSecretKey, BBSSignatureParams } from '../bbs'; @@ -122,13 +123,7 @@ export class BDDT16BlindedCredentialBuilder extends BlindedCredentialBuilder { ): BDDT16BlindedCredential { const [totalAttrs, encodedAttrs] = this.getTotalAttributesAndEncodedKnownAttributes(); const params = BDDT16MacParams.getMacParamsOfRequiredSize(totalAttrs, sigParams); - const sig = BDDT16BlindMac.generate( - this.blindedCredReq.commitment, - encodedAttrs, - secretKey, - params, - false - ); + const sig = BDDT16BlindMac.generate(this.blindedCredReq.commitment, encodedAttrs, secretKey, params, false); return new BDDT16BlindedCredential( this.version, this.schema as CredentialSchema, @@ -139,4 +134,4 @@ export class BDDT16BlindedCredentialBuilder extends BlindedCredentialBuilder { this.credStatus ); } -} \ No newline at end of file +} diff --git a/src/anonymous-credentials/blinded-credential-request-builder.ts b/src/anonymous-credentials/blinded-credential-request-builder.ts index bf750a62..1bbc030d 100644 --- a/src/anonymous-credentials/blinded-credential-request-builder.ts +++ b/src/anonymous-credentials/blinded-credential-request-builder.ts @@ -9,7 +9,8 @@ import { BBSCredential, BBSPlusCredential, PSCredential } from './credential'; import { AttributeEquality, BBS_PLUS_SIGNATURE_PARAMS_LABEL_BYTES, - BBS_SIGNATURE_PARAMS_LABEL_BYTES, BDDT16_MAC_PARAMS_LABEL_BYTES, + BBS_SIGNATURE_PARAMS_LABEL_BYTES, + BDDT16_MAC_PARAMS_LABEL_BYTES, BlindedAttributeEquality, BlindSignatureType, BoundCheckParamType, @@ -325,7 +326,18 @@ export abstract class BlindedCredentialRequestBuilder extends Version if (chunkBitSize !== 8 && chunkBitSize !== 16) { throw new Error(`Only 8 and 16 supported for chunkBitSize but given ${chunkBitSize}`); } - PresentationBuilder.processVerifiableEncs(this.presentationBuilder, this.verifEnc, attributeName, chunkBitSize, commKeyId, encryptionKeyId, snarkPkId, commKey, encryptionKey, snarkPk); + PresentationBuilder.processVerifiableEncs( + this.presentationBuilder, + this.verifEnc, + attributeName, + chunkBitSize, + commKeyId, + encryptionKeyId, + snarkPkId, + commKey, + encryptionKey, + snarkPk + ); } enforceCircomPredicateOnBlindedAttribute( diff --git a/src/anonymous-credentials/blinded-credential.ts b/src/anonymous-credentials/blinded-credential.ts index 75e00d86..b8e0722d 100644 --- a/src/anonymous-credentials/blinded-credential.ts +++ b/src/anonymous-credentials/blinded-credential.ts @@ -8,7 +8,9 @@ import { BBS_BLINDED_CRED_PROOF_TYPE, BBS_CRED_PROOF_TYPE, BBS_PLUS_BLINDED_CRED_PROOF_TYPE, - BBS_PLUS_CRED_PROOF_TYPE, BDDT16_BLINDED_CRED_PROOF_TYPE, BDDT16_CRED_PROOF_TYPE, + BBS_PLUS_CRED_PROOF_TYPE, + BDDT16_BLINDED_CRED_PROOF_TYPE, + BDDT16_CRED_PROOF_TYPE, PROOF_STR, TYPE_STR } from './types-and-consts'; @@ -49,7 +51,9 @@ export abstract class BlindedCredential extends CredentialCommon { verify(publicKey: undefined, signatureParams?: BDDT16MacParams): VerifyResult { - throw new Error(`Not applicable`) + throw new Error(`Not applicable`); } /** @@ -239,15 +241,19 @@ export class BDDT16Credential extends Credential = unrevealedMsgsEncoded.get(credIndex) || new Map(); + const encodedAttrsMultiCred: Map = + unrevealedMsgsEncoded.get(credIndex) || new Map(); this.circomPredicatesMultiCred.forEach((pred) => { pred.privateVars.forEach(([name, val]) => { if (Array.isArray(val)) { @@ -657,13 +677,13 @@ export class PresentationBuilder extends Versioned { if (i == credIndex) { updateEncodedAttrs(s, encodedAttrsMultiCred); } - }) + }); } else { if (val[0] == credIndex) { updateEncodedAttrs(val[1], encodedAttrsMultiCred); } } - }) + }); }); unrevealedMsgsEncoded.set(credIndex, encodedAttrsMultiCred); @@ -1006,7 +1026,11 @@ export class PresentationBuilder extends Versioned { // Offset of attributes in the Pedersen Commitment, its 0 for BBS and 1 for BBS+ as the commitment in BBS+ is perfectly hiding. let pedCommWitnessOffset; - if (sigParams instanceof BBSSignatureParams || sigParams instanceof BBSPlusSignatureParamsG1 || sigParams instanceof BDDT16MacParams) { + if ( + sigParams instanceof BBSSignatureParams || + sigParams instanceof BBSPlusSignatureParamsG1 || + sigParams instanceof BDDT16MacParams + ) { const commKey = sigParams.getParamsForIndices(blindedSubjectIndices); pedCommStId = statements.add(Statement.pedersenCommitmentG1(commKey, this.blindCredReq.req.commitment)); } else { @@ -1187,7 +1211,6 @@ export class PresentationBuilder extends Versioned { for (const ids of blindAttrToSId.values()) { encryptionStatementIndices.push(...ids); } - } // Get all encryption statement indices and get their corresponding ciphertexts @@ -1276,9 +1299,9 @@ export class PresentationBuilder extends Versioned { } else { let errorMsg: string; if (statementIdx !== undefined) { - errorMsg = `Predicate param id ${paramId} (for statement index ${statementIdx}) was expected to be a Legosnark proving key but was ${param}`; + errorMsg = `Predicate param id ${paramId} (for statement index ${statementIdx}) was expected to be a Legosnark proving key but was ${param}`; } else { - errorMsg = `Predicate param id ${paramId} was expected to be a Legosnark proving key but was ${param}`; + errorMsg = `Predicate param id ${paramId} was expected to be a Legosnark proving key but was ${param}`; } throw new Error(errorMsg); } @@ -1500,7 +1523,7 @@ export class PresentationBuilder extends Versioned { attrToSid.set(name, []); } attrToSid.get(name)?.push(sIdx); - }) + }); }); if (attrToSid.size > 0) { credAttrToSId.set(credIdx, attrToSid); @@ -1645,7 +1668,12 @@ export class PresentationBuilder extends Versioned { return [encodedAttrs, predicatesForSpec]; } - private createCircomStatement(circuitId: string, snarkKeyId: string, setupParamsTrk: SetupParamsTracker, statementIdx?: number): Uint8Array { + private createCircomStatement( + circuitId: string, + snarkKeyId: string, + setupParamsTrk: SetupParamsTracker, + statementIdx?: number + ): Uint8Array { const snarkKey = this.predicateParams.get(snarkKeyId); const r1csId = PresentationBuilder.r1csParamId(circuitId); const r1cs = this.predicateParams.get(r1csId); @@ -1761,13 +1789,15 @@ export class PresentationBuilder extends Versioned { ) { const existingVE = verEncsMap.get(attributeName); if (existingVE === undefined) { - verEncsMap.set(attributeName, [{ - chunkBitSize, - commitmentGensId: commKeyId, - encryptionKeyId: encryptionKeyId, - snarkKeyId: snarkPkId, - protocol: VerifiableEncryptionProtocol.Saver - }]); + verEncsMap.set(attributeName, [ + { + chunkBitSize, + commitmentGensId: commKeyId, + encryptionKeyId: encryptionKeyId, + snarkKeyId: snarkPkId, + protocol: VerifiableEncryptionProtocol.Saver + } + ]); } else { existingVE.push({ chunkBitSize, diff --git a/src/anonymous-credentials/presentation-specification.ts b/src/anonymous-credentials/presentation-specification.ts index 69e46570..48c6e497 100644 --- a/src/anonymous-credentials/presentation-specification.ts +++ b/src/anonymous-credentials/presentation-specification.ts @@ -166,7 +166,7 @@ export class PresentationSpecification { // key == pseudonym unboundedPseudonyms?: { [key: string]: IPresentedUnboundedPseudonym }; blindCredentialRequest?: IBlindCredentialRequest; - circomPredicatesMultiCred?: ICircomPredicate[] + circomPredicatesMultiCred?: ICircomPredicate[]; constructor() { this.credentials = []; diff --git a/src/anonymous-credentials/presentation.ts b/src/anonymous-credentials/presentation.ts index c6635a3a..c2d80840 100644 --- a/src/anonymous-credentials/presentation.ts +++ b/src/anonymous-credentials/presentation.ts @@ -68,7 +68,8 @@ import { RevocationStatusProtocol, SCHEMA_STR, SignatureType, - STATUS_STR, TYPE_STR, + STATUS_STR, + TYPE_STR, VerifiableEncryptionProtocol } from './types-and-consts'; import { @@ -160,9 +161,8 @@ export class Presentation extends Versioned { predicateParams?: Map, circomOutputs?: Map, blindedAttributesCircomOutputs?: Uint8Array[][], - circomOutputsMultiCred?: Uint8Array[][], + circomOutputsMultiCred?: Uint8Array[][] ): VerifyResult { - // NOTE: The order of processing predicates should match exactly to the order in presentation builder, eg. if circom predicates // are processed at the end in the builder than they should be processed at the end here as well, if verifiable encryption is // processed at 2nd last in the builder than they should be processed at 2nd last here as well. By convention credentials are @@ -173,7 +173,7 @@ export class Presentation extends Versioned { credVerifParams = credentialVerifParams; } else { credentialVerifParams.forEach((v, i) => { - credVerifParams.set(i, v) + credVerifParams.set(i, v); }); } const statements = new Statements(); @@ -209,7 +209,12 @@ export class Presentation extends Versioned { const flattenedSchema = presentedCredSchema.flatten(); const numAttribs = flattenedSchema[0].length; - const revealedEncoded = Presentation.encodeRevealed(credIndex, presentedCred, presentedCredSchema, flattenedSchema[0]); + const revealedEncoded = Presentation.encodeRevealed( + credIndex, + presentedCred, + presentedCredSchema, + flattenedSchema[0] + ); let sigParamsClass; switch (presentedCred.sigType) { @@ -361,7 +366,13 @@ export class Presentation extends Versioned { if (this.spec.circomPredicatesMultiCred !== undefined) { this.spec.circomPredicatesMultiCred.forEach((pred, j) => { - const statement = Presentation.createCircomStatement(pred, j, setupParamsTrk, predicateParams, circomOutputsMultiCred); + const statement = Presentation.createCircomStatement( + pred, + j, + setupParamsTrk, + predicateParams, + circomOutputsMultiCred + ); const sIdx = statements.add(statement); function addWitnessEquality(cId: number, attributeName: object) { @@ -612,32 +623,39 @@ export class Presentation extends Versioned { if (presentedCred.sigType === SignatureType.Bddt16) { const proof = delegatedProofs.get(i); if (proof === undefined) { - throw new Error(`Could not find delegated credential proof for credential index ${i}`) + throw new Error(`Could not find delegated credential proof for credential index ${i}`); } if (!(proof instanceof BDDT16DelegatedProof)) { - throw new Error(`Unexpected delegated credential proof type ${proof.constructor.name} for credential index ${i}`) + throw new Error( + `Unexpected delegated credential proof type ${proof.constructor.name} for credential index ${i}` + ); } credP = { sigType: presentedCred.sigType, proof - } + }; } if (presentedCred.status !== undefined) { - if (presentedCred.status[TYPE_STR] === RevocationStatusProtocol.Vb22 && presentedCred.status[REV_CHECK_STR] === MEM_CHECK_KV_STR) { + if ( + presentedCred.status[TYPE_STR] === RevocationStatusProtocol.Vb22 && + presentedCred.status[REV_CHECK_STR] === MEM_CHECK_KV_STR + ) { const proof = delegatedProofs.get(nextCredStatusStatementIdx); if (proof === undefined) { - throw new Error(`Could not find delegated credential status proof for credential index ${i}`) + throw new Error(`Could not find delegated credential status proof for credential index ${i}`); } if (!(proof instanceof VBAccumMembershipDelegatedProof)) { - throw new Error(`Unexpected delegated credential status proof type ${proof.constructor.name} for credential index ${i}`) + throw new Error( + `Unexpected delegated credential status proof type ${proof.constructor.name} for credential index ${i}` + ); } statusP = { [ID_STR]: presentedCred.status[ID_STR], [TYPE_STR]: presentedCred.status[TYPE_STR], [REV_CHECK_STR]: presentedCred.status[REV_CHECK_STR], proof - } + }; } nextCredStatusStatementIdx++; } @@ -828,7 +846,7 @@ export class Presentation extends Versioned { witnessEq.addWitnessRef(statementIdx, nameIdx); witnessEq.addWitnessRef(sIdx, 0); metaStatements.addWitnessEquality(witnessEq); - }) + }); }); } @@ -902,7 +920,7 @@ export class Presentation extends Versioned { witnessEq.addWitnessRef(statementIdx, nameIdx); witnessEq.addWitnessRef(sIdx, 0); metaStatements.addWitnessEquality(witnessEq); - }) + }); }); } @@ -917,7 +935,14 @@ export class Presentation extends Versioned { outputs?: Uint8Array[][] ) { predicates.forEach((pred, j) => { - const statement = Presentation.createCircomStatement(pred, j, setupParamsTrk, predicateParams, outputs, statementIdx); + const statement = Presentation.createCircomStatement( + pred, + j, + setupParamsTrk, + predicateParams, + outputs, + statementIdx + ); const sIdx = statements.add(statement); function addWitnessEquality(attributeName: object) { @@ -942,7 +967,14 @@ export class Presentation extends Versioned { }); } - private static createCircomStatement(pred: ICircomPredicate, predIdx: number, setupParamsTrk: SetupParamsTracker, predicateParams?: Map, outputs?: Uint8Array[][], statementIdx?: number): Uint8Array { + private static createCircomStatement( + pred: ICircomPredicate, + predIdx: number, + setupParamsTrk: SetupParamsTracker, + predicateParams?: Map, + outputs?: Uint8Array[][], + statementIdx?: number + ): Uint8Array { const param = predicateParams?.get(pred.snarkKeyId); Presentation.addLegoVerifyingKeyToTracker(pred.snarkKeyId, param, setupParamsTrk); @@ -955,7 +987,7 @@ export class Presentation extends Versioned { const unqId = `circom-outputs-${statementIdx !== undefined ? statementIdx : null}__${predIdx}`; setupParamsTrk.addForParamId(unqId, SetupParam.fieldElementVec(publicInputs)); - return Statement.r1csCircomVerifierFromSetupParamRefs( + return Statement.r1csCircomVerifierFromSetupParamRefs( setupParamsTrk.indexForParam(unqId), setupParamsTrk.indexForParam(pred.snarkKeyId) ); @@ -971,7 +1003,9 @@ export class Presentation extends Versioned { } } - function formatCircomPreds(circomPredicates: ICircomPredicate[]): object { + function formatCircomPreds( + circomPredicates: ICircomPredicate[] + ): object { return circomPredicates.map((v) => { const r = deepClone(v) as object; // @ts-ignore @@ -1120,9 +1154,9 @@ export class Presentation extends Versioned { } else { let errorMsg: string; if (statementIdx !== undefined) { - errorMsg = `Predicate param id ${paramId} (for statement index ${statementIdx}) was expected to be a Legosnark verifying key but was ${param}`; + errorMsg = `Predicate param id ${paramId} (for statement index ${statementIdx}) was expected to be a Legosnark verifying key but was ${param}`; } else { - errorMsg = `Predicate param id ${paramId} was expected to be a Legosnark verifying key but was ${param}`; + errorMsg = `Predicate param id ${paramId} was expected to be a Legosnark verifying key but was ${param}`; } throw new Error(errorMsg); } @@ -1238,7 +1272,7 @@ export class Presentation extends Versioned { const { version, context, nonce, spec, attributeCiphertexts, blindedAttributeCiphertexts, proof } = j; const nnc = nonce ? b58.decode(nonce) : undefined; - function formatCircomPreds(pred: object): ICircomPredicate[] { + function formatCircomPreds(pred: object): ICircomPredicate[] { const circomPredicates = deepClone(pred) as object[]; circomPredicates.forEach((cp) => { if (cp['protocol'] !== undefined && !Object.values(CircomProtocol).includes(cp['protocol'])) { @@ -1305,9 +1339,7 @@ export class Presentation extends Versioned { status = deepClone(cred['status']) as object; status['accumulated'] = b58.decode(cred['status']['accumulated']); } else { - throw new Error( - `status type should be one of ${RevocationStatusProtocol} but was ${cred['status']['type']}` - ); + throw new Error(`status type should be one of ${RevocationStatusProtocol} but was ${cred['status']['type']}`); } } if (cred['circomPredicates'] !== undefined) { @@ -1334,7 +1366,9 @@ export class Presentation extends Versioned { } if (spec['circomPredicatesMultiCred'] !== undefined) { - presSpec.circomPredicatesMultiCred = formatCircomPreds(spec['circomPredicatesMultiCred']) as ICircomPredicate[]; + presSpec.circomPredicatesMultiCred = formatCircomPreds( + spec['circomPredicatesMultiCred'] + ) as ICircomPredicate[]; } presSpec.attributeEqualities = spec['attributeEqualities']; diff --git a/src/anonymous-credentials/schema.ts b/src/anonymous-credentials/schema.ts index b64d8ad7..5f3c25e4 100644 --- a/src/anonymous-credentials/schema.ts +++ b/src/anonymous-credentials/schema.ts @@ -391,7 +391,7 @@ export interface IEmbeddedJsonSchema { /** * JSON schema that does not contain the properties but its $id property can be used to fetch the properties. - * Intentionally not allowing `properties` key as reconciliation will be needed in case of conflict with fetched properties + * Intentionally not allowing `properties` key as reconciliation will be needed in case of conflict with fetched properties */ export interface IJsonSchema { [META_SCHEMA_STR]: string; diff --git a/src/anonymous-credentials/setup-params-tracker.ts b/src/anonymous-credentials/setup-params-tracker.ts index d3a165c9..9a2913f1 100644 --- a/src/anonymous-credentials/setup-params-tracker.ts +++ b/src/anonymous-credentials/setup-params-tracker.ts @@ -2,7 +2,9 @@ import { SetupParam } from '../composite-proof'; import { dockAccumulatorMemProvingKey, dockAccumulatorNonMemProvingKey, - dockAccumulatorParams, dockBoundCheckBppSetup, dockInequalityCommKey, + dockAccumulatorParams, + dockBoundCheckBppSetup, + dockInequalityCommKey, dockSaverEncryptionGens, dockSaverEncryptionGensUncompressed } from './types-and-consts'; diff --git a/src/anonymous-credentials/types-and-consts.ts b/src/anonymous-credentials/types-and-consts.ts index 029c9f81..f39dd351 100644 --- a/src/anonymous-credentials/types-and-consts.ts +++ b/src/anonymous-credentials/types-and-consts.ts @@ -15,7 +15,8 @@ import { PSPublicKey, PSSecretKey, PSSignature, PSSignatureParams } from '../ps' import { Accumulator, AccumulatorParams, - AccumulatorPublicKey, AccumulatorSecretKey, + AccumulatorPublicKey, + AccumulatorSecretKey, MembershipProvingKey, NonMembershipProvingKey } from '../accumulator'; @@ -116,8 +117,8 @@ export const BBS_BLINDED_CRED_PROOF_TYPE = 'Bls12381BlindedBBSSignatureDock2023' export const BBS_PLUS_CRED_PROOF_TYPE = 'Bls12381BBS+SignatureDock2022'; export const BBS_PLUS_BLINDED_CRED_PROOF_TYPE = 'Bls12381BlindedBBS+SignatureDock2023'; export const PS_CRED_PROOF_TYPE = 'Bls12381PSSignatureDock2023'; -export const BDDT16_CRED_PROOF_TYPE = 'Bls12381BDDT16Dock2024'; -export const BDDT16_BLINDED_CRED_PROOF_TYPE = 'Bls12381BlindedBDDT16Dock2024'; +export const BDDT16_CRED_PROOF_TYPE = 'Bls12381BDDT16MACDock2024'; +export const BDDT16_BLINDED_CRED_PROOF_TYPE = 'Bls12381BlindedBDDT16MACDock2024'; export const LEGOGROTH16 = 'LegoGroth16'; export const SAVER = 'SAVER'; diff --git a/src/anonymous-credentials/util.ts b/src/anonymous-credentials/util.ts index fa5812db..dbff712f 100644 --- a/src/anonymous-credentials/util.ts +++ b/src/anonymous-credentials/util.ts @@ -4,8 +4,11 @@ import { AttributeEquality, AttributeRef, BBS_PLUS_SIGNATURE_PARAMS_LABEL_BYTES, - BBS_SIGNATURE_PARAMS_LABEL_BYTES, BDDT16_MAC_PARAMS_LABEL_BYTES, CredentialVerificationParam, - FlattenedSchema, MEM_CHECK_KV_STR, + BBS_SIGNATURE_PARAMS_LABEL_BYTES, + BDDT16_MAC_PARAMS_LABEL_BYTES, + CredentialVerificationParam, + FlattenedSchema, + MEM_CHECK_KV_STR, MEM_CHECK_STR, PredicateParamType, PS_SIGNATURE_PARAMS_LABEL_BYTES, @@ -91,7 +94,7 @@ export function flattenPredicatesInSpec(obj: object): [string[], object[][]] { const m1 = new Map(); m1.set(innerObjKey, temp[k]); m.set(arrayIdx, m1); - tempMap.set(key, [m, arrayIdx]) + tempMap.set(key, [m, arrayIdx]); } else { if (arrayIdx > tempMapValue[1]) { tempMapValue[1] = arrayIdx; @@ -196,20 +199,18 @@ export function buildSignatureVerifierStatementFromParamsRef( ): Uint8Array { let setupSigP: SetupParam, setupPK: SetupParam | undefined, - buildStatement: (( - sigParamsRef: number, - publicKeyRef: number, - revealedMessages: Map, - encodeMessages: boolean - ) => Uint8Array) | (( - sigParamsRef: number, - revealedMessages: Map, - encodeMessages: boolean - ) => Uint8Array); + buildStatement: + | (( + sigParamsRef: number, + publicKeyRef: number, + revealedMessages: Map, + encodeMessages: boolean + ) => Uint8Array) + | ((sigParamsRef: number, revealedMessages: Map, encodeMessages: boolean) => Uint8Array); function getPk(): PublicKey { if (credVerParam === undefined) { - throw new Error('Public key needs to be provided for BBS signatures') + throw new Error('Public key needs to be provided for BBS signatures'); } const pk = credVerParam as PublicKey; if (paramsClassByPublicKey(pk) !== sigParams.constructor) { @@ -222,12 +223,16 @@ export function buildSignatureVerifierStatementFromParamsRef( case BBSSignatureParams: setupSigP = SetupParam.bbsSignatureParams(sigParams.adapt(messageCount) as BBSSignatureParams); setupPK = SetupParam.bbsPlusSignaturePublicKeyG2(getPk()); - buildStatement = useNewVersion ? Statement.bbsSignatureVerifierFromSetupParamRefs : Statement.bbsSignatureFromSetupParamRefsOld; + buildStatement = useNewVersion + ? Statement.bbsSignatureVerifierFromSetupParamRefs + : Statement.bbsSignatureFromSetupParamRefsOld; return buildStatement(setupParamsTrk.add(setupSigP), setupParamsTrk.add(setupPK), revealedMessages, false); case BBSPlusSignatureParamsG1: setupPK = SetupParam.bbsPlusSignaturePublicKeyG2(getPk()); setupSigP = SetupParam.bbsPlusSignatureParamsG1(sigParams.adapt(messageCount) as BBSPlusSignatureParamsG1); - buildStatement = useNewVersion ? Statement.bbsPlusSignatureVerifierFromSetupParamRefs : Statement.bbsPlusSignatureFromSetupParamRefsOld; + buildStatement = useNewVersion + ? Statement.bbsPlusSignatureVerifierFromSetupParamRefs + : Statement.bbsPlusSignatureFromSetupParamRefsOld; return buildStatement(setupParamsTrk.add(setupSigP), setupParamsTrk.add(setupPK), revealedMessages, false); case PSSignatureParams: let psPK = getPk() as PSPublicKey; @@ -246,7 +251,12 @@ export function buildSignatureVerifierStatementFromParamsRef( case BDDT16MacParams: setupSigP = SetupParam.bddt16MacParams(sigParams.adapt(messageCount) as BDDT16MacParams); if (credVerParam instanceof BDDT16MacSecretKey) { - return Statement.bddt16MacFullVerifierFromSetupParamRefs(setupParamsTrk.add(setupSigP), credVerParam, revealedMessages, false); + return Statement.bddt16MacFullVerifierFromSetupParamRefs( + setupParamsTrk.add(setupSigP), + credVerParam, + revealedMessages, + false + ); } else { return Statement.bddt16MacFromSetupParamRefs(setupParamsTrk.add(setupSigP), revealedMessages, false); } @@ -267,16 +277,14 @@ export function buildSignatureProverStatementFromParamsRef( } let setupParams: SetupParam, setupPK: SetupParam | undefined, - buildStatement: (( - sigParamsRef: number, - publicKeyRef: number, - revealedMessages: Map, - encodeMessages: boolean - ) => Uint8Array) | (( - sigParamsRef: number, - revealedMessages: Map, - encodeMessages: boolean - ) => Uint8Array); + buildStatement: + | (( + sigParamsRef: number, + publicKeyRef: number, + revealedMessages: Map, + encodeMessages: boolean + ) => Uint8Array) + | ((sigParamsRef: number, revealedMessages: Map, encodeMessages: boolean) => Uint8Array); switch (sigParams.constructor) { case BBSSignatureParams: @@ -289,7 +297,7 @@ export function buildSignatureProverStatementFromParamsRef( break; case PSSignatureParams: if (pk === undefined) { - throw new Error('Public key should be provided for PS signature') + throw new Error('Public key should be provided for PS signature'); } let psPK = pk as PSPublicKey; const supported = psPK.supportedMessageCount(); @@ -312,8 +320,11 @@ export function buildSignatureProverStatementFromParamsRef( throw new Error(`Signature params are invalid ${sigParams.constructor.name}`); } - // @ts-ignore - return setupPK !== undefined ? buildStatement(setupParamsTrk.add(setupParams), setupParamsTrk.add(setupPK), revealedMessages, false) : buildStatement(setupParamsTrk.add(setupParams), revealedMessages, false); + return setupPK !== undefined + // @ts-ignore + ? buildStatement(setupParamsTrk.add(setupParams), setupParamsTrk.add(setupPK), revealedMessages, false) + // @ts-ignore + : buildStatement(setupParamsTrk.add(setupParams), revealedMessages, false); } /** @@ -395,7 +406,7 @@ export function accumulatorStatement( checkType: string, accumulated: Uint8Array, setupParamsTrk: SetupParamsTracker, - vk?: AccumulatorVerificationParam, + vk?: AccumulatorVerificationParam ): Uint8Array { let statement: Uint8Array; if (!setupParamsTrk.hasAccumulatorParams()) { @@ -403,17 +414,14 @@ export function accumulatorStatement( } if (checkType === MEM_CHECK_KV_STR) { if (vk === undefined) { - statement = Statement.vbAccumulatorMembershipKV( - accumulated - ); + statement = Statement.vbAccumulatorMembershipKV(accumulated); } else { if (vk instanceof AccumulatorSecretKey) { - statement = Statement.vbAccumulatorMembershipKVFullVerifier( - vk, - accumulated - ); + statement = Statement.vbAccumulatorMembershipKVFullVerifier(vk, accumulated); } else { - throw new Error(`Unexpected accumulator verification param ${vk.constructor.name} passed for credential index ${credIndex}`) + throw new Error( + `Unexpected accumulator verification param ${vk.constructor.name} passed for credential index ${credIndex}` + ); } } } else { diff --git a/src/bddt16-mac/keys.ts b/src/bddt16-mac/keys.ts index 7869e7e7..c4a2b1ca 100644 --- a/src/bddt16-mac/keys.ts +++ b/src/bddt16-mac/keys.ts @@ -1,9 +1,5 @@ import { BytearrayWrapper } from '../bytearray-wrapper'; -import { - bddt16MacGenerateSecretKey, - bddt16MacGeneratePublicKeyG1, - bddt16MacIsPublicKeyG1Valid, -} from 'crypto-wasm-new'; +import { bddt16MacGenerateSecretKey, bddt16MacGeneratePublicKeyG1, bddt16MacIsPublicKeyG1Valid } from 'crypto-wasm-new'; import { BDDT16MacParams } from './params'; /** @@ -21,7 +17,7 @@ export class BDDT16MacSecretKey extends BytearrayWrapper { export class BDDT16MacPublicKeyG1 extends BytearrayWrapper { isValid(): boolean { - return bddt16MacIsPublicKeyG1Valid(this.value) + return bddt16MacIsPublicKeyG1Valid(this.value); } } @@ -37,6 +33,6 @@ export class BDDT16KeypairG1 { static generate(params: BDDT16MacParams, seed?: Uint8Array): BDDT16KeypairG1 { const sk = BDDT16MacSecretKey.generate(seed); const pk = sk.generatePublicKeyG1(params); - return new BDDT16KeypairG1(sk, pk) + return new BDDT16KeypairG1(sk, pk); } -} \ No newline at end of file +} diff --git a/src/bddt16-mac/mac.ts b/src/bddt16-mac/mac.ts index 539fdb14..5364a69f 100644 --- a/src/bddt16-mac/mac.ts +++ b/src/bddt16-mac/mac.ts @@ -3,8 +3,10 @@ import { Encoder, MessageEncoder } from '../encoder'; import { bddt16BlindMacGenerate, bddt16MacGenerate, - bddt16MacVerify, bddt16UnblindMac, - bddt16MacProofOfValidity, bddt16MacVerifyProofOfValidity, + bddt16MacVerify, + bddt16UnblindMac, + bddt16MacProofOfValidity, + bddt16MacVerifyProofOfValidity, VerifyResult } from 'crypto-wasm-new'; import { MessageStructure, SignedMessages } from '../types'; @@ -81,6 +83,25 @@ export class BDDT16Mac extends MessageEncoder { }; } + static getSignedMessageObjectWithProof( + messages: Object, + secretKey: BDDT16MacSecretKey, + publicKey: BDDT16MacPublicKeyG1, + labelOrParams: Uint8Array | BDDT16MacParams, + encoder: Encoder + ): [SignedMessages, BDDT16MacProofOfValidity] { + const encodedMessages = encoder.encodeMessageObjectAsObject(messages); + const encodedMessageList = Object.values(encodedMessages); + + const sigParams = BDDT16MacParams.getMacParamsOfRequiredSize(encodedMessageList.length, labelOrParams); + const signature = BDDT16Mac.generate(encodedMessageList, secretKey, sigParams, false); + const proof = new BDDT16MacProofOfValidity(signature, secretKey, publicKey, sigParams); + return [{ + encodedMessages, + signature + }, proof]; + } + /** * Verifies the MAC on the given messages. Takes the messages as a JS object, flattens it, encodes the values similar * to signing and then verifies the MAC. @@ -245,11 +266,12 @@ export class BDDT16MacProofOfValidity extends BytearrayWrapper { super(proof); } - verify(mac: BDDT16Mac, - messages: Uint8Array[], - publicKey: BDDT16MacPublicKeyG1, - params: BDDT16MacParams, - encodeMessages: boolean + verify( + mac: BDDT16Mac, + messages: Uint8Array[], + publicKey: BDDT16MacPublicKeyG1, + params: BDDT16MacParams, + encodeMessages: boolean ): VerifyResult { if (messages.length !== params.supportedMessageCount()) { throw new Error( @@ -258,10 +280,17 @@ export class BDDT16MacProofOfValidity extends BytearrayWrapper { } is different from ${params.supportedMessageCount()} supported by the MAC params` ); } - return bddt16MacVerifyProofOfValidity(this.value, mac.value, messages, publicKey.value, params.value, encodeMessages); + return bddt16MacVerifyProofOfValidity( + this.value, + mac.value, + messages, + publicKey.value, + params.value, + encodeMessages + ); } - verifyMessageObject( + verifyWithMessageObject( mac: BDDT16Mac, messages: object, publicKey: BDDT16MacPublicKeyG1, @@ -272,6 +301,6 @@ export class BDDT16MacProofOfValidity extends BytearrayWrapper { const msgCount = encodedValues.length; const params = BDDT16MacParams.getMacParamsOfRequiredSize(msgCount, labelOrParams); - return this.verify(mac, encodedValues, publicKey, params, false) + return this.verify(mac, encodedValues, publicKey, params, false); } -} \ No newline at end of file +} diff --git a/src/bddt16-mac/params.ts b/src/bddt16-mac/params.ts index 5b9b72be..93db264d 100644 --- a/src/bddt16-mac/params.ts +++ b/src/bddt16-mac/params.ts @@ -1,7 +1,13 @@ import { ISignatureParams, MessageStructure } from '../types'; import { - bddt16GenerateMacParams, bddt16IsMacParamsValid, bddt16MacAdaptParamsForMsgCount, bddt16MacCommitMsgs, - Bddt16MacParams, bddt16MacParamsFromBytes, bddt16MacParamsToBytes, generateRandomFieldElement + bddt16GenerateMacParams, + bddt16IsMacParamsValid, + bddt16MacAdaptParamsForMsgCount, + bddt16MacCommitMsgs, + Bddt16MacParams, + bddt16MacParamsFromBytes, + bddt16MacParamsToBytes, + generateRandomFieldElement } from 'crypto-wasm-new'; import { flattenMessageStructure, getSigParamsOfRequiredSize } from '../sign-verify-js-objs'; @@ -109,10 +115,7 @@ export class BDDT16MacParams implements ISignatureParams { * @param msgCount * @param labelOrParams */ - static getMacParamsOfRequiredSize( - msgCount: number, - labelOrParams: Uint8Array | BDDT16MacParams - ): BDDT16MacParams { + static getMacParamsOfRequiredSize(msgCount: number, labelOrParams: Uint8Array | BDDT16MacParams): BDDT16MacParams { return getSigParamsOfRequiredSize(BDDT16MacParams, msgCount, labelOrParams); } @@ -123,7 +126,7 @@ export class BDDT16MacParams implements ISignatureParams { const msgCount = Object.keys(flattenMessageStructure(msgStructure)).length; return this.getMacParamsOfRequiredSize(msgCount, labelOrParams); } - + toJSON(): string { return JSON.stringify({ value: { @@ -135,5 +138,4 @@ export class BDDT16MacParams implements ISignatureParams { label: this.label }); } - -} \ No newline at end of file +} diff --git a/src/composite-proof/proof.ts b/src/composite-proof/proof.ts index b34b0d7b..20625cf6 100644 --- a/src/composite-proof/proof.ts +++ b/src/composite-proof/proof.ts @@ -1,13 +1,17 @@ import { generateCompositeProofG1, - generateCompositeProofG1WithDeconstructedProofSpec, getAllDelegatedSubproofsFromProof, + generateCompositeProofG1WithDeconstructedProofSpec, + getAllDelegatedSubproofsFromProof, saverGetCiphertextFromProof, saverGetCiphertextsFromProof, verifyCompositeProofG1, verifyCompositeProofG1WithDeconstructedProofSpec, VerifyResult } from 'crypto-wasm-new'; -import {verifyCompositeProofG1 as verifyCompositeProofG1Old, verifyCompositeProofG1WithDeconstructedProofSpec as verifyCompositeProofG1WithDeconstructedProofSpecOld} from 'crypto-wasm-old'; +import { + verifyCompositeProofG1 as verifyCompositeProofG1Old, + verifyCompositeProofG1WithDeconstructedProofSpec as verifyCompositeProofG1WithDeconstructedProofSpecOld +} from 'crypto-wasm-old'; import { BDDT16DelegatedProof, VBAccumMembershipDelegatedProof } from '../delegated-proofs'; import { MetaStatements, Statements } from './statement'; import { Witnesses } from './witness'; @@ -60,7 +64,9 @@ export class CompositeProof extends BytearrayWrapper { * @param useNewVersion - Whether to use the new version of the wasm library */ verify(proofSpec: ProofSpec, nonce?: Uint8Array, useNewVersion = true): VerifyResult { - return useNewVersion ? verifyCompositeProofG1(this.value, proofSpec.value, nonce) : verifyCompositeProofG1Old(this.value, proofSpec.value, nonce); + return useNewVersion + ? verifyCompositeProofG1(this.value, proofSpec.value, nonce) + : verifyCompositeProofG1Old(this.value, proofSpec.value, nonce); } /** @@ -124,21 +130,23 @@ export class CompositeProof extends BytearrayWrapper { useNewVersion = true ): VerifyResult { const params = (setupParams ?? new Array()).map((s) => s.value); - return useNewVersion ? verifyCompositeProofG1WithDeconstructedProofSpec( - this.value, - statements.values, - metaStatements.values, - params, - context, - nonce - ): verifyCompositeProofG1WithDeconstructedProofSpecOld( - this.value, - statements.values, - metaStatements.values, - params, - context, - nonce - ); + return useNewVersion + ? verifyCompositeProofG1WithDeconstructedProofSpec( + this.value, + statements.values, + metaStatements.values, + params, + context, + nonce + ) + : verifyCompositeProofG1WithDeconstructedProofSpecOld( + this.value, + statements.values, + metaStatements.values, + params, + context, + nonce + ); } /** @@ -146,7 +154,7 @@ export class CompositeProof extends BytearrayWrapper { * @returns - The key in the returned map is the statement index */ getDelegatedProofs(): Map { - const r = new Map(); + const r = new Map(); const delgProofs = getAllDelegatedSubproofsFromProof(this.value); for (const [i, [t, v]] of delgProofs.entries()) { let cls; @@ -157,7 +165,7 @@ export class CompositeProof extends BytearrayWrapper { } else { throw new Error(`Unknown type ${t} of delegated proof for credential index ${i}`); } - r.set(i, new cls(v)) + r.set(i, new cls(v)); } return r; } diff --git a/src/composite-proof/setup-param.ts b/src/composite-proof/setup-param.ts index 8bab259a..0d20484d 100644 --- a/src/composite-proof/setup-param.ts +++ b/src/composite-proof/setup-param.ts @@ -20,7 +20,8 @@ import { generateSetupParamForFieldElemVec, generateSetupParamForBppParams, generateSetupParamForSmcParams, - generateSetupParamForSmcParamsAndSk, generateSetupParamForBDDT16MacParameters + generateSetupParamForSmcParamsAndSk, + generateSetupParamForBDDT16MacParameters } from 'crypto-wasm-new'; import { BBSPlusPublicKeyG2, BBSPlusSignatureParamsG1 } from '../bbs-plus'; import { diff --git a/src/composite-proof/statement.ts b/src/composite-proof/statement.ts index efa4ae4e..f6617011 100644 --- a/src/composite-proof/statement.ts +++ b/src/composite-proof/statement.ts @@ -48,7 +48,12 @@ import { } from 'crypto-wasm-new'; // import { generatePoKBBSSignatureStatement, generatePoKBBSPlusSignatureStatement, generatePoKBBSSignatureStatementFromParamRefs, generatePoKBBSPlusSignatureStatementFromParamRefs } from 'crypto-wasm-old/lib/composite_proof_system_wasm'; // @ts-ignore -import { generatePoKBBSSignatureStatement, generatePoKBBSPlusSignatureStatement, generatePoKBBSSignatureStatementFromParamRefs, generatePoKBBSPlusSignatureStatementFromParamRefs } from 'crypto-wasm-old'; +import { + generatePoKBBSSignatureStatement, + generatePoKBBSPlusSignatureStatement, + generatePoKBBSSignatureStatementFromParamRefs, + generatePoKBBSPlusSignatureStatementFromParamRefs +} from 'crypto-wasm-old'; import { BBSPlusPublicKeyG2, BBSPlusSignatureParamsG1 } from '../bbs-plus'; import { getChunkBitSize, @@ -179,7 +184,12 @@ export class Statement { revealedMessages: Map, encodeMessages: boolean ): Uint8Array { - return generatePoKBBSPlusSignatureVerifierStatement(sigParams.value, publicKey.value, revealedMessages, encodeMessages); + return generatePoKBBSPlusSignatureVerifierStatement( + sigParams.value, + publicKey.value, + revealedMessages, + encodeMessages + ); } /** @@ -232,7 +242,12 @@ export class Statement { revealedMessages: Map, encodeMessages: boolean ): Uint8Array { - return generatePoKBBSSignatureVerifierStatementFromParamRefs(sigParamsRef, publicKeyRef, revealedMessages, encodeMessages); + return generatePoKBBSSignatureVerifierStatementFromParamRefs( + sigParamsRef, + publicKeyRef, + revealedMessages, + encodeMessages + ); } static bbsPlusSignatureFromSetupParamRefsOld( @@ -254,11 +269,7 @@ export class Statement { revealedMessages: Map, encodeMessages: boolean ): Uint8Array { - return generatePoKBBSPlusSignatureProverStatementFromParamRefs( - sigParamsRef, - revealedMessages, - encodeMessages - ); + return generatePoKBBSPlusSignatureProverStatementFromParamRefs(sigParamsRef, revealedMessages, encodeMessages); } /** @@ -297,7 +308,12 @@ export class Statement { revealedMessages: Map, encodeMessages: boolean ): Uint8Array { - return generatePoKBDDT16MacFullVerifierStatement(macParams.value, secretKey.value, revealedMessages, encodeMessages); + return generatePoKBDDT16MacFullVerifierStatement( + macParams.value, + secretKey.value, + revealedMessages, + encodeMessages + ); } static bddt16MacFromSetupParamRefs( @@ -305,11 +321,7 @@ export class Statement { revealedMessages: Map, encodeMessages: boolean ): Uint8Array { - return generatePoKBDDT16MacStatementFromParamRefs( - macParamsRef, - revealedMessages, - encodeMessages - ); + return generatePoKBDDT16MacStatementFromParamRefs(macParamsRef, revealedMessages, encodeMessages); } static bddt16MacFullVerifierFromSetupParamRefs( @@ -407,16 +419,11 @@ export class Statement { return generateAccumulatorNonMembershipStatementFromParamRefs(params, publicKey, provingKey, accumulated); } - static vbAccumulatorMembershipKV( - accumulated: Uint8Array - ): Uint8Array { + static vbAccumulatorMembershipKV(accumulated: Uint8Array): Uint8Array { return generateAccumulatorKVMembershipStatement(accumulated); } - static vbAccumulatorMembershipKVFullVerifier( - secretKey: AccumulatorSecretKey, - accumulated: Uint8Array, - ): Uint8Array { + static vbAccumulatorMembershipKVFullVerifier(secretKey: AccumulatorSecretKey, accumulated: Uint8Array): Uint8Array { return generateAccumulatorKVFullVerifierMembershipStatement(secretKey.value, accumulated); } diff --git a/src/composite-proof/witness.ts b/src/composite-proof/witness.ts index e50edee2..04cc8309 100644 --- a/src/composite-proof/witness.ts +++ b/src/composite-proof/witness.ts @@ -10,7 +10,9 @@ import { generateR1CSCircomWitness, generateBoundCheckBppWitness, generateBoundCheckSmcWitness, - generateBoundCheckSmcWithKVWitness, generatePublicInequalityWitness, generatePoKBDDT16MacWitness + generateBoundCheckSmcWithKVWitness, + generatePublicInequalityWitness, + generatePoKBDDT16MacWitness } from 'crypto-wasm-new'; import { BBSPlusSignatureG1 } from '../bbs-plus'; import { VBMembershipWitness, VBNonMembershipWitness } from '../accumulator'; @@ -68,11 +70,7 @@ export class Witness { return generatePoKBBSPlusSignatureWitness(signature.value, unrevealedMessages, encodeMessages); } - static bddt16Mac( - mac: BDDT16Mac, - unrevealedMessages: Map, - encodeMessages: boolean - ): Uint8Array { + static bddt16Mac(mac: BDDT16Mac, unrevealedMessages: Map, encodeMessages: boolean): Uint8Array { return generatePoKBDDT16MacWitness(mac.value, unrevealedMessages, encodeMessages); } diff --git a/src/delegated-proofs.ts b/src/delegated-proofs.ts index e67df939..5552b324 100644 --- a/src/delegated-proofs.ts +++ b/src/delegated-proofs.ts @@ -8,7 +8,7 @@ import { BytearrayWrapper } from './bytearray-wrapper'; */ export class BDDT16DelegatedProof extends BytearrayWrapper { verify(secretKey: BDDT16MacSecretKey): VerifyResult { - return verifyBDDT16DelegatedProof(this.value, secretKey.value) + return verifyBDDT16DelegatedProof(this.value, secretKey.value); } } @@ -17,6 +17,6 @@ export class BDDT16DelegatedProof extends BytearrayWrapper { */ export class VBAccumMembershipDelegatedProof extends BytearrayWrapper { verify(secretKey: AccumulatorSecretKey): VerifyResult { - return verifyVBAccumMembershipDelegatedProof(this.value, secretKey.value) + return verifyVBAccumMembershipDelegatedProof(this.value, secretKey.value); } -} \ No newline at end of file +} diff --git a/src/init.ts b/src/init.ts index 8f465ce1..2c081b89 100644 --- a/src/init.ts +++ b/src/init.ts @@ -1,5 +1,13 @@ -import { initializeWasm as newInit, isWasmInitialized as newCheck, requireWasmInitialized as newRequire} from 'crypto-wasm-new'; -import { initializeWasm as oldInit, isWasmInitialized as oldCheck, requireWasmInitialized as oldRequire} from 'crypto-wasm-old'; +import { + initializeWasm as newInit, + isWasmInitialized as newCheck, + requireWasmInitialized as newRequire +} from 'crypto-wasm-new'; +import { + initializeWasm as oldInit, + isWasmInitialized as oldCheck, + requireWasmInitialized as oldRequire +} from 'crypto-wasm-old'; export async function initializeWasm() { await oldInit(); @@ -13,4 +21,4 @@ export function isWasmInitialized(): boolean { export function requireWasmInitialized() { oldRequire(); newRequire(); -} \ No newline at end of file +} diff --git a/src/ped-com.ts b/src/ped-com.ts index ca9ef1b3..4359ecc8 100644 --- a/src/ped-com.ts +++ b/src/ped-com.ts @@ -7,10 +7,10 @@ export class PederCommKeyUncompressed extends BytearrayWrapper implements IUncom // Pedersen commitment key export class PederCommKey extends BytearrayWrapper implements ICompressed { constructor(label: Uint8Array) { - super(generatePedersenCommKeyG1(label, false)) + super(generatePedersenCommKeyG1(label, false)); } decompress(): PederCommKeyUncompressed { - return new PederCommKeyUncompressed(decompressPedersenCommKeyG1(this.value)) + return new PederCommKeyUncompressed(decompressPedersenCommKeyG1(this.value)); } -} \ No newline at end of file +} diff --git a/src/saver/chunked-commitment.ts b/src/saver/chunked-commitment.ts index f7b70bf8..4b8fc2af 100644 --- a/src/saver/chunked-commitment.ts +++ b/src/saver/chunked-commitment.ts @@ -1,9 +1,6 @@ import { BytearrayWrapper } from '../bytearray-wrapper'; import { ICompressed, IUncompressed } from '../ICompressed'; -import { - saverGenerateChunkedCommitmentGenerators, - saverDecompressChunkedCommitmentGenerators -} from 'crypto-wasm-new'; +import { saverGenerateChunkedCommitmentGenerators, saverDecompressChunkedCommitmentGenerators } from 'crypto-wasm-new'; /** * Same as `SaverChunkedCommitmentKey` but in uncompressed form. diff --git a/tests/anonymous-credentials/presentation-multiple-sig-types.spec.ts b/tests/anonymous-credentials/presentation-multiple-sig-types.spec.ts index d674f8f4..d989ea69 100644 --- a/tests/anonymous-credentials/presentation-multiple-sig-types.spec.ts +++ b/tests/anonymous-credentials/presentation-multiple-sig-types.spec.ts @@ -121,6 +121,7 @@ describe.each([true, false])( // Check using validity proof as well const proof = new BDDT16MacProofOfValidity(credential.signature, skBddt16, pkBddt16, paramsBddt16); checkResult(credential.verifyUsingValidityProof(proof, pkBddt16, paramsBddt16)); + checkResult(credential.verifyUsingValidityProof(proof, pkBddt16)); } if (sk instanceof BBSSecretKey) { credentialBbs = credential; diff --git a/tests/anonymous-credentials/serialized-credential.spec.ts b/tests/anonymous-credentials/serialized-credential.spec.ts index dfa7e4a8..99ec38ff 100644 --- a/tests/anonymous-credentials/serialized-credential.spec.ts +++ b/tests/anonymous-credentials/serialized-credential.spec.ts @@ -1,6 +1,6 @@ import * as fs from 'fs'; -import { Credential, isKvac, isPS, PublicKey, Scheme } from '../scheme'; +import { Credential, isKvac, isPS, PublicKey, Scheme, SecretKey } from '../scheme'; import { checkResult } from '../utils'; import {initializeWasm} from '../../src'; @@ -13,13 +13,15 @@ describe(`${Scheme} Credential creation and verification from JSON`, () => { function check(credVersion: string, schemaVersion: string) { for (let i = 1; i <= 3; i++) { - const pkBin = fs.readFileSync(`${__dirname}/serialized-objects/${fileNamePrefix}_pk${i}.bin`); + const pkBin = isKvac() ? undefined : fs.readFileSync(`${__dirname}/serialized-objects/${fileNamePrefix}_pk${i}.bin`); + const skBin = !isKvac() ? undefined : fs.readFileSync(`${__dirname}/serialized-objects/${fileNamePrefix}_sk${i}.bin`); let credentialJson = fs.readFileSync(`${__dirname}/serialized-objects/${fileNamePrefix}_credential${i}-${credVersion}.json`, 'utf8'); credentialJson = JSON.parse(credentialJson); // @ts-ignore - const pk = PublicKey.fromBytes(pkBin); + const pk = isKvac() ? undefined : PublicKey.fromBytes(pkBin); + const sk = !isKvac() ? undefined : SecretKey.fromBytes(skBin); const cred = Credential.fromJSON(credentialJson); - checkResult(cred.verify(pk)); + checkResult(isKvac() ? cred.verifyUsingSecretKey(sk) : cred.verify(pk)); expect(credentialJson).toEqual(cred.toJSON()); expect(cred.schema.version).toEqual(schemaVersion); } @@ -31,7 +33,7 @@ describe(`${Scheme} Credential creation and verification from JSON`, () => { check('0.0.2', '0.0.1'); }) - skipIfKvac('check version 0.4.0', () => { + it('check version 0.4.0', () => { check('0.4.0', '0.2.0'); }) }) \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation1-0.6.0.json b/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation1-0.6.0.json index f233ea79..7796506a 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation1-0.6.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation1-0.6.0.json @@ -1 +1 @@ -{"version":"0.6.0","nonce":null,"spec":{"credentials":[{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22education%22%3A%7B%22properties%22%3A%7B%22grade%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score1%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score2%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score3%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John"}},"circomPredicates":[{"privateVars":[{"varName":"x","attributeName":{"credentialSubject":{"education":{"grade":null}}}}],"publicVars":[{"varName":"set","value":["7Jjyu46Z91jBSubPtv8jtRmkJdUSvYSMG94sHVD9AfMP","4efTvLXrzMGRJmq3Qj51NYKfhH28tPAqXEfgVUeLPv2w","8RvzAng4VQyWQ6S43RbGtRiLmojjF11rnp61yR1Hpzyu","4QpHmecK8KHacS8ZBASweXV98zqzLiozDA7d4MVn6rWr","6au7i34j8TGJUBm24FzRZ9a6JyAWTp2yjdMXZ3szPjZs"]}],"circuitId":"random2","snarkKeyId":"random1","protocol":"LegoGroth16"}],"sigType":"Bls12381BDDT16Dock2024"}],"attributeEqualities":[],"boundedPseudonyms":{},"unboundedPseudonyms":{}},"proof":"2MmjucpYRY8F32AHrZrnepoMSBjgWpAESqzjNqq4pAgu4KbqRPkmVgbUQqk2dsmF95Fcgh8ujBNuG1wnu7SKdSPUb4dhcGvr5hQZKrBitzB5mydTax7mGDPWTkDfzMxBVpaLZthE9id4BT6abbTmPMqbH6eSUBTAt77uWAFW1yZTHyX2bXdjukV2AHK3H5ZWTquVXJKg4TkhxkXoUjUECUstcpELcnnnhxvgLSHACCghVdtrV8vsxBB46ZDShqc6bcDnRxfSYvF2ujhryg6jpLewhbucSSmYDBDpcCjn8KDCXrM31KVjjJwzHGX86buczQaEkmoNYG82RCVz5GbDkQhi39ENttQj45wAQU93AyEfeBdwi1feQr6Zcg7FmAaBE1e5AvaXsjMheGiogCiZ5yuNzByVuhXCZWT2T9xjNk4G6kLjH9DKBh329NDkUoLkUKvARHfvZgw2x5J6JFrTvffwzq7bG5amUMaYsnNooPVvhcigN7qC3fF2DEpwajZqoyuwc8eXGqbhBSsdL5y4ix3rifhKaZwtkjqrEPssw8n55s1MyBXRoMrxYRQcvJw2hghvajJqeJpY55voYzi29TbAt13862B5WmKmcK6r53cMaYFkihU4rtZmrL5QUzcvxAP1HydfpS4mogwieo5dx1Aq1pxQugFka8DYeRPPWLwTeZgaiKtfbgAqwhXNcf4hmwKb7XcdHwALGQBiLED9ATMBXABmoqVfGHvub8hTUrAU9YTqHBGWZGHfhUcfyAgmPLimdqfdnaauyQekU2Zij2i7dgKRpNj87jkkaZ9uMdxwQqdn3WiYgjh6esifYafZrxqJSZAPAXTZ7p5NE1sNqU68ADHLuywgj6NTWPEc4eL3LuCjXsEhRFr3DRDhKesCs8D7ET7e32Q6F3vYUJGR9XrU9fmWsJV6Yvgzf7aG7tsHiNb2sngwKcomYuW1MdE4wkvKNqJGs5wswusyuPiqvKofHpsc2U9xCmfHYaeMW4CxvgBP8jW8eGG6RYZ7tzwTnRu19Zc2Cgiktd6HYKRrYEiJmNh8aa2tCQpggPYuHbxDSiywNqdyFLD4rgVQtrVmn26nDrjFnKidQwtNfNMqZ8hStDiHkiuWjGbbmdjsabTJMomtFpXCDrRF9m9mPrNgNnigJuExFmdKh6ibVutrpGe1Pb762Syz7YZgZ5sTdDx5d694sbz5bmguvf4N5Ux9eGHsGKHbgSsCVdP7nKK9XRXH9xkc5ze783MHqzFizC6qje5wjbR4Yb6HvbaZa2hJDsX1GM3FUdfgGiiPfCj1vu4y31UK5hmxjrFJDoATc72xAGELFBQubT9Fs7b5tQ1etndB2"} \ No newline at end of file +{"version":"0.6.0","nonce":null,"spec":{"credentials":[{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22education%22%3A%7B%22properties%22%3A%7B%22grade%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score1%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score2%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score3%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John"}},"circomPredicates":[{"privateVars":[{"varName":"x","attributeName":{"credentialSubject":{"education":{"grade":null}}}}],"publicVars":[{"varName":"set","value":["7Jjyu46Z91jBSubPtv8jtRmkJdUSvYSMG94sHVD9AfMP","4efTvLXrzMGRJmq3Qj51NYKfhH28tPAqXEfgVUeLPv2w","8RvzAng4VQyWQ6S43RbGtRiLmojjF11rnp61yR1Hpzyu","4QpHmecK8KHacS8ZBASweXV98zqzLiozDA7d4MVn6rWr","6au7i34j8TGJUBm24FzRZ9a6JyAWTp2yjdMXZ3szPjZs"]}],"circuitId":"random2","snarkKeyId":"random1","protocol":"LegoGroth16"}],"sigType":"Bls12381BDDT16MACDock2024"}],"attributeEqualities":[],"boundedPseudonyms":{},"unboundedPseudonyms":{}},"proof":"2MmjucpYRY8F9UviSobhfqprgMqdCYpnkkJjG47F6otYrJpEMZntzhGAvwmZmZzuxFrShPAJXk3r4MSSmqQUjBaFsKHkp9SrFnzdJRSQNMSZZjtxcq6u13fvHFoPkd6AT9rPkJ9t7xd71c1cVgKRmBmQ1Bb1wbAygYRNLWSLqLYePYHFGAbraSq6DHyotroxNQxoK1pzvRCuy6cpXMeQev6aKZJ5Sh5BVSHpHWAuxs5crppRWnuM8Cj4dwfS8jFc9M9cxhRQE4AJFQoQx8rSnLRnr4Dw6ppj5kKPcC4TZBYZz14XfqKPYcKD4a455DKjnVdNriZmK9YXsPRaiMEdrmM6fiL9dS8LTsaBRzjoTcSCePs3iXjyJyw2djqeU8m35298ayxhKr6rT9bBAG1HJFm9qjsiagFV7qy5eKWWqM9gHV81JENfDwqSXW8rinQpQqfn3CdqkNK7nbQWWDNUWwTwNtgPNPfkgCfDhPhCRrEhPgkGSxqXhbPoQPzDj3RbvX8QnY3UFZwPbTNJ6t5fuhHM4zFAJC1ruNN35V1nMN2y1scM5LjSYV9b5AU3AqqWm3GJmnxeFN19vioYnpkxDhJdxqkEERMx1Q76U4qo9ozBwk64rDmqtKWWV73WK2TC9jVKde6PeH7Bs7vpc4Jjw97eTLrXgs4xzmxmcX5SPT29QNyza9zswYK14pGr1efQYQoKLvS6Px7gRCe175W2t63oSYN4sAMZtLtMbKt5aUKaMagydsfLm8kNEkigidHieNzPE4es5dxPDeYDD4bjz6Kjv4TbuHz96V96HzgvqPxUddRFT1tmcSV1ZuNn1SYqNCRCbuv7W9xzcvhbiUroa2796iLfNKtr2MzkaUjoCF2YFP6dAYUXFyfbT7qKiqJSEUExCdz7QhmvSksCap4UdyHU9VjUoW3wPaNuqAv6sj2SMkfSxdpiMAWrG8usRVy3sJ1smc2SoxsKu2S3cMrNtbKRcs6xFJirN2gF4KR8XtCzTx8RXXSEsvDLiBUxgCr3YFTSi5qWV44xqu6Wdp2RaRdxZJjKsiwb4nqUQ7RePbV5CtonhP3r3roSbV6wVPt9k1Tf5mJ1cneLLxX5ALFnDgtd49qEPnkXAvbnPzPxFRW9FxfCzjabfTtNtVxqcfTpnWFf24CtpMt2gVVj4maBnTVMPQyn25Badr8wTUgDcG9VwbrTKyky55hzmBhyHgLJEbBDMatvkpoJGafahf8RiYp52TCZHdmbj8RcNh7V5uQAgWHBCHZP3zoZtUQyD3WSFsqR11sW7Np7AcdXMhR1hfkXbRpRWNdxNreYKY7T51qdktsaan5vnMtzNuqs3jUDt2Sqr"} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation2-0.6.0.json b/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation2-0.6.0.json index a3e38f98..5ed540ad 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation2-0.6.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16-circom-presentation2-0.6.0.json @@ -1 +1 @@ -{"version":"0.6.0","nonce":null,"spec":{"credentials":[{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22education%22%3A%7B%22properties%22%3A%7B%22grade%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score1%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score2%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score3%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"Bob"}},"circomPredicates":[{"privateVars":[{"varName":"x","attributeName":{"credentialSubject":{"education":{"grade":null}}}}],"publicVars":[{"varName":"set","value":["7Jjyu46Z91jBSubPtv8jtRmkJdUSvYSMG94sHVD9AfMP","4efTvLXrzMGRJmq3Qj51NYKfhH28tPAqXEfgVUeLPv2w","8RvzAng4VQyWQ6S43RbGtRiLmojjF11rnp61yR1Hpzyu","4QpHmecK8KHacS8ZBASweXV98zqzLiozDA7d4MVn6rWr","6au7i34j8TGJUBm24FzRZ9a6JyAWTp2yjdMXZ3szPjZs"]}],"circuitId":"random2","snarkKeyId":"random1","protocol":"LegoGroth16"}],"sigType":"Bls12381BDDT16Dock2024"}],"attributeEqualities":[],"boundedPseudonyms":{},"unboundedPseudonyms":{}},"proof":"2MmjucpYRY8F5yxkThR5PhNAFq379pM5opiXSSUrg1oubeSJy2EGUx18nLF6yULRPiVLw7i2uqbFnszZ5CBDxxCKK4nRp8sSYHKdePYAJuW9LnfHQxRAJXCNkwDRQ7Gs1dK7BMqWZyWLwa7tiBzMYGWJPRwhRW8WJwD8iguNYkycNMfxo2XEdrx4mjeAggcQNeKP6j2fFd7HnYqMzzAPMxxmxMmJjVsb38n8daZ9sj7ieDJsxyimN2Ac5XWtthzJaxHwSujzsUK47VKYbVcz2f3LqomyxiSBwZo66BmGd76LbLnvyz6GaTnZxK59eAhbPLN5pN6GCnTombGazFZA7AyLRqJ329Mi48JApBMNPYnBg1KJYmWN2DUpba8wdGQYdPEPUc7WbY4p95PEv57Y5o9pEgV18MuzYYbioW4YVNgXvEhMdiUchK2Zc7xtUKwpNdmG4aRkdkK2i9PkTeuBi2UvSpYsbU8sca6ELtrbW7JEY7cMdmcn331By2z7WDMg3QqrBDvM7W6UpsaQcp6MuocCxkoa7kzuKuLoFcaeMG5wAEawx54RjsRzynUK5uQvGoZUwtVrwoVHzQeztZ7x2Z1AE4bqZyo3eTuko15PgHmYY1JLmgr6oWwBvKMuwTUiT9qo9zhFEnnmu9eC9eKpzfZz9KpaBnZgM948ye7FG8FMMGh4LQh7h2kZ9Yivsw1pCPmBYuDriiVreX6bdhJakqjVUfjkbuYvAX8cyyU7jLqTjeR9JvvNY8uwnBkNZY8yZJuC1k1QZymybdELvKkp4wuQMkrks4rFVk1c4jzqU7P1mhY5HCeop2ZcfbGgwZib7cFF2mpoevKzQpMkAvo9xo8ioHaqnJuHY8iSVpF8S7pk4pdVzDy1KAXPz3sgGMMtocQnjB2vwF7C4opnTxR7pCybQyAnQdVnpQVKK2PJfsuFKajULq6PnbUaqbJCkMw2QYqFohv1AVqcQcV8WNkqUKYW6iXeBD9Bp9KpDWd5FvEN2gWFMNGzjHCD6DdtTxmpwGMZfH6nA6Vscd8px8abTUNmSNs3A8wsQR3K5ym37n1E7n3XEhoadWkezYNH6FfRbR7c4X586wspSRcaSzjwjHyGKrBnkxZsGEME9qLZhZNXsH8Ra7QF8KAMN9UTX686JtkJV7sCFHWijmKjLfmBzzzw1sVTu3KJxpKBX8zB3jZ2LyCFYxekzm4EekpAfKaQHPXHb4M3Jgpio1oixBKgqsKN1DCkj31iASDJrwh5Vfj9rU2esn8EBaiPmZ55toS44x9eviQoVEMB4StRL2QxD61HyFT3mc1W3kVd3kWmuV8TTJ4WJh81ATsgmQeaCMLnScKko"} \ No newline at end of file +{"version":"0.6.0","nonce":null,"spec":{"credentials":[{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22education%22%3A%7B%22properties%22%3A%7B%22grade%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score1%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score2%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22score3%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"Bob"}},"circomPredicates":[{"privateVars":[{"varName":"x","attributeName":{"credentialSubject":{"education":{"grade":null}}}}],"publicVars":[{"varName":"set","value":["7Jjyu46Z91jBSubPtv8jtRmkJdUSvYSMG94sHVD9AfMP","4efTvLXrzMGRJmq3Qj51NYKfhH28tPAqXEfgVUeLPv2w","8RvzAng4VQyWQ6S43RbGtRiLmojjF11rnp61yR1Hpzyu","4QpHmecK8KHacS8ZBASweXV98zqzLiozDA7d4MVn6rWr","6au7i34j8TGJUBm24FzRZ9a6JyAWTp2yjdMXZ3szPjZs"]}],"circuitId":"random2","snarkKeyId":"random1","protocol":"LegoGroth16"}],"sigType":"Bls12381BDDT16MACDock2024"}],"attributeEqualities":[],"boundedPseudonyms":{},"unboundedPseudonyms":{}},"proof":"2MmjucpYRY8FBnust9fcwxk2FqB227ZJ3MrbFESPXcA9zLgVpno47yUZXJSrHAUcM4a1NeFomgpXHJWB8HE67Zhu8ryD3yaVtwyDQJa6TaKncEyu9Fi6DPdTAc4KMhCSnoGV3y2mhUcAkQ1tsW7nDiffrTyUWA5HRcbzwsJG7VHuf7yzpzcmHjtKEvjmjL3U45EFUXcXvjYg8q7GrKrM75X67DveSF1iHFMeG8dap1iFwWjg5piXpGrbywkKdyvkEBw3fm1yPyewjjWnwZN2TnsFJAPC5RVrusQNuqLqGc51rbj7J89wZfnUX64bwDWcC1gtsowDKhkPdPfVQxeYTsDBd911co4SAnLqvsQ1mCcov7zRDyyBAaJPMh6bwVKAMsphxfwE84iUqK8WEi82LJo5aYKX9RESMtouDXAEWq5cYqLAxWNYYDaQRzvtsPWEAMEnNJJLVFxhpoh6DYx9mPztiWW9exFScK4uEuuSnY7ijic86FhbYvvDVzhJv1BDT2igoDCQFCJJZvEScgo4RnA95ZNW3HvgYdPzkFCTdPRaaCC33Uu2t7xfuufUPFRMi7C27GR6Jnf7EVPzUDqiAMG8RBJfjAhbzwsT4HTFDcv4FDCijGhE45Sy21VUT9YuJxbHx8jhARvyxGbU2P2VdoYehFUUtb5Zry1XJ3AqteidUNg8f7RDLxAgGy1DE9yiYQUCadFgQtmVmD3nXByUuKpJscixC6vn1U2BSTXk9TPim23KNmk7hR5B7x2HfynfW5My2HP2RKFuE4Q2JKNEuqf4KskXQWJ6UosnpWmmUkY1CN3xEpDFthEj5hHHymyADNkWnvViMpYqtUbQFEbNWvudbEiiToLRbUNvUhuQ6m6swSZ5sDQeEKUpd7C6ZNpABFmsbDn4HaPWXzeuv3ifvez19unQEwk67bbFWRnGQp12GnDgbCg8vQjK4FPSm3XGr64ke5YSGi1Z6p7JBwrF8jr8avrFqdkRXHbgQNejsiRb76iPk8Ep5MWDEN2QKJyMwibY13SWsz4K3omAMCGFm1u4UwNaHdA9dLdRd7uf2tnkz2sYSwMtVXzTXYQLLdN72yv3pvf6y2fCrHGuydFTXZqP1y8y9YGDsgovREppKe18SjYo6S7kmWkktPe7fSYSkLRZBWoBmxtZVRZ6qzCkpNRKrbhm6qHLbrYEUd9QNZugcHrvAfF9wuEmH8PQestpA2F8e26RQnjzwbtCcz3swbmDLSm6MJATVQsm6UPmvkkkDVv3y6XJJgpvrh6zEvGdXzvoKBU85KxX1wuvKna7D4o234zAAFojaQQcu7DjmSiPMeXAEjEDiDbYQXT4oa5XQJ4W7"} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16-presentation-0.6.0.json b/tests/anonymous-credentials/serialized-objects/bddt16-presentation-0.6.0.json index eaf0ec6d..2429d00d 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16-presentation-0.6.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16-presentation-0.6.0.json @@ -1 +1 @@ -{"version":"0.6.0","nonce":null,"spec":{"credentials":[{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John","lname":"Smith"}},"bounds":{"credentialSubject":{"timeOfBirth":[{"min":1662010838000,"max":1662010856123,"paramId":"random","protocol":"LegoGroth16"}],"BMI":[{"min":10,"max":40,"paramId":"random","protocol":"LegoGroth16"}],"score":[{"min":-40.5,"max":60.7,"paramId":"random","protocol":"LegoGroth16"}]}},"verifiableEncryptions":{"credentialSubject":{"SSN":[{"chunkBitSize":16,"commitmentGensId":"random-1","encryptionKeyId":"random-2","snarkKeyId":"random-3","protocol":"SAVER"}]}},"sigType":"Bls12381BDDT16Dock2024"},{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22isbool%22%3A%7B%22type%22%3A%22boolean%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22physical%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John","location":{"country":"USA"}}},"verifiableEncryptions":{"credentialSubject":{"sensitive":{"userId":[{"chunkBitSize":16,"commitmentGensId":"random-1","encryptionKeyId":"random-2","snarkKeyId":"random-3","protocol":"SAVER"}]}}},"sigType":"Bls12381BDDT16Dock2024"},{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lessSensitive%22%3A%7B%22properties%22%3A%7B%22department%22%3A%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22rank%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22phone%22%3A%7B%22type%22%3A%22string%22%7D%2C%22very%22%3A%7B%22properties%22%3A%7B%22secret%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John","lessSensitive":{"location":{"country":"USA"},"department":{"location":{"name":"Somewhere"}}}}},"status":{"id":"dock:accumulator:accumId123","type":"DockVBAccumulator2022","revocationCheck":"membership","accumulated":"5iYSR7j6eCT2nvmKMGE3f88CQ73crNhcesj1Nq6JwkqbvCzuyR9qNYWLpvyJU1h27d","extra":{"blockNo":2010334}},"bounds":{"credentialSubject":{"lessSensitive":{"department":{"location":{"geo":{"lat":[{"min":-30,"max":50,"paramId":"random","protocol":"LegoGroth16"}],"long":[{"min":-10,"max":85,"paramId":"random","protocol":"LegoGroth16"}]}}}}}},"sigType":"Bls12381BDDT16Dock2024"}],"attributeEqualities":[[[0,"credentialSubject.SSN"],[1,"credentialSubject.sensitive.SSN"],[2,"credentialSubject.sensitive.SSN"]],[[0,"credentialSubject.timeOfBirth"],[1,"credentialSubject.timeOfBirth"]],[[0,"credentialSubject.BMI"],[1,"credentialSubject.physical.BMI"]],[[0,"credentialSubject.score"],[1,"credentialSubject.score"]],[[0,"credentialSubject.userId"],[1,"credentialSubject.sensitive.userId"]]],"boundedPseudonyms":{},"unboundedPseudonyms":{}},"proof":"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","attributeCiphertexts":{"0":{"credentialSubject":{"SSN":["P1KrNqmcpHfh6YpcGUnuojwf5NSoqHfMNzDsFTUi3WH8YkHUTmRNjHQmsUnGaJNGssVJxCWsFAGdg3tydF9i4YzCnMwiw6pQ1Lj2rPYWMTJzYZNkDuyNZ5nFDXTUTcSUW8dUs8a1C6XdXLqqQXxCpY2KdMdi6JKjYQRBgHwpRxKQ9yweSNmymao59FoS2KanqKoiAvA4R9FfqTf9GuLotCR6bXoe7bCscj32wsJuNNhZstLo2d2S18eTQX1bN7nLDsUtyVMZq8dRXEpKJce85GhVf4br9989A7r2MLY6N2JFAe9REhiDsvkZhqf8KQUSaETn9bmWeJ3g9sjRfDR9NEiwfMeMpfR6hjftWtojrpBqfNN77tfo9DprWNWyvgoru6vgdVeT3NWv71U8MGtHECZqeCzEY8jhBxHabVvAU5FvY9kg8NhFjQSMd89mnQWAn8R4SA5ji2WAB4rUTDw9J15ZBKsyaDiFz4T7C9HzBDTAKQpDmJYU3qVp3nsJqMRN3t46eN7M6UxEzr38MQqCQAaQQdjgD79tAmimcfFdKa1bMuHbyHwXvE1R1hjQ9QsgEt9iiihvMCS5UJCTXNdaSUxNBtYwUHxFXsosk2qPY8hCAXCX48j8a3gDeCqcWbkhFy9Zhq6s83i3FxvB1krseehvuLPUPb1PRLJmdMGV9rH4HPp8Dg2MtboFbbTZ2BQkUarDQiQvotg5WpGMAjBWFKMXv2yh4oDmHFBGav8X921maH1Z5RHJerN3KDQLP4SQFs1Y6YkVwgYwz6oWufCnH1cwQTFifttci1FVpsYnuf7FyRAGMMBiNQtQT7Q8Sbraxjd82HUYGzfehvD78kvFFxAxddUmGRcXLQ1hgJaHs8QZurRbC35s3Sds31EyeicnjMEdmrysrDjKgGitvAz9q8c46RzSj27pfHMXHd9JzBZQTv7cVDCtFYaio43rqmWVDq24GxgU9jaZumhYxXPbc9tAAyygKJ1ytZk93eoMzxNcTNCMk9eiRzfvyV7kjnh6KDSRpMX2GZrZbxFYNpsXAqTViJxMXpRfsKadEVrPhEEycC7qesfxAi76Cu6PX1QqbTVjqTyELbcCCXtqb4TLRwrQx9Aj87FEeujgeyb5LsuCskzp7mKsiYGhCMq3NYb8jJ4bEmG3spdugfhTmLYgfLPmJvRA5pdXvvGgZUU"]}},"1":{"credentialSubject":{"sensitive":{"userId":["Ks6tRdetz9GxhneTw5zpp51r3DKeWX7312w7uS9n8rbwGMyTJvBWz8QdU7N9KpWbo2FuBtnCyZr6MEJ9k5MghRV2zzkht7pYEEwPPeHxcwPANEmt44bzjYNKEL29YNVxQB6YvQZvR1RcjcAfHBz6ss5q1QvQadGFkFPYauVYHadehaY139wUqycF5dgdownhEtUD8B6BB7vsHpusHksfZnJEeeEmhRwq1LW8iRqHtpsxtpKELFobHJFe8bf5tQoujs7dbzkRcWF28S7JpjmqmERFjwJjVhHcko7WQt5GN5ZPqrx48Hgp2QZm7kZrXgrtTNNuEpnrZ8UoRabXTYgENUrFuuKqHS5p171mgtbHJoyQTqiXGGC2sUjowCYJm6ktF9RG1fJW3n1xHavqNnYKT75dUqYvVuF9K4rSW2fey4DyLW3sWh78hw2s5mGrGqyZ4p668nsfauUy7zjNxrZw8hjyJZ9goB2GGHCeVAGzux3KULCpDnBeMrW5yeXRVzzHWBTxWtyEEzs23RQHAv4nhM7grxekvgprHkbmFTsXXmtkAYs1sXhFnXNLayqY3sz5WpA2wPHWSMo7bGTcxM6eE6c8eaPqHXBZ8eKHCSbumwypK13nGwvafsVivHxGnB3dDsBaid4TuipRjacmY5gTyWkE9ir6bMykP5ya17s9cZEjhEHYGynrAAvBruzvNb1bqsQ3aEGBxTmWTSGMpnBqDJNTE3PyQ2egrXgbcj2ex5fvkiQjmD4myBBx7X4UANeWapWGAngkKWUZPcUJresjfaMjrfjKPfRf7kXdXkH3Ks47nyHyVw6UGg1J7Vw86oMYmG3EZZHw1ghV67o4QMufbZP8tFcUpXNcQzhVBUsW9e2YT2NhkA1uiV4XXTkon31von6bTa4CBBBm56Xe4kdBirAN17cE86ELo9uCvUN3EmYoYRm8FMCYKRf2KC8LbFZ2EfHyqz1HQRGmnetToPMDCeK8HJHP7kuAsvnFrkrp8yYeMknbkhvf6s3qQxLHYiwTBT3rSZLuy26QMbxfhnSwi8LAC3DQZFu4TD1sVe9zo5qFDm7BtbxoaR8kczyAKst8WvPnFn14ouFQ9BGiuTHioVDeG8V7Gv5yRb9c6df91WnCWn7TgeJQ4Gbns4g82jd3SHrH2kb1SW6RyvSkAGjXXH2ZyBphrnGAYZhQWBJ"]}}}}} \ No newline at end of file +{"version":"0.6.0","nonce":null,"spec":{"credentials":[{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John","lname":"Smith"}},"bounds":{"credentialSubject":{"timeOfBirth":[{"min":1662010838000,"max":1662010856123,"paramId":"random","protocol":"LegoGroth16"}],"BMI":[{"min":10,"max":40,"paramId":"random","protocol":"LegoGroth16"}],"score":[{"min":-40.5,"max":60.7,"paramId":"random","protocol":"LegoGroth16"}]}},"verifiableEncryptions":{"credentialSubject":{"SSN":[{"chunkBitSize":16,"commitmentGensId":"random-1","encryptionKeyId":"random-2","snarkKeyId":"random-3","protocol":"SAVER"}]}},"sigType":"Bls12381BDDT16MACDock2024"},{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22isbool%22%3A%7B%22type%22%3A%22boolean%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22physical%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John","location":{"country":"USA"}}},"verifiableEncryptions":{"credentialSubject":{"sensitive":{"userId":[{"chunkBitSize":16,"commitmentGensId":"random-1","encryptionKeyId":"random-2","snarkKeyId":"random-3","protocol":"SAVER"}]}}},"sigType":"Bls12381BDDT16MACDock2024"},{"version":"0.4.0","schema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lessSensitive%22%3A%7B%22properties%22%3A%7B%22department%22%3A%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22rank%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22phone%22%3A%7B%22type%22%3A%22string%22%7D%2C%22very%22%3A%7B%22properties%22%3A%7B%22secret%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","revealedAttributes":{"credentialSubject":{"fname":"John","lessSensitive":{"location":{"country":"USA"},"department":{"location":{"name":"Somewhere"}}}}},"status":{"id":"dock:accumulator:accumId123","type":"DockVBAccumulator2022","revocationCheck":"membership","accumulated":"5iYSR7j6eCT2nvmKMGE3f88CQ73crNhcesj1Nq6JwkqbvCzuyR9qNYWLpvyJU1h27d","extra":{"blockNo":2010334}},"bounds":{"credentialSubject":{"lessSensitive":{"department":{"location":{"geo":{"lat":[{"min":-30,"max":50,"paramId":"random","protocol":"LegoGroth16"}],"long":[{"min":-10,"max":85,"paramId":"random","protocol":"LegoGroth16"}]}}}}}},"sigType":"Bls12381BDDT16MACDock2024"}],"attributeEqualities":[[[0,"credentialSubject.SSN"],[1,"credentialSubject.sensitive.SSN"],[2,"credentialSubject.sensitive.SSN"]],[[0,"credentialSubject.timeOfBirth"],[1,"credentialSubject.timeOfBirth"]],[[0,"credentialSubject.BMI"],[1,"credentialSubject.physical.BMI"]],[[0,"credentialSubject.score"],[1,"credentialSubject.score"]],[[0,"credentialSubject.userId"],[1,"credentialSubject.sensitive.userId"]]],"boundedPseudonyms":{},"unboundedPseudonyms":{}},"proof":"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","attributeCiphertexts":{"0":{"credentialSubject":{"SSN":["P1KrNqmcpHfh6YpcGUnuojwf5NSoqHfMNzDsFTUi3WH8YkHUTmRNjHQmsUnGaJNGssVJxCWsFAGdg3tydF9i4YzCnMwiw6pQ1Lj2rPYWMTJzYZNkDuyNZ5nFDXTUTcSUW8dUs8a1C6XdXLqqQXxCpY2KdMdi6JKjYQRBgHwpRxKQ9yweSNmymao59FoS2KanqKoiAvA4R9FfqTf9GuLotCR6bXoe7bCscj32wsJuNNhZstLo2d2S18eTQX1bN7nLDsUtyVMZq8dRXEpKJce85GhVf4br9989A7r2MLY6N2JFAe9REhiDsvkZhqf8KQUSaETn9bmWeJ3g9sjRfDR9NEiwfMeMpfR6hjftWtojrpBqfNN77tfo9DprWNWyvgoru6vgdVeT3NWv71U8MGtHECZqeCzEY8jhBxHabVvAU5FvY9kg8NhFjQSMd89mnQWAn8R4SA5ji2WAB4rUTDw9J15ZBKsyaDiFz4T7C9HzBDTAKQpDmJYU3qVp3nsJqMRN3t46eN7M6UxEzr38MQqCQAaQQdjgD79tAmimcfFdKa1bMuHbyHwXvE1R1hjQ9QsgEt9iiihvMCS5UJCTXNdaSUxNBtYwUHxFXsosk2qPY8hCAXCX48j8a3gDeCqcWbkhFy9Zhq6s83i3FxvB1krseehvuLPUPb1PRLJmdMGV9rH4HPp8Dg2MtboFbbTZ2BQkUarDQiQvotg5WpGMAjBWFKMXv2yh4oDmHFBGav8X921maH1Z5RHJerN3KDQLP4SQFs1Y6YkVwgYwz6oWufCnH1cwQTFifttci1FVpsYnuf7FyRAGMMBiNQtQT7Q8Sbraxjd82HUYGzfehvD78kvFFxAxddUmGRcXLQ1hgJaHs8QZurRbC35s3Sds31EyeicnjMEdmrysrDjKgGitvAz9q8c46RzSj27pfHMXHd9JzBZQTv7cVDCtFYaio43rqmWVDq24GxgU9jaZumhYxXPbc9tAAyygKJ1ytZk93eoMzxNcTNCMk9eiRzfvyV7kjnh6KDSRpMX2GZrZbxFYNpsXAqTViJxMXpRfsKadEVrPhEEycC7qesfxAi76Cu6PX1QqbTVjqTyELbcCCXtqb4TLRwrQx9Aj87FEeujgeyb5LsuCskzp7mKsiYGhCMq3NYb8jJ4bEmG3spdugfhTmLYgfLPmJvRA5pdXvvGgZUU"]}},"1":{"credentialSubject":{"sensitive":{"userId":["Ks6tRdetz9GxhneTw5zpp51r3DKeWX7312w7uS9n8rbwGMyTJvBWz8QdU7N9KpWbo2FuBtnCyZr6MEJ9k5MghRV2zzkht7pYEEwPPeHxcwPANEmt44bzjYNKEL29YNVxQB6YvQZvR1RcjcAfHBz6ss5q1QvQadGFkFPYauVYHadehaY139wUqycF5dgdownhEtUD8B6BB7vsHpusHksfZnJEeeEmhRwq1LW8iRqHtpsxtpKELFobHJFe8bf5tQoujs7dbzkRcWF28S7JpjmqmERFjwJjVhHcko7WQt5GN5ZPqrx48Hgp2QZm7kZrXgrtTNNuEpnrZ8UoRabXTYgENUrFuuKqHS5p171mgtbHJoyQTqiXGGC2sUjowCYJm6ktF9RG1fJW3n1xHavqNnYKT75dUqYvVuF9K4rSW2fey4DyLW3sWh78hw2s5mGrGqyZ4p668nsfauUy7zjNxrZw8hjyJZ9goB2GGHCeVAGzux3KULCpDnBeMrW5yeXRVzzHWBTxWtyEEzs23RQHAv4nhM7grxekvgprHkbmFTsXXmtkAYs1sXhFnXNLayqY3sz5WpA2wPHWSMo7bGTcxM6eE6c8eaPqHXBZ8eKHCSbumwypK13nGwvafsVivHxGnB3dDsBaid4TuipRjacmY5gTyWkE9ir6bMykP5ya17s9cZEjhEHYGynrAAvBruzvNb1bqsQ3aEGBxTmWTSGMpnBqDJNTE3PyQ2egrXgbcj2ex5fvkiQjmD4myBBx7X4UANeWapWGAngkKWUZPcUJresjfaMjrfjKPfRf7kXdXkH3Ks47nyHyVw6UGg1J7Vw86oMYmG3EZZHw1ghV67o4QMufbZP8tFcUpXNcQzhVBUsW9e2YT2NhkA1uiV4XXTkon31von6bTa4CBBBm56Xe4kdBirAN17cE86ELo9uCvUN3EmYoYRm8FMCYKRf2KC8LbFZ2EfHyqz1HQRGmnetToPMDCeK8HJHP7kuAsvnFrkrp8yYeMknbkhvf6s3qQxLHYiwTBT3rSZLuy26QMbxfhnSwi8LAC3DQZFu4TD1sVe9zo5qFDm7BtbxoaR8kczyAKst8WvPnFn14ouFQ9BGiuTHioVDeG8V7Gv5yRb9c6df91WnCWn7TgeJQ4Gbns4g82jd3SHrH2kb1SW6RyvSkAGjXXH2ZyBphrnGAYZhQWBJ"]}}}}} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16_credential1-0.4.0.json b/tests/anonymous-credentials/serialized-objects/bddt16_credential1-0.4.0.json index 83fbcddd..8cb573fc 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16_credential1-0.4.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16_credential1-0.4.0.json @@ -1 +1 @@ -{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","email":"john.smith@example.com","SSN":"123-456789-0","userId":"user:123-xyz-#","country":"USA","city":"New York","timeOfBirth":1662010849619,"height":181.5,"weight":210.4,"BMI":23.25,"score":-13.5,"secret":"my-secret-that-wont-tell-anyone"},"proof":{"type":"Bls12381BDDT16Dock2024","proofValue":"S2jvYUFs4stskxK6hiA9hGR7uqwPNRXRtiQ16BFYHoYHov9M4ud3qKwCYCKtUzyTxHdMdbZ7ojVMugD8Vj543n7N9txZRGLbnaVTc3Pih5cbUfekcNBNEu73yAPA5q7szbTQPME2v6KRZMWM5To2UW9aL"}} \ No newline at end of file +{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","email":"john.smith@example.com","SSN":"123-456789-0","userId":"user:123-xyz-#","country":"USA","city":"New York","timeOfBirth":1662010849619,"height":181.5,"weight":210.4,"BMI":23.25,"score":-13.5,"secret":"my-secret-that-wont-tell-anyone"},"proof":{"type":"Bls12381BDDT16MACDock2024","proofValue":"XzghKczJyTMXcgSfcYE7Y18S2V4NesnJq2E2gagmXgE5TWAnSCQ1e3ememryTGkmqK5VL5NRxk7CPPvwrk7iKbReyCUx1w5rCEWbyVFpMuGeu56eEj9ABFH1BMb2R23bzmAkWmHZu5X6iDvzVS1zuFzo6"}} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16_credential2-0.4.0.json b/tests/anonymous-credentials/serialized-objects/bddt16_credential2-0.4.0.json index 7a8ad4c4..0d7dbd90 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16_credential2-0.4.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16_credential2-0.4.0.json @@ -1 +1 @@ -{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22isbool%22%3A%7B%22type%22%3A%22boolean%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22physical%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","isbool":true,"sensitive":{"secret":"my-secret-that-wont-tell-anyone","email":"john.smith@example.com","SSN":"123-456789-0","userId":"user:123-xyz-#"},"location":{"country":"USA","city":"New York"},"timeOfBirth":1662010849619,"physical":{"height":181.5,"weight":210,"BMI":23.25},"score":-13.5},"proof":{"type":"Bls12381BDDT16Dock2024","proofValue":"X4FG2Wfoy7G7K9JvCDDPeL24646AeNNF8BaSDWTe799JoqTH5xwLmDhkEf4JeeYyWkqRNm2EeGnYjQGWMBdt7bv5yfniZ15oRBqiZYYnVVw9pzE7M1LN6S69CGS4tkaFLRvaZ2TazeAZCjpWnaoRjBpUv"}} \ No newline at end of file +{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22isbool%22%3A%7B%22type%22%3A%22boolean%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22physical%22%3A%7B%22properties%22%3A%7B%22BMI%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22height%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22weight%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22score%22%3A%7B%22minimum%22%3A-100%2C%22multipleOf%22%3A0.1%2C%22type%22%3A%22number%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22secret%22%3A%7B%22type%22%3A%22string%22%7D%2C%22userId%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableCompString%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22timeOfBirth%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","isbool":true,"sensitive":{"secret":"my-secret-that-wont-tell-anyone","email":"john.smith@example.com","SSN":"123-456789-0","userId":"user:123-xyz-#"},"location":{"country":"USA","city":"New York"},"timeOfBirth":1662010849619,"physical":{"height":181.5,"weight":210,"BMI":23.25},"score":-13.5},"proof":{"type":"Bls12381BDDT16MACDock2024","proofValue":"TfQ3Xqk1U1KA8FC8gMniW4jo5Z3zkGiNth38q8ezdXAn9k8iZ8gqCCiX5TTBiUrBgLFQFwHe1fzxL7hje71ffcPEeP1r9MxqF6MuGSu8Hv9UtuRT7jXFdsoGuxKcEvsKsfrpgxPrnqgwJZjMhirvBKVka"}} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16_credential3-0.4.0.json b/tests/anonymous-credentials/serialized-objects/bddt16_credential3-0.4.0.json index c22f6a65..d6bcdd80 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16_credential3-0.4.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16_credential3-0.4.0.json @@ -1 +1 @@ -{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lessSensitive%22%3A%7B%22properties%22%3A%7B%22department%22%3A%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22rank%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22phone%22%3A%7B%22type%22%3A%22string%22%7D%2C%22very%22%3A%7B%22properties%22%3A%7B%22secret%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","sensitive":{"very":{"secret":"my-secret-that-wont-tell-anyone"},"email":"john.smith@acme.com","phone":"801009801","SSN":"123-456789-0"},"lessSensitive":{"location":{"country":"USA","city":"New York"},"department":{"name":"Random","location":{"name":"Somewhere","geo":{"lat":-23.658,"long":2.556}}}},"rank":6},"credentialStatus":{"type":"DockVBAccumulator2022","id":"dock:accumulator:accumId123","revocationCheck":"membership","revocationId":"user:A-123"},"proof":{"type":"Bls12381BDDT16Dock2024","proofValue":"bsDAAJnGaLaarMNw3nAxoueq57YAGfcFrqnkTMRLW9mHnsTGgLzXq9oiaJXwEtFESsmG43jGK6ga2gsi6P8eUDReNbm8kvcYnJF3FmibcCjsUoHW2CyuvxfuUvnb8VTooEMBDcetKPEMqgxsu4DSisPGJ"}} \ No newline at end of file +{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lessSensitive%22%3A%7B%22properties%22%3A%7B%22department%22%3A%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22location%22%3A%7B%22properties%22%3A%7B%22city%22%3A%7B%22type%22%3A%22string%22%7D%2C%22country%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22rank%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%2C%22phone%22%3A%7B%22type%22%3A%22string%22%7D%2C%22very%22%3A%7B%22properties%22%3A%7B%22secret%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","sensitive":{"very":{"secret":"my-secret-that-wont-tell-anyone"},"email":"john.smith@acme.com","phone":"801009801","SSN":"123-456789-0"},"lessSensitive":{"location":{"country":"USA","city":"New York"},"department":{"name":"Random","location":{"name":"Somewhere","geo":{"lat":-23.658,"long":2.556}}}},"rank":6},"credentialStatus":{"type":"DockVBAccumulator2022","id":"dock:accumulator:accumId123","revocationCheck":"membership","revocationId":"user:A-123"},"proof":{"type":"Bls12381BDDT16MACDock2024","proofValue":"ZaznyrcYCyQBWpEuTH71mz4tEcgLMGaiTNE7odoTVhdRXMy9fW7uW62FRqZFPbPbpZixrNyMNRziPQz4vPahjJggdYhrg5UmRo4JBYN7ym2V9K9aHKx7Hxky6F8Z7EbQMdyH4Gjtw2LPU4bhJ6AUHuaCn"}} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16_credential4-0.4.0.json b/tests/anonymous-credentials/serialized-objects/bddt16_credential4-0.4.0.json index 6d3628e7..12b47502 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16_credential4-0.4.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16_credential4-0.4.0.json @@ -1 +1 @@ -{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22education%22%3A%7B%22properties%22%3A%7B%22studentId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22transcript%22%3A%7B%22properties%22%3A%7B%22CGPA%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22rank%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22scores%22%3A%7B%22properties%22%3A%7B%22english%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22geography%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22history%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22mathematics%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22science%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22university%22%3A%7B%22properties%22%3A%7B%22name%22%3A%7B%22type%22%3A%22string%22%7D%2C%22registrationNumber%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","sensitive":{"email":"john.smith@example.edu","SSN":"123-456789-0"},"education":{"studentId":"s-22-123450","university":{"name":"Example University","registrationNumber":"XYZ-123-789"},"transcript":{"rank":100,"CGPA":2.57,"scores":{"english":60,"mathematics":70,"science":50,"history":45,"geography":40}}}},"credentialStatus":{"type":"DockVBAccumulator2022","id":"dock:accumulator:accumId124","revocationCheck":"membership","revocationId":"tran:2022-YZ4-250"},"proof":{"type":"Bls12381BDDT16Dock2024","proofValue":"aSRkR8CpgLqMZjispfcCKYWVmhGvWftKrLXb7rxPJG75CTq24qbcjF1kExJTzkEAqwzwGxhkZVott8RynbMdHEbXHAmYK2A88qu5ubyyhnD2wfRajxUHsxG7wR3HXr2mGLhSCfG8TUhmLE9XZrf4VSCUD"}} \ No newline at end of file +{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialStatus%22%3A%7B%22properties%22%3A%7B%22id%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationCheck%22%3A%7B%22type%22%3A%22string%22%7D%2C%22revocationId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22credentialSubject%22%3A%7B%22properties%22%3A%7B%22education%22%3A%7B%22properties%22%3A%7B%22studentId%22%3A%7B%22type%22%3A%22string%22%7D%2C%22transcript%22%3A%7B%22properties%22%3A%7B%22CGPA%22%3A%7B%22minimum%22%3A0%2C%22multipleOf%22%3A0.01%2C%22type%22%3A%22number%22%7D%2C%22rank%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22scores%22%3A%7B%22properties%22%3A%7B%22english%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22geography%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22history%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22mathematics%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%2C%22science%22%3A%7B%22minimum%22%3A0%2C%22type%22%3A%22integer%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22university%22%3A%7B%22properties%22%3A%7B%22name%22%3A%7B%22type%22%3A%22string%22%7D%2C%22registrationNumber%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22fname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22lname%22%3A%7B%22type%22%3A%22string%22%7D%2C%22sensitive%22%3A%7B%22properties%22%3A%7B%22SSN%22%3A%7B%22%24ref%22%3A%22%23%2Fdefinitions%2FencryptableString%22%7D%2C%22email%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":{"fname":"John","lname":"Smith","sensitive":{"email":"john.smith@example.edu","SSN":"123-456789-0"},"education":{"studentId":"s-22-123450","university":{"name":"Example University","registrationNumber":"XYZ-123-789"},"transcript":{"rank":100,"CGPA":2.57,"scores":{"english":60,"mathematics":70,"science":50,"history":45,"geography":40}}}},"credentialStatus":{"type":"DockVBAccumulator2022","id":"dock:accumulator:accumId124","revocationCheck":"membership","revocationId":"tran:2022-YZ4-250"},"proof":{"type":"Bls12381BDDT16MACDock2024","proofValue":"USz5j6k4RqsnzDhV4fNA64EsyWdxxafSn7kETHXBUyf2vcMCKfxAFZeYd6fs9a1WJpMa3haWnAYH3Vu3CdmtgdbP6mhELkEWuRwdM9rhayGLbo9j2RHfZ2iEBmHWZbeuDnZ4Ww69gHXVg3rZPso9A9EAH"}} \ No newline at end of file diff --git a/tests/anonymous-credentials/serialized-objects/bddt16_credential5-0.4.0.json b/tests/anonymous-credentials/serialized-objects/bddt16_credential5-0.4.0.json index a912bfb2..1dc6b8ec 100644 --- a/tests/anonymous-credentials/serialized-objects/bddt16_credential5-0.4.0.json +++ b/tests/anonymous-credentials/serialized-objects/bddt16_credential5-0.4.0.json @@ -1 +1 @@ -{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22items%22%3A%5B%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%5D%2C%22type%22%3A%22array%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":[{"name":"Random","location":{"name":"Somewhere","geo":{"lat":-23.658,"long":2.556}}},{"name":"Random-1","location":{"name":"Somewhere-1","geo":{"lat":35.01,"long":-40.987}}},{"name":"Random-2","location":{"name":"Somewhere-2","geo":{"lat":-67,"long":-10.12}}}],"proof":{"type":"Bls12381BDDT16Dock2024","proofValue":"TKBkuiQfzJZmsvYZ4dnNBDVGUfubtX9Fb35KvyNUMc5JxKT6pi5148caT6S82kiU1527y5raVTuM4oPMeGcSq5qu7QfKGpwj5YdGHE4aCjD7sLKgtPLEQ7HdbgUttNFsdyjyiCNC6cXeeBxitf6DDKdTR"}} \ No newline at end of file +{"cryptoVersion":"0.4.0","credentialSchema":"{\"id\":\"data:application/json;charset=utf-8,%7B%22%24schema%22%3A%22http%3A%2F%2Fjson-schema.org%2Fdraft-07%2Fschema%23%22%2C%22definitions%22%3A%7B%22encryptableCompString%22%3A%7B%22type%22%3A%22string%22%7D%2C%22encryptableString%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22properties%22%3A%7B%22credentialSubject%22%3A%7B%22items%22%3A%5B%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%7B%22properties%22%3A%7B%22location%22%3A%7B%22properties%22%3A%7B%22geo%22%3A%7B%22properties%22%3A%7B%22lat%22%3A%7B%22minimum%22%3A-90%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%2C%22long%22%3A%7B%22minimum%22%3A-180%2C%22multipleOf%22%3A0.001%2C%22type%22%3A%22number%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%2C%22name%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%5D%2C%22type%22%3A%22array%22%7D%2C%22proof%22%3A%7B%22properties%22%3A%7B%22type%22%3A%7B%22type%22%3A%22string%22%7D%7D%2C%22type%22%3A%22object%22%7D%7D%2C%22type%22%3A%22object%22%7D\",\"parsingOptions\":{\"defaultDecimalPlaces\":0,\"defaultMinimumDate\":-17592186044415,\"defaultMinimumInteger\":-4294967295,\"useDefaults\":false},\"type\":\"JsonSchemaValidator2018\",\"version\":\"0.2.0\"}","credentialSubject":[{"name":"Random","location":{"name":"Somewhere","geo":{"lat":-23.658,"long":2.556}}},{"name":"Random-1","location":{"name":"Somewhere-1","geo":{"lat":35.01,"long":-40.987}}},{"name":"Random-2","location":{"name":"Somewhere-2","geo":{"lat":-67,"long":-10.12}}}],"proof":{"type":"Bls12381BDDT16MACDock2024","proofValue":"auMVvneDnb7C2ipqtbFDN4gTYBsN7PrdvRXi6k1MRXLpSLjHKGUnuuwf4SmcRAqqdiUTbPjmrvzYNLXuZ17JJPqXNBMhFZsbGbqd3NXgTszVxkc2pFtbiS5rxRoM99QHCnJVWCdDFnwsyDWfBtTyuT5oH"}} \ No newline at end of file diff --git a/tests/composite-proofs/msg-js-obj/scheme.spec.ts b/tests/composite-proofs/msg-js-obj/scheme.spec.ts index 7c7f7605..39b5a616 100644 --- a/tests/composite-proofs/msg-js-obj/scheme.spec.ts +++ b/tests/composite-proofs/msg-js-obj/scheme.spec.ts @@ -67,7 +67,7 @@ describe(`Signing and proof of knowledge of ${Scheme} signatures`, () => { if (isBDDT16()) { const pk = sk.generatePublicKeyG1(params); const proof = new BDDT16MacProofOfValidity(signed.signature, sk, pk, params); - checkResult(proof.verifyMessageObject(signed.signature, attributes, pk, label, encoder)); + checkResult(proof.verifyWithMessageObject(signed.signature, attributes, pk, label, encoder)); } // For debugging diff --git a/yarn.lock b/yarn.lock index f16a0248..903de375 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3531,10 +3531,10 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" -semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== +semver@^7.6.0: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== dependencies: lru-cache "^6.0.0"