diff --git a/Nargo.toml b/Nargo.toml index 8227231f0..7f1bbdf8a 100644 --- a/Nargo.toml +++ b/Nargo.toml @@ -22,6 +22,7 @@ members = [ "src/noir/bin/exclusion-check/sanctions/evm", "src/noir/bin/facematch/ios/standard", "src/noir/bin/facematch/ios/evm", + "src/noir/bin/oprf-auth", "src/noir/bin/sig-check/dsc/tbs_700/ecdsa/nist/p192/sha1", "src/noir/bin/sig-check/dsc/tbs_700/ecdsa/nist/p192/sha256", "src/noir/bin/sig-check/dsc/tbs_700/ecdsa/nist/p192/sha384", diff --git a/jest.config.cjs b/jest.config.cjs index 14b61a235..3097208f8 100644 --- a/jest.config.cjs +++ b/jest.config.cjs @@ -28,5 +28,5 @@ module.exports = { }, ], }, - transformIgnorePatterns: ["node_modules/(?!(\\.bun|@zkpassport|@noble)/)"], + transformIgnorePatterns: ["node_modules/(?!(\\.bun|\\.pnpm|@zkpassport|@noble|@taceo)/)"], } diff --git a/package-lock.json b/package-lock.json index b475f7825..0383a9ed8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "@types/node": "^22.10.1", "@types/node-forge": "^1.3.11", "@zkpassport/poseidon2": "^0.6.1", - "@zkpassport/utils": "^0.35.0", + "@zkpassport/utils": "0.36.0-beta.1", "aws-cdk": "^2.176.0", "aws-cdk-lib": "^2.176.0", "babel-jest": "^29.7.0", @@ -46,6 +46,36 @@ "typescript": "^5.0.0" } }, + "../zkpassport-packages/packages/utils": { + "extraneous": true + }, + "../zkpassport-packages/packages/zkpassport-utils": { + "name": "@zkpassport/utils", + "version": "0.36.0-beta.1", + "extraneous": true, + "dependencies": { + "@lapo/asn1js": "^2.0.4", + "@noble/ciphers": "^1.0.0", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "@noble/secp256k1": "^2.1.0", + "@peculiar/asn1-cms": "^2.3.15", + "@peculiar/asn1-ecc": "^2.3.15", + "@peculiar/asn1-rsa": "^2.3.15", + "@peculiar/asn1-schema": "^2.3.15", + "@peculiar/asn1-x509": "^2.3.15", + "@peculiar/x509": "^1.12.3", + "@taceo/oprf-client": "^0.9.0", + "@zk-kit/utils": "^1.2.1", + "@zkpassport/poseidon2": "^0.6.2", + "date-fns": "^4.1.0", + "i18n-iso-countries": "^7.13.0", + "tslib": "^2.8.1" + }, + "peerDependencies": { + "typescript": "^5.0.0" + } + }, "node_modules/@adraffy/ens-normalize": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", @@ -4593,6 +4623,46 @@ "node": ">=18.0.0" } }, + "node_modules/@taceo/oprf-client": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@taceo/oprf-client/-/oprf-client-0.9.0.tgz", + "integrity": "sha512-kokCCLYjLSH3I7n4D2Yhg1ybNquMRnbHh3r/YTgHIiXxJ+FLsbE9AGT8vhwTmwe2m4X1U3r57yKMsIiaeu/DAg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "@taceo/oprf-core": "0.4.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/@taceo/oprf-core": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@taceo/oprf-core/-/oprf-core-0.4.0.tgz", + "integrity": "sha512-Mlo2pjb8O9HDGvjpcun06ZWrW7oBblQESr9EDhW1WvHLDkKDgdlKdx43EVzJMGHcFXaVT4/1MnC1De/5KTQTNg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "@taceo/poseidon2": "0.2.0" + }, + "engines": { + "node": ">=22" + } + }, + "node_modules/@taceo/poseidon2": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@taceo/poseidon2/-/poseidon2-0.2.0.tgz", + "integrity": "sha512-+EyFO7zaRrlsdzNEvzTLELDkrgjUgZgSlxGUSQghmmtlZ14nZklYX7D+gecyOkVe/47AGDtA+uZ9sdXiNB8rng==", + "license": "MIT", + "dependencies": { + "@noble/curves": "^2.0.1" + }, + "engines": { + "node": ">=22" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -4733,9 +4803,9 @@ "license": "MIT" }, "node_modules/@zkpassport/utils": { - "version": "0.35.0", - "resolved": "https://registry.npmjs.org/@zkpassport/utils/-/utils-0.35.0.tgz", - "integrity": "sha512-faZ8mPxm4m++g4keexKxde9tlvWlcw0mXAwSsyo3UGjoNqysQH/l8kLaTd8+KJba/LKgCzu9aXvGkJd47YrRlQ==", + "version": "0.36.0-beta.1", + "resolved": "https://registry.npmjs.org/@zkpassport/utils/-/utils-0.36.0-beta.1.tgz", + "integrity": "sha512-yidC2DtBkHb/4AAUyBemm+Dx8aSfBnq6JzUExlh1m0H7SBB9bFWv0OW/f7kl9sDZ/tzVNM9DHr6FjJHD1bvtzQ==", "dependencies": { "@lapo/asn1js": "^2.0.4", "@noble/ciphers": "^1.0.0", @@ -4748,6 +4818,7 @@ "@peculiar/asn1-schema": "^2.3.15", "@peculiar/asn1-x509": "^2.3.15", "@peculiar/x509": "^1.12.3", + "@taceo/oprf-client": "^0.9.0", "@zk-kit/utils": "^1.2.1", "@zkpassport/poseidon2": "^0.6.2", "date-fns": "^4.1.0", diff --git a/package.json b/package.json index 88b0b7293..37a618bc5 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@types/node": "^22.10.1", "@types/node-forge": "^1.3.11", "@zkpassport/poseidon2": "^0.6.1", - "@zkpassport/utils": "^0.35.0", + "@zkpassport/utils": "0.36.0-beta.1", "aws-cdk": "^2.176.0", "aws-cdk-lib": "^2.176.0", "babel-jest": "^29.7.0", diff --git a/src/noir/bin/bind/evm/src/main.nr b/src/noir/bin/bind/evm/src/main.nr index 6974d6905..ff2004eb0 100644 --- a/src/noir/bin/bind/evm/src/main.nr +++ b/src/noir/bin/bind/evm/src/main.nr @@ -16,13 +16,14 @@ fn main( // provided to the proof is correct data: [u8; 509], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -32,9 +33,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(data); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/bind/standard/src/main.nr b/src/noir/bin/bind/standard/src/main.nr index 82f86f35b..393ecb870 100644 --- a/src/noir/bin/bind/standard/src/main.nr +++ b/src/noir/bin/bind/standard/src/main.nr @@ -17,13 +17,14 @@ fn main( // provided to the proof is correct data: [u8; 509], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -33,8 +34,9 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(data); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/compare/age/evm/src/main.nr b/src/noir/bin/compare/age/evm/src/main.nr index 7c6326402..2e6a24da8 100644 --- a/src/noir/bin/compare/age/evm/src/main.nr +++ b/src/noir/bin/compare/age/evm/src/main.nr @@ -22,9 +22,10 @@ fn main( // If the maximum age is 0, it is not checked max_age_required: u8, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); @@ -35,7 +36,7 @@ fn main( max_age_required, current_date, ); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -45,9 +46,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(min_age_required, max_age_required); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/compare/age/standard/src/main.nr b/src/noir/bin/compare/age/standard/src/main.nr index d27d78097..dc6053e9b 100644 --- a/src/noir/bin/compare/age/standard/src/main.nr +++ b/src/noir/bin/compare/age/standard/src/main.nr @@ -22,9 +22,10 @@ fn main( // If the maximum age is 0, it is not checked max_age_required: u8, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); @@ -35,7 +36,7 @@ fn main( max_age_required, current_date, ); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -45,8 +46,9 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(min_age_required, max_age_required); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/compare/birthdate/evm/src/main.nr b/src/noir/bin/compare/birthdate/evm/src/main.nr index 17f228333..0b4e616dd 100644 --- a/src/noir/bin/compare/birthdate/evm/src/main.nr +++ b/src/noir/bin/compare/birthdate/evm/src/main.nr @@ -23,9 +23,10 @@ fn main( // If the maximum date timestamp is 0, it is not checked max_date: u64, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); @@ -33,7 +34,7 @@ fn main( // Verify the birthdate of the ID holder // Uses 1900 as the epoch year because birthdates can be before 1970 (the usual unix epoch) compare_date(birthdate, min_date, max_date, 1900); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -43,10 +44,11 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(PROOF_TYPE_BIRTHDATE, min_date, max_date); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/compare/birthdate/standard/src/main.nr b/src/noir/bin/compare/birthdate/standard/src/main.nr index 2fb32b542..25dd3c861 100644 --- a/src/noir/bin/compare/birthdate/standard/src/main.nr +++ b/src/noir/bin/compare/birthdate/standard/src/main.nr @@ -23,9 +23,10 @@ fn main( // If the maximum date timestamp is 0, it is not checked max_date: u64, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); @@ -33,7 +34,7 @@ fn main( // Verify the birthdate of the ID holder // Uses 1900 as the epoch year because birthdates can be before 1970 (the usual unix epoch) compare_date(birthdate, min_date, max_date, 1900); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -43,8 +44,9 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(PROOF_TYPE_BIRTHDATE, min_date, max_date); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/compare/expiry/evm/src/main.nr b/src/noir/bin/compare/expiry/evm/src/main.nr index 4be12d998..9171822f5 100644 --- a/src/noir/bin/compare/expiry/evm/src/main.nr +++ b/src/noir/bin/compare/expiry/evm/src/main.nr @@ -22,9 +22,10 @@ fn main( // If the maximum date timestamp is 0, it is not checked max_date: u64, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); @@ -33,11 +34,7 @@ fn main( // Uses the usual unix epoch year of 1970 as the epoch year as expiry dates are in the future // and for expired documents, the expiry date is still way after 1970 compare_date(expiry_date, min_date, max_date, 1970); - // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be - // reconstructed by verifiers on EVM chains - let param_commitment = - calculate_param_commitment_sha2(PROOF_TYPE_EXPIRY_DATE, min_date, max_date); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -47,6 +44,11 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); - (param_commitment, nullifier_type, nullifier) + // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be + // reconstructed by verifiers on EVM chains + let param_commitment = + calculate_param_commitment_sha2(PROOF_TYPE_EXPIRY_DATE, min_date, max_date); + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/compare/expiry/standard/src/main.nr b/src/noir/bin/compare/expiry/standard/src/main.nr index 0c477dd80..d4b05c82c 100644 --- a/src/noir/bin/compare/expiry/standard/src/main.nr +++ b/src/noir/bin/compare/expiry/standard/src/main.nr @@ -23,9 +23,10 @@ fn main( // If the maximum date timestamp is 0, it is not checked max_date: u64, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); @@ -34,9 +35,7 @@ fn main( // Uses the usual unix epoch year of 1970 as the epoch year as expiry dates are in the future // and for expired documents, the expiry date is still way after 1970 compare_date(expiry_date, min_date, max_date, 1970); - // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do - let param_commitment = calculate_param_commitment(PROOF_TYPE_EXPIRY_DATE, min_date, max_date); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -46,6 +45,9 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); - (param_commitment, nullifier_type, nullifier) + // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do + let param_commitment = calculate_param_commitment(PROOF_TYPE_EXPIRY_DATE, min_date, max_date); + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/disclose/bytes/evm/src/main.nr b/src/noir/bin/disclose/bytes/evm/src/main.nr index 16b40f64d..e94e49963 100644 --- a/src/noir/bin/disclose/bytes/evm/src/main.nr +++ b/src/noir/bin/disclose/bytes/evm/src/main.nr @@ -15,16 +15,17 @@ fn main( // The disclose mask is public (via the parameter commitment) so verifiers can check the mask disclose_mask: DiscloseMask, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // @committed // The disclose bytes are public (via the parameter commitment) so verifiers can check the bytes let disclosed_bytes = get_disclosed_bytes(salted_dg1.value, disclose_mask); - let (scoped_nullifier, nullifier_type) = nullify( + let (scoped_nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -34,9 +35,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(disclose_mask, disclosed_bytes); - (param_commitment, nullifier_type, scoped_nullifier) + (param_commitment, nullifier_type, scoped_nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/disclose/bytes/standard/src/main.nr b/src/noir/bin/disclose/bytes/standard/src/main.nr index 7b8ab3bfa..39ee72b1d 100644 --- a/src/noir/bin/disclose/bytes/standard/src/main.nr +++ b/src/noir/bin/disclose/bytes/standard/src/main.nr @@ -15,16 +15,17 @@ fn main( // The disclose mask is public (via the parameter commitment) so verifiers can check the mask disclose_mask: DiscloseMask, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // @committed // The disclose bytes are public (via the parameter commitment) so verifiers can check the bytes let disclosed_bytes = get_disclosed_bytes(salted_dg1.value, disclose_mask); - let (scoped_nullifier, nullifier_type) = nullify( + let (scoped_nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -34,8 +35,9 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(disclose_mask, disclosed_bytes); - (param_commitment, nullifier_type, scoped_nullifier) + (param_commitment, nullifier_type, scoped_nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/exclusion-check/issuing-country/evm/src/main.nr b/src/noir/bin/exclusion-check/issuing-country/evm/src/main.nr index 5042bb65b..94de46b7a 100644 --- a/src/noir/bin/exclusion-check/issuing-country/evm/src/main.nr +++ b/src/noir/bin/exclusion-check/issuing-country/evm/src/main.nr @@ -22,15 +22,16 @@ fn main( // or the proof will fail to generate country_list: [u32; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that the issuing country of the passport is not in the list of countries check_issuing_country_exclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -40,10 +41,11 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(PROOF_TYPE_ISSUING_COUNTRY_EXCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/exclusion-check/issuing-country/standard/src/main.nr b/src/noir/bin/exclusion-check/issuing-country/standard/src/main.nr index 4c06f8491..18f4af75f 100644 --- a/src/noir/bin/exclusion-check/issuing-country/standard/src/main.nr +++ b/src/noir/bin/exclusion-check/issuing-country/standard/src/main.nr @@ -22,15 +22,16 @@ fn main( // or the proof will fail to generate country_list: [u32; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that the issuing country of the passport is not in the list of countries check_issuing_country_exclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -40,9 +41,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(PROOF_TYPE_ISSUING_COUNTRY_EXCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/exclusion-check/nationality/evm/src/main.nr b/src/noir/bin/exclusion-check/nationality/evm/src/main.nr index 7d76c6419..325555f4b 100644 --- a/src/noir/bin/exclusion-check/nationality/evm/src/main.nr +++ b/src/noir/bin/exclusion-check/nationality/evm/src/main.nr @@ -21,15 +21,16 @@ fn main( // or the proof will fail to generate country_list: [u32; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that nationality of the passport holder is not in the list of countries check_nationality_exclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -39,10 +40,11 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(PROOF_TYPE_NATIONALITY_EXCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/exclusion-check/nationality/standard/src/main.nr b/src/noir/bin/exclusion-check/nationality/standard/src/main.nr index e3fd32b9e..0c55b65c8 100644 --- a/src/noir/bin/exclusion-check/nationality/standard/src/main.nr +++ b/src/noir/bin/exclusion-check/nationality/standard/src/main.nr @@ -22,15 +22,16 @@ fn main( // or the proof will fail to generate country_list: [u32; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that nationality of the passport holder is not in the list of countries check_nationality_exclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -40,9 +41,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(PROOF_TYPE_NATIONALITY_EXCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/exclusion-check/sanctions/evm/src/main.nr b/src/noir/bin/exclusion-check/sanctions/evm/src/main.nr index 6336cc1ed..8f004d0a7 100644 --- a/src/noir/bin/exclusion-check/sanctions/evm/src/main.nr +++ b/src/noir/bin/exclusion-check/sanctions/evm/src/main.nr @@ -19,16 +19,17 @@ fn main( proofs: SanctionsOrderedMerkleTreeProofs, is_strict: bool, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); let trees = SanctionsSparseMerkleTrees::new(root); // Check that nationality of the passport holder is not in the list of countries trees.check_sanctions_exclusion(salted_dg1.value, proofs, is_strict); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -38,7 +39,8 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); let param_commitment = calculate_param_commitment_sha2(root, is_strict); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/exclusion-check/sanctions/standard/src/main.nr b/src/noir/bin/exclusion-check/sanctions/standard/src/main.nr index 4c676d31a..e4e5075ba 100644 --- a/src/noir/bin/exclusion-check/sanctions/standard/src/main.nr +++ b/src/noir/bin/exclusion-check/sanctions/standard/src/main.nr @@ -18,17 +18,18 @@ fn main( proofs: SanctionsOrderedMerkleTreeProofs, root: Field, nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, is_strict: bool, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); let trees = SanctionsSparseMerkleTrees::new(root); // Check that nationality of the passport holder is not in the list of countries trees.check_sanctions_exclusion(salted_dg1.value, proofs, is_strict); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -38,7 +39,8 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); let param_commitment = calculate_param_commitment(root, is_strict); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr index 22c4395f7..d4a8f566b 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -80,7 +80,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr index 3063bbfcf..3d06991f3 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -80,7 +80,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr index 7bc2fea31..1cff4ad14 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -80,7 +80,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr index 039838bde..2b5ba971a 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -80,7 +80,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr index d55c673ae..b4def6753 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -80,7 +80,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr index 61bff234b..47ab546b8 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -80,7 +80,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index e075c20ec..12acf76b1 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 2dc1d15a1..121dca4b0 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 77bf788f4..ccde51acf 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 561d3872f..b0aa81366 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index c25ec52b1..6fd48ade0 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 303f9c374..6aa86066d 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index c3a38d959..39c397a73 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index a16af68a0..3bce09735 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 5a457abb6..6ba9d75b9 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index cc86b47eb..b9c3cc91a 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 140caa92f..3c8f0c6ea 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index f9b536da3..f2bd31b69 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index 9de00e00a..97c5a2e6f 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index 071402497..9f91fe10b 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index 2097513dd..2e5570c87 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index a17910979..320517c4b 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index 003568f64..b825de2da 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index e69196f17..318d5923c 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -84,7 +84,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index d5262bf8e..0f8bb907b 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 1d56f9bcb..a10c76568 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index c6caf0e4e..82ddc429e 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 34edc5441..773dfa256 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index b74050ca0..ac909d554 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index a44601f19..73f7fd83c 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 4250b04ac..15e148325 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 93ba018f9..1ed544be5 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 7d9ad378b..8e9d6ea80 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 7e2ff9c8f..f65a29505 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 0e6f863c1..edc79a90d 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index c0be12dde..e99f3939a 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index 0c8d18135..53144aaf8 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index 802742e08..91e162f22 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index d890b8416..3c280249a 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index 574e7c858..4d907bd09 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index 28b6f3ad4..6fc3e379d 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index f0c3f77a4..ddd1cc560 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 4afbbe4e9..6286f2d73 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index d36432a82..4cffd5191 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 77a29cf41..d40f2342b 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index c062596cb..a8563b909 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index a2a047f53..b87df87a3 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 8927b7aa2..9aef70e52 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index bd15a5c98..1423e3b83 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index ec82045f3..b0cdef325 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 37681433c..3b3bf4c59 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 2f5709493..681b5f9dc 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 65031ad63..3ff071c3a 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 484f49f86..2e8d27268 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index a3d6c08cb..29b8bba40 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index 8b0f4554e..bda4b1261 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index 25cecf434..04e7d7c67 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index b72bfaf9a..3c76ae910 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index e9ca610d9..0de09a3f4 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index 074ac6bf4..14f38828e 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 3db48d583..518673825 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 6d0e51a04..bdfa88d95 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index dabb70bc0..76592176f 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 4b82ad3c6..087d422e6 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 13a244536..3b7784b9f 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 66b30abc0..239bf7f87 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 634dfa0b5..a92636ba3 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index a0f25d79e..6357ccdd1 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index a0072bc3d..51a079eb9 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index cfc9df054..7f0aca157 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 783d9e692..50d851ac3 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 5c77acd25..c1e6a507d 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index ff0f24ec7..fcd91d244 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index 2427999fc..827866db8 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index a6f9dcf8b..a00977fab 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index 632ac0a90..273c0004f 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index 8eaf14270..9825685f8 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index d3c105352..4850e8b69 100644 --- a/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_ecdsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -88,7 +88,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr index 85cca587f..9b16c0b99 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -81,7 +81,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr index c802337ac..e1abd93cd 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -81,7 +81,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr index 1daf61902..1366c8f7e 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -81,7 +81,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr index ffa30a578..2c345b115 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -81,7 +81,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr index 53bb1e955..72d39f35b 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -81,7 +81,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr index a68fcb58e..805114bb4 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_1/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -81,7 +81,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -194,7 +194,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -203,7 +212,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -217,5 +227,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 35f4d66c1..6ffe9eed2 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index d0a5ba6a9..3dd9fd504 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 6b12f305a..d8fc0c41a 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index c8a2eb34d..c67edd4d7 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 5f517e849..cfb40a20d 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index b5aea054a..67fde9911 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 0ff576eaf..edbe7524a 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 89bd72b32..9a256349c 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index df0320f0f..6c2607330 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 599b69e1b..c02c0d8e3 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 56321fa93..1082ce307 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 0ca739543..e09bf232b 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index c03826b5d..62e4f09e1 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index f029733c2..4ea6d977b 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index 00812204f..0a459c1b5 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index b0b01e45d..9b673bce8 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index bc23ae615..e4b341b3f 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index f40dbf088..6cbbc8e5e 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_2/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -85,7 +85,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -220,7 +220,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -229,7 +238,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -243,5 +253,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 96835816b..babda5949 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index d9db9ba02..b49492b25 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 6427e5517..e04de5dba 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 4a7933c7f..57a7570ce 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 3a783dd3c..4ef62f14e 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index f1bea80a5..a8e5718d9 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 048d5651a..c90d2b73e 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 0e659c0dd..6bd320913 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index a07397c83..f44912906 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 8d432d8ac..fab0091cf 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 556ab3647..3d7d59ac1 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index d83c6eaaa..b305cddcc 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index 27ff964b3..6aa9ba5d9 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index 63abe1dd9..d44b0f976 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index 12152e5fb..0980b41b4 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index 6866b5e3f..b6a794c56 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index 4408e425a..c054be8b3 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index c63d08e93..9970719a9 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index e397d84b9..812a9e0cc 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index e725a08ff..e93ad1a02 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index a7c3a9b57..5db70f300 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index 47681103f..c919671cc 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index ccd097ed2..6863b1918 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 17b0e045d..bc7857ae9 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index aa7c523d3..f0fa78c95 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 40f761129..f6e11d41b 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index 531ac62e3..1fb812cb6 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index a5f8b3659..c11ae4b08 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index cda298510..b835c1a35 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 48beaa70b..19d85decd 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index 413f752ab..407e88e77 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index 8d0838c89..fc73641db 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index 2dd390c56..c0148f6bf 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index 7515c1a3f..37cc09e43 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index 7c5339faa..261c26007 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index 111ebb699..bbed1e675 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 89745e6a0..68f672fb0 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 5c831b15a..06560d7ce 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index d7b578238..5388c9ae7 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index f68114500..cebdb1b5b 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index 5c118b8cf..80888a2da 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index 5d870014c..e37b75389 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr index 150125d3a..aefa38ca4 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr index 9c6e380dd..3128c4c2e 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr index d0f706f6a..48459be0d 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr index a8d1b34e5..c7b599911 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr index bfe42a644..02d186a61 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr index bee0c05e1..61bbcdecc 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr index f838736e5..97e8c903b 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr index c3ce96537..36b51d476 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p256_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr index ad3c398cc..888b6f19a 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr index 26027bb0e..555b49451 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha256/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr index 3e15f9a2e..c1d16f418 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/evm/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr index 20cf4fdfa..e08846a98 100644 --- a/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr +++ b/src/noir/bin/facematch/android/rk_rsa/ik_count_3/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/ik_ecdsa_p384_sha384/standard/src/main.nr @@ -89,7 +89,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -246,7 +246,16 @@ fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -255,7 +264,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -269,5 +279,6 @@ fn main( facematch_mode, ); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/ios/evm/src/main.nr b/src/noir/bin/facematch/ios/evm/src/main.nr index fecd3c674..5666eb574 100644 --- a/src/noir/bin/facematch/ios/evm/src/main.nr +++ b/src/noir/bin/facematch/ios/evm/src/main.nr @@ -46,7 +46,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -110,7 +110,16 @@ fn main( "Failed to verify dg2_hash in client_data", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -119,7 +128,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -127,5 +137,5 @@ fn main( let param_commitment = calculate_param_commitment_sha2(root_key_leaf, environment, app_id_hash, 0, facematch_mode); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/ios/evm/src/tests.nr b/src/noir/bin/facematch/ios/evm/src/tests.nr index 17982c45e..299c5a23e 100644 --- a/src/noir/bin/facematch/ios/evm/src/tests.nr +++ b/src/noir/bin/facematch/ios/evm/src/tests.nr @@ -211,7 +211,7 @@ fn test_main() { let nullifier_secret: Field = 0; let current_date: u64 = 1719859200; - let (param_commitment, nullifier_type, nullifier) = crate::main( + let (param_commitment, nullifier_type, nullifier, oprf_pk_hash) = crate::main( comm_in, current_date, SaltedValue::from_value(salt, private_nullifier), @@ -234,7 +234,8 @@ fn test_main() { service_scope, service_subscope, ); - assert(param_commitment == 0x2403e56c0c7be3b69291c61c2c381a763b1b4dbd413ed3af45921ae664c7d4); + assert(param_commitment != 0); + assert(oprf_pk_hash == 0); assert(nullifier == 0x23e6d64d15c131d84badbfdbd06bf9c4b8794c5541737c9fcb884ee18f78b81c); assert(nullifier_type == NON_SALTED_NULLIFIER); } diff --git a/src/noir/bin/facematch/ios/standard/src/main.nr b/src/noir/bin/facematch/ios/standard/src/main.nr index e5a8ff694..7ec3be637 100644 --- a/src/noir/bin/facematch/ios/standard/src/main.nr +++ b/src/noir/bin/facematch/ios/standard/src/main.nr @@ -46,7 +46,7 @@ fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -110,7 +110,16 @@ fn main( "Failed to verify dg2_hash in client_data", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -119,7 +128,8 @@ fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -127,5 +137,5 @@ fn main( let param_commitment = calculate_param_commitment(root_key_leaf, environment, app_id_hash, 0, facematch_mode); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, 0) } diff --git a/src/noir/bin/facematch/ios/standard/src/tests.nr b/src/noir/bin/facematch/ios/standard/src/tests.nr index 623be568e..c829f3809 100644 --- a/src/noir/bin/facematch/ios/standard/src/tests.nr +++ b/src/noir/bin/facematch/ios/standard/src/tests.nr @@ -210,7 +210,7 @@ fn test_main() { let service_subscope: Field = 0; let nullifier_secret: Field = 0; let current_date: u64 = 1719859200; - let (param_commitment, nullifier_type, nullifier) = crate::main( + let (param_commitment, nullifier_type, nullifier, oprf_pk_hash) = crate::main( comm_in, current_date, SaltedValue::from_value(salt, private_nullifier), @@ -233,7 +233,8 @@ fn test_main() { service_scope, service_subscope, ); - assert(param_commitment == 0x266eb913de2cc236d98c76a85efadf07814833a21d62de95a79e9c625fcb32ea); + assert(param_commitment != 0); + assert(oprf_pk_hash == 0); assert(nullifier == 0x23e6d64d15c131d84badbfdbd06bf9c4b8794c5541737c9fcb884ee18f78b81c); assert(nullifier_type == NON_SALTED_NULLIFIER); } diff --git a/src/noir/bin/inclusion-check/issuing-country/evm/src/main.nr b/src/noir/bin/inclusion-check/issuing-country/evm/src/main.nr index be0f5b6a2..eb8d8ff80 100644 --- a/src/noir/bin/inclusion-check/issuing-country/evm/src/main.nr +++ b/src/noir/bin/inclusion-check/issuing-country/evm/src/main.nr @@ -17,15 +17,16 @@ fn main( // so we can safely pad it to 200 country_list: [str<3>; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that the issuing country of the passport is in the list of countries check_issuing_country_inclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -35,10 +36,11 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(PROOF_TYPE_ISSUING_COUNTRY_INCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/inclusion-check/issuing-country/standard/src/main.nr b/src/noir/bin/inclusion-check/issuing-country/standard/src/main.nr index 9f219e137..e63d698a1 100644 --- a/src/noir/bin/inclusion-check/issuing-country/standard/src/main.nr +++ b/src/noir/bin/inclusion-check/issuing-country/standard/src/main.nr @@ -17,15 +17,16 @@ fn main( // so we can safely pad it to 200 country_list: [str<3>; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that the issuing country of the passport is in the list of countries check_issuing_country_inclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -35,9 +36,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(PROOF_TYPE_ISSUING_COUNTRY_INCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/inclusion-check/nationality/evm/src/main.nr b/src/noir/bin/inclusion-check/nationality/evm/src/main.nr index 6912ca36a..a45065728 100644 --- a/src/noir/bin/inclusion-check/nationality/evm/src/main.nr +++ b/src/noir/bin/inclusion-check/nationality/evm/src/main.nr @@ -17,15 +17,16 @@ fn main( // so we can safely pad it to 200 country_list: [str<3>; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that the nationality of the passport holder is in the list of countries check_nationality_inclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -35,10 +36,11 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use SHA2-256 to calculate the parameter commitment so the parameter commitment can be // reconstructed by verifiers on EVM chains let param_commitment = calculate_param_commitment_sha2(PROOF_TYPE_NATIONALITY_INCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/inclusion-check/nationality/standard/src/main.nr b/src/noir/bin/inclusion-check/nationality/standard/src/main.nr index 1caf31c64..5ab80856a 100644 --- a/src/noir/bin/inclusion-check/nationality/standard/src/main.nr +++ b/src/noir/bin/inclusion-check/nationality/standard/src/main.nr @@ -17,15 +17,16 @@ fn main( // so we can safely pad it to 200 country_list: [str<3>; 200], nullifier_secret: Field, + oprf_proof: commitment::OPRFProof, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry(salted_dg1.value, current_date); // Check that the nationality of the passport holder is in the list of countries check_nationality_inclusion(salted_dg1.value, country_list); - let (nullifier, nullifier_type) = nullify( + let (nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -35,9 +36,10 @@ fn main( service_scope, service_subscope, nullifier_secret, + oprf_proof, ); // Use Poseidon2 to calculate the parameter commitment so the prover has less work to do let param_commitment = calculate_param_commitment(PROOF_TYPE_NATIONALITY_INCLUSION, country_list); - (param_commitment, nullifier_type, nullifier) + (param_commitment, nullifier_type, nullifier, oprf_pk_hash) } diff --git a/src/noir/bin/main/outer/count_10/src/main.nr b/src/noir/bin/main/outer/count_10/src/main.nr index fb52fb338..6b8c3ae3d 100644 --- a/src/noir/bin/main/outer/count_10/src/main.nr +++ b/src/noir/bin/main/outer/count_10/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 7], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_11/src/main.nr b/src/noir/bin/main/outer/count_11/src/main.nr index 1a3143a73..f381b7ae1 100644 --- a/src/noir/bin/main/outer/count_11/src/main.nr +++ b/src/noir/bin/main/outer/count_11/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 8], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_12/src/main.nr b/src/noir/bin/main/outer/count_12/src/main.nr index 625e87922..68633c1ea 100644 --- a/src/noir/bin/main/outer/count_12/src/main.nr +++ b/src/noir/bin/main/outer/count_12/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 9], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_13/src/main.nr b/src/noir/bin/main/outer/count_13/src/main.nr index 975997d45..9b400a617 100644 --- a/src/noir/bin/main/outer/count_13/src/main.nr +++ b/src/noir/bin/main/outer/count_13/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 10], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_4/src/main.nr b/src/noir/bin/main/outer/count_4/src/main.nr index fa05e43a6..15bfd4e8f 100644 --- a/src/noir/bin/main/outer/count_4/src/main.nr +++ b/src/noir/bin/main/outer/count_4/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 1], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_5/src/main.nr b/src/noir/bin/main/outer/count_5/src/main.nr index 1442b5ce5..3b56372e7 100644 --- a/src/noir/bin/main/outer/count_5/src/main.nr +++ b/src/noir/bin/main/outer/count_5/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 2], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_6/src/main.nr b/src/noir/bin/main/outer/count_6/src/main.nr index 988e18740..2129fca3d 100644 --- a/src/noir/bin/main/outer/count_6/src/main.nr +++ b/src/noir/bin/main/outer/count_6/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 3], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_7/src/main.nr b/src/noir/bin/main/outer/count_7/src/main.nr index aa5fd11f0..419d03ee9 100644 --- a/src/noir/bin/main/outer/count_7/src/main.nr +++ b/src/noir/bin/main/outer/count_7/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 4], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_8/src/main.nr b/src/noir/bin/main/outer/count_8/src/main.nr index 4252868b4..f3a3f16c0 100644 --- a/src/noir/bin/main/outer/count_8/src/main.nr +++ b/src/noir/bin/main/outer/count_8/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 5], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/main/outer/count_9/src/main.nr b/src/noir/bin/main/outer/count_9/src/main.nr index 6189514db..b1fc064f1 100644 --- a/src/noir/bin/main/outer/count_9/src/main.nr +++ b/src/noir/bin/main/outer/count_9/src/main.nr @@ -29,9 +29,6 @@ use outer_lib::{ prepare_disclosure_inputs, prepare_integrity_check_inputs, }; use std::verify_proof_with_type; -use utils::constants::{ - NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, -}; global PROOF_TYPE_HONK_ZK: u32 = 6; fn verify_subproofs( @@ -51,6 +48,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -121,10 +120,6 @@ fn verify_subproofs( ); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -208,6 +203,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -228,6 +224,7 @@ fn main( param_commitments: pub [Field; 6], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -242,6 +239,7 @@ fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, diff --git a/src/noir/bin/oprf-auth/Nargo.toml b/src/noir/bin/oprf-auth/Nargo.toml new file mode 100644 index 000000000..f7773ec2c --- /dev/null +++ b/src/noir/bin/oprf-auth/Nargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oprf_auth" +type = "bin" +authors = [] +compiler_version = ">=1.0.0" + +[dependencies] +utils = { path = "../../lib/utils" } +common = { path = "../../lib/commitment/common" } +babyjubjub = { tag = "v0.2.0", git = "https://github.com/TaceoLabs/oprf-nr", directory = "babyjubjub" } +oprf = { tag = "v0.2.0", git = "https://github.com/TaceoLabs/oprf-nr", directory = "oprf" } diff --git a/src/noir/bin/oprf-auth/src/main.nr b/src/noir/bin/oprf-auth/src/main.nr new file mode 100644 index 000000000..2c3e36b67 --- /dev/null +++ b/src/noir/bin/oprf-auth/src/main.nr @@ -0,0 +1,31 @@ +use common::hash_salt_dg1_dg2_hash_private_nullifier; +use oprf::blinded_query::blinded_query; +use utils::types::{DG1Data, MRZExpiryDate, SaltedValue}; + +fn main( + comm_in: pub Field, + salted_dg1: SaltedValue, + salted_expiry_date: SaltedValue, + salted_dg2_hash: SaltedValue, + salted_dg2_hash_type: SaltedValue, + salted_private_nullifier: SaltedValue, + beta: Field, +) -> pub (Field, Field) { + // OPRF servers will verify `comm_in` here is same as the one in the facematch proof + // Verify the commitment matches the provided salted values + assert( + comm_in + == hash_salt_dg1_dg2_hash_private_nullifier( + salted_dg1, + salted_expiry_date, + salted_dg2_hash, + salted_dg2_hash_type, + salted_private_nullifier, + ), + "Commitment mismatch in oprf_auth", + ); + + // Compute the blinded query from the private nullifier + let blinded = blinded_query(beta, salted_private_nullifier.value); + (blinded.x, blinded.y) +} diff --git a/src/noir/lib/commitment/scoped-nullifier/Nargo.toml b/src/noir/lib/commitment/scoped-nullifier/Nargo.toml index a9364f248..52484154d 100644 --- a/src/noir/lib/commitment/scoped-nullifier/Nargo.toml +++ b/src/noir/lib/commitment/scoped-nullifier/Nargo.toml @@ -7,3 +7,6 @@ compiler_version = ">=1.0.0" [dependencies] utils = { path = "../../utils" } common = { path = "../common" } +poseidon = { tag = "v0.3.0", git = "https://github.com/noir-lang/poseidon" } +babyjubjub = { tag = "v0.2.0", git = "https://github.com/TaceoLabs/oprf-nr", directory = "babyjubjub" } +oprf = { tag = "v0.2.0", git = "https://github.com/TaceoLabs/oprf-nr", directory = "oprf" } diff --git a/src/noir/lib/commitment/scoped-nullifier/src/lib.nr b/src/noir/lib/commitment/scoped-nullifier/src/lib.nr index 981cbe736..5079b9fe5 100644 --- a/src/noir/lib/commitment/scoped-nullifier/src/lib.nr +++ b/src/noir/lib/commitment/scoped-nullifier/src/lib.nr @@ -1,4 +1,8 @@ use common::{calculate_scoped_nullifier, hash_salt_dg1_dg2_hash_private_nullifier}; +use oprf::oprf_output::verified_oprf; +use poseidon::poseidon2::Poseidon2; +pub use babyjubjub::BabyJubJubPoint; +pub use utils::types::OPRFProof; use utils::{ constants::{ NON_SALTED_MOCK_NULLIFIER, NON_SALTED_NULLIFIER, SALTED_MOCK_NULLIFIER, SALTED_NULLIFIER, @@ -12,6 +16,11 @@ pub mod tests; // The ZKR (or Zero Knowledge Republic) is a mock country used for testing purposes global ZKR_COUNTRY_CODE_BYTES: [u8; 3] = [90, 75, 82]; +// Domain separator for the OPRF output +global DS_OPRF: Field = 1330664006; +// Domain separator for the DLOG equality proof +global DS_DLOG: Field = 1523098184080632582082867317389990410064981862; + /* ############################################################ # Circuit D @@ -45,7 +54,8 @@ pub fn nullify( service_scope: Field, service_subscope: Field, nullifier_secret: Field, -) -> (Field, Field) { + oprf_proof: OPRFProof, +) -> (Field, Field, Field) { assert( comm_in == hash_salt_dg1_dg2_hash_private_nullifier( @@ -57,7 +67,30 @@ pub fn nullify( ), "Commitment from 3rd subproof doesn't match in disclosure proof", ); - let mut scoped_nullifier = calculate_scoped_nullifier( + + let mut oprf_pk_hash: Field = 0; + + if nullifier_secret != 0 { + // Salted nullifier mode requires a valid OPRF proof + assert(oprf_proof.beta != 0, "OPRF proof required when nullifier_secret is non-zero"); + + let oprf_output = verified_oprf( + oprf_proof.beta, + oprf_proof.pk, + oprf_proof.dlog_e, + oprf_proof.dlog_s, + oprf_proof.response_blinded, + oprf_proof.response, + salted_private_nullifier.value, + DS_DLOG, + DS_OPRF, + ); + + assert(oprf_output == nullifier_secret, "OPRF output must match nullifier_secret"); + oprf_pk_hash = Poseidon2::hash([oprf_proof.pk.x, oprf_proof.pk.y], 2); + } + + let scoped_nullifier = calculate_scoped_nullifier( salted_private_nullifier, service_scope, service_subscope, @@ -92,5 +125,5 @@ pub fn nullify( nullifier_type = NON_SALTED_MOCK_NULLIFIER; } } - (scoped_nullifier, nullifier_type) + (scoped_nullifier, nullifier_type, oprf_pk_hash) } diff --git a/src/noir/lib/commitment/scoped-nullifier/src/tests.nr b/src/noir/lib/commitment/scoped-nullifier/src/tests.nr index a632a6fd5..8578a8b24 100644 --- a/src/noir/lib/commitment/scoped-nullifier/src/tests.nr +++ b/src/noir/lib/commitment/scoped-nullifier/src/tests.nr @@ -1,4 +1,5 @@ use super::nullify; +use babyjubjub::BabyJubJubPoint; use common::hash_salt_dg1_dg2_hash_private_nullifier; use utils::{ constants::{ @@ -6,15 +7,51 @@ use utils::{ SALTED_NULLIFIER, SAMPLE_DG1, SHA256_IDENTIFIER, }, get_expiry_date_from_mrz, - types::SaltedValue, + types::{OPRFProof, SaltedValue}, }; +// Sample OPRF proof values from https://github.com/TaceoLabs/oprf-nr/blob/main/oprf_example/src/main.nr +// The OPRF input (preimage) is 42, and the output is the nullifier_secret below +fn sample_oprf_proof() -> OPRFProof { + OPRFProof { + pk: BabyJubJubPoint::new( + 5710999305174746446129006558187982651929018212457711080538180123406991257834, + 14822830093014637273720066510303560520096190665043878041612158237057634974510, + ), + dlog_e: 21651611782908870028415356680205912578677611779857889287526859934595727462023, + dlog_s: 813348544856521250944635798658236115440111721634739064595636884345549099749, + response_blinded: BabyJubJubPoint::new( + 3155679112931956901250628220045483261937665592711481372076828199008185725288, + 2295756075485931574186491588789693245723103184777309603040062940469350270432, + ), + response: BabyJubJubPoint::new( + 8239981253288452954319423631647803967161484725248664916163883751103616749641, + 10909431257409573621736924846505941126161080693380329853422959666368005023270, + ), + beta: 63865932500786004558985758765891911620034145599124743624338496685411118977, + } +} + +// The OPRF output for the sample proof with input 42 +global SAMPLE_OPRF_OUTPUT: Field = + 652462475809871187303694058326169186632613845657706445893000132676028204998; + +fn zero_oprf_proof() -> OPRFProof { + OPRFProof { + pk: BabyJubJubPoint::new(0, 0), + dlog_e: 0, + dlog_s: 0, + response_blinded: BabyJubJubPoint::new(0, 0), + response: BabyJubJubPoint::new(0, 0), + beta: 0, + } +} + #[test] fn test_nullify() { let private_nullifier = 1; let service_scope = 2; let service_subscope = 3; - let nullifier_secret = 4; let salt = 5; let dg2_hash_normalized = 6; let dg2_hash_type = SHA256_IDENTIFIER; @@ -34,8 +71,8 @@ fn test_nullify() { SaltedValue::from_value(salt, private_nullifier), ); - // Non-salted nullifier - let (non_salted_scoped_nullifier, nullifier_type) = nullify( + // Non-salted nullifier (nullifier_secret = 0 means non-salted mode, no OPRF needed) + let (non_salted_scoped_nullifier, nullifier_type, oprf_pk_hash) = nullify( comm_in, SaltedValue::from_value(salt, SAMPLE_DG1), SaltedValue::from_value(salt, get_expiry_date_from_mrz(SAMPLE_DG1)), @@ -45,55 +82,85 @@ fn test_nullify() { service_scope, service_subscope, 0, + zero_oprf_proof(), ); assert_eq( non_salted_scoped_nullifier, 0x23864adb160dddf590f1d3303683ebcb914f828e2635f6e85a32f0a1aecd3dd8, ); assert_eq(nullifier_type, NON_SALTED_NULLIFIER); + assert_eq(oprf_pk_hash, 0); - // Salted nullifier - let (salted_scoped_nullifier, nullifier_type) = nullify( - comm_in, - SaltedValue::from_value(salt, SAMPLE_DG1), - SaltedValue::from_value(salt, get_expiry_date_from_mrz(SAMPLE_DG1)), + // Non-salted mock nullifier + let (non_salted_mock_scoped_nullifier, nullifier_type, oprf_pk_hash) = nullify( + mock_comm_in, + SaltedValue::from_value(salt, ID_CARD_SAMPLE_DG1), + SaltedValue::from_value(salt, get_expiry_date_from_mrz(ID_CARD_SAMPLE_DG1)), SaltedValue::from_value(salt, dg2_hash_normalized), SaltedValue::from_value(salt, dg2_hash_type), SaltedValue::from_value(salt, private_nullifier), service_scope, service_subscope, - nullifier_secret, + 0, + zero_oprf_proof(), ); assert_eq( - salted_scoped_nullifier, - 0x130bf204a32cac1f0ace56c78b731aa3809f06df2731ebcf6b3464a15788b1b9, + non_salted_mock_scoped_nullifier, + 0x23864adb160dddf590f1d3303683ebcb914f828e2635f6e85a32f0a1aecd3dd8, ); - assert_eq(nullifier_type, SALTED_NULLIFIER); + assert_eq(nullifier_type, NON_SALTED_MOCK_NULLIFIER); + assert_eq(oprf_pk_hash, 0); - // Assert that the non-salted nullifier is different from the salted nullifier - // since the secret was used to salt the nullifier in one case and not in the other - assert(non_salted_scoped_nullifier != salted_scoped_nullifier); + // Assert that the non-salted mock nullifier is the same as the non-salted nullifier + // since the private nullifier, service scope and service subscope are the same + assert_eq(non_salted_mock_scoped_nullifier, non_salted_scoped_nullifier); +} - // Non-salted mock nullifier - let (non_salted_mock_scoped_nullifier, nullifier_type) = nullify( - mock_comm_in, +#[test] +fn test_nullify_salted() { + // private_nullifier must be 42 to match the OPRF sample proof input + let private_nullifier = 42; + let service_scope = 2; + let service_subscope = 3; + let salt = 5; + let dg2_hash_normalized = 6; + let dg2_hash_type = SHA256_IDENTIFIER; + let nullifier_secret = SAMPLE_OPRF_OUTPUT; + + let comm_in = hash_salt_dg1_dg2_hash_private_nullifier( + SaltedValue::from_value(salt, SAMPLE_DG1), + SaltedValue::from_value(salt, get_expiry_date_from_mrz(SAMPLE_DG1)), + SaltedValue::from_value(salt, dg2_hash_normalized), + SaltedValue::from_value(salt, dg2_hash_type), + SaltedValue::from_value(salt, private_nullifier), + ); + let mock_comm_in = hash_salt_dg1_dg2_hash_private_nullifier( SaltedValue::from_value(salt, ID_CARD_SAMPLE_DG1), SaltedValue::from_value(salt, get_expiry_date_from_mrz(ID_CARD_SAMPLE_DG1)), SaltedValue::from_value(salt, dg2_hash_normalized), SaltedValue::from_value(salt, dg2_hash_type), SaltedValue::from_value(salt, private_nullifier), + ); + + // Salted nullifier with valid OPRF proof + let (salted_scoped_nullifier, nullifier_type, oprf_pk_hash) = nullify( + comm_in, + SaltedValue::from_value(salt, SAMPLE_DG1), + SaltedValue::from_value(salt, get_expiry_date_from_mrz(SAMPLE_DG1)), + SaltedValue::from_value(salt, dg2_hash_normalized), + SaltedValue::from_value(salt, dg2_hash_type), + SaltedValue::from_value(salt, private_nullifier), service_scope, service_subscope, - 0, - ); - assert_eq( - non_salted_mock_scoped_nullifier, - 0x23864adb160dddf590f1d3303683ebcb914f828e2635f6e85a32f0a1aecd3dd8, + nullifier_secret, + sample_oprf_proof(), ); - assert_eq(nullifier_type, NON_SALTED_MOCK_NULLIFIER); + assert(salted_scoped_nullifier != 0); + assert_eq(nullifier_type, SALTED_NULLIFIER); + assert(oprf_pk_hash != 0); - // Salted mock nullifier - let (salted_mock_scoped_nullifier, nullifier_type) = nullify( + // Salted mock nullifier (ZKR country) + let (salted_mock_scoped_nullifier, nullifier_type, oprf_pk_hash) = nullify( mock_comm_in, SaltedValue::from_value(salt, ID_CARD_SAMPLE_DG1), SaltedValue::from_value(salt, get_expiry_date_from_mrz(ID_CARD_SAMPLE_DG1)), @@ -103,22 +170,13 @@ fn test_nullify() { service_scope, service_subscope, nullifier_secret, + sample_oprf_proof(), ); - assert_eq( - salted_mock_scoped_nullifier, - 0x130bf204a32cac1f0ace56c78b731aa3809f06df2731ebcf6b3464a15788b1b9, - ); + assert(salted_mock_scoped_nullifier != 0); assert_eq(nullifier_type, SALTED_MOCK_NULLIFIER); + assert(oprf_pk_hash != 0); - // Assert that the non-salted mock nullifier is different from the salted mock nullifier - // since the secret was used to salt the nullifier in one case and not in the other - assert(non_salted_mock_scoped_nullifier != salted_mock_scoped_nullifier); - - // Assert that the non-salted mock nullifier is the same as the non-salted nullifier - // since the private nullifier, service scope and service subscope are the same - assert_eq(non_salted_mock_scoped_nullifier, non_salted_scoped_nullifier); - - // Assert that the salted mock nullifier is the same as the salted nullifier - // since the private nullifier, service scope and service subscope are the same + // Salted mock nullifier should equal salted nullifier since + // private_nullifier, service_scope, service_subscope, and nullifier_secret are the same assert_eq(salted_mock_scoped_nullifier, salted_scoped_nullifier); } diff --git a/src/noir/lib/outer/src/lib.nr b/src/noir/lib/outer/src/lib.nr index 5f6898765..586ae7ca1 100644 --- a/src/noir/lib/outer/src/lib.nr +++ b/src/noir/lib/outer/src/lib.nr @@ -21,8 +21,9 @@ pub fn prepare_disclosure_inputs( service_subscope: Field, nullifier_type: Field, scoped_nullifier: Field, -) -> [Field; 7] { - let mut result: [Field; 7] = [0; 7]; + oprf_pk_hash: Field, +) -> [Field; 8] { + let mut result: [Field; 8] = [0; 8]; result[0] = comm_in; result[1] = current_date as Field; result[2] = service_scope; @@ -30,6 +31,7 @@ pub fn prepare_disclosure_inputs( result[4] = param_commitment; result[5] = nullifier_type; result[6] = scoped_nullifier; + result[7] = oprf_pk_hash; result } diff --git a/src/noir/lib/utils/Nargo.toml b/src/noir/lib/utils/Nargo.toml index 9c13b1912..bbd901191 100644 --- a/src/noir/lib/utils/Nargo.toml +++ b/src/noir/lib/utils/Nargo.toml @@ -6,3 +6,4 @@ compiler_version = ">=1.0.0" [dependencies] poseidon = { tag = "v0.3.0", git = "https://github.com/noir-lang/poseidon" } +babyjubjub = { tag = "v0.2.0", git = "https://github.com/TaceoLabs/oprf-nr", directory = "babyjubjub" } diff --git a/src/noir/lib/utils/src/types.nr b/src/noir/lib/utils/src/types.nr index 6940c1b83..9d423e423 100644 --- a/src/noir/lib/utils/src/types.nr +++ b/src/noir/lib/utils/src/types.nr @@ -38,6 +38,15 @@ pub type SHA256Digest = [u8; SHA256_DIGEST_LENGTH]; pub type SHA384Digest = [u8; SHA384_DIGEST_LENGTH]; pub type SHA512Digest = [u8; SHA512_DIGEST_LENGTH]; +pub struct OPRFProof { + pub pk: babyjubjub::BabyJubJubPoint, + pub dlog_e: Field, + pub dlog_s: Field, + pub response_blinded: babyjubjub::BabyJubJubPoint, + pub response: babyjubjub::BabyJubJubPoint, + pub beta: Field, +} + /// This struct acts as a wrapper around a value, so it can be specified as either a clear value with /// a provided salt for hashing or only as its salted hash if its clear value is not needed inside the circuit pub struct SaltedValue { diff --git a/src/solidity/script/Deploy.s.sol b/src/solidity/script/Deploy.s.sol index 94d8a05c6..cc9bb606d 100644 --- a/src/solidity/script/Deploy.s.sol +++ b/src/solidity/script/Deploy.s.sol @@ -35,25 +35,25 @@ contract Deploy is Script { bytes32[] public vkeyHashes = [ // Outer (4 subproofs) - bytes32(hex"0a3390816e5af7359b589b74a49a0210ca7f8024c497af8eca6081e4cbc1505c"), + bytes32(hex"072583d991a1ef614353daed3b3e3fe5f94e5274966437a9fc9d77da19a306ca"), // Outer (5 subproofs) - bytes32(hex"287292eb9eace872ef64278a828b54d51b79e1ddd159e6582bf8826d1cc860ba"), + bytes32(hex"04ff20501e4bdd02871cc1429f70d496b4281bac97aece4544ffaedf156c7eef"), // Outer (6 subproofs) - bytes32(hex"156252c4c996e9fb3e77f4787dae33e73f9d5c6f06b57c12e87ebdaf35c9edab"), + bytes32(hex"1212298562eaa813d58ea4aaaf2a4117c6f02a72f3b9c64a21b1dbc6e5fab0b9"), // Outer (7 subproofs) - bytes32(hex"252dbc42921b3236ad115da32541c953bd20a09043e575df2e9ed274448bb093"), + bytes32(hex"0b769026390dcfb778e3e38af7b45382abcad3b2784d62b84f44ec8fecba8d3a"), // Outer (8 subproofs) - bytes32(hex"257869d29c689652f48f8957a22c398490410858eb881967a9b8caab7b86b8bb"), + bytes32(hex"09f506d0e46238c664160fceec1bd2dec6ef39c0b584f12c316f80aff92d3c42"), // Outer (9 subproofs) - bytes32(hex"0fb22360a2d0c81a4ebf0a55c474df97c053ae406980dcf0047c7c451d893401"), + bytes32(hex"2cc2ff165f1e5a7b51d654669c5fb129384dd4c36341aeeafd5cfa8e2647e681"), // Outer (10 subproofs) - bytes32(hex"2efa10b806e2e7edba75c35cd2659dc2d74e8f0f040876eb014ae6f5056e3dc0"), + bytes32(hex"0f069d864ffc03a6696d0ae37e8708dea13c7c3802ce95839c8110381684a5b1"), // Outer (11 subproofs) - bytes32(hex"03cb373a16d51d7b462e9a21f6d2f34fc1009da12f0cfd6f1041e0afffcf8acc"), + bytes32(hex"26be2379e1555cab19cd37061f32342d09b0a4891e84d4f1a363c93c87c7ba25"), // Outer (12 subproofs) - bytes32(hex"2b5579a92c9a4b48a8c60ed14395bf1d2f965ebd469c096a182fa8fe8285d0bd"), + bytes32(hex"16828fad756bb212bd1887e291c51cffd5bbe23acbdb96768b6a174d682224f6"), // Outer (13 subproofs) - bytes32(hex"1e3076a5fc04a825e4a817320106b943e848c2d04f703091d0e0fee3df900ef5") + bytes32(hex"0e165d27cf39d8b4e569e218dedbf60abc5badcfd936bdc54030669c382c802c") ]; address[] public proofVerifiers = new address[](10); @@ -71,7 +71,11 @@ contract Deploy is Script { address admin = vm.envAddress("ROOT_VERIFIER_ADMIN_ADDRESS"); address guardian = vm.envAddress("ROOT_VERIFIER_GUARDIAN_ADDRESS"); IRootRegistry rootRegistry = IRootRegistry(vm.envAddress("ROOT_REGISTRY_ADDRESS")); - ZKPassportRootVerifier rootVerifier = new ZKPassportRootVerifier(admin, guardian, rootRegistry); + // Hash of the global default OPRF public key; defaults to zero if unset so it can be + // populated later via `rootVerifier.setDefaultOprfPubKeyHash(...)` once the DKG key is known. + bytes32 defaultOprfPubKeyHash = vm.envOr("DEFAULT_OPRF_PUB_KEY_HASH", bytes32(0)); + ZKPassportRootVerifier rootVerifier = + new ZKPassportRootVerifier(admin, guardian, rootRegistry, defaultOprfPubKeyHash); console.log("ZKPassportRootVerifier deployed at:", address(rootVerifier)); // Deploy the sub verifier diff --git a/src/solidity/src/Constants.sol b/src/solidity/src/Constants.sol index cecf61914..79800b5fe 100644 --- a/src/solidity/src/Constants.sol +++ b/src/solidity/src/Constants.sol @@ -46,7 +46,7 @@ library PublicInput { uint256 constant SUBSCOPE_INDEX = 4; uint256 constant PARAM_COMMITMENTS_INDEX = 5; // The length of the public inputs excluding the param commitments - uint256 constant PUBLIC_INPUTS_EXCLUDING_PARAM_COMMITMENTS_LENGTH = 7; + uint256 constant PUBLIC_INPUTS_EXCLUDING_PARAM_COMMITMENTS_LENGTH = 8; } // Gather all the MRZ indices in one place diff --git a/src/solidity/src/SampleContract.sol b/src/solidity/src/SampleContract.sol index 8d7e8fb34..71747e84b 100644 --- a/src/solidity/src/SampleContract.sol +++ b/src/solidity/src/SampleContract.sol @@ -32,6 +32,11 @@ contract SampleContract { // Replace with your usage scope (e.g. "registration") string internal constant validScope = "bigproof"; + // Set to a non-zero value to require proofs to be generated with a specific + // custom OPRF key (whose public key hashes to this value). Leave as bytes32(0) + // to fall back to the root verifier's `defaultOprfPubKeyHash()`. + bytes32 internal constant customOprfPubKeyHash = bytes32(0); + // Errors error InvalidProof(); error InvalidScope(); @@ -88,6 +93,18 @@ contract SampleContract { // Verify the proof was generated for the correct domain name require(helper.verifyScopes(params.proofVerificationData.publicInputs, validDomain, validScope), "Invalid domain or scope"); + // If the proof uses a salted (OPRF-derived) nullifier, verify the OPRF public key hash. + // Apps with their own OPRF key set `customOprfPubKeyHash` to the hash of their key. + // Otherwise we fall back to the global default published by the root verifier. + if (helper.isSaltedNullifier(params.proofVerificationData.publicInputs)) { + bytes32 expectedOprfPubKeyHash = + customOprfPubKeyHash != bytes32(0) ? customOprfPubKeyHash : zkPassportVerifier.defaultOprfPubKeyHash(); + require( + helper.verifyOprfPubKeyHash(params.proofVerificationData.publicInputs, expectedOprfPubKeyHash), + "Invalid OPRF public key" + ); + } + // Verify the age is above or equal to the minimum age require(helper.isAgeAboveOrEqual(MIN_AGE, params.committedInputs), "Age is not 18+"); diff --git a/src/solidity/src/Types.sol b/src/solidity/src/Types.sol index a1f11506c..5274c8e9a 100644 --- a/src/solidity/src/Types.sol +++ b/src/solidity/src/Types.sol @@ -75,7 +75,8 @@ enum OS { // │ ├── [4] service_subscope // Field - struct.serviceSubscope // │ ├── [5:5+N] param_commitments // Field[N] - PublicInputsCast.getParamCommitment(array, index) // │ ├── [5+N] nullifier_type // u8 - PublicInputsCast.getNullifierType(array, paramCount) -// │ └── [6+N] scoped_nullifier // Field - PublicInputsCast.getScopedNullifier(array, paramCount) +// │ ├── [6+N] scoped_nullifier // Field - PublicInputsCast.getScopedNullifier(array, paramCount) +// │ └── [7+N] oprf_pk_hash // Field - Hash of the OPRF public key (0 if non-salted) // │ // ├── bytes committedInputs // Preimages of param_commitments // │ diff --git a/src/solidity/src/ZKPassportHelper.sol b/src/solidity/src/ZKPassportHelper.sol index 36fbd94a8..3b0edd7a8 100644 --- a/src/solidity/src/ZKPassportHelper.sol +++ b/src/solidity/src/ZKPassportHelper.sol @@ -14,7 +14,7 @@ import {DateUtils} from "./DateUtils.sol"; import {StringUtils} from "./StringUtils.sol"; import {InputsExtractor} from "./InputsExtractor.sol"; import {SECONDS_BETWEEN_1900_AND_1970, PublicInput, AppAttest, RegistryID} from "./Constants.sol"; -import {ProofType, DisclosedData, BoundData, FaceMatchMode, Environment, OS} from "./Types.sol"; +import {ProofType, DisclosedData, BoundData, FaceMatchMode, Environment, OS, NullifierType} from "./Types.sol"; contract ZKPassportHelper { IRootRegistry public immutable rootRegistry; @@ -435,7 +435,8 @@ contract ZKPassportHelper { bool isProduction = environment == Environment.PRODUCTION; bool isCorrectMode = retrievedFaceMatchMode == faceMatchMode; bool isCorrectRootKeyHash = (rootKeyHash == AppAttest.APPLE_ROOT_KEY_HASH && (os == OS.IOS || os == OS.ANY)) - || ((rootKeyHash == AppAttest.GOOGLE_RSA_ROOT_KEY_HASH || rootKeyHash == AppAttest.GOOGLE_ECDSA_ROOT_KEY_HASH) && (os == OS.ANDROID || os == OS.ANY)); + || ((rootKeyHash == AppAttest.GOOGLE_RSA_ROOT_KEY_HASH || rootKeyHash == AppAttest.GOOGLE_ECDSA_ROOT_KEY_HASH) + && (os == OS.ANDROID || os == OS.ANY)); bool isCorrectAppIdHash = (appIdHash == AppAttest.IOS_APP_ID_HASH && (os == OS.IOS || os == OS.ANY)) || (appIdHash == AppAttest.ANDROID_APP_ID_HASH && (os == OS.ANDROID || os == OS.ANY)); // The integrity public key hash is 0 for iOS as it's logic specific to Android @@ -474,4 +475,50 @@ contract ZKPassportHelper { return publicInputs[PublicInput.SCOPE_INDEX] == scopeHash && publicInputs[PublicInput.SUBSCOPE_INDEX] == subscopeHash; } + + /** + * @notice Reads the nullifier type from the proof's public inputs + * @param publicInputs The public inputs of the proof + * @return The nullifier type + */ + function getNullifierType(bytes32[] calldata publicInputs) public pure returns (NullifierType) { + return NullifierType(uint256(publicInputs[publicInputs.length - 3])); + } + + /** + * @notice Returns true if the proof uses a salted (OPRF-derived) nullifier + * @param publicInputs The public inputs of the proof + * @return True if SALTED_NULLIFIER or SALTED_MOCK_NULLIFIER + */ + function isSaltedNullifier(bytes32[] calldata publicInputs) external pure returns (bool) { + NullifierType t = getNullifierType(publicInputs); + return t == NullifierType.SALTED_NULLIFIER || t == NullifierType.SALTED_MOCK_NULLIFIER; + } + + /** + * @notice Extracts the OPRF public key hash that was used to derive the salted nullifier + * @dev Returns bytes32(0) for non-salted nullifiers + * @param publicInputs The public inputs of the proof + * @return The OPRF public key hash committed to by the proof + */ + function getOprfPubKeyHash(bytes32[] calldata publicInputs) external pure returns (bytes32) { + return publicInputs[publicInputs.length - 1]; + } + + /** + * @notice Verifies the proof's OPRF public key hash matches the expected hash + * @dev App contracts should call this when consuming a SALTED nullifier, passing either + * their own custom OPRF key's hash or the root verifier's `defaultOprfPubKeyHash()`. + * For non-salted nullifiers, callers should skip this check (or pass bytes32(0)) + * @param publicInputs The public inputs of the proof + * @param expectedOprfPubKeyHash The expected OPRF public key hash + * @return True if the hash in the proof matches the expected hash + */ + function verifyOprfPubKeyHash(bytes32[] calldata publicInputs, bytes32 expectedOprfPubKeyHash) + external + pure + returns (bool) + { + return publicInputs[publicInputs.length - 1] == expectedOprfPubKeyHash; + } } diff --git a/src/solidity/src/ZKPassportRootVerifier.sol b/src/solidity/src/ZKPassportRootVerifier.sol index 538b76c94..fcad5a30b 100644 --- a/src/solidity/src/ZKPassportRootVerifier.sol +++ b/src/solidity/src/ZKPassportRootVerifier.sol @@ -39,6 +39,11 @@ contract ZKPassportRootVerifier { // Config mapping mapping(bytes32 key => bytes32 value) public config; + // Hash of the OPRF public key for the global default OPRF key. + // Apps that use SALTED nullifiers without supplying a custom OPRF key expect the proof's + // oprf_pk_hash public input to match this value. Apps with a custom OPRF key ignore it. + bytes32 public defaultOprfPubKeyHash; + // Events event RootVerifierDeployed(address admin, address guardian, address rootRegistry); event AdminUpdated(address indexed oldAdmin, address indexed newAdmin); @@ -52,19 +57,23 @@ contract ZKPassportRootVerifier { event HelperUpdated(bytes32 indexed version, address indexed oldHelper, address indexed newHelper); event PausedStatusChanged(bool paused); event ConfigUpdated(bytes32 indexed key, bytes32 oldValue, bytes32 newValue); + event DefaultOprfPubKeyHashUpdated(bytes32 oldHash, bytes32 newHash); /** * @notice Constructor * @param _admin The admin address * @param _guardian The guardian address * @param _rootRegistry The root registry address + * @param _defaultOprfPubKeyHash Hash of the global default OPRF public key */ - constructor(address _admin, address _guardian, IRootRegistry _rootRegistry) { + constructor(address _admin, address _guardian, IRootRegistry _rootRegistry, bytes32 _defaultOprfPubKeyHash) { require(_admin != address(0), "Admin cannot be zero address"); admin = _admin; guardian = _guardian; rootRegistry = _rootRegistry; + defaultOprfPubKeyHash = _defaultOprfPubKeyHash; emit RootVerifierDeployed(admin, guardian, address(_rootRegistry)); + emit DefaultOprfPubKeyHashUpdated(bytes32(0), _defaultOprfPubKeyHash); } /** @@ -236,6 +245,16 @@ contract ZKPassportRootVerifier { emit ConfigUpdated(key, oldValue, value); } + /** + * @notice Update the default OPRF public key hash + * @param newHash The new default OPRF public key hash + */ + function setDefaultOprfPubKeyHash(bytes32 newHash) external onlyAdmin { + bytes32 oldHash = defaultOprfPubKeyHash; + defaultOprfPubKeyHash = newHash; + emit DefaultOprfPubKeyHashUpdated(oldHash, newHash); + } + /** * @notice Pause the root verifier * @dev Only admin or guardian can pause the root verifier diff --git a/src/solidity/src/ZKPassportSubVerifier.sol b/src/solidity/src/ZKPassportSubVerifier.sol index f692ff51d..04d10f413 100644 --- a/src/solidity/src/ZKPassportSubVerifier.sol +++ b/src/solidity/src/ZKPassportSubVerifier.sol @@ -144,8 +144,7 @@ contract ZKPassportSubVerifier { view { require( - _rootRegistry.isRootValid(RegistryID.CERTIFICATE, certificateRoot, timestamp), - "Invalid certificate registry root" + _rootRegistry.isRootValid(RegistryID.CERTIFICATE, certificateRoot, timestamp), "Invalid certificate registry root" ); } @@ -207,12 +206,12 @@ contract ZKPassportSubVerifier { _verifyCommittedInputs( // Extracts the commitments from the public inputs params.proofVerificationData - .publicInputs[PublicInput.PARAM_COMMITMENTS_INDEX:params.proofVerificationData.publicInputs.length - 2], + .publicInputs[PublicInput.PARAM_COMMITMENTS_INDEX:params.proofVerificationData.publicInputs.length - 3], params.committedInputs ); NullifierType nullifierType = NullifierType( - uint256(params.proofVerificationData.publicInputs[params.proofVerificationData.publicInputs.length - 2]) + uint256(params.proofVerificationData.publicInputs[params.proofVerificationData.publicInputs.length - 3]) ); // Allow mock proofs in dev mode @@ -224,20 +223,19 @@ contract ZKPassportSubVerifier { "Mock proofs are only allowed in dev mode" ); - // For now, only non-salted nullifiers are supported - // but salted nullifiers can be used in dev mode - // They will be later once a proper registration mechanism is implemented require( - nullifierType == NullifierType.NON_SALTED_NULLIFIER || params.serviceConfig.devMode, - "Salted nullifiers are not supported for now" + nullifierType == NullifierType.NON_SALTED_NULLIFIER || nullifierType == NullifierType.SALTED_NULLIFIER + || params.serviceConfig.devMode, + "Unsupported nullifier type" ); // Call the proof verifier for the given Outer Circuit to verify if the actual proof is valid isValid = IProofVerifier(verifier).verify(params.proofVerificationData.proof, params.proofVerificationData.publicInputs); - // Get the unique identifier from the public inputs - uint256 uniqueIdentifierIndex = params.proofVerificationData.publicInputs.length - 1; + // Get the unique identifier (scoped_nullifier) from the public inputs. + // Trailing public inputs (in order): [length-3] nullifier_type, [length-2] scoped_nullifier, [length-1] oprf_pk_hash. + uint256 uniqueIdentifierIndex = params.proofVerificationData.publicInputs.length - 2; uniqueIdentifier = params.proofVerificationData.publicInputs[uniqueIdentifierIndex]; // Return the validity of the proof verification and the unique identifier diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount10.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount10.sol index c2349c8a7..37fdf19f9 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount10.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount10.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x2efa10b806e2e7edba75c35cd2659dc2d74e8f0f040876eb014ae6f5056e3dc0; +uint256 constant VK_HASH = 0x0f069d864ffc03a6696d0ae37e8708dea13c7c3802ce95839c8110381684a5b1; uint256 constant CIRCUIT_SIZE = 8388608; uint256 constant LOG_N = 23; -uint256 constant NUMBER_PUBLIC_INPUTS = 22; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 14; +uint256 constant NUMBER_PUBLIC_INPUTS = 23; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 15; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1484,42 +1484,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x2bf83484f5620b0c5328ffe316c3c12672cb0331d5dabac16c5f7ed93521c13c) - mstore(Q_L_Y_LOC, 0x2df399a333c10844f8eaa99ca3f4a6c7c00fe7b8d9f75f726a619ceb31f44071) - mstore(Q_R_X_LOC, 0x0ff0f7a32bc1d3bdeae86faa20df5d72f3b1a00209aaffb10f7af8236595cb6e) - mstore(Q_R_Y_LOC, 0x27703935e70dbbb995f9558a5c3caf5b5578223f96a9da09a2ca44c933945627) - mstore(Q_O_X_LOC, 0x23f9a8d0ca34b99e25c848eb7ade19faf1455fa999b4eed5d4dfb33ac521bebf) - mstore(Q_O_Y_LOC, 0x0c6e82d6456515f4133c2217c9fef17e453f340949c47fc255a9154bca9cb402) - mstore(Q_4_X_LOC, 0x1342e16e33d795c9679dac9dbc5a845968778eb93d13d64fdba110aadb890f47) - mstore(Q_4_Y_LOC, 0x1759165b3c827bbaf6f229c71cd78e8ce88b8413a1600a70926dba78290a1e65) - mstore(Q_M_X_LOC, 0x02f7bc5f6f471fa5f0a189b1ebc409c18248d5589bc333daddb60fce73f1bea2) - mstore(Q_M_Y_LOC, 0x29803380fc809638f57db2bdbf64010dff534efea60d93dd5692e06f734d680d) - mstore(Q_C_X_LOC, 0x0d355df30f8a12255b5c6da65693cdac7074ea7e7d5a78c40ebed0f8b59da7db) - mstore(Q_C_Y_LOC, 0x0f9435b627a6d441432188cd31a412005a9385f6167178a3087f041659195cc0) - mstore(Q_LOOKUP_X_LOC, 0x15729599ef3888a89db8f52912b65cdfc12205eb78f54bd9f4742df51d35d9d2) - mstore(Q_LOOKUP_Y_LOC, 0x1890a0e4fb04b07215d2034d92fc6ad93cb3670761c8c93df420b3a7d89baefa) - mstore(Q_ARITH_X_LOC, 0x2a2ed1d90bc48cf043b98841e81e1a9d0c44561e47c49384e0ea6b72f1b15e56) - mstore(Q_ARITH_Y_LOC, 0x2dc8a6f384151017038f7ab3ac46e7e9271bc1dc7ca4d3ba1cf07bda4b2563d3) - mstore(Q_DELTA_RANGE_X_LOC, 0x2e7f40f94278b5ed23d1feacdb8ea8a4c014fba1ad24683c6842625138c82920) - mstore(Q_DELTA_RANGE_Y_LOC, 0x217a9500ffcd2707ee0ae142cb2be2323702d74c27fdde42f29d912a2bbd1958) - mstore(Q_ELLIPTIC_X_LOC, 0x127f84fa4a49045e0deb5006d61436f152fb33a477b1b1be8a594a20dad64c4f) - mstore(Q_ELLIPTIC_Y_LOC, 0x2f02ca12aaac1714e3480b481c7536cac073bcfadef343d6c55395f5edbb0484) - mstore(Q_MEMORY_X_LOC, 0x291a87e4b1d26d9fb26c76fea7745f0420cd1c03a4fd42e1b76d82668eb934df) - mstore(Q_MEMORY_Y_LOC, 0x0439af4fb69f5b0bbb8c911fedbe1d7ef99efbb39b1560becbc35ab849f692a7) - mstore(Q_NNF_X_LOC, 0x150f9f4732e46d75f1f5f520e6bac5fad52406b8abc7affa163b93f07865231a) - mstore(Q_NNF_Y_LOC, 0x13be050c3b1d59be7244e791ea8bf5de4465cc9086a3688e5c7efc78fd4cf101) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x040e811b3c465b1dc30d58d92f63c3c713791343fe3174373a04f528db50249a) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x2c51d78cf1e243c75b07517ed0432d30e66e9d448ae067a85b23d5e3bf3bf5a1) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x16928bc404e5c2d971b2f1662b52f5213e8219c1d0c04213bed390ec3362d2f0) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x0807fb97550e62793e4493911eb5fd40e667ad0b431e0e75c89f1d801513472b) - mstore(SIGMA_1_X_LOC, 0x0e4b1714c5c9d1a36bb479473fe7cc402620dfb445ade0d759240137c0227e95) - mstore(SIGMA_1_Y_LOC, 0x2bc47699d2cd0f15362fcd16dcd2af900e847601cf47177d1800aacfc4e9053d) - mstore(SIGMA_2_X_LOC, 0x15fe65416e60ae166cd49b4a042af216d770cf013dc24ab1def2e4388e0b59f7) - mstore(SIGMA_2_Y_LOC, 0x24bf48612162e04efac339d816f068ec087efa8d22f98755ec6cd3fd94d4c251) - mstore(SIGMA_3_X_LOC, 0x103f86b57c84fbfd463dd43206ccbc2fa218792b1ad1c1c694861ef4bf8ab013) - mstore(SIGMA_3_Y_LOC, 0x026eecb7175ba0c91c1fdff472b0106e89d4e8f87cdffa1637de18ff91eb507d) - mstore(SIGMA_4_X_LOC, 0x1d702a0d502f64b8f9dedc4189b86f8b2b588c15d2d328fdd194ff041bdce7b7) - mstore(SIGMA_4_Y_LOC, 0x1673833025778c0cc3e5698817938e7f5cf3abaa821d27e7b252a392a031b9c6) + mstore(Q_L_X_LOC, 0x00cf33ad0a591a2bf4bf965e22ecf9a0a0d66863fb0d3c5d56d470585c4f2051) + mstore(Q_L_Y_LOC, 0x291ea39adb43501929130f121ea18abb2d050c700f0e75c9d1e4ac582110b3f4) + mstore(Q_R_X_LOC, 0x1798dd58d000c847705abbd82d4d8a3f66376a612dc2277071f45ca84e0cfad6) + mstore(Q_R_Y_LOC, 0x1a72285ebc7486e1fadf384835d814b6ac8622d89e6a8894d42cb7275d6f8cfa) + mstore(Q_O_X_LOC, 0x116b84f7b5c288e19ee6ba93141ee20e4e43e80fb1ab906c5dbc4895868c012e) + mstore(Q_O_Y_LOC, 0x20c56b9b0163a958f89a3eee497a8714d0d6f8e90faae9cc5cc44fc8e0c232aa) + mstore(Q_4_X_LOC, 0x1f4f68bf25edc0741b5e4ba014def83f85457f746a7ccf3d33cde2023dd9907f) + mstore(Q_4_Y_LOC, 0x026f08e9f121ec17521b432685e33f427037904e66c5caf075a17b1eb22e8758) + mstore(Q_M_X_LOC, 0x1077db547bf4260edbdcfbc1433d66c9f91c2bb47b348ee9f9799211bcfa234a) + mstore(Q_M_Y_LOC, 0x1dc6f08660ad8479b0ceeec876ec74ab5c6f1e04dadb00a20af62e3d4820ecb3) + mstore(Q_C_X_LOC, 0x08b3d12f8e0eaf40faeadb18def31e337bdbd9bea6f8ccd07909b96d73db3ab0) + mstore(Q_C_Y_LOC, 0x150b686d63487f65188a9e152cdd49aa09dfafd01766a1ae8450aa9ea5fbb60f) + mstore(Q_LOOKUP_X_LOC, 0x1958b13f38f58756e23989a418de3c113d47a2256ba6f60a9e2ec0523c52a991) + mstore(Q_LOOKUP_Y_LOC, 0x286c1d4c53af6654de284fbb620f90a9e00aa9470a9e3c58a56cc81e212df923) + mstore(Q_ARITH_X_LOC, 0x1ededeff01c2362d77cfa4aa45209f8014bbdc3a295f6aa90176de64c0648be2) + mstore(Q_ARITH_Y_LOC, 0x10ef6c319fcb9312d07ebd2fe720fee9581aca235d086d9c4b4d353a42550a2d) + mstore(Q_DELTA_RANGE_X_LOC, 0x1a9ff91214bd81a9c4b389a4d61422fe7b01df553b92820b463bcffc257daf4a) + mstore(Q_DELTA_RANGE_Y_LOC, 0x23da8b42347cb7f379c58e3a68c97ee91390956f8640a537a49e56bf0f8f3f23) + mstore(Q_ELLIPTIC_X_LOC, 0x1e6a54138e0459204df6457dfcb5574d53c922dd0c1445cbd85f5210c41847d3) + mstore(Q_ELLIPTIC_Y_LOC, 0x0175877ed68aa016e5d138d90782358cf071b3cc3b145f10fb3befa10833641f) + mstore(Q_MEMORY_X_LOC, 0x2911cbdb83e2ded9efbef7c7a002e7aeb4d09e06720234686b23130e9c8e7375) + mstore(Q_MEMORY_Y_LOC, 0x05280158e623f17d785f6e82d7149a30ff652baddf8f824c60ee5cae59c15cad) + mstore(Q_NNF_X_LOC, 0x1d750e47bd0b72a0f8816b5deba55a522e80eb70476a5cb37bbca30b0becbcb2) + mstore(Q_NNF_Y_LOC, 0x118d9dc998e89c77ad049cd9dc16597aef5d69397422633744fa6580a3b91d2e) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x1b0c20c70e50803e1cb736f261b0287e7d18fa0e2db12a26e490a5c066abc5bb) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x0a029ed886c9cd9c051539e70a0217d78fb927c4b6490e17d2b99754fe23703a) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x258c4dca43c691e2e1f38b0fa899bbae2de63af12c46bbd08ced84f806a53f19) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x2a196b3724852a004d177bdfc780563f32d4d19146ecdc1b18f4f4fffccc46df) + mstore(SIGMA_1_X_LOC, 0x273ad3dbe05fa9c38c52a9ea8d707fba9e1b4b5cc020243b2caa4bd9bf82e2ad) + mstore(SIGMA_1_Y_LOC, 0x0e4677e67d0fa332a9d64351526a78b80b282c46914cba1ea0090ea12c5127f0) + mstore(SIGMA_2_X_LOC, 0x2711c438a78da233e28ffb8d83f44ada07738ab695dd14cbd48af9eb1cfe5aab) + mstore(SIGMA_2_Y_LOC, 0x27494b91371ff7585516c1f2b3086f73c72cf108ff41d8be44bf3bab3ce5c79e) + mstore(SIGMA_3_X_LOC, 0x2f874486d88f3c40017681cca7311828609d3e392cc1fcdc8b28226e69a196e5) + mstore(SIGMA_3_Y_LOC, 0x3051de845f61175bf4255301b06da115fef76414d7217d135041924d116bdcda) + mstore(SIGMA_4_X_LOC, 0x225821fae5a3508bba89968d1f2d6063d7a10b67eecda00cb8d045011192d61f) + mstore(SIGMA_4_Y_LOC, 0x1f2fa0527a6119976238b3c67339c4a2ace333004a0b13e54b187d606cbddc95) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1528,18 +1528,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x2d53e974256c61574bf9360390dce67b32f99b68308836ecd49a38bf16cf1f00) - mstore(ID_1_Y_LOC, 0x1637299e9eea4cff2f415ff7f93b51e0450dc2751afd1378f5830f5b7ec920db) - mstore(ID_2_X_LOC, 0x2b4b29d3db658913b9e3a9f5cccd09b29d81d2c65ccb320012dbdc090e60fd3b) - mstore(ID_2_Y_LOC, 0x24245b19f86940842b715e193fb07cc993dc4b4ddd253ef6aaf87314de9aa0e9) - mstore(ID_3_X_LOC, 0x2077b51d8574dfec6d0d7ba800bbd1e7e94359cfb3943a0b254130dcf29e3e1b) - mstore(ID_3_Y_LOC, 0x1917082abea0568453bd9edccb0139f01111b4fc1329d81d0127681c4d4eaa56) - mstore(ID_4_X_LOC, 0x2b4a5f1c2e8370e9f2959e62494cd8f5064bf01d5f4cc0a2f70d45736c2d6474) - mstore(ID_4_Y_LOC, 0x2b7d713639a064e486f471c368f54cafc4680daed11da67b404e89344e6608e5) + mstore(ID_1_X_LOC, 0x239ca00286f99313ac860a8cee81017f071ca64d0d3438da0f32d88f989038ed) + mstore(ID_1_Y_LOC, 0x0c473d0c68f208de71c8a379fb14df8291da52cc87a7ade8fcd11af29a9d1b81) + mstore(ID_2_X_LOC, 0x252bbbaf16faef350d85127be0348d2cc3c776f78e98555e65225b870694b5f1) + mstore(ID_2_Y_LOC, 0x09839b467ceb19b34cc8ff8ce26de93c3923bdb0a6016074282ae3e706dabc8d) + mstore(ID_3_X_LOC, 0x1477422f4e33d1931f06a3b65d38c91f074ed448abe266c6e378852f9d381afe) + mstore(ID_3_Y_LOC, 0x292932b67596f105099e5d8c2a750d47b51eac750c8c0bc2a549d334e8c98fbb) + mstore(ID_4_X_LOC, 0x2826bc6cd943f9940721fbd4db066d33bb8e8876166d237eab1295d45a1aeab1) + mstore(ID_4_Y_LOC, 0x1685a007cdd6ac9bfd4450cc17aef6572b94c90b615af00cdca272ef0bf023dd) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x1dea903e89947ee4e0fdd6068ddf071de7b76a6d158d60891b9923c34beea540) - mstore(LAGRANGE_LAST_Y_LOC, 0x20c2d9360df75c1f5ce7f1afa2156ce1c526a58a8cbe0703cc17dbeacb7e68d6) + mstore(LAGRANGE_LAST_X_LOC, 0x0aaf5a31d87729fb83adb31e1534f2c7f54b5e14b3760fd70ac8dc0a321eefb4) + mstore(LAGRANGE_LAST_Y_LOC, 0x15a230430b0de8120b35ae971a77397a1593680dedf223ff2859cea5bcfc37d7) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount11.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount11.sol index ee75b7f94..95565df1f 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount11.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount11.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x03cb373a16d51d7b462e9a21f6d2f34fc1009da12f0cfd6f1041e0afffcf8acc; +uint256 constant VK_HASH = 0x26be2379e1555cab19cd37061f32342d09b0a4891e84d4f1a363c93c87c7ba25; uint256 constant CIRCUIT_SIZE = 16777216; uint256 constant LOG_N = 24; -uint256 constant NUMBER_PUBLIC_INPUTS = 23; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 15; +uint256 constant NUMBER_PUBLIC_INPUTS = 24; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 16; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1522,42 +1522,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x1ba039c986fd8336736dedc9fa7f148b1f29504a5f0c14676fba7d9524474948) - mstore(Q_L_Y_LOC, 0x0adb7f7056e2ac0512fc60d1f5100a77a8382b3103385e42adeed33b87f3d95e) - mstore(Q_R_X_LOC, 0x066fc20a844952909150abadbab27a1dceb8c0eb1e2bfe0fb6451005b7fd1888) - mstore(Q_R_Y_LOC, 0x2af662c39e626db44961da8034c60d8951439cb25d1bcd1d54dcd6dcaae7edeb) - mstore(Q_O_X_LOC, 0x2837c2322b8cb969a81c37ce174cafb9b68c56961844413ea539696af023f11d) - mstore(Q_O_Y_LOC, 0x1c78060c882aec38879a01a66a79b017d29de598f3cf4186f163f7d7942d0278) - mstore(Q_4_X_LOC, 0x046371bba4d04379508fa1a9ffb1288d522aeaecc0766d526a37fe3b750034e5) - mstore(Q_4_Y_LOC, 0x0921e8728b8aa9749d1d53c87456135213c28261eb9a52c14d254ffb8cce1c57) - mstore(Q_M_X_LOC, 0x2ac115cb0e7283ef238d3b6ac5f169cd2f8a9522f58bfb5bbcdbea309b912935) - mstore(Q_M_Y_LOC, 0x0507cce12247e371321792897ce0ebc36f21c2861c9e71751f8b081a2320ad62) - mstore(Q_C_X_LOC, 0x2465c1a914070efac9f1b8c667ff11411cfb7714c9fc26c78a99ec358cb75b19) - mstore(Q_C_Y_LOC, 0x08b6797f33beebd0d8a2de9c18438fa505e3311c3b85646c936181a614b60262) - mstore(Q_LOOKUP_X_LOC, 0x1958b13f38f58756e23989a418de3c113d47a2256ba6f60a9e2ec0523c52a991) - mstore(Q_LOOKUP_Y_LOC, 0x286c1d4c53af6654de284fbb620f90a9e00aa9470a9e3c58a56cc81e212df923) - mstore(Q_ARITH_X_LOC, 0x119a97a6a5848b82bdf1a8856f0eed1a0b7137414d35914963b57d40dce574c7) - mstore(Q_ARITH_Y_LOC, 0x056252e058857b5f63b1ac675e6d2915af7a9e8ad6eba6488f364ef90ec719d9) - mstore(Q_DELTA_RANGE_X_LOC, 0x085bd4fd277a101b68395363681b9bc63a5490a0d408def1a8e6e0f3acfff014) - mstore(Q_DELTA_RANGE_Y_LOC, 0x0c189c524bce1b3b2138edb17b2822b7c8043e009fcec0cbe2d75a6b369f7dd8) - mstore(Q_ELLIPTIC_X_LOC, 0x24d5a865c7d358aa7cfc129a207563f686085b0e05fbf23d23bbe720921fe140) - mstore(Q_ELLIPTIC_Y_LOC, 0x146898c3d7a75e4775304a82d183831542c302175419b40f5a1faa3e8fe09ec7) - mstore(Q_MEMORY_X_LOC, 0x14d2ee74b55626eb8ca2414660b6a03cccec42764e8a0d025fc42a83605b65eb) - mstore(Q_MEMORY_Y_LOC, 0x03d523c16f9a7e2eb3dcaf71ce16bbf5b7554df6b308c8e9090c942246ebe519) - mstore(Q_NNF_X_LOC, 0x0f5b7d562d732affa390f6613b1594d2137e3a755383d8f4826f98f80fbdce90) - mstore(Q_NNF_Y_LOC, 0x0bc79e6298c946a03ddaa2f74c8b90c79aa67e1e7cff65a336753ebb4ea1a316) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x1522c664795f2c9b25c71fa3ef6bdaea8192e79d392b8d559ad3fc3549f37dcb) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x216f369e072a95a92b3a648d2a771517e20a79239d916dcf017743988d5c52ac) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x20a2f03beda92b5e5c8d3039b5284f254ad68d471441976ec09b01de28f0dab3) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x1f7f6a37ea211548300e2de2a2c94e521c9510da0c0c8ca5d155cd5a44785cc8) - mstore(SIGMA_1_X_LOC, 0x17ed62439999f75883729612a78b8c055f8508ceebbbfa846983f2a735aaadb8) - mstore(SIGMA_1_Y_LOC, 0x1ab290eb1095e871e0450063ad996994bbdea6915a212896a71370e50db26569) - mstore(SIGMA_2_X_LOC, 0x129988a8cd8fda583de12e22a8c9c2eb05acb66b7486e0bc928f474b4f2af152) - mstore(SIGMA_2_Y_LOC, 0x2256cb1665661a54c09034b069cfe69ef9f7959101e2820ed349528566f0b08e) - mstore(SIGMA_3_X_LOC, 0x2fcfe044a3a8dcff41d3d129372f57eb7ac051588aac7098cf71e9673213c6c5) - mstore(SIGMA_3_Y_LOC, 0x1f97dba4992df9f190abc3018ff6c214f689cc738b4266efddd9ff005980cb1b) - mstore(SIGMA_4_X_LOC, 0x13ec3d7f8604bce053de9742057bcb46486e5b06a0eeef88c5150666467b80b5) - mstore(SIGMA_4_Y_LOC, 0x005026fbf235550b0522ed797702d32134ef8f90672583c3e3304964d660c8e3) + mstore(Q_L_X_LOC, 0x2023d3d5d1af5b74caace17634ad10d5a2f9110b7a9e7afbd341b590e9f6567a) + mstore(Q_L_Y_LOC, 0x1049a8a2d61e0edea6ad48ec2d681a913fc329001df745902b441e9b02fecd96) + mstore(Q_R_X_LOC, 0x0d91632495ea563092d69a001de2d760a4d5d138c307bbf15b63007f0e26b1c5) + mstore(Q_R_Y_LOC, 0x17fc6fafdbd7d15934d07c14095a2455e4e401fd3c633493e6e286ac45cf0b6f) + mstore(Q_O_X_LOC, 0x0ea479def3928e1ba03f8208271ecbef8d119ef240728c27913857e3e42e650e) + mstore(Q_O_Y_LOC, 0x0066eb1f7cf9fb1ec13c0ce882d935a0f31be75c72575a2f71bf27fde6b068cf) + mstore(Q_4_X_LOC, 0x17590fb30a00264bf0724e1580e7fb2fbc83bb597fc5928c038a486b5b8b36e6) + mstore(Q_4_Y_LOC, 0x1fdd610ceb23eff457186a2e9f7ba07925defd36aae61925711cc815eb2ba5f9) + mstore(Q_M_X_LOC, 0x1b68e9373464a084823b481f2d2641aaddec9c8e31778f97345a20669ae9603f) + mstore(Q_M_Y_LOC, 0x10fef725fe23f1284a9ce8082e507617bbba3723c36d4c8c32e3ad9fc8da33c4) + mstore(Q_C_X_LOC, 0x03b6e1bb85a31e315a7276ff142f969d708ea2507fc8e95dd533d6ac2580dce5) + mstore(Q_C_Y_LOC, 0x0c8fc011f029132640a2412751537aa23cc9400276116aa5a87e5cc4c5132739) + mstore(Q_LOOKUP_X_LOC, 0x131342f1f7ba8c1218b01824d28190937da03bf8dea49d4d699c9a268871ea0b) + mstore(Q_LOOKUP_Y_LOC, 0x24bcefad8c9004741c53b103f782698c451cd5b7221b3817b3529cf1188278f3) + mstore(Q_ARITH_X_LOC, 0x18dc13a00c74a97eb8ac3295e0afc18122c5a57c007cd147a32c959a7a5fbdc0) + mstore(Q_ARITH_Y_LOC, 0x0822226b67dc6c988533a9144afb4af978341a1ef7416aaa8e07aa6d52ff961d) + mstore(Q_DELTA_RANGE_X_LOC, 0x1086d7912898b1f033dcc2ecf8f861eb3eba5e010ba0016514970b4827a49f34) + mstore(Q_DELTA_RANGE_Y_LOC, 0x20941e7621815ca23ba36739d9da8e14aefdb5d05eb7f0a44002746092a2ba56) + mstore(Q_ELLIPTIC_X_LOC, 0x187f9b4c2d50789410b6541fd7d450af50bc11e5b0e38190e1448ace2652705c) + mstore(Q_ELLIPTIC_Y_LOC, 0x2f162ab81f3acec50b82f68c8added696468f4d6d3a3e0e6ddf238061263c44f) + mstore(Q_MEMORY_X_LOC, 0x261f8cede85980c2627beb01e34cf23c0099eeab6854ce6caab71e84b0c2effa) + mstore(Q_MEMORY_Y_LOC, 0x1a8026005cf57055bcf6d41d1dc37e3b7ae938ccb437d23ef97b243de092839e) + mstore(Q_NNF_X_LOC, 0x0f07e7531b19f0c729f840c15a3ca7b19cc0c03aa04b104390f4d6fe2d7423ca) + mstore(Q_NNF_Y_LOC, 0x2e095cd83774302381495b672d63dc002a849a1a1795cfd6cadb8cd408c03aff) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2ab95ffaf3a71d607aaaa2cdd139475ef941517ec28e4f7860fb0f7a23b59d25) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x03769330da14aac741d5b2f4a6c2a801375d4a99a573df8dc9c03f5eeb5a8319) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x1ef59b8f0805b148d0070cd5a63c1b928752fc6554496f2ed332ee53678a000d) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x26f03b62fcceb306abb75415e7cbfe42a09643c5bf159b16baf10b2ffb55f95e) + mstore(SIGMA_1_X_LOC, 0x085d7fc41c67dd839ce8f43349f43f9b9f6f99bef7428c8c9aeeffe91533e5e7) + mstore(SIGMA_1_Y_LOC, 0x230d7128adf3ad4a88a0458cc65b320c09ce1d7ce6e1ebd76cc304d2a2392af4) + mstore(SIGMA_2_X_LOC, 0x155749a7a061a0848d51829128b0a5b245beebd61cc55764b4828d1d207213dc) + mstore(SIGMA_2_Y_LOC, 0x0d33462e9dafd7ffdf0087e74cb576f9b0deeedc3350ece30d075fea441f186a) + mstore(SIGMA_3_X_LOC, 0x2d41ad37119a088ae64d9e8e2aa4e345e204893cea5b1b1e8ce222d1cc783a27) + mstore(SIGMA_3_Y_LOC, 0x25ec10c7e41ad026628508e4626251d9a3d28f298dfccaffdee2489da232eccb) + mstore(SIGMA_4_X_LOC, 0x2fd0b133fd54f2df22128c91d7cba66ee6f75360d61f5616489862c96b874407) + mstore(SIGMA_4_Y_LOC, 0x01c94e1b2fe79ebe07bf05d98e763a140cbdb302b438d8227dddcdcd03813da1) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1566,18 +1566,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x08a9c86937283c383414ac81eafbbccfc0c16d59d2ae324259638923b264a6f4) - mstore(ID_1_Y_LOC, 0x06297433dec1118743ee7a30a9b9ca66af0500ee68f2f190b161d9502b73e5a4) - mstore(ID_2_X_LOC, 0x0dac60d649a7818a9ff6bb22cd84faf7f8b62ec49de07ea1f68c0a7337cba569) - mstore(ID_2_Y_LOC, 0x1b0645b8a358316838ea28b12a19cb6ed9cc79fd7a5796e63467c692aa664db7) - mstore(ID_3_X_LOC, 0x20ba0ad5f0161dae4f9a9dd69ccf89215e7d0ec0e1e1513e5f007515f6b578a7) - mstore(ID_3_Y_LOC, 0x10775312ed05d222888a35c12d3249092597bbe13cd340c61aa4bcfaca18f81c) - mstore(ID_4_X_LOC, 0x2be82c270fe3ea37342274c83559afdb71a4a14a5b65bf8f82662e8a64b12674) - mstore(ID_4_Y_LOC, 0x0f18949846b9bcddc7f55ce2323ff79986e5a52470a72f36ea7c7daba25a9566) + mstore(ID_1_X_LOC, 0x2c7b64e5978db18aae24e69d035cacaa7cc511af17c83839d200f51d20183ed4) + mstore(ID_1_Y_LOC, 0x137fcedb2bcf9faa6bf613b2466ccf765fe33962b10c958c66a7b33d221bb8f9) + mstore(ID_2_X_LOC, 0x188fe65ad349112e6b7760900cc385f818b0a4ddbc60d949edc39dbb41844fec) + mstore(ID_2_Y_LOC, 0x211713e8f4da9d696c6877cd3cc4834c5d0edf7a3c53ee9d2a5ec3d70d0e58f5) + mstore(ID_3_X_LOC, 0x203108d2e999f369edb60705b75da9cb84769901116bfa91a26836731449ae99) + mstore(ID_3_Y_LOC, 0x154f3287fcc1338852b894f53fe4f5dd8787fa7bb2f709356ffde7c593e7e4aa) + mstore(ID_4_X_LOC, 0x1939c6413473d160a3aef025bd3e5962bbb9471fe56930ea36c1f6a16e3cf32d) + mstore(ID_4_Y_LOC, 0x26dd7e0f1321be77796681ebcd3864212d0c2dc351ccfd46bf7d173756c406a1) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x2fb4a890716d17c98b05881fca476382a2dcb18f4c85225ed28c7b7de35b9e47) - mstore(LAGRANGE_LAST_Y_LOC, 0x0273f706b7dd02c1df3f5bf65bf3d2ccb3aac9e187f8834158333e39a8035482) + mstore(LAGRANGE_LAST_X_LOC, 0x14d14a59fe0163bb07d57f1b9957ba832c866f00ee16dd4c9e99f8843e44ab70) + mstore(LAGRANGE_LAST_Y_LOC, 0x14ee710219b92f2e2f06cdb5c8585a10e91e7abd6ada8b465aeaa2fe8d78b142) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount12.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount12.sol index 6d2df22af..70a98b97b 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount12.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount12.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x2b5579a92c9a4b48a8c60ed14395bf1d2f965ebd469c096a182fa8fe8285d0bd; +uint256 constant VK_HASH = 0x16828fad756bb212bd1887e291c51cffd5bbe23acbdb96768b6a174d682224f6; uint256 constant CIRCUIT_SIZE = 16777216; uint256 constant LOG_N = 24; -uint256 constant NUMBER_PUBLIC_INPUTS = 24; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 16; +uint256 constant NUMBER_PUBLIC_INPUTS = 25; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 17; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1522,42 +1522,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x18554a60f6925ba026ea4822533afbc797c80f73ac73f23ff80aa54804a37d48) - mstore(Q_L_Y_LOC, 0x151f361d9822abe5ca6f89b8753c8b674532cb1b4c6a517c91f6207fdd2200d0) - mstore(Q_R_X_LOC, 0x22be93af68ffc0c986384a462b9c354c539bc68c49dab94b9025bb8b6a03f717) - mstore(Q_R_Y_LOC, 0x24cb222fd9716a92fe722ddd23981dda399412af5fe53bc50adf17ff4baf7707) - mstore(Q_O_X_LOC, 0x071ce7121259c2fca766b67e72e37d8aec3e8706ddc3ea9efa76a9dae6e65c86) - mstore(Q_O_Y_LOC, 0x0125cd80f58ec98b9c285ed70e8c5a7f036e61442918654970495f502ccb2332) - mstore(Q_4_X_LOC, 0x0f45118ca0e179563895de1473b2e3d3f9e25f461246b6a331c25a3d52a5baa5) - mstore(Q_4_Y_LOC, 0x157e69911824152e54dec6dd1b275dccc5aaed69d43cef22ab13704aae539797) - mstore(Q_M_X_LOC, 0x0e6cefd661031553041f65966f8a57732a4e95825d7e9ac439d127e0096ce897) - mstore(Q_M_Y_LOC, 0x00629d4cf7fce57edb3f4509549d607a80ee5bb9a6d60d5035506739a69cd2bf) - mstore(Q_C_X_LOC, 0x2a355b2e8df144897f70dd6c188870acd26e7eb8585dc470baa3b94a922eab12) - mstore(Q_C_Y_LOC, 0x01753d9b175e6693cd36330590d38536d2f3a5d5ec04496806b3b82f03bd4e98) - mstore(Q_LOOKUP_X_LOC, 0x131342f1f7ba8c1218b01824d28190937da03bf8dea49d4d699c9a268871ea0b) - mstore(Q_LOOKUP_Y_LOC, 0x24bcefad8c9004741c53b103f782698c451cd5b7221b3817b3529cf1188278f3) - mstore(Q_ARITH_X_LOC, 0x2c5a27c11bf0c93c1f00e6c6688e3b1d9d1dea09b92e75857e5ccee255b7f51a) - mstore(Q_ARITH_Y_LOC, 0x0664916a10669888f65838f7d29540adfb72ec653362289e94dc3e53c56741f2) - mstore(Q_DELTA_RANGE_X_LOC, 0x07267628a720e15011a74e55d6d5a596c6ead17cda5eac106660c2b2cb625231) - mstore(Q_DELTA_RANGE_Y_LOC, 0x19f36421a484222e55e7eb265eb22805f8b3bbf4af70daacfec342d4ddd2a913) - mstore(Q_ELLIPTIC_X_LOC, 0x251963a0caa63aa747a290c455d2db27286bd11b717085b14dc5539058da12e4) - mstore(Q_ELLIPTIC_Y_LOC, 0x1db9c6707a48c38f950d6d828f4b919becfaa8a893289c682667d1da857d8dac) - mstore(Q_MEMORY_X_LOC, 0x03572dd5a092f1a5d5c2d02c6bd73c139e6082c9e2b817e9abe7275d4f8708af) - mstore(Q_MEMORY_Y_LOC, 0x29a4d25c37a6037e0779b21cf2b5547ea9516f26b88e0225a818e0eb47ae1961) - mstore(Q_NNF_X_LOC, 0x197d835d0a7d9977ade58e14d39b8106581ab2f323b6f0aab4f12de29f0d6173) - mstore(Q_NNF_Y_LOC, 0x2fc9e389ee351434b01fc40009d052df381c8722b1cfc815cf43e1d3d4524810) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2f21938b250776ece7b854d0fa4791fe668f53c99cca5f2e658be2f8dddea32a) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x19f08b34c709b1ba6b5464e17917ff65a36247a7cc58944b95aa398bf91cb836) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x27ae68285bc1241352fe0b1a5468ef9277a268b861bc593ab35668860cecc40a) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x0c258b77d3b809f6b9cb277cd44f0e6e7d4edfab6a91ff1a75cdaad27d79338f) - mstore(SIGMA_1_X_LOC, 0x1d9ab9b99c930b1fc209670fccb88136aa1b8a0ea67e2da656576819110dcf89) - mstore(SIGMA_1_Y_LOC, 0x1d27603adda597fff847987ddd1c04478c625fdfbcaa0da54f7e86ff2da77ebf) - mstore(SIGMA_2_X_LOC, 0x1132649ab256a5e0700bba21a2f97b4e3a37e810d8119cf0935c4f5986c4d78f) - mstore(SIGMA_2_Y_LOC, 0x10e5814fca439e11062c444e7c7de83fba28c1daab63c649b7bafc5569f6dcce) - mstore(SIGMA_3_X_LOC, 0x0f1137ff9719f3f14c8065f8ecc9c2fadb5107e17de1f60d909329e40f2b3b7e) - mstore(SIGMA_3_Y_LOC, 0x18ad89ed60bb30becf78fa8ca23e87d805f83d452323c5e80cc035a2ea08265f) - mstore(SIGMA_4_X_LOC, 0x0f97ec4e0ca747a28db509810436681754652637c4163ddab9a0892223cf9861) - mstore(SIGMA_4_Y_LOC, 0x1e81f610ed12dfed811eef17326fefb7e42d1101a76137c4ffb52f917392daf7) + mstore(Q_L_X_LOC, 0x2c62e1554665c443725c0c12fff1cea2b59fa1ee205c68510c9643e580888ee1) + mstore(Q_L_Y_LOC, 0x10c0214fe35539d23f3be7e18d5b66f62d2f0d692d4835922eb4e29aba9584fc) + mstore(Q_R_X_LOC, 0x0661de60de9f5f3f932c48df94a536f76c4928d17dd5da911daab6b619236a9e) + mstore(Q_R_Y_LOC, 0x2d6efdaa2e6bb1c89b2e8dbfaae7d2f63ad88b9ae9a9243c828e5abba6e34d36) + mstore(Q_O_X_LOC, 0x07912e80335cdc61e2ac85fe859f341d77dc64f5e6a4cc1ef6adec8db141f00b) + mstore(Q_O_Y_LOC, 0x0d435211833be44868d632d97edaff7d836c9134b4139e4e24994458bb7ef897) + mstore(Q_4_X_LOC, 0x217ea83b8b9298aa32e56da36e7aca31f9e69d2b10ee707a38a52cba631c9ca5) + mstore(Q_4_Y_LOC, 0x19200659515bf76ee44a98a8f77f54e112ca350284a41e2e308459be132afea5) + mstore(Q_M_X_LOC, 0x061d6e6dd1453a65adadbe220e62737fac3d048ea2d9a569f8f5a1f11e3a9db8) + mstore(Q_M_Y_LOC, 0x1f1d57419238b5bb77a48584ac35ef82f0ad5c901dd9086175a678e0a6b798e5) + mstore(Q_C_X_LOC, 0x2a7f344a2384b42a6316fc2e0696de5a5e09d33932778e4300c92d88524c26c2) + mstore(Q_C_Y_LOC, 0x23418afc2933b41e40f8429d03c36e580e5b17b0791f3f15838730767896e204) + mstore(Q_LOOKUP_X_LOC, 0x2e57b44b90da66faa200db697385d8231b6e8223f1073f97628acac5e2e0b28b) + mstore(Q_LOOKUP_Y_LOC, 0x1f9f2a5af3fb5b557da39bd9120c9a4d0a4090a5c806ffff96310036df7fde40) + mstore(Q_ARITH_X_LOC, 0x10d421f0cc9fdb375669a227f3948677b021484b960fbf2883208ab71be55f7c) + mstore(Q_ARITH_Y_LOC, 0x2f2c66980228ad813c58b38ec343f60cd25bfc4c2b965d7d6b80e19017c0b2d2) + mstore(Q_DELTA_RANGE_X_LOC, 0x086c21ab50fd78b1f918750915e2aafb3c4ec80c22aaf2ec506129450229d063) + mstore(Q_DELTA_RANGE_Y_LOC, 0x0ec996a317282f2e8707975e05c61233393377a24dce20d64b015c994c0d585a) + mstore(Q_ELLIPTIC_X_LOC, 0x231c0ebd5bf1eb50a4dfbad193541f666c25fcb150b1eb8a5d07e192cc2487b7) + mstore(Q_ELLIPTIC_Y_LOC, 0x2af39db5bcf16bec45a8f2690dc14eeb6f2c5c73dce6a0d0c49e0d57b8912d2c) + mstore(Q_MEMORY_X_LOC, 0x2ad979db29d5721c40fe48f6ad9d633964725e9757271565b6fa76916ec245d3) + mstore(Q_MEMORY_Y_LOC, 0x2e5c23f0c8a6aa92a40400c4f3c38bdeed052830064b08cc61ca85d673c59420) + mstore(Q_NNF_X_LOC, 0x2fe93fa5df304795876860edae1f5bee42e1345e46657a04ce3be758a41eac2a) + mstore(Q_NNF_Y_LOC, 0x1116ffab83a3699c271de8ae52055fe39c116cf9de6ef96493e160c18dfe982b) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x1723bbebd15305de87f523794ddcc50f7929da5b7b6b2839301345795410bb58) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x26257acb656728053319dcbe7c6855c65a61616db32fdaa9022913e3167f08d5) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x2423dc942669a8211420d2e391a551a3b558b750c2cbfa65635df3d4be85a8ea) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x300c14894dfed736c8c98ca6d8b3a4b609ace7fd0e6875a206f128c3b1cef44c) + mstore(SIGMA_1_X_LOC, 0x043b80f30d4f0ad4eb48d264db43b997b1cf91512fcdd236d1cea0bf959738b8) + mstore(SIGMA_1_Y_LOC, 0x03bd6e843bdba26c720c73e1a93c1fa0b6c8363c99ad52eaa49cc7b7b2ce4fc1) + mstore(SIGMA_2_X_LOC, 0x1d569e6ad201c41b002e647b4b8af828dbf5825b953141964daa585229a7040d) + mstore(SIGMA_2_Y_LOC, 0x030e5520e7096ce7ad3d7682cd9e72ff3ec12386298d3ba6b951f9f5473f16fb) + mstore(SIGMA_3_X_LOC, 0x08a20d3bfa54c51b5ec7d802255c25f3ef000b62738ed99e4b434121cbb85267) + mstore(SIGMA_3_Y_LOC, 0x1e392f33297e88051c4fdb5b2851a736ffdcd4059e47874b81c3288a8bfe9bba) + mstore(SIGMA_4_X_LOC, 0x017655388b74d9344581014358ffa31f67ab0edafc4ae3347e786490dc244e41) + mstore(SIGMA_4_Y_LOC, 0x135071d180ddb9518cfce1cbd89b362e755e3e6220e953dc0d91cc034ae946a4) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1566,18 +1566,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x027d3193b7115988e919d6e57b5d681eae127d887e650f922644c976e95256e3) - mstore(ID_1_Y_LOC, 0x13f7386f899e823609dfa1816c47f26a8ff9ad52bdf8266bcdd3d21ea9c8e250) - mstore(ID_2_X_LOC, 0x28d4aa7c38850dabed7f5e4e0690f07b89e0fb2fd025087627fe51a16bb52f6a) - mstore(ID_2_Y_LOC, 0x197f61a782ee1b55cd304fc99a3b45d63d5e335dcdac646e6c263254bb71357f) - mstore(ID_3_X_LOC, 0x035dff45a241e22098692f765c2b6fe1d5fd3b65e4f9f23c3043398eb9780029) - mstore(ID_3_Y_LOC, 0x22d6f307c99f9ae29af93c307e903c1f51ce10369cb8a26bddaf1c4221bb7b88) - mstore(ID_4_X_LOC, 0x22a039a3b9f0bd2ee073070a4989e95454e3c23707a15b2e88fe55cc81705c80) - mstore(ID_4_Y_LOC, 0x144b6b72c750d6c731d9dce1abacc5b8c109814de07afe901389c7f4e580a678) + mstore(ID_1_X_LOC, 0x02f2bf35a26730e3910bc6c5852f6552387a234fbf4d9913dcf294c78e5a0ca6) + mstore(ID_1_Y_LOC, 0x0f732544ef1fe7ebafd99d86abf720bb174188e71e8284ca263ebc25e8a62570) + mstore(ID_2_X_LOC, 0x1468b56217e5f6a4333ace4a03653b66d205f29d25b30030453bf4d8c4ba4690) + mstore(ID_2_Y_LOC, 0x231a99ce76e580657b844ea8d9aa99c1a91151151e645f916c4dbb70b591f468) + mstore(ID_3_X_LOC, 0x29c686d3672f2b943a51840d8ee36fef3f45ffbab7dc279eb21976d1e568d1c8) + mstore(ID_3_Y_LOC, 0x0fdf62278cf8a2f6a651519298002fbe2e4d66f8aafbfcb8801dc7b8cf1b28c1) + mstore(ID_4_X_LOC, 0x2fa55630610939c4c4a1af2146bdd16b6e42c4add4f84ba5ba71d4bc1e6973b3) + mstore(ID_4_Y_LOC, 0x0006efba6aedebda6517fd2552724b707f0b440a7fdc40f0acb83c8d7ea2085c) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x24890b28fc3b87815e8d837e1270808aa19efbe0022ace3907fe6dd38d94ad30) - mstore(LAGRANGE_LAST_Y_LOC, 0x0abd9470bcae00c011d166b90c5fdf903c5352a47e80d04da451a568449acf4f) + mstore(LAGRANGE_LAST_X_LOC, 0x01eab2370034ca35530c638172d293c2a2bb6a5639c258d02172430299c93d7b) + mstore(LAGRANGE_LAST_Y_LOC, 0x1469a438da46aad0bbce2b822a2f162f2c44fe2413850159b78534a072caaca5) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount13.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount13.sol index 562786f6c..0154d19bb 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount13.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount13.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x1e3076a5fc04a825e4a817320106b943e848c2d04f703091d0e0fee3df900ef5; +uint256 constant VK_HASH = 0x0e165d27cf39d8b4e569e218dedbf60abc5badcfd936bdc54030669c382c802c; uint256 constant CIRCUIT_SIZE = 16777216; uint256 constant LOG_N = 24; -uint256 constant NUMBER_PUBLIC_INPUTS = 25; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 17; +uint256 constant NUMBER_PUBLIC_INPUTS = 26; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 18; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1522,42 +1522,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x0f228bcf7d785a41a521533d1473e787bf92bbf33c697e3e2f6df1c0854a0967) - mstore(Q_L_Y_LOC, 0x2e69a12e6945b7e98a210b82671db4788222282c578058937e45926b5db0ec16) - mstore(Q_R_X_LOC, 0x0c3c68e984f56eafaf49c2d8ff510522312c457e00715badcf9265ea15baf57c) - mstore(Q_R_Y_LOC, 0x124b1e52c3da03fbb5f3ad6d26e62a76b78e69048b5dcd1f606ac24eb8feb8b2) - mstore(Q_O_X_LOC, 0x189ca6a25ed4899855213f8121c5355065c804665a11cff6c6da725a4dab14fd) - mstore(Q_O_Y_LOC, 0x0b66d66f96e77a4fd5b687657ecd6c417c97e6c2351f946510ed100d43b4e8f2) - mstore(Q_4_X_LOC, 0x228bf7056a89bf5f988e0512f2f575c780c90fad676281ba253e9ec25c3ef5d3) - mstore(Q_4_Y_LOC, 0x2c229f7528c53ed507db69e8a392d6256900c7091e4540cb37dbb7a10981cfe4) - mstore(Q_M_X_LOC, 0x1f1741f3f19b202c4a285c1cdfa685173680844af1fb370b6b6ae3a432102028) - mstore(Q_M_Y_LOC, 0x180b7552a8718099948692ebc8ea288cc9cd3143a7f52ad06f03fd948bc9e5cf) - mstore(Q_C_X_LOC, 0x0c18267c5e0c0affd2040d656fcb5cc15f134a2bce0005d90de88467dc60eb89) - mstore(Q_C_Y_LOC, 0x13c4f6e2d6b47dca369f6c45c6a7122b7ea57314ba899925f37f306d6b275d15) - mstore(Q_LOOKUP_X_LOC, 0x2e57b44b90da66faa200db697385d8231b6e8223f1073f97628acac5e2e0b28b) - mstore(Q_LOOKUP_Y_LOC, 0x1f9f2a5af3fb5b557da39bd9120c9a4d0a4090a5c806ffff96310036df7fde40) - mstore(Q_ARITH_X_LOC, 0x2c6abae5eef2715901be7531b1aac48573b414478bc9189dacbbaaf88fc15b6c) - mstore(Q_ARITH_Y_LOC, 0x2413048e0fa58b712f252b32aa1ebe46a5ec5e32540e30a4d341f8336360e73d) - mstore(Q_DELTA_RANGE_X_LOC, 0x20b6a6e497e8541c06110ed3740c1c61862f753fa1ffb7872a8cf21152233b52) - mstore(Q_DELTA_RANGE_Y_LOC, 0x12b57f63648c71bcb98bade73f02392f8bfebb3466ee30b413ebb29a1394e730) - mstore(Q_ELLIPTIC_X_LOC, 0x247cd08fdc1e87fb770d3994bca6b5a63e23cbf91ef8b9bbfcd59f914d0b4fb4) - mstore(Q_ELLIPTIC_Y_LOC, 0x11c6ce69535b4684d6026f8df2bb36d6e5a11a4c4673035d9a5fd6bb3e6b54a6) - mstore(Q_MEMORY_X_LOC, 0x15cf27880c9a9782469dc03c3c6f9f252d16cf4da3ab57bcf2ba2b66ac6e6dc1) - mstore(Q_MEMORY_Y_LOC, 0x22f37e7cd0b518e38863f94c8e0db3614fa0c1f9e1a0e4a355e00d50866760d9) - mstore(Q_NNF_X_LOC, 0x1a3a4733fa5391d225978f5a537f27a253599a03e6a47c2ccaad4e391f4363e5) - mstore(Q_NNF_Y_LOC, 0x1ffab23023daa82dfa28173d0fcdb71b5ebce54ee77be49e09214c23d233a069) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2c066ba371923b66b46c00a7e52b346eac11dda79b597bc34ecbee298c92aa6d) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x1476590b4e89f11cf9032f15ef3eb12e2e524233950a8cc10f506acd2848e3d9) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x019fb7e7ee53245fea5315827ec36283e4022068a345f037bc2fefbe2cdef865) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x09ddfafd53d5d95988b29f6d4c593535860effe08fbcb6d09a05ddbbe1239da9) - mstore(SIGMA_1_X_LOC, 0x2486259756de70a50573c64031228859c71545c7e11c1602ee49a32cea936f5f) - mstore(SIGMA_1_Y_LOC, 0x2d82e10ccd3788e5f4cfaa712c8e19dce767e328bd6f66d8fa93be6cedbc5186) - mstore(SIGMA_2_X_LOC, 0x0e82fbbe2bbb451dd4a71d333fe5466ded470ee8e78bb4027b607743e13e6d63) - mstore(SIGMA_2_Y_LOC, 0x0f7e19a259c82af1848c015e3800be6f54ed7383556fc752a9b96c8925526c0f) - mstore(SIGMA_3_X_LOC, 0x00bbe8509235ea35bb055fb4c9f8089e80ec19435a3fb80cd079924f452f2eca) - mstore(SIGMA_3_Y_LOC, 0x217001cd402273b9ca2e9e0f9645c208abd8bed323d9766cfe6cec22b7a697bd) - mstore(SIGMA_4_X_LOC, 0x2d9c320de561714197efd744bb476f394f4832ed85e0e5c22ee00e93798c3549) - mstore(SIGMA_4_Y_LOC, 0x12938406689d573acf4123a0909b4cf5b63c6a76742ac8876c1e3ee8b9cf444d) + mstore(Q_L_X_LOC, 0x1b923acb9e0ece66423018ccf5c67e0e826be8132b5f69bd3bb032a004af261b) + mstore(Q_L_Y_LOC, 0x0abfafc5ee97fad965f777e5fd9d5d6a00eb2baf6367a266b5be1c8d3be2764d) + mstore(Q_R_X_LOC, 0x0cc2982e3c57577d331ab355932966b0077881cb2b334b305b988e83eb3eed7a) + mstore(Q_R_Y_LOC, 0x1e8e70a58ad270fc4134811fdf2639038ab5110b872f0218f8211c9b73a7dbd7) + mstore(Q_O_X_LOC, 0x0ae9077c3878cb427fbcc4e83844134ae2c7b7dd1ec0d73faa8bb3b7e7824462) + mstore(Q_O_Y_LOC, 0x2ce08b5eab7c36c00056c1f0a048b41afa95e94ea503bf3d00ba42c60eac6c06) + mstore(Q_4_X_LOC, 0x2aa5dbb30fbee1250d3ed9ef2cb79230fed722a07acc3f0c32833112cf1d17fb) + mstore(Q_4_Y_LOC, 0x0024ea62f02fa8a540f3e8e91ee8b2cd7b061a43bbcbc6f29b2fedf2eee9194e) + mstore(Q_M_X_LOC, 0x1fa766bb242105b878bba7661d8b25cdc3738f281f120f47de6ca1668074aeb1) + mstore(Q_M_Y_LOC, 0x185bccada12a045a1d80207a83979d46b101da272819d9a9095431f3db5e1766) + mstore(Q_C_X_LOC, 0x033f966fffc642cf0df83220bad2a149b279010a0d7f2fb3e456066334a91db2) + mstore(Q_C_Y_LOC, 0x03f72f3ddda033627c25587c49540ae9fa56d944f55a0af5fb71f6eb0bcb55eb) + mstore(Q_LOOKUP_X_LOC, 0x17edaa4dcaebda0dac1751b3267758e49794ddfd1802c05ef2c22853aacd5e42) + mstore(Q_LOOKUP_Y_LOC, 0x1b0b601e66648d65f79d91e22f847dbaad16c397c1cc2a87d43fc1fd23c48fc0) + mstore(Q_ARITH_X_LOC, 0x17030193b41e2f988f0e21c942ba93beae6e771c6a63369e00f8ea028f3534b5) + mstore(Q_ARITH_Y_LOC, 0x24107cca0cad4bd176b6b881e91df28ebf067f5e6127eb681a97042d99f42ac6) + mstore(Q_DELTA_RANGE_X_LOC, 0x261926903306f1f8cf40ec56d62d801036cf2bb38e0636f986b3de4daab5497a) + mstore(Q_DELTA_RANGE_Y_LOC, 0x0804ea987607a928be24bdc4879da4cef4d7e68aafa76fdbfaa9e15dd71950fe) + mstore(Q_ELLIPTIC_X_LOC, 0x0a00b421ae569e9baaa3d64c55121d34ad5158686d6ccd4e2204261c4b6ea998) + mstore(Q_ELLIPTIC_Y_LOC, 0x0dbe3243bfe4a0f88e6c818eb81591b2ac9400cb94b8aedcb3301fbb7872ea9d) + mstore(Q_MEMORY_X_LOC, 0x29a1162aa5534cb2ed3c5ccd402e1cfe4f543121b09e9ea228d37fbeb701ec03) + mstore(Q_MEMORY_Y_LOC, 0x214594e8b949ff6e9834744505ef90cd46a3ffc1d004000d403c140e6d2e7009) + mstore(Q_NNF_X_LOC, 0x0fc39648dfcf7d0af5c071296442c5bd5294416032fff89e1dc87ee0f1678f4d) + mstore(Q_NNF_Y_LOC, 0x0c44ae611488380f660cacea6accbaefeaf186278909d351a0f21a7ea053cfba) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x0a82ff21278704f4abf794948fb8f05cb505292a6207069179b35db65ee40fb4) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x2f96a642a84852f8137da412cd75292ffc080c7d6ef2473a19b44447e0bd9210) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x1b05009216d64cd514ef154ca7c7e5bfeca137b8fa510ed2ca9a88634a1752f7) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x0a8c320ef113a9f01dbd85ac5001643b403b004c888fb96d3968748a16a8215f) + mstore(SIGMA_1_X_LOC, 0x1e439b0fc758ff773c00ed5b1961fa180049b8b2a4ff05a105e21a97347137ce) + mstore(SIGMA_1_Y_LOC, 0x082bebf3acc292e57cd3ecb3b10bcf81585ce640a2767f49a74ee0cbcb9e1b64) + mstore(SIGMA_2_X_LOC, 0x04ada65678da375a57d9e30fd20b7bdab7ce3beef75ba8e76c45a89e12c053d1) + mstore(SIGMA_2_Y_LOC, 0x090fd6cd97d3cce37461ad11f2fa908e63d0a742d660ea826141fd5cd29e9567) + mstore(SIGMA_3_X_LOC, 0x2974eb6adb5da77920b75588db50990dd9df6e3e58132472bb51cfa819d93959) + mstore(SIGMA_3_Y_LOC, 0x259e54be75d5838aa30f49cdd52c2705233bef92caa686832a432090e37fe83d) + mstore(SIGMA_4_X_LOC, 0x20d254ee88ebbd2bfd397041f119408309722c2d153246ae401e69e181f9af3a) + mstore(SIGMA_4_Y_LOC, 0x06c51eaaf2026671d51f3cd03f8c90d1dc3d0ed9a9715aab69dc0e77681f8fb6) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1566,18 +1566,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x2fc57618a5df08132f56096dbec43a0f0b68c162eda763ea803185af22126249) - mstore(ID_1_Y_LOC, 0x110d85cbe00eb16fe7f71b914e67018cca36946c6ac5b4b433039e6344b7f71b) - mstore(ID_2_X_LOC, 0x0da0f2b4de4337f22d17a30d510ec16a4abaf0e4d8a40035faed4663d3f62d8b) - mstore(ID_2_Y_LOC, 0x1d9198f0ee0a50d3d9086139483403d431a71b3511e3544782e6defa40642956) - mstore(ID_3_X_LOC, 0x05636cee94b56d4b552b3e26a2ae8143fd0e38255991077528853c21db332ffc) - mstore(ID_3_Y_LOC, 0x13f2096f33d0b69feb8b632c40bc82621ed381ab20e1915e52e13adbf6f48cac) - mstore(ID_4_X_LOC, 0x108401b628fec755a5e97fd9e0e3aa4a566a460463b1c98d636c99a8fc050bd9) - mstore(ID_4_Y_LOC, 0x1ee62527f6e95e3d88a18f69b9a302020f780abd4ff4cc4ee4c909b7cdea5657) + mstore(ID_1_X_LOC, 0x2565ef292b4a7fbcea328b0e1b16e87b1de892a20bb8ef234a0903ecbabfe388) + mstore(ID_1_Y_LOC, 0x1be2b0a250436ca845905c566abbaeb9b22eb67a6111620083e2dc46f132afec) + mstore(ID_2_X_LOC, 0x145176f3a35ec39046b6c1338ee6bb8ba5bb56deb9e27e15cb68dff06f3bf668) + mstore(ID_2_Y_LOC, 0x29ec7801936d1ccbb53ec6cffa513f9befcc800c66a555412c3e87fd9be875e5) + mstore(ID_3_X_LOC, 0x0fca1b1780d177462d2749e755a26b00a5ce7fe57ec1f4de3fc20189506a2c8a) + mstore(ID_3_Y_LOC, 0x2449b7f76a6bac27b1519e44f5791e791c61206e2ce0454b9f47f653deaebda6) + mstore(ID_4_X_LOC, 0x0af38391d0dcbea4e15623b000a4c2bb1765b821246facc0fc458c9d29a773bc) + mstore(ID_4_Y_LOC, 0x21c1e3749ece2f91bce69bcd238f04a68010196cc7f66ad56246aea2ab8609c5) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x0b98876d0aaaf9ec9ae07c22661ed3157b133c96b47fb0a9903bb5e5f19bd11b) - mstore(LAGRANGE_LAST_Y_LOC, 0x014fcfb946fdc09670f72e0aa84639f000460cf66cd3cb5cd66338623cc1ca28) + mstore(LAGRANGE_LAST_X_LOC, 0x1bcfb2ea151622e098c1b67284214e04974a6b72db53bec536d3f8bd19be2a24) + mstore(LAGRANGE_LAST_Y_LOC, 0x26c1c12ca5dc56dedc8227ddc89f3e3690279bbdc828dad9b0a80ad44ad35fa3) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount4.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount4.sol index cce1d4d53..9fd2a01c3 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount4.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount4.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x0a3390816e5af7359b589b74a49a0210ca7f8024c497af8eca6081e4cbc1505c; +uint256 constant VK_HASH = 0x072583d991a1ef614353daed3b3e3fe5f94e5274966437a9fc9d77da19a306ca; uint256 constant CIRCUIT_SIZE = 4194304; uint256 constant LOG_N = 22; -uint256 constant NUMBER_PUBLIC_INPUTS = 16; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 8; +uint256 constant NUMBER_PUBLIC_INPUTS = 17; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 9; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1446,42 +1446,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x113d8c35f897413e6437cb3a06fcd4ae4085f2c7f075969853cf0b18ec684710) - mstore(Q_L_Y_LOC, 0x1dab7439ec6f475ee5e2805f456fc9375fa24145e8f5d70f5c2410d0fbbb84eb) - mstore(Q_R_X_LOC, 0x134af7b198e989eb94c197312cfd3bad00da2788c1160b871d72d2edbeb574ea) - mstore(Q_R_Y_LOC, 0x1f079c56ff71d1d48c208fda295c3401e79533f06e9a2abc6fd72e753708b7f5) - mstore(Q_O_X_LOC, 0x2469f713a686888c9345f8640ce75bc7a702f290a5702411442f051ed9cd8619) - mstore(Q_O_Y_LOC, 0x1dbd24c25d4f853d4d3ca1b97f1725fcb8f8cbf73b7a9973e2377331ca4fce2c) - mstore(Q_4_X_LOC, 0x01a155a36d0afb75d6d790ed7083fc563aa9f415a102e3d451903ea5004491ca) - mstore(Q_4_Y_LOC, 0x0856e686c45c516476cd8dc87809e5eeef19b06cf597feeebfd72a3d67bd9cf4) - mstore(Q_M_X_LOC, 0x1ec0995b900dd861f14925a481db252a83b03de2d20be3fb74195d53ee1bb735) - mstore(Q_M_Y_LOC, 0x08363d4ef950be25637e24cdb699bb177f6679151a741e2361b4e65c31fc3989) - mstore(Q_C_X_LOC, 0x1922db06ead224f7dc80a537ce06c9d17fabe13dd69a341e3c0867c360d91ab3) - mstore(Q_C_Y_LOC, 0x111e69277013f181b5b93b2443eb7d964403c356eb43cdc5b21c46ba6df264cc) - mstore(Q_LOOKUP_X_LOC, 0x17c6d9d50e48678a2ac344538de4c7ece661d9ddf8d6ce71e63ee377b120f70f) - mstore(Q_LOOKUP_Y_LOC, 0x19c51b736e4c5a7d8380246160d19aad54bcdd8f21bebc775e9dfb36b9a73d45) - mstore(Q_ARITH_X_LOC, 0x2ffc692a221f078a05092ed34a22bccc0c8d2216fa37717fa4ed9a88474f6cbb) - mstore(Q_ARITH_Y_LOC, 0x18f7fdf1a2142d8be767799fab7d09741de6d986f06d1752e261268ade2edb3c) - mstore(Q_DELTA_RANGE_X_LOC, 0x1942366037372be25077525c2e5fe21c2624a1c70ed04f7ea8b24aa9befad5e2) - mstore(Q_DELTA_RANGE_Y_LOC, 0x1ed7e3d9d7368129f77b171ef6b4a8076d86177ee4181b15432fddf59271579b) - mstore(Q_ELLIPTIC_X_LOC, 0x26889275ff7a581e0c70ae511666afd692c309c3a39f690da17dcbf21c82fd92) - mstore(Q_ELLIPTIC_Y_LOC, 0x175652c5fd3fbb4fd0593beb219d60ece0eaef6e663e612b4f7687671792a204) - mstore(Q_MEMORY_X_LOC, 0x1ced609efe56f290168ae2072e4cba9b04998b2de2a066c2d084769fcd2ca363) - mstore(Q_MEMORY_Y_LOC, 0x1305773b6712aadde60879902976da9d62319bdd7e2568478b298e52a06278db) - mstore(Q_NNF_X_LOC, 0x1ba26cb371914282db37c9f8989d93bf4bf88fb652fc4d981443199f4c572077) - mstore(Q_NNF_Y_LOC, 0x2553171e62a254be13f270bfb9c6bee4c1d8bce984f039c2fc3e552ef7d896ef) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2980f8154158c259474f5e484755566878d86cbc8eb15c3102686097ae911aed) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x2468bc80322aa8643bf26e0922b578f8106fc5479d7967358296986d50866295) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x2a014907306b14f4ff0b361e71f08bdca73a8c08c74fd8aea97a5faee1c62a74) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x1f300089a638166e5224582c786f520a5dda87ba86286c8ecd81720158dedd0d) - mstore(SIGMA_1_X_LOC, 0x0a3d9424fef354b879f0205de85f9a571987c2344872e5a59dbfe3e379b67036) - mstore(SIGMA_1_Y_LOC, 0x0a0769d6185410402b16f8d58031948db45b9b012cd0c1e334ac900b31be309f) - mstore(SIGMA_2_X_LOC, 0x2b57db190c8eedc6a64d9c3861f447b11cc3f52f33f0a1ffa6732e311600cdf4) - mstore(SIGMA_2_Y_LOC, 0x1cc54a22c6f9d7608b68ec8bb76e711b249ee6f3dddb9af8075da8e418cab617) - mstore(SIGMA_3_X_LOC, 0x2e63e4c02ad36f73c5330f2bc0d12af3d9133fb8d03b8b0182c4b521e94d50f6) - mstore(SIGMA_3_Y_LOC, 0x25331b3ae4937069b36898512937dbd5be431e6a3cc3fde600d007a9999ffbc6) - mstore(SIGMA_4_X_LOC, 0x08ad811d9a36c2e37042657feff195fe764f6a4dd3505499764c50b79372569e) - mstore(SIGMA_4_Y_LOC, 0x12c6bf7cddef55a428ff07614c943753311ccee10dd5f6fe90d2bd1228e50931) + mstore(Q_L_X_LOC, 0x1f05ed04246bf51b03a7f7d76837b5f8901e51201f9087e53ce919baf3a93c27) + mstore(Q_L_Y_LOC, 0x01fdda9bb91692893cb8aa6ee1c55b4a223367379772aa4ae2f550e582e4b098) + mstore(Q_R_X_LOC, 0x2500ae527c8182dd4b3dda866730d537fff0f093a97ce06db8479114da08527e) + mstore(Q_R_Y_LOC, 0x01c7d95100fbca2ba52603c66d468b11122c4340896ec961649267084be3b224) + mstore(Q_O_X_LOC, 0x1809faf4d4201bfeded3917024ca2645aa026c9b1562007cdd2fc9a364b9178c) + mstore(Q_O_Y_LOC, 0x2776170d0441c4581cd2b2c2dee9a1c402d1c5aa3463d9b36cadac6b66778280) + mstore(Q_4_X_LOC, 0x0189660b013a472bdb9b27a37f5f37b9f0bac4fdf3274676e408644b2094c716) + mstore(Q_4_Y_LOC, 0x20bc91bdc7111b24227606b4ae78862dac999a9c9774dc04b29ea08f5469a9fa) + mstore(Q_M_X_LOC, 0x0268c68d2df34827907a8d34142881451dcf299085c72f468bc14332e206d51e) + mstore(Q_M_Y_LOC, 0x1080c59e13722f6c000c8e6db37c5f26119b7c8017eaf02fcc0e3a02b8700efc) + mstore(Q_C_X_LOC, 0x022a0dbe385685152b2bd4974683d3b6ed8690147704736937402d6851bec5fd) + mstore(Q_C_Y_LOC, 0x06b2502fae2967e168055494abee45d98c03b40e46de43730b5ee618fb6bbd65) + mstore(Q_LOOKUP_X_LOC, 0x0c4032c3079594eb75a8449d3d5ce8bc3661650d53f9b24d923d8f404cb0bbc9) + mstore(Q_LOOKUP_Y_LOC, 0x1084d709650356d40f0158fd6da81f54eb5fe796a0ca89441369b7c24301f851) + mstore(Q_ARITH_X_LOC, 0x29c0469740390f6eb8fd230b06ce61bd74c1634573fce50d74747cd8388d626d) + mstore(Q_ARITH_Y_LOC, 0x1e36cca388a911823f78313b27b1aca8fb63400df363884e79c7508553fbce7c) + mstore(Q_DELTA_RANGE_X_LOC, 0x1b188ffc76819853068a8b10ac25dc71e1d1016a7adf8a932c8b87ddb7001a6d) + mstore(Q_DELTA_RANGE_Y_LOC, 0x28d401f83ea01a45ac07a313346ebf55fa1568f74140d8813dd1ec0e6eca777b) + mstore(Q_ELLIPTIC_X_LOC, 0x1a4846dd62fcc699e3517c5e09fc19403cb694e96d7cbc6eb8f9b73275df7bf5) + mstore(Q_ELLIPTIC_Y_LOC, 0x2657f7a5eb7500bf1a064ef8dc1b84f5bc98a9a26004d5af9707d8cf6a1ad389) + mstore(Q_MEMORY_X_LOC, 0x1308ce0bd2d68d3fe7d673265d1b1ae046a31a9fdff47ab3ff2249453eae08ee) + mstore(Q_MEMORY_Y_LOC, 0x281b08957f6cce2adeb6e1f51017e62b54a81b85435b5e19c600dc1f4587573b) + mstore(Q_NNF_X_LOC, 0x09433580e41cb0ace56f705f3736f0ac6c0eac8a57756187e84d9ff9d696e39b) + mstore(Q_NNF_Y_LOC, 0x01f045618b53e9d3adc6df1d1224d94e24dc2e3c360b483e6df0223d3f2ff716) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x19c038a82b906c22dce485b93958eea292bdfecc9c015b28aef72bf1be168a40) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x003b994237116293d43a61fe8ba3fec1f509f3c9614e5ecda75aba5ffc329b9f) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x05c907c747dcb5e8f264c63147b5ab9af6acf8da8352e53801e15bb29804caf1) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x147be311feeb327d6337f541148127499c951836755a9f76cc4575ea0ba552dc) + mstore(SIGMA_1_X_LOC, 0x2538c8fc8d71e4df8adc75446a084b1f1e6d27ee27b918daee98dd112f9dd0b8) + mstore(SIGMA_1_Y_LOC, 0x13f65b07e99b1a20650f349e50abf016a7b2e2c3f615ac7968d1d724e29c8774) + mstore(SIGMA_2_X_LOC, 0x219e3969f0d0d72ec8b3f67efe16cd191bb74d7870b5e8d5500d0c1e3084353f) + mstore(SIGMA_2_Y_LOC, 0x2ca244fa5c02b429fd1d6baf1c5223d94b42fad533c061626ba7b3655878f1f9) + mstore(SIGMA_3_X_LOC, 0x09e125de15b2ac92fc77a4f56ef6a226d980c1bd57ec714c5b32c82910fd666b) + mstore(SIGMA_3_Y_LOC, 0x2104dff5899ea0732d7c791f5b83f3be0c6e49bd40423d516bc92da79e5c522a) + mstore(SIGMA_4_X_LOC, 0x2d3b47c87ebb8bddc3d88517127dbedf0b8a36a2553fed4059d6f907b4c8e622) + mstore(SIGMA_4_Y_LOC, 0x000d7e60b8636ba3012631ec49929c280c8f79a530faa7a020b607d4eb5894e9) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1490,18 +1490,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x020cfc183d1dd4dd2636233aa7b1fd28c10a27f108fb932dffdeef1c77e1e95f) - mstore(ID_1_Y_LOC, 0x2c4cbe7a422556031e4e52eceff9e68734ed65859b0bffff975054174070afb7) - mstore(ID_2_X_LOC, 0x24dc5536af83bf06bf01c5ea5e1149a94940bfbfca2212a14fd5611aab40a6ab) - mstore(ID_2_Y_LOC, 0x0eb0c24cea27db3d53d60f38dd898da26aee10a913340d0201a887d594b0311d) - mstore(ID_3_X_LOC, 0x03c2864654ebd896bb6ee16a8519c2997d860c64e8e65a2f0c4412906c89aa05) - mstore(ID_3_Y_LOC, 0x2553c2910c7382e50de3f9e080b57ae2b344137d52af66a8663dfef354b16b45) - mstore(ID_4_X_LOC, 0x2aec763f46c6c684e4a29d425bf31c3debec1f8a53e3f1732f0695816324ab38) - mstore(ID_4_Y_LOC, 0x1ac02ace77266b173db759c5c34f8273c96e037b90b13d8a6e6ef212293da9b7) + mstore(ID_1_X_LOC, 0x3024d1fbda567c13d0b2b6028e28bf882ee611f467eeaf5ef1a6490a6464b57c) + mstore(ID_1_Y_LOC, 0x2cce8441a3b28d9df4556d49faca27cbe38915b0d3ed165ce594b2cf4468be64) + mstore(ID_2_X_LOC, 0x19420b17987511908082b041b179189fb3d979a6a7b43cfe405e67f3224a6f64) + mstore(ID_2_Y_LOC, 0x08da5ff4b25969cd3f987898bed850ad54eb1a21d0aa8a0909cd3ed388a19b13) + mstore(ID_3_X_LOC, 0x1cbbacdecfee72fdb59b575e1ec18e071fd3e32ae5013a62cee32ee4a571f262) + mstore(ID_3_Y_LOC, 0x2655877bd3d3b68b5220ed5e6766fd8db96719cc111a825530aabacf65b524d6) + mstore(ID_4_X_LOC, 0x2d5ed79529d69e75564112ada11736f18f1ecda6087d560232dcc42660bd3a0b) + mstore(ID_4_Y_LOC, 0x0e800fe55bbce0d7bc883f4230402589c013f04436e21b9b45bcb0364cb399aa) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x204c27a05eac9e995203c98c2378978a4f82f0848a22ac3bbf91aa35a5ca9fd2) - mstore(LAGRANGE_LAST_Y_LOC, 0x06b9be9d01e3339ee8a7ace765de250130b74be97c78d6f8a4f291d0d95f98b5) + mstore(LAGRANGE_LAST_X_LOC, 0x16264c25311e7b014f67f3eee0435c2387ab75cd7f7e00fbb90afcf9431bc3da) + mstore(LAGRANGE_LAST_Y_LOC, 0x24f2b278047391bad73bf2def762f7b3d0129b35e34fffb781ffeeb0feb9fdf1) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount5.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount5.sol index fd8240926..09a1279b4 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount5.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount5.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x287292eb9eace872ef64278a828b54d51b79e1ddd159e6582bf8826d1cc860ba; +uint256 constant VK_HASH = 0x04ff20501e4bdd02871cc1429f70d496b4281bac97aece4544ffaedf156c7eef; uint256 constant CIRCUIT_SIZE = 4194304; uint256 constant LOG_N = 22; -uint256 constant NUMBER_PUBLIC_INPUTS = 17; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 9; +uint256 constant NUMBER_PUBLIC_INPUTS = 18; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 10; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1446,42 +1446,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x27a9944e45fcbf8365674ddca98a7fa915c2a9f62ca306b34cbeb9d8e21f0df9) - mstore(Q_L_Y_LOC, 0x11d9211b5c6d509bc06c895cbc0d4dc82bffa92437106d4a73531b6d8fe7973d) - mstore(Q_R_X_LOC, 0x1eb5878628602f2c8c1d16a4bf12dd126c2988f151b1dbc4ee8137471d2c4266) - mstore(Q_R_Y_LOC, 0x0aad8762cec545109f6dfbf9bfafd5876710e94a9495519cc358d66d279df01f) - mstore(Q_O_X_LOC, 0x0cf76c7cabd5b963f6dda54a82a1915d9e8626054166b0672a0842a955ba5fc6) - mstore(Q_O_Y_LOC, 0x2fba7f29650e7935eb28381583cabcfc347380e386c5ccdd54d31d1139038ce7) - mstore(Q_4_X_LOC, 0x25a124cbaff71353ae1e7c0bd1ace8259efb670d1ce54d3b48dbc31cfa4202fd) - mstore(Q_4_Y_LOC, 0x1cddefaac4e655345fa55b00b961ee7e1fe3689fcb7826fcc8ab71d0495c95e3) - mstore(Q_M_X_LOC, 0x07c51bb2f02beac1828225f07ccfb1240a62ccba5143fbd1dd6024cb4c83a2a6) - mstore(Q_M_Y_LOC, 0x0a9581d992dd2be12e6bd69915f298a47cab96d1b31ef35277b2ccc6351487cd) - mstore(Q_C_X_LOC, 0x2b2833434b688284071a6cf1dc246780f360b8354b6b3d54f65e7bcb73feb387) - mstore(Q_C_Y_LOC, 0x20d32bde6837007e886dea269caa738f4bff72e2c539f625399297ea90e930e7) - mstore(Q_LOOKUP_X_LOC, 0x0c4032c3079594eb75a8449d3d5ce8bc3661650d53f9b24d923d8f404cb0bbc9) - mstore(Q_LOOKUP_Y_LOC, 0x1084d709650356d40f0158fd6da81f54eb5fe796a0ca89441369b7c24301f851) - mstore(Q_ARITH_X_LOC, 0x030759e419ce9601d729a9436a4dddf37dccfd00262099dcaf4201710ee538aa) - mstore(Q_ARITH_Y_LOC, 0x133c6f7d772485051ee148e5fa59bd70f6186e3f43efe6cb8f1940659e74f608) - mstore(Q_DELTA_RANGE_X_LOC, 0x2350a06a25f1e6aca414cf487d95382ca2dc7a3320a5d8a821b97d0b039cf55a) - mstore(Q_DELTA_RANGE_Y_LOC, 0x2485c67d59afcf3734921a0c59e20a396a6d82e44ae47a2272701d422c2ea00c) - mstore(Q_ELLIPTIC_X_LOC, 0x07bec9fd55e350f000ef19028db61eedcba3ce0437744993fbd25a6f48977d67) - mstore(Q_ELLIPTIC_Y_LOC, 0x2a5273e66aaf46e12aa9dfc444021e0a921e6c06765d520b649f236b8f7ba4ba) - mstore(Q_MEMORY_X_LOC, 0x22705e3ea524044713cbe4893a7250e9bb1282e48bd05e2c92f1cd2858541ba8) - mstore(Q_MEMORY_Y_LOC, 0x24adc8007a4c03a940f5e10f8c1f2b8465651159201f20184a60255ac42f47aa) - mstore(Q_NNF_X_LOC, 0x032a142dc0ba93109f29dbcfe4c2c0a2bd5fa6871a04fe2a3743a3e070e53208) - mstore(Q_NNF_Y_LOC, 0x2f2a208a28ca65849628d3b6a4a205882aea7189dfc43563b8c1836fc6a680f5) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x24d0bbe0764636849dbd5d3b4f629e68f97c137bc152dacb0d35a49235a5a45c) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x1539ada24d6a3563167cbf523aba84e46c018f9f963a9f73c4139b15b3e90cf1) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x12a088c7cb7f3b0af868226e15a8b6b530a0261e133f51b48cf365e5ccaf9fa7) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x1d73c9415514be64979cd6c65d6f3b0b3de8ef0606004a7b140354f9e0ae683d) - mstore(SIGMA_1_X_LOC, 0x0a1d3bdc21829c3d6fcf51182d8de069a6e59c642cc6ad689dd6a5887dcef758) - mstore(SIGMA_1_Y_LOC, 0x034e0bb2f259d72e0b2b0993bd54e2422c3613294863bf5d76d3e996d1092d1a) - mstore(SIGMA_2_X_LOC, 0x1122dfcc744599fc9696cacaa53020454ea670a57d02b35c3fcaf520917fb23d) - mstore(SIGMA_2_Y_LOC, 0x2d752db49c45fc964eb6faf3b93082a660b521d2b3230dc6e2d82b07eed0158d) - mstore(SIGMA_3_X_LOC, 0x2e763daf67943f21cfd7eddd5de075ab9b11a1c8a3d005418ecab1d9fa2ea7f0) - mstore(SIGMA_3_Y_LOC, 0x0b0af736ceb67f1c5f20948bfdc59f76ec1ac0f54cbeead956452b5fbe0c5141) - mstore(SIGMA_4_X_LOC, 0x0c55da02924d9af790f08d15e057b1bca1d72f7984445086bde5f854b3b316bf) - mstore(SIGMA_4_Y_LOC, 0x19ae099e596b59d246a14ebeb9f8a6dfd3f3a1251c32d50cc10e5f4bdaafbd26) + mstore(Q_L_X_LOC, 0x2014150bd6f31aa1e6a0def106c9da537731b31256ce292eb91fe2e1d7a65a09) + mstore(Q_L_Y_LOC, 0x16c689a5a4c4a4d8fd0abb1f2947682d1d42c411581aeef113c02a6b95ad9d20) + mstore(Q_R_X_LOC, 0x225b3a76c925c5a1bc02f73ea63301ac700379d2bfd7c14928435b13bc29e152) + mstore(Q_R_Y_LOC, 0x16e5b747814f295959a97630ccb7666fb66b77b82cc9fdb4b656f41ac3eda6a6) + mstore(Q_O_X_LOC, 0x02676ac46baa75bbff0272699180ba31369a814e6e3c98cbb5aba1c3eb37f603) + mstore(Q_O_Y_LOC, 0x21df5d8ce0786570b37bd8e5439349f062e7afba594c19b0309486f9340adad2) + mstore(Q_4_X_LOC, 0x1a094e4369f77ea0576b9115c1eafb68a5b72dc04e456681822651e970f847f2) + mstore(Q_4_Y_LOC, 0x1e3c7d82b3492cd2c6d4b9f44e10b80145095cf941ed254998fee43f47ac4bcd) + mstore(Q_M_X_LOC, 0x205cdb8537f24248ae8bcfbe334c470fab877a0075eba1ce6e44a4e9eec49d0a) + mstore(Q_M_Y_LOC, 0x2af60f8915f2675b477a473619f08ef91da6a7b906e352d5c86ae72ad5241fce) + mstore(Q_C_X_LOC, 0x26a0b6d7108b12c5a744bf4685bc9e2c6031a933aaa09880dc125f63160b63e9) + mstore(Q_C_Y_LOC, 0x23a28ae5a034cda358d70d56e0c8e13d9334cc63d66642664463b2513648d72b) + mstore(Q_LOOKUP_X_LOC, 0x1ad0852ae1f831506b33a76a4968849abaf87e068b8e00ba462e190ff4dc0ff9) + mstore(Q_LOOKUP_Y_LOC, 0x2b782e70b28e331338317e348ecb3d3ee69c0cb7b1ca634b32395b5349605a93) + mstore(Q_ARITH_X_LOC, 0x27b77d8a91518b9f779968314fb4930f6b4c8928cec1a493d1eca60040558d19) + mstore(Q_ARITH_Y_LOC, 0x17e03a1d7011d02cda9cc14aacedbc4bea03bf9c675dedbef70eb086eca017c7) + mstore(Q_DELTA_RANGE_X_LOC, 0x1a4efd286effd2d2f6329c0000657fe692f446d2bbcd046fdf5f32be5056fcf2) + mstore(Q_DELTA_RANGE_Y_LOC, 0x24d2f1d5f2b67ff1df0177b43b1e9421a7b608940e1101a4c27ce80df106b5c4) + mstore(Q_ELLIPTIC_X_LOC, 0x1bf02e1b23ac7cc5c44aae24125d7af76e4330f7fbb3c62ee3e6b9839adfb45a) + mstore(Q_ELLIPTIC_Y_LOC, 0x2ef44760c5ffedc0154990ed3f5753fbd33215b22675a8bdf99beea16d556ae6) + mstore(Q_MEMORY_X_LOC, 0x2664023859d597f28460600cb74a15451f1dd4547d3dd74f22962a9191572ae8) + mstore(Q_MEMORY_Y_LOC, 0x0ccab3b00a0c9c3622f33936ef16e7593a187cd4659fd01e28af4a2a89837cb1) + mstore(Q_NNF_X_LOC, 0x1beabcf898c3ba56a7b28cd491a79edd44dfa1dbf06edc1da35328ca110316cb) + mstore(Q_NNF_Y_LOC, 0x1c527e4d9f637427f5bbe966f311e3beadb48a77730d44af1ae2aebbbd551c6e) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x301f93be4e2b1f49d515b1020250524aa4d208720f66c23c9ba9caf43945e986) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x2a68612b02798ce3b91662a66cfe5e4b175c12b0b48ebcf57f6d5fdf5666823a) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x0f9664f7a45aad9346e32bd986c84c4640f7dfa5a092cd790194b468dbeba1d6) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x293a0055e263615dc78a530c9f679818849a7f250e244f77a77123b1b99e5ae8) + mstore(SIGMA_1_X_LOC, 0x0e4990c2459d6ff4bea283b804120f29ba1be7c1ee32bf361bb1a6ae841b7d11) + mstore(SIGMA_1_Y_LOC, 0x1d7fe0d678432b243a4857db9ca48fe388b0985003c3a8a906db592d6e721b1a) + mstore(SIGMA_2_X_LOC, 0x2dccec92145716130138caf9f19281a9f1fa0ef2ab08e7f3a57a0e16f864fafe) + mstore(SIGMA_2_Y_LOC, 0x192f9c1f3c7281fbbbc7c86ed4b6235ebad89fa57eed00f7ee2e66e80c310f97) + mstore(SIGMA_3_X_LOC, 0x0880f2afa2f8aedef6f92bc2864be7cac49fc41b8250c7ba81cd288ce06b5af9) + mstore(SIGMA_3_Y_LOC, 0x2afb6281211f0ed86a64a046fc16d2c535df8855712f6da698a65bba7448b653) + mstore(SIGMA_4_X_LOC, 0x0c7259cb3ce4886f983a9856daf12c78bad3a94e769689f5ceeeb0319d36971a) + mstore(SIGMA_4_Y_LOC, 0x2ae9902512b1bdb1bdcbc5c82927b041ff728b5d68c0124317a7e78585277246) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1490,18 +1490,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x1febab585ec2c7ed7ce29ed9c86d4508660577741af212705ce679b0b8196772) - mstore(ID_1_Y_LOC, 0x171ef78503281c716489bb7da19fb487f82bad01addd3ee18ade50eef7f704f4) - mstore(ID_2_X_LOC, 0x02fff110b031fe2a434f116cf91bbff52aba894c73d594127b5114e82add8bb4) - mstore(ID_2_Y_LOC, 0x1d234e1158da4d134669f02c24f41b4920d8dbe0ad9e6f18ff0931fc6c92d217) - mstore(ID_3_X_LOC, 0x03673f5bdb3d2be26cc553885738a3dbb8f357619750602d627900c49b60aa17) - mstore(ID_3_Y_LOC, 0x28ab6d2be147469f4101066e7f5ea75a3f2afebcf16d0ef05b04761b997bb9cc) - mstore(ID_4_X_LOC, 0x0d9ef2c0e5e0a63e27237dae6fb7ac04a61bcd12ad3285506dff93ff1f830f32) - mstore(ID_4_Y_LOC, 0x10da0614b8219773791cbb16f35b096e3ed3ec8c9405222eb86f466b22f3135e) + mstore(ID_1_X_LOC, 0x11b469ce4a19e1c522b51e9671e0bd9b474d01e000ee27b7d294a2e63e5c566e) + mstore(ID_1_Y_LOC, 0x28aa21406a4f7f5b3c0d4ea123ce42481fc8e3defa371f471318db772e4f004c) + mstore(ID_2_X_LOC, 0x298464042f5d9dedb6182464cfccc831d741562cede566952dc3e2802dc2b0aa) + mstore(ID_2_Y_LOC, 0x18ffbf5fc4aef31972d129c7cbf3967955f95b3f2d668cffc266f6f9edfd912b) + mstore(ID_3_X_LOC, 0x196f8f4599c6dd6544de81ba5ddf923587bfdec70e0526e6072943366a09dd77) + mstore(ID_3_Y_LOC, 0x0f52097a679e9d66a04fd6d67f39dcf3a2dca7bf254f9325ed9b2736434c825a) + mstore(ID_4_X_LOC, 0x2206d45bae51542d989a9b29f1630e4418cace2e987f43ccf9565202e07c7590) + mstore(ID_4_Y_LOC, 0x015a9583133bebb1c273ccb10f550470e03c3c497762912e07789adfb2da64af) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x20fc786ca866d8b40572108b8461b980c06f52f0d1b059fe5686fa8352d286b1) - mstore(LAGRANGE_LAST_Y_LOC, 0x21503f7af9fb7704ef2733261d51eeae19c04bf3bdb7b98f5e3f37c2545b2c67) + mstore(LAGRANGE_LAST_X_LOC, 0x0a3666557c61300a2abaf41433073032c037067875289b3e467ac0c24ffb0130) + mstore(LAGRANGE_LAST_Y_LOC, 0x28a77abbc0ebcf4d2aa3e22244b381950e52cbab103801b75987a59846cfcebe) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount6.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount6.sol index 45a3d90c4..1e171cb92 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount6.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount6.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x156252c4c996e9fb3e77f4787dae33e73f9d5c6f06b57c12e87ebdaf35c9edab; +uint256 constant VK_HASH = 0x1212298562eaa813d58ea4aaaf2a4117c6f02a72f3b9c64a21b1dbc6e5fab0b9; uint256 constant CIRCUIT_SIZE = 8388608; uint256 constant LOG_N = 23; -uint256 constant NUMBER_PUBLIC_INPUTS = 18; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 10; +uint256 constant NUMBER_PUBLIC_INPUTS = 19; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 11; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1484,42 +1484,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x2843b6c42d9b345a3708a49f209c03354f1b8de48c6690acaac71f56b09a8e23) - mstore(Q_L_Y_LOC, 0x2c33a16b66471b18d5912361f04505766872ea24743038880a568c7ad5b71b8e) - mstore(Q_R_X_LOC, 0x0ee891c205a15fe79647311ec40af67aee87df0b7abeb577c2668c02e817bd1d) - mstore(Q_R_Y_LOC, 0x23e3ccd7ede54b4db9fa57e2344a337a66270b4e8fe4d4cc6d981eaa3c37b4c0) - mstore(Q_O_X_LOC, 0x076c8d960be358992aba203a5e7c51cb6cabba7cb9f7a8cd2c5251deafd7c290) - mstore(Q_O_Y_LOC, 0x1a241c892e6b742b2cdc414dc052f016e0bd2251f70173ffb0fbf6a59da44b5c) - mstore(Q_4_X_LOC, 0x1195815edf617c5e27a3c2b97c6de9ba8af5a182b1a96fa38ac60dbc386a9aaf) - mstore(Q_4_Y_LOC, 0x2bc08589d2ce78ba1d93a3a98c3387e19055141442c61ccf91b22d63703e8ab6) - mstore(Q_M_X_LOC, 0x0b28648a3accd5e11d7d3ac0fd642751fae370fd7b460dc939600ab4843e5c06) - mstore(Q_M_Y_LOC, 0x06af5dbd369ad3ac9594e24725c397d13230f74f8006dcdd74895b7c62e4c849) - mstore(Q_C_X_LOC, 0x0f655ccc59a5c72911b377280bdd18d95a36988629d1d710ceb47d2e4bcb536e) - mstore(Q_C_Y_LOC, 0x24ad6d33a7332a62b8f6e04d4152e1fafcbf1aa09d56535c8ad32b8c0c147637) - mstore(Q_LOOKUP_X_LOC, 0x1ad0852ae1f831506b33a76a4968849abaf87e068b8e00ba462e190ff4dc0ff9) - mstore(Q_LOOKUP_Y_LOC, 0x2b782e70b28e331338317e348ecb3d3ee69c0cb7b1ca634b32395b5349605a93) - mstore(Q_ARITH_X_LOC, 0x1b77a865a9ec8a752a59657f05f78642eb5bead521cb9d5e5d9559bb65f99caf) - mstore(Q_ARITH_Y_LOC, 0x1d68bd123ca8d059e30fdaae8ef826642c7d6a71600d13cc2d1434aa02a2f36a) - mstore(Q_DELTA_RANGE_X_LOC, 0x0b6960d14f281e166b53f2efb140f3e2cdb9961bafda064e9fed2eb1b8ce0612) - mstore(Q_DELTA_RANGE_Y_LOC, 0x10ab6a68ec80ef66b7135ec3570b2ad1dfb7f6949ad36a8f88cef5291c833a03) - mstore(Q_ELLIPTIC_X_LOC, 0x0c6663d99df48fd1e234db996088233191e366c9a75b3ee547c708471a094de6) - mstore(Q_ELLIPTIC_Y_LOC, 0x2925b7fedad3078c8881994b27573ef4efed5aec87cdb2728007e8c99cb8eec8) - mstore(Q_MEMORY_X_LOC, 0x103b1b8447c9ef40f14ebf8d8459014eff8e4e9ec6825b2a9468bf9f6a5090fa) - mstore(Q_MEMORY_Y_LOC, 0x2eb0d05f3a7464a0ca68a0cb19cfa8529d7c25535102bec7d71f421e5c6101a3) - mstore(Q_NNF_X_LOC, 0x1444d842463fef44ce4c5dce0028da2bcfc164a46a217c3bcd2c173621eff758) - mstore(Q_NNF_Y_LOC, 0x0214b329578301a29de16b6a4f86776d8ad08ef872f0884f614ef43ca8f8829d) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2e48d18d758edad89868d30af5ece9e863415d4c4f14a768b4c973cad89310e9) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x2469b17c373641768e742ab0094ca722faf6685f297287402a9d5c02ff09c3fa) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x08fb2d93a58f63383ca3393d0e6dff9b634e3e8f89e510186f811ad9365d3e50) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x091dd87fae949156981bddc6fc4de6fe4cabedba0ba394afb52229c19aeeab20) - mstore(SIGMA_1_X_LOC, 0x0b64b4064789c01da0d72f19172c53196114126fee5776c16c50197eef8c4c92) - mstore(SIGMA_1_Y_LOC, 0x22b81427af68c5958eff362c60d28a4c0f8af60b66316a7d6b3af645a3b95a52) - mstore(SIGMA_2_X_LOC, 0x21eb357da4d9235e5ca09a6bcf1f6fc2de6f212fd4a55610f61dde30a58f6e4e) - mstore(SIGMA_2_Y_LOC, 0x1c3cd95b2fdae259bfa5c25d64363419aa1de62faff8e1a86d5acfa37d208ae8) - mstore(SIGMA_3_X_LOC, 0x22d28390718a6e71498c413b9ebfb7ca405caa8e866a45c5ae4a6e7db1cf89d3) - mstore(SIGMA_3_Y_LOC, 0x0f1ed6ce92cdfb729cec63cf7bccdc01d2b89153deb7f83f44c5adfabd862541) - mstore(SIGMA_4_X_LOC, 0x1bb9e8aff1e865eea10d6a4d244b629713393b6b1caaeb248af09d5b2134cb35) - mstore(SIGMA_4_Y_LOC, 0x0f2c7387bf8d6cdfdf515aa637c7e983e751875dc84cbfda4a4396144f21c536) + mstore(Q_L_X_LOC, 0x23c18554a4d23c482095b1868e26ff82772c24c63ff8bf7e76720f99360e54e9) + mstore(Q_L_Y_LOC, 0x0d1767a6718b39d7b819870ee39fa28b0cec61667a6746a11fe7f0c676fd96f7) + mstore(Q_R_X_LOC, 0x2131333c2596a8357af61ee4b8ea4eacc5b565ccdc69529571e67f60f263f8b4) + mstore(Q_R_Y_LOC, 0x0e15518e612a439ed9c9b3c7da89932651131b8c2003a4d49fdbc6d82ba7aaa7) + mstore(Q_O_X_LOC, 0x0144a31c416d0371ae90751201f170504800d3d73799c98127486657c8c07a00) + mstore(Q_O_Y_LOC, 0x1cefe22707597dbf43d376c7c001935fe4d5ba3fbb77a59acf13032eef54ed35) + mstore(Q_4_X_LOC, 0x1302438970720f4c538ba5c678154246a9d37136a8eeb0100ad802c728f191ad) + mstore(Q_4_Y_LOC, 0x04a40a72002da03238f595e1ac84f4ba5c1d571e9d39dc43eb64d5e24585b70f) + mstore(Q_M_X_LOC, 0x038a9e566bd844d6c9b2e943bf75740fb7c7d11804ecac1a612ad3fe0c0f0aeb) + mstore(Q_M_Y_LOC, 0x12cf97b63f7c6321103863e7b9d67a84195c7feaa01af8bab79344aa0111275e) + mstore(Q_C_X_LOC, 0x2f6fc90f56dcab34fbd09d7c088069c88e5f51bf1be0b4f8e221dee95f105349) + mstore(Q_C_Y_LOC, 0x13d3e6cf6978d0583584587dad86d3a340be4eb690f926693e0f19e26890d78e) + mstore(Q_LOOKUP_X_LOC, 0x0073e7c223dd4f3e4734c4d9d9c9df394bd2eee2e12bac2fc49429a0443ec8b0) + mstore(Q_LOOKUP_Y_LOC, 0x20fac57db30195c2427a75a4d67231c1d1c74c8f84f009ab21d3c88e9657403d) + mstore(Q_ARITH_X_LOC, 0x2146c398d8504fd9811c92ef41a0927070d7f6be02ea36d1d1619e993fc33d6e) + mstore(Q_ARITH_Y_LOC, 0x23aeeb3ec41bfb0462d567b8d2d8e76f46650935d12d235534c7fdf01bc4c23b) + mstore(Q_DELTA_RANGE_X_LOC, 0x19d64fc4a0ab6f1ad5e9f2f52e3611c81e1cf0b6ee45351a680857c40efbcdec) + mstore(Q_DELTA_RANGE_Y_LOC, 0x01d9293998a382f640fe59852d59b436caa463c6450df03a2f3f7191d3424ca7) + mstore(Q_ELLIPTIC_X_LOC, 0x2cfeda3aac9e15050ef160e02144543ef23cd376ca69598e1c6ebd9cd150438c) + mstore(Q_ELLIPTIC_Y_LOC, 0x0568e887ffcf32efc05c19194fb388ad09fca6061e9413f705bed0c2fbc81370) + mstore(Q_MEMORY_X_LOC, 0x128dda0adff294420f25b14643704cce237d4589f30dad5770abead0ff4bf915) + mstore(Q_MEMORY_Y_LOC, 0x1532b0030dbeadf82b2d5395128eb70522e09a75857f705a1cc45b638f3b38c2) + mstore(Q_NNF_X_LOC, 0x2fb272ab52e926bd783c4cd6c366738fe879adfe1fc564118f9d3c1748e51ab6) + mstore(Q_NNF_Y_LOC, 0x093ffe2329b42c1f2a9829ab53c763994d45ab34960df5d22bb9a2339346ddd3) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2b97d915773ca063a7bd7d8aefd5a6786f3155fd3f3f273c8219617d0027fae5) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x2f379dcfe1e346cc08b809ddd4a5b0b0f26889f6f313d4c64a616ea11586750e) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x105741f119cec9e2e750c2c821731952945f6c5890ecef0952f1c57d12c95e19) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x2771dcd04c39e4f3192e000572205fe6b576961c7949376e98b6f5a862c64b80) + mstore(SIGMA_1_X_LOC, 0x0210f0904ffe5222630ab88879aa6106946d301a4d8c3e7447f811528bed47d0) + mstore(SIGMA_1_Y_LOC, 0x18a5d215c5e02a82cc5439e80e4bc4b47f4609f6b52a876ccb0566c49f60eed6) + mstore(SIGMA_2_X_LOC, 0x24dd5094fe39d091a2f5c5aaa6c86cefc124f8f9207c5bd20a9d50bead376122) + mstore(SIGMA_2_Y_LOC, 0x10fbfbaa86d7bc8a5881cbd7622133775f2f8505af3d9508c7a7feb45c83c9ea) + mstore(SIGMA_3_X_LOC, 0x0d34d30ef7cda4d77756c2cb2eb715efcfa69d646f5da9a04cb874cc7218ba92) + mstore(SIGMA_3_Y_LOC, 0x284fe9ef0c403c2d6abf90d83901b06d039cb3beef8e6d7009ecd025a5c0a75c) + mstore(SIGMA_4_X_LOC, 0x0423f9fcf3c4714b64b601d6c156e775f3051edfda6c9b4beed04712ac549d95) + mstore(SIGMA_4_Y_LOC, 0x149ec927f2a8b18f2a884840de18a1d9079d77e96072f9b891ed86eb4f746768) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1528,18 +1528,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x0bbea372483d0750d90e7baadb9499e90a25a58e0e96888014308a45282af159) - mstore(ID_1_Y_LOC, 0x277ebc81e6fe4f1d595f1799b2438289e55c593c3e215d07d4797bf75943afaf) - mstore(ID_2_X_LOC, 0x09dabacc5a77793ea86c4db0666d46edda89e8db18e981178beb4d52465496ee) - mstore(ID_2_Y_LOC, 0x0f0548f373785955812964d5bfbc607d0695f45f3271c365dcbdc1cfcef02768) - mstore(ID_3_X_LOC, 0x0385c1555c75994ccfbbf0bbbe8a91156ee1df1af742e4989836f9e5196d9779) - mstore(ID_3_Y_LOC, 0x07c519369d4a7e0269c5c84d87375de43178f42cee4a40656103d91af62a86d4) - mstore(ID_4_X_LOC, 0x05e720055aadfb6693db2bb21645f79a96dabe831503bff9a136242365711808) - mstore(ID_4_Y_LOC, 0x0b2a9920173ce5f32d68e206ae0b5a7882afd70dfeadd7a5be68800e3b81c235) + mstore(ID_1_X_LOC, 0x1566129577023baaeeb932b8a57a29ea9273fc132fa5fe6fe3371f860dffe28a) + mstore(ID_1_Y_LOC, 0x0203a0ba8f3c1e8f206bf05b90fb123e74fcb7aa27595f6ff13d400f31a91fea) + mstore(ID_2_X_LOC, 0x301d8e6aed76715d194fd0ec352721b6fc7e8b5c17ab6144a64c302f5738a5d2) + mstore(ID_2_Y_LOC, 0x0cb693cd2e263b2c43ddc5701a50cc0452c9415d0b63ef896e52b7dca295544e) + mstore(ID_3_X_LOC, 0x1476550e3a9fd4f1667687a2fcb7af36bc4b0e5031fb7c945c5cdc9c3c760b85) + mstore(ID_3_Y_LOC, 0x06af67d638cb4507936857c7a7a391a208f6162863f5a45a9398f672f02bdd4d) + mstore(ID_4_X_LOC, 0x26898d8b07b5b5ca2bcad6499922945ec13115ce42c0096d436250ed734ccac0) + mstore(ID_4_Y_LOC, 0x12f82f9e61f5a2dd1dca546ee78d8e2e9595fa476e4e1d58836b55d2c6f7c9ce) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x0f65da9227c04fdb22df239a820884243d31fe2f0afbdb5aab59f1dfee8e2c89) - mstore(LAGRANGE_LAST_Y_LOC, 0x05ac9449c7ba7f70f5fe769025a940bf9533905074366f78d1c0c0020d2d7909) + mstore(LAGRANGE_LAST_X_LOC, 0x08acd82cee152210a9defb974d0057839af253ab4d78adfb2dae88c3450d0798) + mstore(LAGRANGE_LAST_Y_LOC, 0x0b24ec31e3a51845f6d18f083a5cfb9dfe1fb82040f98a9fe8ce3408baae579b) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount7.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount7.sol index c27699f99..570d1e505 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount7.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount7.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x252dbc42921b3236ad115da32541c953bd20a09043e575df2e9ed274448bb093; +uint256 constant VK_HASH = 0x0b769026390dcfb778e3e38af7b45382abcad3b2784d62b84f44ec8fecba8d3a; uint256 constant CIRCUIT_SIZE = 8388608; uint256 constant LOG_N = 23; -uint256 constant NUMBER_PUBLIC_INPUTS = 19; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 11; +uint256 constant NUMBER_PUBLIC_INPUTS = 20; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 12; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1484,42 +1484,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x048d6c98a5fa137cf8b8cf43f97d79c3ed2372168ad948a04d96d09b6a97f85d) - mstore(Q_L_Y_LOC, 0x0473fe50f5ccec7f509b7ec932f510eea740212db8b7ae51e4f218fd5ac6762c) - mstore(Q_R_X_LOC, 0x02a3f8363f47ae46be502e47a53edbd378480cdc5c74f2d81ff691637aea0f74) - mstore(Q_R_Y_LOC, 0x0b40c83094a2c90d5eae85726221e4174592da2114c6e4821b454588076c2a11) - mstore(Q_O_X_LOC, 0x13a5bc62572babe8119e4c14e8224f01140c373362c4db9ef8b522233797db44) - mstore(Q_O_Y_LOC, 0x0a1008a501f49a99bdac67607fcbc489eacae0dfbc3a8d8f997386b418e573cc) - mstore(Q_4_X_LOC, 0x208f5559aa5479c71b65dcde77d8fa8e02d706efc5532602fb91707c703b41b1) - mstore(Q_4_Y_LOC, 0x1692d8fea81cbddd38e4951e3b6bdb87b17430f55878169a4b596348793a5d0e) - mstore(Q_M_X_LOC, 0x19bac51ce06b6225475a0a5038ded004cf62642fc897c25e6d1ed44e4a5f74c4) - mstore(Q_M_Y_LOC, 0x21b8065c543f4f2b578a629287655e44cf410c5ab5692dc2e1302bf2ac1f108b) - mstore(Q_C_X_LOC, 0x2f0fab4796dac5257111437087a40f5a792aed24919c9214e1c1ecb679b9f2b8) - mstore(Q_C_Y_LOC, 0x006662a621c25e4c3ef3349bd9e57517a28059c220127f606c1410f82184119e) - mstore(Q_LOOKUP_X_LOC, 0x0073e7c223dd4f3e4734c4d9d9c9df394bd2eee2e12bac2fc49429a0443ec8b0) - mstore(Q_LOOKUP_Y_LOC, 0x20fac57db30195c2427a75a4d67231c1d1c74c8f84f009ab21d3c88e9657403d) - mstore(Q_ARITH_X_LOC, 0x292970ee7decb0c3302f5fc93c8f22a9571254cfb954e3333f2bf3ac6e77d42e) - mstore(Q_ARITH_Y_LOC, 0x02cd30aa820866c2a688729e070f99ac65484d383b2f24269b3b01799e6e59ba) - mstore(Q_DELTA_RANGE_X_LOC, 0x295ea86138452536d6b06452a9f299e1c291225a06313e7b511b48edcc5dd0cb) - mstore(Q_DELTA_RANGE_Y_LOC, 0x0e99af1c0a5c00f00c1af07c39f8994f641b43fe0eb262358f4c59395a8d254b) - mstore(Q_ELLIPTIC_X_LOC, 0x0d6808d57467123437aa522130692602dc32dbd1f63605f8273e15cab3ce9c26) - mstore(Q_ELLIPTIC_Y_LOC, 0x1e4e5dd35bb5939c2800f9a86b5269c11ef69d3fa087e2bdf03e2941507af179) - mstore(Q_MEMORY_X_LOC, 0x10fde034f41b0a106f22ca53d8205b6868ee1af1673f1102d9d191d9bf0b296c) - mstore(Q_MEMORY_Y_LOC, 0x296c7cd1fb30f517cb566069b413e74634565fa000fcacf519a1f03f7361c317) - mstore(Q_NNF_X_LOC, 0x19502e79ef068bec1c0f8a307e73a56e81b4556a87fce4e7b7baf3d52a0e108f) - mstore(Q_NNF_Y_LOC, 0x0ce13b110b2aaba5b6ff22225782baea4883fee7a2e8faa862ce705c7facf294) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x105c9a37fadfa446bccb75e2cdb7bd1e7bdb55709853b79115096833f1928b3b) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x1ff4b5e63b3af9c5a09d81dceedf94a0f02e6ee49e84cb69999f62128d98782b) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x13d59740c68dacbe599e9344fd387c8a2688af47819b67be744d274f0c46d492) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x154a1761cdfd2372c8988253d25f802fce51477a741ef20480b2b86a85fd7307) - mstore(SIGMA_1_X_LOC, 0x0ff532cf3db57f5c4df55fdcae5022ba11e2ae2c1ab7df49466a49abb8450c80) - mstore(SIGMA_1_Y_LOC, 0x0d6bd3574d6c213b95e7797270b63631c2fe7865894ad8c9880888706e586ee6) - mstore(SIGMA_2_X_LOC, 0x22cc4068373809fe5738aefd292e18f63d67dee19cbfac4c36fc37addc904102) - mstore(SIGMA_2_Y_LOC, 0x1fbc7f2a6623c6d49181dface43a31a85ecb6ea51a6b284329da36cd11e70b5e) - mstore(SIGMA_3_X_LOC, 0x227550ca3d9178bda6005bcb9d80b3426dc12b5b6c2d0c4da05cfdf6d522325b) - mstore(SIGMA_3_Y_LOC, 0x0cd8e36bb2b3ea509cdb2f61fd8d11116bd5fcae38ca3d191112b4b92f53434e) - mstore(SIGMA_4_X_LOC, 0x26ba2c1d7ab7da6574d164a760ccc4d7bf3e51d0438ea6ce5e09cd70f7fc8f3b) - mstore(SIGMA_4_Y_LOC, 0x06f4a09dc3f53d96e895a189c4c35fdbc14635bd1ac09fe880b35a7e0309810c) + mstore(Q_L_X_LOC, 0x20bed2026196a692f997e6293438da23a4911607da30265f7713a3bd8c6d1966) + mstore(Q_L_Y_LOC, 0x01a0135e5aaff97c70acb972cc490f16294600bfaa8d94ed9960f216645bef61) + mstore(Q_R_X_LOC, 0x0b17fc940a953b66fdc89c113002be6b367b98d903012426a5b5efe1638cb7f7) + mstore(Q_R_Y_LOC, 0x197c44b1cf0b2c5ad6b05d1ce45ee2c89035fad75a2db8227055c6ff09bb433c) + mstore(Q_O_X_LOC, 0x2307d7eee572a1fa9e37c005f1d25b251606ca083c1e73285c321095b989ab28) + mstore(Q_O_Y_LOC, 0x2b5992b62ff26cdc64c893ad8561ef13cf8efd8736ebae24cd43eb383af9059b) + mstore(Q_4_X_LOC, 0x1c2dc2124a668cb7200f090e311f792416aef3d7ed818c50c6136043f63a921e) + mstore(Q_4_Y_LOC, 0x1e57b35f854c52f9687ed19589779f0b2cf92ba92c394b25159ecf0ef6b20450) + mstore(Q_M_X_LOC, 0x29ac83982eb19b765bc0596f039bdc60ee862933f6c969a0d29416c453629d86) + mstore(Q_M_Y_LOC, 0x001f1154aec292d47cfb6eab13b36a56716aebeedaa6a83b1c7ce76013ebbea7) + mstore(Q_C_X_LOC, 0x1428ab255e831cd6ee49797dbd902dc967ea30487b67751c0e7607eeff070c9b) + mstore(Q_C_Y_LOC, 0x1dde0fe7e0cea136d1dd367393a381c628916f9c39dff298e8c2085ed8884540) + mstore(Q_LOOKUP_X_LOC, 0x038147f7985ab2a8d179a7a764ee622afc5cac5dabeb8f74a2f89ad33f068fe4) + mstore(Q_LOOKUP_Y_LOC, 0x24095afc77887b20f8293c4a2602c55c7f68b34721dbdaa9d8f2cfc9f432da95) + mstore(Q_ARITH_X_LOC, 0x3047830f724d9f20d17f3f3dc71c8070cfbf714191b7ea2435199424ba5d08d7) + mstore(Q_ARITH_Y_LOC, 0x22259da65409076a185b97b0f1789efa41e96112938c0498cb62d19295322527) + mstore(Q_DELTA_RANGE_X_LOC, 0x2a9c04546581e4a6d469f64d2e1f046ea1fa8d86f342cbd6881d84d30d8dea7e) + mstore(Q_DELTA_RANGE_Y_LOC, 0x1535ff5da92c94262d678e079caa9aa73d6e82029c84af5986f676190e4d23ec) + mstore(Q_ELLIPTIC_X_LOC, 0x13a598a08a9b8176859b4f4b7e3abbb04082fba9e41b90d6e9affcde7feac97f) + mstore(Q_ELLIPTIC_Y_LOC, 0x29017474c90fbfd9826ac42b4e8f5fd822804ed667e89680821765b6387d6ac8) + mstore(Q_MEMORY_X_LOC, 0x251342c2fa2f7649159b3f020ccd8ca6a52032957b8c7bbad39efcbe5ee6d567) + mstore(Q_MEMORY_Y_LOC, 0x0b64d1cf7f35fe9f054e7a76bc1b20a906b1944f6746e81f0bb2ebcec879ee7e) + mstore(Q_NNF_X_LOC, 0x0a9d3f5d61acb6b9eaf5c7fc3a463ea02b4d20fc43e8356b1c933eceea6f8590) + mstore(Q_NNF_Y_LOC, 0x12e59019238a885d8a78afe58cb00e9b2362b6d4e37e0f76d4fda383a111587e) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x0966681d1fb1728ac7e00d844ece04985379d8eadbb7cddc1b15d04327997dad) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x0c8b0ff73e8ef0f1d38ca6f7c0052168c916091e9df54bd40cdca3ee9d844961) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x256192a3d5bbcf9b28d4ff1d509ed5db8f8731b67512f8267a25c98ea1cfa864) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x081f79433ff02e91df6beec6917162be58745a23d698a7f1a83c745e74585524) + mstore(SIGMA_1_X_LOC, 0x0fee63cfcc386dab13e10718846c73ba33417f27e9c3f5ff4396585eeb83943e) + mstore(SIGMA_1_Y_LOC, 0x21be48e7a47a3b74f94fa5fdb00b81ac335bce77035940ee27530f7a2bf916c1) + mstore(SIGMA_2_X_LOC, 0x0d48277b9c1428096fec5dea9a2d7e7c838fc01a2b663e6769112a0b9ed34650) + mstore(SIGMA_2_Y_LOC, 0x265931f4e399d42262cbdd4b1e01e765db0684c7da066667202d6cac24ffdf39) + mstore(SIGMA_3_X_LOC, 0x225a513cfb77f7d4869473c7d930d5dc38c4d8a9b6e524dfb914d165609ccae1) + mstore(SIGMA_3_Y_LOC, 0x0035ad3ef8a8a85820578e708b152a69967353ace5e15aca94610b9b22f816c0) + mstore(SIGMA_4_X_LOC, 0x0678b79d266016b0af1abed2abde00b31293faa477e3c17db3301e45d3515bec) + mstore(SIGMA_4_Y_LOC, 0x0bc47c3333269b379da93662a9d79a2c056051973d5357090fb6dafd8a99682d) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1528,18 +1528,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x27d66770452f6261502e9e64317e1667f5a92b7a15a9f33aed4c7f7f9277bc93) - mstore(ID_1_Y_LOC, 0x08d51ba1e6a253ce85b5b7e04880ec9db3cc13cd47fc1b191499e7f6c7a2f604) - mstore(ID_2_X_LOC, 0x2cbf9057f82527a95a9849d672e8674c8ffbcd906bdafde5a6670d310b7203d1) - mstore(ID_2_Y_LOC, 0x027152a967a403ea288bca42a66b269fe25cd5bf77c991560f10309815cb3683) - mstore(ID_3_X_LOC, 0x262cff8a92a712d4ba055f88ee6a39442f1fef45279f20b318881fa4b10e93d7) - mstore(ID_3_Y_LOC, 0x18ce9d3e3e1339092bd166cf5c136855fbe4c914b2637a2be70c2b899da2a11f) - mstore(ID_4_X_LOC, 0x23eced65e807aa47bf3ea265cc36b244713f48e62f4ee87e28c1ed2d88e4cae0) - mstore(ID_4_Y_LOC, 0x1b518fbc3c4841e536b86582012ce69db77be6a0284cbb0a260b2c3e058cd82e) + mstore(ID_1_X_LOC, 0x2d05810694b4fefc2a7657e7a65ec7af7ed6739bcd8efe9ba2659c52f27daabd) + mstore(ID_1_Y_LOC, 0x29e173e1bc48d9cf01a9018967281bbc006d27c733c3a503c46f1ca1f1a3a6da) + mstore(ID_2_X_LOC, 0x2291d1fdcbb488c6e09a425a334e77bd64b1bf9187ba704fca0c60e7a5af437e) + mstore(ID_2_Y_LOC, 0x08c64a1b69b479b0697041413d4ec1f8490a6958a59285ecb46760a21fe5004c) + mstore(ID_3_X_LOC, 0x1b644f06f0d14ef2eb1ef9527e4d7c4bef29f8bd1eb9d03b759321d341ca378a) + mstore(ID_3_Y_LOC, 0x0c419c3d91f7537f4f7c262ce5f3ef2e60c4d6022345c2ba49905dc2a781ac6e) + mstore(ID_4_X_LOC, 0x0952e8d1613c3fafd2a4767d944bd2205c62ebf2d871280096a91a347f01a3dd) + mstore(ID_4_Y_LOC, 0x2c719c7f1241f7779535814168ec512faf826301e8b97c5946c9c1c0b111d6b8) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x119985ac5a5a28cdb40b63f4fb4a7cb872139955549714168aa68ea3d48ab33f) - mstore(LAGRANGE_LAST_Y_LOC, 0x1dbcad2f45fddd355c1cfa9f0949beb0c4a6fddd2297bd61bffc36b2a8ac93e5) + mstore(LAGRANGE_LAST_X_LOC, 0x1d547e49b457134b7e6da56b240d1782459516246d01f81cd547451d4bf84c0f) + mstore(LAGRANGE_LAST_Y_LOC, 0x27099f0f1d588b9c2f94f4e9e8be0b1d6480b5a82de6a4c8e25549ce42dede8c) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount8.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount8.sol index 82130bb16..b0178cd4e 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount8.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount8.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x257869d29c689652f48f8957a22c398490410858eb881967a9b8caab7b86b8bb; +uint256 constant VK_HASH = 0x09f506d0e46238c664160fceec1bd2dec6ef39c0b584f12c316f80aff92d3c42; uint256 constant CIRCUIT_SIZE = 8388608; uint256 constant LOG_N = 23; -uint256 constant NUMBER_PUBLIC_INPUTS = 20; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 12; +uint256 constant NUMBER_PUBLIC_INPUTS = 21; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 13; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1484,42 +1484,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x23ff9a55bc07ea156240ca335a3efbc78f59f05ce8499a0f3712a73393cfb4e3) - mstore(Q_L_Y_LOC, 0x0b92840f5ed13e05ebf606a001d018ad6e4f76815a07702647a649a93b9d2267) - mstore(Q_R_X_LOC, 0x20c668a253757970ba67b37477b965f4ddf8b310dbdcc76d8066bb4f2cd9480f) - mstore(Q_R_Y_LOC, 0x1873a1fb8c96ec53a4b638dfde8e8d2cbfcaaaf02e4edcbf534b23c6651b588a) - mstore(Q_O_X_LOC, 0x1c1728e0a8f58744ab25f529612312b452ca114b1f8d31875150fb37a246a420) - mstore(Q_O_Y_LOC, 0x1d150e838e3ba1f254dba8e8fc138073de09fafb4f60fb4d86f884f23b66d5d7) - mstore(Q_4_X_LOC, 0x303dd2bba780d0209079c1cc8efe018a0443fb828b81ace2aafe33f9faa9cd5a) - mstore(Q_4_Y_LOC, 0x20ad4e6fee02af4d71a4d12b6f015175a0255011edae989f1b3a2b61a38a4108) - mstore(Q_M_X_LOC, 0x2c21474604c05cf169509ab2818d5c996001a154cdc53da14e31aa534ac7fb69) - mstore(Q_M_Y_LOC, 0x2c30483300950be31215ea8a327672a9d1c7f3df87495b488b7f55a7fff9b09b) - mstore(Q_C_X_LOC, 0x29f8d91a6fcb471e70c80e4e2347edec0e8c79e5d417fcbe785fb8395ae460ed) - mstore(Q_C_Y_LOC, 0x094d5854cf631f7bfb6f2db7ba075ef2aee852498b14e9e4dc68387a3d1eb1ba) - mstore(Q_LOOKUP_X_LOC, 0x038147f7985ab2a8d179a7a764ee622afc5cac5dabeb8f74a2f89ad33f068fe4) - mstore(Q_LOOKUP_Y_LOC, 0x24095afc77887b20f8293c4a2602c55c7f68b34721dbdaa9d8f2cfc9f432da95) - mstore(Q_ARITH_X_LOC, 0x27fc1d3ec848c461c5abf745d1275d58c82756c2291e9f010b41a77daab1eda0) - mstore(Q_ARITH_Y_LOC, 0x04d5c6271fc1f5505c7778a4f34c981010b7c2c4bf829c711c3e18e5672f7433) - mstore(Q_DELTA_RANGE_X_LOC, 0x0997b444af909e71653debb5b5cefafba4b1b84b3f78145441ae2d912a6c7291) - mstore(Q_DELTA_RANGE_Y_LOC, 0x1c0bbf51c00393b368b4576330bfa14ec770632046c91f363b7d2b6c66c4cc17) - mstore(Q_ELLIPTIC_X_LOC, 0x2604bb0489d69e3ae47e70e02bac0dce96f1bd28981fb08e427acce2ced442f8) - mstore(Q_ELLIPTIC_Y_LOC, 0x1a6b378c572a304b334e1a474c994376ca91f79dc30f49e576c5b87f5b397109) - mstore(Q_MEMORY_X_LOC, 0x2989e91bb99ca3ef95af718c0391a1262f81b1ff1eb99ee7430dddef93f6d3a2) - mstore(Q_MEMORY_Y_LOC, 0x0614864c3443749eef86e7f7e208b4dcecdbcffb332a3541fe88939649a779f1) - mstore(Q_NNF_X_LOC, 0x07b3fa9f76eaa4a6b9fcc8aa6d26e99b3016c3e358aeb8f5dadd670defe556b2) - mstore(Q_NNF_Y_LOC, 0x12b4106f218f07ed2ad5aa835f35d2ffda05ef1f71e5ffdc35a231ad5b66c42f) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x2547860ad2d9ba9f0b52076ae5ed444531e24391fdf521d395b78290271784d5) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x1a14d07dd71f5aa94c97b4a1a3775dadd6e4b97b168ca4befef0300dd0a855ab) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x0c9097a271969ad0db54c6f927fe4eb715e3ab77af92e15dba1538e81933cb54) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x252bbc4fb129d790b73ab4b94d33f6abfeb62a96abffabfc502b76138b9621e2) - mstore(SIGMA_1_X_LOC, 0x04fb4f37b11ef22085650843f0a7245599feeeb0ca47d3ca7875b82eeb525792) - mstore(SIGMA_1_Y_LOC, 0x215706a15aab6ce71357cc803d92de62c9b77a5aa713fe02b3b27e7d0349529f) - mstore(SIGMA_2_X_LOC, 0x23a54e74fa07885d3b7d2fa45ae89cda0e36b0404cbd52edf3886da0b3fb3369) - mstore(SIGMA_2_Y_LOC, 0x08de521e2ea85c9f57a84548718e947587898ca2587277800f38a03acc09ef49) - mstore(SIGMA_3_X_LOC, 0x1755f49d925e7670a854cb6770486299e6fe5f66bbcb78703e0d1d9fd2f09577) - mstore(SIGMA_3_Y_LOC, 0x146a647a5d3d6ddd8e62bb52733f4ac6884e8a0122caef3eb8b0f5ec859959f4) - mstore(SIGMA_4_X_LOC, 0x17744c28c631415277993e7f69c56bd133e13dbe0fcfe5ae290bac33962054d6) - mstore(SIGMA_4_Y_LOC, 0x004ed3e7c39160fa5f2cac7fdfcd90c6c3b98cd80c6f6699b3f68a0196777673) + mstore(Q_L_X_LOC, 0x195bbc84154700326812214f02fe75c117bfde17de5b546ce5f448793c6f456c) + mstore(Q_L_Y_LOC, 0x1d4799ddc514739d30abf346ec83558b285506477af9ed5f7682a1d49311fe24) + mstore(Q_R_X_LOC, 0x26e8d2015126f36e5a446e97ad0f7f8b312159c0e58b00d80db7e243f18e57b0) + mstore(Q_R_Y_LOC, 0x244c7a9823bad20be66448399b7d27b530d9a48ea6fb58fb57a2a46183a1f088) + mstore(Q_O_X_LOC, 0x110840af87657fac07b19ddfd34581fcd00722b0f8f79c076b53c301bfe8e600) + mstore(Q_O_Y_LOC, 0x2b8b0e160d105f96c15a6445416bdb0b21c7af8726fcaff6a2858b48f382df62) + mstore(Q_4_X_LOC, 0x1b6ef71a6b0e90cedc5c0f683126533b52b1de555a4a096b0e07a1041f1a9337) + mstore(Q_4_Y_LOC, 0x08db4e2a93491b750509cb692fc5b58b7571c9eaf21b5ec29d218d58cede90f5) + mstore(Q_M_X_LOC, 0x0855f07ca99fe539910ddc3f6c191d3d8c5f2db38c4697077345b3ea377dbd23) + mstore(Q_M_Y_LOC, 0x1876a2c31d11cd0798ab340c2ee64066a0e8e7e1c24fe4930587c1d14775724a) + mstore(Q_C_X_LOC, 0x21f4fa7809d06330f9717334cb7f6c63a37c3c5125b2e426341fbec5ac2743d6) + mstore(Q_C_Y_LOC, 0x2d084c2b2716d4cd7846e77f05f8614f5a62e3584f1f58c9df13b80fee03fa84) + mstore(Q_LOOKUP_X_LOC, 0x17901a5df32166594b3e7945c24ae9b96c09c27ca328c08dd3e4d940d8184e58) + mstore(Q_LOOKUP_Y_LOC, 0x1a0871ddfc99e108eb0e1735956790da52e2b7832015c0a07d894e2367764803) + mstore(Q_ARITH_X_LOC, 0x2c4d47e4747ee4c46c53997425c8e3932c265df68f76012ad9313b132bf5bb16) + mstore(Q_ARITH_Y_LOC, 0x02e637d5a14a9794dc11b50d2f93b085e00e320c3cfb2790e197ad6cc316e5a4) + mstore(Q_DELTA_RANGE_X_LOC, 0x05a6effeda0e87314cae9ffeb8a648953791d7daec06b113e1988c5b82fc3b20) + mstore(Q_DELTA_RANGE_Y_LOC, 0x0932a79cb950cec3032f07ab3ba2b325aad73bb5d072285cf7a5ca79620485d0) + mstore(Q_ELLIPTIC_X_LOC, 0x0d5fb2a3a65bdc7ade76b6baa3939b230daaa30d83761b6bd69ee86aa1944762) + mstore(Q_ELLIPTIC_Y_LOC, 0x3002639b6a0cb3d4b9ef3af4b7c4aa69b696b02171abe3a7d3ba8efe1873ca49) + mstore(Q_MEMORY_X_LOC, 0x001390a0a681e116cf6e68cc13a610c6c8bb05d7b41935f3b0cbfba94b5f29dd) + mstore(Q_MEMORY_Y_LOC, 0x1596ae11cf9e77f029cd6378eb7d54a59d8f7817f0ec5fb121c0a58c5182a493) + mstore(Q_NNF_X_LOC, 0x0098dae05c9514bb7f086e5f6ea2ad8d3e4e314c3da25d4211495a34055660d3) + mstore(Q_NNF_Y_LOC, 0x2d3575f2e5564fd7d2c19430806153f3fb99fdb3a0cdc088f512b8aa1184f1b9) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x07d93b7c356d89fc6d3f190f385e732d08a37cdaa04448f53d62fee54e3f1c58) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x18f06074d7099488c87ea444935eec7e25d7ccfe3722e6f2af0efb07408ad895) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x2d7743327dcb5112249b0fe77515a4bf4328a9c0b5c2585fba5413f9ca2b5cdf) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x0d95af184b14c8661a83b521c68b65cce08dc0f07bb6255c225589ed5cdb4ef7) + mstore(SIGMA_1_X_LOC, 0x2ca8defb4a37a5b97cce197dd02095ef753bdce1d76404bcfd6a224f7527d034) + mstore(SIGMA_1_Y_LOC, 0x0d659839909441ab6ecb4c25fcbb7babaa9dc3171dc1c871f5c766d7866eb0ae) + mstore(SIGMA_2_X_LOC, 0x1085085fd1a65e67111b443f8f8f7055cd0a5d80f43b0ff9238684963f013cf5) + mstore(SIGMA_2_Y_LOC, 0x030f8b250f97949ea1b5abbc563fed311c7234a180878250aa5487fa10393391) + mstore(SIGMA_3_X_LOC, 0x23b58fdaedb7ef82df5c80502046987c3752b851664073c134a3bf0efc53b6cb) + mstore(SIGMA_3_Y_LOC, 0x2f28b2f1ec7cbcca5d536fbe98fa40b303c4bf2996c11bb947091f0679b74cb5) + mstore(SIGMA_4_X_LOC, 0x00e18aa710bdee2fed94083a127e79cb72a7c1dc7989b9d4e3c9ab0c46ff8e04) + mstore(SIGMA_4_Y_LOC, 0x0f4804379ac5287cd4c43c2dc5a914c57e8538f67b4854f2a5285b30ef994902) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1528,18 +1528,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x2ee319a55c1e4386d6aaeef6a02e04b70335ca5d5a4b10c1d11635e38945ced1) - mstore(ID_1_Y_LOC, 0x25f0c98871ed426bc617a2f40512a7ff7e6ee170e21642ca4e7098c961cd9918) - mstore(ID_2_X_LOC, 0x11c6f56056468079aad085b6c2a347e4a67de0564cd6984679d3d892a6946935) - mstore(ID_2_Y_LOC, 0x1b5058831f12656121fd698d86f9f1bc3b8b4928680f127d70eec27322524dad) - mstore(ID_3_X_LOC, 0x2b8c469dfde76f405e89703e0102c72f2e36b8f5faaf03b94e4630e06263dfa4) - mstore(ID_3_Y_LOC, 0x0846aafa7924f259681f9bd4777e26f4f24fac608f386830d88fedd265b11ec8) - mstore(ID_4_X_LOC, 0x2086df4b98fff029c9dd1de15232c0bab4570eb28e3c755e523e368bfbbd744c) - mstore(ID_4_Y_LOC, 0x009bbf843fe1d626f31aa3e83a6563e1be8d539496828b683e821f87dda9fe21) + mstore(ID_1_X_LOC, 0x148be05ea9204e9e8c0891ee69d05f1fc1054f6f3017e273a9b042b8f5320ad3) + mstore(ID_1_Y_LOC, 0x1cfc87c56d5f94d77a2d7056a987ada3d8afd6342568a8715ba4abbced07bfde) + mstore(ID_2_X_LOC, 0x128a5b90d81075c56a78814af323c27580c8d9ae353b5fcdd92f10bb4eaff512) + mstore(ID_2_Y_LOC, 0x03bc656408d33fe365c83fac18acab336024b12af5dc41522a4da83da970d2fc) + mstore(ID_3_X_LOC, 0x14a1de0863d937dfd28200ae23645c67cad7600898e03805c9c19e3cc0752195) + mstore(ID_3_Y_LOC, 0x003403c43f6ae98bc9465ec5746666e691c5ebb42708a0af568f92ca46e4f022) + mstore(ID_4_X_LOC, 0x063b95fca5ed16b7536d6c62f9d59b0c68800eaa21e3427ce6c997c2f0f731f6) + mstore(ID_4_Y_LOC, 0x2de56a57c886ff343179fd6019cdee72942d610be2a37d0b95f6fa59574405c5) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x0046eb67b4f6da322eda24fbe58720d000c38c33fe2867ecbd4f5452073e4b76) - mstore(LAGRANGE_LAST_Y_LOC, 0x07202623221a60bda8fc0ad678e4aa9c809756aa6fd7b7a90cb325fee2adc82c) + mstore(LAGRANGE_LAST_X_LOC, 0x2eef8c1196597bc9b2b7fed25fb3553b283771d97305bc6ca42dcf3ea4b0d640) + mstore(LAGRANGE_LAST_Y_LOC, 0x197aabfb2fd51236ee0c374ac6405c64fc1825531777e2e9cc9e6fb8e2cbfee4) } // Prime field order - placing on the stack diff --git a/src/solidity/src/ultra-honk-verifiers/OuterCount9.sol b/src/solidity/src/ultra-honk-verifiers/OuterCount9.sol index f18bbad16..d726c302f 100644 --- a/src/solidity/src/ultra-honk-verifiers/OuterCount9.sol +++ b/src/solidity/src/ultra-honk-verifiers/OuterCount9.sol @@ -17,11 +17,11 @@ uint256 constant NUMBER_UNSHIFTED = 36; uint256 constant NUMBER_TO_BE_SHIFTED = 5; uint256 constant PAIRING_POINTS_SIZE = 8; -uint256 constant VK_HASH = 0x0fb22360a2d0c81a4ebf0a55c474df97c053ae406980dcf0047c7c451d893401; +uint256 constant VK_HASH = 0x2cc2ff165f1e5a7b51d654669c5fb129384dd4c36341aeeafd5cfa8e2647e681; uint256 constant CIRCUIT_SIZE = 8388608; uint256 constant LOG_N = 23; -uint256 constant NUMBER_PUBLIC_INPUTS = 21; -uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 13; +uint256 constant NUMBER_PUBLIC_INPUTS = 22; +uint256 constant REAL_NUMBER_PUBLIC_INPUTS = 14; uint256 constant PUBLIC_INPUTS_OFFSET = 1; contract HonkVerifier is IVerifier { @@ -1484,42 +1484,42 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; // // Although defined at the top of the file, it is used towards the end of the algorithm when batching in the commitment scheme. function loadVk() { - mstore(Q_L_X_LOC, 0x1a45ac01d83db10a044ebbe0bacdd1e55236f42632903b3e0b101d99a94b48f3) - mstore(Q_L_Y_LOC, 0x11d00bff03bfc8126e6debc4fb92c150a051cf6d323515f99bcf8976a68c82df) - mstore(Q_R_X_LOC, 0x111f220b45e4b5e888fd05e52c01ab444928ea4448acb26f622fc7f4f029ac42) - mstore(Q_R_Y_LOC, 0x1a642f76dea3b7ff03242677446447452e24b02a42c8b1d3987ff146548a0aa6) - mstore(Q_O_X_LOC, 0x0c14403ebc4c605a9af263e0609e5049460088c1c59ab4741a6805484db6e8e9) - mstore(Q_O_Y_LOC, 0x05270ba232eb08434c6aaa8f475b4e2c66247f72658b0ef9cd34cf13cb4d2c2c) - mstore(Q_4_X_LOC, 0x2edf1d722c2d881f96a1bf8ec6d95869528c601a30e5602a8f2f281063377cce) - mstore(Q_4_Y_LOC, 0x1ed0bd26ca5fdb9f0989dca64c246a0370467bb2da5b5355d14cabfe3befae1e) - mstore(Q_M_X_LOC, 0x0bb948c67034818bf33cfab591c87f41932a66e766d3e3027f1ed945cf0ae6a4) - mstore(Q_M_Y_LOC, 0x1ab926bcbd7e3fb39576e22d893c9afaac0036c8535db065b66481f4e564d302) - mstore(Q_C_X_LOC, 0x29fc3bad34f6431b2294c43e39eef7fd2af15b35273f1212c8d3cd1f0c0f5416) - mstore(Q_C_Y_LOC, 0x2a7ff8e7b58f01eda49d5788b4609af82476900f640790d423a2371397b142cd) - mstore(Q_LOOKUP_X_LOC, 0x17901a5df32166594b3e7945c24ae9b96c09c27ca328c08dd3e4d940d8184e58) - mstore(Q_LOOKUP_Y_LOC, 0x1a0871ddfc99e108eb0e1735956790da52e2b7832015c0a07d894e2367764803) - mstore(Q_ARITH_X_LOC, 0x1042258e3c95ac5a34ac9eaa94c5eb9dc34625e0379588daf73520765d072cba) - mstore(Q_ARITH_Y_LOC, 0x2853112e18b3f022d9964f7ffe1571bc2e225377aa6a28470c5a08157e436aa0) - mstore(Q_DELTA_RANGE_X_LOC, 0x2915f232d92724c8d36742c8dad1c6a267ea7261e6cded0bc4f0843155340d2f) - mstore(Q_DELTA_RANGE_Y_LOC, 0x3029b56c7b4a4c71152a87456a00d0be71febf4be664bee79b7434d3fda191b3) - mstore(Q_ELLIPTIC_X_LOC, 0x20cb2334eba58968f194c9ce5b92e75b130cdb2d4352ac66b9c4641adf3e9507) - mstore(Q_ELLIPTIC_Y_LOC, 0x05fb77360ac941beffc1c149a23a70d747e1b939cfecb598695b7d7fea113ef1) - mstore(Q_MEMORY_X_LOC, 0x23eb7f4453a199d0e369ca317c4eac3f4af01a3c3d7b9f0fea9f2c4319d53a97) - mstore(Q_MEMORY_Y_LOC, 0x07a7e77972bd52ad80275bd7df922847432e9872ae83c5c2c116ad770c5999ca) - mstore(Q_NNF_X_LOC, 0x2038979d3268da7c1809f35dc426cc8678a58013be5ea71d894da6832f355437) - mstore(Q_NNF_Y_LOC, 0x162796a69f6bf88f12f289f02fd039f392b4eaedb6ba5363ba1e62bfa7fee572) - mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x28ccc0cdfc9c03a9040be61ff2fa9edcb3a31f41c086f703485cf75fc6953ea4) - mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x13bea49a456611a35736814779ee9eadf635261a5613853bb86e65180875bd1f) - mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x1745a91d9badc69f5d67bcbf93ab4ed31d32d7b74b7cbecc5bafaac6f9cd67dd) - mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x1368cfc56db1f280439e00bffca501b38f93fcec32f65d69fc640036bad8d582) - mstore(SIGMA_1_X_LOC, 0x1af749b02babb416611e29c8ffe5b3d13dd0daaf47b56d9e2a75ead6a9dd45e8) - mstore(SIGMA_1_Y_LOC, 0x13ae2471d12a25943b80ebe0b777a1d010cd4bbd1bf3cf12c155e7f335e1d7e3) - mstore(SIGMA_2_X_LOC, 0x14a7eefe68e0f0a3d2cdb6f7efca0c8ed25caa4a9c50a3228405fddca115c739) - mstore(SIGMA_2_Y_LOC, 0x2aac904f72f8b409c61d0befeb587704e0027370d90502085a2eb142e3ef907e) - mstore(SIGMA_3_X_LOC, 0x24750e0017f8b453ec8ecf7984b54df0920e7cf7039309aefb437236ded52c79) - mstore(SIGMA_3_Y_LOC, 0x0f77b5eae4f10063b525ba0d6b7384a5025df66f9717585a8033d7dfa0baaaac) - mstore(SIGMA_4_X_LOC, 0x1ceece7d6acd0a341c4939dfbe819bf12ad503a349dd4bd7dc6be34afc897020) - mstore(SIGMA_4_Y_LOC, 0x130ba643791fcdbdd39e4ce2567d7b858c921c2113b198821ed331aea9ce6380) + mstore(Q_L_X_LOC, 0x2e9ff7a725e75381299db505fb3b04e93644416f3e21707fc61e6976167a1b6f) + mstore(Q_L_Y_LOC, 0x18c63b9618e5add550d4d8f152f3308516530ad3879f60863644a2f16f5154e0) + mstore(Q_R_X_LOC, 0x0e4d554aefc6170cff9a5f5d93b5d834fe8508f49ac21656af7c6aece1d813d4) + mstore(Q_R_Y_LOC, 0x27634aefe585a3568c5adfcb60f97b4df2a0a0b47d2d9d7e39aa2f9e184b50f2) + mstore(Q_O_X_LOC, 0x1e45bc5998e1084583d37a1baa79a1bb63041a6f382484806d69a6429fee5fc1) + mstore(Q_O_Y_LOC, 0x0ec38740014844aa1b53d37f280a46a79b47491b2caa241640115136f4a910d7) + mstore(Q_4_X_LOC, 0x249bc7964278b66924f92d7029f02020215dfb5de68fdd765a0b57f88c1ff1dc) + mstore(Q_4_Y_LOC, 0x10dbb797cd995f00148d0cb552e18f7be73e123dc1b13539bcf93ebb4383d7ba) + mstore(Q_M_X_LOC, 0x22cb0d875211ca004ca2b0fc5606dd96ae534aaf9c1ba03f671e065de794d844) + mstore(Q_M_Y_LOC, 0x10700edb9c1a8a62ceaee31b462b139a7f0fbe247ede7c27b92cc8a13dbe1b39) + mstore(Q_C_X_LOC, 0x1bfd7c30189a8c7106287f50f0a3b6cc9a220e0a6e076b31f1ca56628cd6bdcd) + mstore(Q_C_Y_LOC, 0x1c7f30ebf1a2d8d61054177500ba3026ceecc204f3c8852204557a72701dc8b4) + mstore(Q_LOOKUP_X_LOC, 0x15729599ef3888a89db8f52912b65cdfc12205eb78f54bd9f4742df51d35d9d2) + mstore(Q_LOOKUP_Y_LOC, 0x1890a0e4fb04b07215d2034d92fc6ad93cb3670761c8c93df420b3a7d89baefa) + mstore(Q_ARITH_X_LOC, 0x2733924ce30bbe0ee59da0214471222a1b94baefc9af0b328f460251f64b53e0) + mstore(Q_ARITH_Y_LOC, 0x0d12878c31dfbf1788777858618907b6594f690f2e9b0f1954273b2740f64a8f) + mstore(Q_DELTA_RANGE_X_LOC, 0x20f03809f617e627319ddf56fe46564417a5632ed743095597422cba1e2e73bd) + mstore(Q_DELTA_RANGE_Y_LOC, 0x159c84ffee9c0a6d20340c629a73245f915081768db6a44c6c87d3a3be8d6872) + mstore(Q_ELLIPTIC_X_LOC, 0x0fddf1f4e0052f127b6859c73ae60aca9d3bb50bacdaa0deae0a48fab755f5f5) + mstore(Q_ELLIPTIC_Y_LOC, 0x1131e88db98071fce4f109a52bd8b03d976bd8f78a2aa21f69a5f739b460d097) + mstore(Q_MEMORY_X_LOC, 0x2a81c09d5747e4fee907826bf83cb60a021ccf06500d2d8e2dc7db941afb4a65) + mstore(Q_MEMORY_Y_LOC, 0x10643ddad4468430fc2fd7415c420f6fb480a45b0e6c9c8559d7d1e23778cc47) + mstore(Q_NNF_X_LOC, 0x27ae8f88e2017cfb4bbd5d3376ae5b3fb8eb6f049dec7eda0268420d9d57dc1e) + mstore(Q_NNF_Y_LOC, 0x2804a46ed1939281614bd59a816c59c59c4a40a06ac40eef3f402f22aa2e9a6b) + mstore(Q_POSEIDON_2_EXTERNAL_X_LOC, 0x0e8ac2b918448aceac170aec3d095036883d62d71578878b1c2abf49f83da091) + mstore(Q_POSEIDON_2_EXTERNAL_Y_LOC, 0x1cfe19ef751e44d2bee31afe10a8a44fec831acfae62f6fc6a8a0bc276575101) + mstore(Q_POSEIDON_2_INTERNAL_X_LOC, 0x1a660c59eaf77420b84991d944d5657a1fdd92f061a1600db820bc6d8373a6c9) + mstore(Q_POSEIDON_2_INTERNAL_Y_LOC, 0x16ac3e25304a0c965c80f189192e31f6a2f231a5e3e9118ebd4ab1b45fc1db57) + mstore(SIGMA_1_X_LOC, 0x293dd5bcbdfac7444773ae8bc2056606c197b75f5a3893b59c300674b0ae8b1d) + mstore(SIGMA_1_Y_LOC, 0x0d6ed623dc66f7a67995323eb032a1388cb916d0d43fa48058e3372c9bf53eff) + mstore(SIGMA_2_X_LOC, 0x09f72631aeca0237175cd18e97c8299a4739968bc957cc1644ec02c79d6c6679) + mstore(SIGMA_2_Y_LOC, 0x14e77f0c85ac376eff602547648a9390fa8df87e8ab58de4d238d74e359cbe62) + mstore(SIGMA_3_X_LOC, 0x02643c65d403c9915367e8918a7afea524b4d43f324e2a3bbe6e31b242bcc4ff) + mstore(SIGMA_3_Y_LOC, 0x1a49f33d94d6959b156752f373b87cf7759792804ec23ec130a486b49268475b) + mstore(SIGMA_4_X_LOC, 0x12a81a3e8f4804bb1ab6371377206eb8291243c21a3d61053eca1bd3f66aa684) + mstore(SIGMA_4_Y_LOC, 0x062fb11cac11570bdcb7565952a563364d1846abcd7160a8f8800fc4de6675c9) mstore(TABLE_1_X_LOC, 0x099e3bd5a0a00ab7fe18040105b9b395b5d8b7b4a63b05df652b0d10ef146d26) mstore(TABLE_1_Y_LOC, 0x0015b8d2515d76e2ccec99dcd194592129af3a637f5a622a32440f860d1e2a7f) mstore(TABLE_2_X_LOC, 0x1b917517920bad3d8bc01c9595092a222b888108dc25d1aa450e0b4bc212c37e) @@ -1528,18 +1528,18 @@ uint256 internal constant SS_GEMINI_EVALS_LOC = 0x40; mstore(TABLE_3_Y_LOC, 0x2e24d420fbf9508ed31de692db477b439973ac12d7ca796d6fe98ca40e6ca6b7) mstore(TABLE_4_X_LOC, 0x043d063b130adfb37342af45d0155a28edd1a7e46c840d9c943fdf45521c64ce) mstore(TABLE_4_Y_LOC, 0x261522c4089330646aff96736194949330952ae74c573d1686d9cb4a00733854) - mstore(ID_1_X_LOC, 0x25bd8b3b18e006bed7638ee521c094533b6b9dfd529af4b9db524eceae288bbc) - mstore(ID_1_Y_LOC, 0x14114b4b355a75671d1c0089cc8cbf15565d423608cbc054b90497e27f806869) - mstore(ID_2_X_LOC, 0x1a0ab84ea394fe3b94aefdf328a607b3b6221f69d01e5bc414303a64c11f850b) - mstore(ID_2_Y_LOC, 0x182f4476d0096544f8acc819334a293a9d6707c8216cd4c5d5906a2e5ac72dba) - mstore(ID_3_X_LOC, 0x2f21982a1340374539f3759a2c6cc11dd21fb9c82bb9023a3aa89a61d7437ad5) - mstore(ID_3_Y_LOC, 0x115c123b9576e68da68dadc61db58b4dccc74d679dc4b31105a5ade973486364) - mstore(ID_4_X_LOC, 0x28075e826fccf39220181a6cf6b9fef8333b90f728118408c224715792e1dd6a) - mstore(ID_4_Y_LOC, 0x2f5184d2158464d74f4bb934e720415de9c700d9ee2ff47cc57f759ea1b6572c) + mstore(ID_1_X_LOC, 0x09fbb21c9f9cdbd95f0f036de858f84b233c54bdee9f60b638f8a511e9fa5595) + mstore(ID_1_Y_LOC, 0x17c6af5a27fdf142198d4022a170cb0573d704acafb598f8fbae4c80cbed26f8) + mstore(ID_2_X_LOC, 0x18d52d9f59a8d801bfd0f62a303bbdda189add370c7460bf487cffe23153b4d5) + mstore(ID_2_Y_LOC, 0x18da2cf09a5e4e08e9e8e04e6d8f49c2a12c637ffe896098a43823a5904e7db2) + mstore(ID_3_X_LOC, 0x2d37000fb14f07557b85b6610c5a236b3bae370b2906c87cb8e980355971d552) + mstore(ID_3_Y_LOC, 0x108181b905df8904e21698e6303520c6c39dcf2f0f038f0e9ce77382a2e6da9a) + mstore(ID_4_X_LOC, 0x0516c13a48fbc32e5ec295d6c96804684ba90aa9ed3722f9d3aa21cbc3b6d37b) + mstore(ID_4_Y_LOC, 0x01ebcee5f9011cfcce166bee9f5b5a1593388a2efac49a54726f12e9947c28c7) mstore(LAGRANGE_FIRST_X_LOC, 0x0000000000000000000000000000000000000000000000000000000000000001) mstore(LAGRANGE_FIRST_Y_LOC, 0x0000000000000000000000000000000000000000000000000000000000000002) - mstore(LAGRANGE_LAST_X_LOC, 0x063e0f247d45e4c690f5eead4a87b331ed91532c21fee6ecaa71fb725fa1fa4e) - mstore(LAGRANGE_LAST_Y_LOC, 0x2355701c4e3cdf8f6287c619924cc53b3d3b22f5ccf8648836cb95f7021a9cce) + mstore(LAGRANGE_LAST_X_LOC, 0x0262649285f1120440ae7bf730dc1f4de17ffd246599ec1f9b0a246759e321b0) + mstore(LAGRANGE_LAST_Y_LOC, 0x04a636db8da43a8a1689051be29688bcc22495777d562b03268b8032561a0973) } // Prime field order - placing on the stack diff --git a/src/solidity/test/Utils.t.sol b/src/solidity/test/Utils.t.sol index c1c86f9f6..6ede1cd58 100644 --- a/src/solidity/test/Utils.t.sol +++ b/src/solidity/test/Utils.t.sol @@ -74,8 +74,8 @@ abstract contract ZKPassportTest is Test { address guardian = makeAddr("guardian"); // Deploy mock root registry IRootRegistry rootRegistry = new MockRootRegistry(); - // Deploy root verifier - ZKPassportRootVerifier rootVerifier = new ZKPassportRootVerifier(admin, guardian, rootRegistry); + // Deploy root verifier with a placeholder default OPRF public key hash + ZKPassportRootVerifier rootVerifier = new ZKPassportRootVerifier(admin, guardian, rootRegistry, bytes32(0)); // Deploy sub verifier ZKPassportSubVerifier subVerifier = new ZKPassportSubVerifier(admin, rootVerifier); // Add sub verifier to root verifier diff --git a/src/solidity/test/ZKPassportHelper.t.sol b/src/solidity/test/ZKPassportHelper.t.sol new file mode 100644 index 000000000..b39455f31 --- /dev/null +++ b/src/solidity/test/ZKPassportHelper.t.sol @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: Apache-2.0 +// Copyright © 2025 ZKPassport +pragma solidity ^0.8.30; + +import {Test} from "forge-std/Test.sol"; +import {ZKPassportHelper} from "../src/ZKPassportHelper.sol"; +import {NullifierType} from "../src/Types.sol"; +import {IRootRegistry} from "../src/IRootRegistry.sol"; +import {MockRootRegistry} from "./MockRootRegistry.sol"; + +// Testing mainly the ordering of trailing public inputs +// (last 3 elements, in order): +// [length-3] nullifier_type +// [length-2] scoped_nullifier +// [length-1] oprf_pk_hash +contract ZKPassportHelperTest is Test { + ZKPassportHelper helper; + + bytes32 constant SCOPED_NULLIFIER = bytes32(uint256(0xdead)); + bytes32 constant OPRF_PK_HASH = bytes32(uint256(0xbeef)); + + function setUp() public { + IRootRegistry rootRegistry = new MockRootRegistry(); + helper = new ZKPassportHelper(rootRegistry); + } + + // Builds a minimal publicInputs array with 2 param commitments + the 3 trailing fields. + function _buildPublicInputs(uint256 nullifierTypeValue) internal pure returns (bytes32[] memory) { + bytes32[] memory publicInputs = new bytes32[](5); + publicInputs[0] = bytes32(uint256(0xa1)); // param commitment + publicInputs[1] = bytes32(uint256(0xa2)); // param commitment + publicInputs[2] = bytes32(nullifierTypeValue); + publicInputs[3] = SCOPED_NULLIFIER; + publicInputs[4] = OPRF_PK_HASH; + return publicInputs; + } + + function test_GetNullifierType_AllVariants() public view { + assertEq( + uint256(helper.getNullifierType(_buildPublicInputs(0))), + uint256(NullifierType.NON_SALTED_NULLIFIER) + ); + assertEq( + uint256(helper.getNullifierType(_buildPublicInputs(1))), + uint256(NullifierType.SALTED_NULLIFIER) + ); + assertEq( + uint256(helper.getNullifierType(_buildPublicInputs(2))), + uint256(NullifierType.NON_SALTED_MOCK_NULLIFIER) + ); + assertEq( + uint256(helper.getNullifierType(_buildPublicInputs(3))), + uint256(NullifierType.SALTED_MOCK_NULLIFIER) + ); + } + + function test_IsSaltedNullifier() public view { + assertEq(helper.isSaltedNullifier(_buildPublicInputs(0)), false); // NON_SALTED + assertEq(helper.isSaltedNullifier(_buildPublicInputs(1)), true); // SALTED + assertEq(helper.isSaltedNullifier(_buildPublicInputs(2)), false); // NON_SALTED_MOCK + assertEq(helper.isSaltedNullifier(_buildPublicInputs(3)), true); // SALTED_MOCK + } + + function test_GetOprfPubKeyHash() public view { + bytes32 result = helper.getOprfPubKeyHash(_buildPublicInputs(1)); + assertEq(result, OPRF_PK_HASH); + assertTrue(result != SCOPED_NULLIFIER); + } + + function test_VerifyOprfPubKeyHash_Matches() public view { + assertEq(helper.verifyOprfPubKeyHash(_buildPublicInputs(1), OPRF_PK_HASH), true); + } + + function test_VerifyOprfPubKeyHash_Mismatches() public view { + bytes32 wrongHash = bytes32(uint256(0xcafe)); + assertEq(helper.verifyOprfPubKeyHash(_buildPublicInputs(1), wrongHash), false); + } + + function test_VerifyOprfPubKeyHash_ZeroForNonSalted() public view { + // Build inputs with oprf_pk_hash = 0 (as non-salted proofs should produce). + bytes32[] memory publicInputs = new bytes32[](5); + publicInputs[0] = bytes32(uint256(0xa1)); + publicInputs[1] = bytes32(uint256(0xa2)); + publicInputs[2] = bytes32(uint256(0)); // NON_SALTED + publicInputs[3] = SCOPED_NULLIFIER; + publicInputs[4] = bytes32(0); + assertEq(helper.verifyOprfPubKeyHash(publicInputs, bytes32(0)), true); + } +} diff --git a/src/solidity/test/fixtures/all_subproofs_committed_inputs.hex b/src/solidity/test/fixtures/all_subproofs_committed_inputs.hex index 8c9e7c565..44f5379e5 100644 --- a/src/solidity/test/fixtures/all_subproofs_committed_inputs.hex +++ b/src/solidity/test/fixtures/all_subproofs_committed_inputs.hex @@ -1 +1 @@ -0000b4010100000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100010101010101010101000100000000000000000000000000000000000000000000000000503c00000053494c56455248414e443c3c4a4f484e4e593c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c50413132333435363700415553383831313132004d0000000000000000000000000000000000000000000000000004025841555346524155534147425200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005025845535049544150525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006025841555346524155534147425200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007025845535049544150525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000212000300100000000069c90e5c0000000000000000020010000000000000000000000000ed738cdc0900212dfcc0ca426d9d8e751bb00fc9ab502bfb081ba8d2ce3f5f94a8f1712b3afca8010a00622532418a107c5306fa8308c22255792cf77e4a290cbce8a840a642a3e591340b011fa73686cf510f8f85757b0602de0dd72a13e68ae2092462be8b72662e7f179b000000000000000000000000000000000000000000000000000000000000000001 \ No newline at end of file +0000b4010100000001010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010100010101010101010101000100000000000000000000000000000000000000000000000000503c00000053494c56455248414e443c3c4a4f484e4e593c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c3c50413132333435363700415553383831313132004d0000000000000000000000000000000000000000000000000004025841555346524155534147425200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005025845535049544150525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006025841555346524155534147425200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007025845535049544150525400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000212000300100000000069e25c300000000000000000020010000000000000000000000000ed8cdab00900212dfcc0ca426d9d8e751bb00fc9ab502bfb081ba8d2ce3f5f94a8f1712b3afca8010a00622532418a107c5306fa8308c22255792cf77e4a290cbce8a840a642a3e591340b011fa73686cf510f8f85757b0602de0dd72a13e68ae2092462be8b72662e7f179b000000000000000000000000000000000000000000000000000000000000000001 \ No newline at end of file diff --git a/src/solidity/test/fixtures/all_subproofs_proof.hex b/src/solidity/test/fixtures/all_subproofs_proof.hex index 8f22e7046..6bdcfd294 100644 --- a/src/solidity/test/fixtures/all_subproofs_proof.hex +++ b/src/solidity/test/fixtures/all_subproofs_proof.hex @@ -1 +1 @@ -00000000000000000000000000000063b63c8bf523abb05b08475ebbc0515ba20000000000000000000000000000000000106f0677da87edbb2402a1635b22f70000000000000000000000000000006f5bf73b2ed398432ff02d8ccb7bd2ef6600000000000000000000000000000000000886fd4ac1d12a2e3b2854fe3192e1000000000000000000000000000000fb8f4d12f6f6b9987d8ce71303f5fa47460000000000000000000000000000000000251c2205a39e1f1cfc051f924a2d75000000000000000000000000000000fbe717047b74a52e638ce7357ba8f2a1d50000000000000000000000000000000000171a39a7889f9ec68e35d0a98144c02fe50e69c4d922ec456e8672989aefeabb3d9fce58fb4e1e258f3cfa070d4f22102a5f762fb2c623e66644c8ef95d3e11679f13554b01ab47eb22701871b4d8d0488f9e1b323f708b6aede7ee9eb3ba24616c86823edd22534edb39e09dd09be26bab3973efe14806e9a4e356785c3d115ccf742da1b4dd3ea13d6cac041408a05c0c8bfad7210f1a40ffcac84a16fbdd712dd38e0ee5121a40f59594faa12e8047190f53c2f8884484eebc5fc569ad90fb4a29b983a27ede2bacd491e01518209de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf7109de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf7110a0ecd448b7909678129e42c95e3f635fc9d1caab258568dce023e02a6f981020fc1800a5aacfed5c29e85bf8f66aa0b39028810d2b37895e20b9a1cb9e32f00bee85a3edf94893e9bcfe371d152e8df4c08859dc703ee7857f9d47f7e5e689264f78f30ec6dece47159c36da31b9d29cda4472d655fcedce81071e8a2aad902f228fe70537fc733cea6821539fecb4438efef33e0fb37afd6f8f4e2bbab252305eead7f80d9e3e482a70e42862c63ee90c09166763be3d5bfc83097b2ce4472a60eabaea18fec5980f5efae676c2cf4959ae17bac4677ee9dd3939203549b5060363b7f718a1642040e6bb9b0a958ddeda3a30bef509125a04bc5acfcab64c1e76e2dff4689df17c1c6585317a64a5a1f37509baa44907e1818a6ec1cf048c063195eb6c5912cd0b7728c6805dbded6c07436b48b3bfb30116751751bd7ed10f18c7806258ab94e1a796dab92b4cdb14526c129f2be344af0556d3056e7b7f1e5da94ba682a3b4f64c68ff7d7d64c88d46aaf9776e0a51abf18455f0a93a660c9e50b1de312942f4b99acbd352f5ffdbd3edb1df954bc6b7a35612034f052d0b5a136213b194ac4cf09aac5ca98841e3a58b15e88245b9f865c82209f629a209144bfa74e033a9de3fc8f69bca3fbdbd9bfdfd3b5af3066edb0b12b0ec6e3411f335af00f9e4573865e93846f7b8c826f63eb35d469348a8c3cd43f466ce492b4d64b652999f91cdcbca463aa3bcff2ee2795477ab4212ccda9216876276c22bc6ccf814a8b790c7ef74c1853c4e3ad6976cd793810429aed575174c138a8b15933c35668f3eff3ab94cd83940a330abd6670c5882f381616ff725ed3a48bb0f6b292fe79c4fcc96bcea3322b7a62220ecfd1b3a847d6534596d8c7809c4701da4e03e8f6b70d75e066fb82d32ad6b5b965fe782947cef07aebde4424375981f633a960f4991edbba537dcdd9988a636ea5a107a17f931da17ecab8e8d83ed17fa6b51bbd52cb459126a8f4759bbd32bfa0d197b9010f0c4c7d8314bb220a727cc0945ec3be5ed5ea2ec6112d1c584bb7815470dbb599170dcfa31e4e05454292296700954847bd39e429e7370c00711c8c91534e6c1946bd8b6dbbc8657f720c0c7eb5e5ee876d85bbf02c3a577ad42cae62d943248230b1ef60544bc50850fb712dae9dd9e9bb793deae34ce96ceadef92db86f1ef2e5a2364e0f9783d7a042b82969aa952e0acb1fff3e49089382fe268b1294fadfc0cb6a4ae5b0c5acb2090fb8821f32d914d0496e2ea559ae2403e8b0330b56af49a449be601a1433109c4d8314bc753930526ffeec3ae0d0b7d6db9b735f653b5045c7353e69c1e76245b4988efd85c585381c3e4b14dfa2c40e971e9d4b5ff609f3019c84a5d279b12fd734fdad68f563cc485d3cdc4309cd40ae10043ea166d8bf20fe27e240c831828c9372995f5f1fe34e3912051d95da5572512f92b16fce7c4e4f5fedbc77f0aa3a7d6de9607c3ecce7a3912020df3c9976b2112ae41dcc39ba8b87d0be60f2b5e37ce4467406e1aa4e98624b705a52deab5e84686b24590ab11d502f85b0809665a2dfa8f57078cc737038d4bff83feb1595f0f092c58b4d8596c7e9b0b5f1b3a059a9422c2ef8fb7ef4156682870347eef09f487ecca41305490d11749b12fda9848443b9870223545e7efae5c1d0f686239b50532830928c711a55eebea2d803c7aadd19af106ca76730d6817e49b945034f9e77107d6ac71a42053d2a31de8dae002226911f519fda83a138a20de6c726c0761be86426869cebb299e221a480da9ee4eee47d42de2f703fd317cd33ff42626b863c34f97080fe1227f1f0ccf57feade5a5f9af0f44208077eb4fe4d00d731c3ce877d4641ff42918706725d48b6b82baae0b1977eed36718f7c662aaa307274cfbfe2e56ee993aaac0ff1798ca906388678d1625bb36e0076bc272aa5755009be1610cb59c4fad4eb2511d4990072d3fd3cd9fa5548d61932d9e6924f755ef528a152dd3f3f75e32cb052ee45c7cd4e5795a6d0f3600d8e2a934dee71a38939d504a2fc5dfa544424b330d101b012f37c2face0cf0d023e768e349263e66c49cfb5a92c1e1f3bc749b1e1bd3993e7a2de568ae093399e11b07174c3597b7a6eea2efee09f0f17e631c1d07f7c37d48ec839a65ca7ec5525ed2b20ca648827cfeff656f95f6b7760290a8130f9f44871fcc3568022f0b67f1d1e926c65e7134f27b97c166b5dc5c9a4dbc236f3e3a0c93dc4b21aaf049251fb9ef3bd2350b54ec28289059fab91980ec5021b306d714f96c502eb31b23bf040ec2f49d82c68ac2640109ffdc15b0475ce90f749783631e66cfd7b3381717d1c30e354e0ca4d9769f251c672102b0d12ba01bc47d8c4dd94e4e59210e3e552acb537791464d4dc0b95612825971bccb297806cc85ebe1c53b66628e0a291b1099f62872903c7fc62f465647d8ac1b4c813e1e34dc397a41fc5acf8eb2eca8adf0aa7cf9e29b3fe02e8d3c625cfee1b0d1540569692ecad88b799a459ea0fab548b451ace62f5060ca08c32e847737ce7f1b0af5aed5ff1c56ae2e7dd04a194dbf1ad85a4554814358ad74263cfdcd9025a8179e71e9f1ba807cf9a4df72a40d19b4617b435581116ac8628394fa8bd307911286f64f25826ab584fbceba304d17fe0df7a7fc02abe7873e9a352d7bc1e8ee0ee4f6c781fc1d66e9464f7ff8635e3285313bef0b819f40786b89b0ee51994a1bf50fc0592ad5ff50f137ab1bd9bbead42197d784885a5cb10631092cb84dec17ea73c03b428f37df7bfdb3bd0bb8dce1a35d91da7f1174b9fdf38a366c8a8003283e4afebbf863983b2547771690011c6b0c4ecd20c0dd64b41300fa8a198c04feb2a208022145fbe37211945ffce3405851dd4493109b6704a1d4107bfa5019a4671221911725e571d2fc15c433b2966f4cb01241297faa1d76ecd5b04f1b2000a042d325dc35b3d7badaa4e77cb17f4f903eaf1477ccfe8b4cb40dae85c908b8e570efb3a25e6334caecf575cf8d13b449b7a49b213d72efb49674bc837910cc9963d3984ce15b50169f04ab69570c853e2a181f661c8d15eb79d9f1b3e813ea4bda10d874e0ec19562180306b561c01fe2752a628e0ba454e2591946b02115fa58a4cd414687899cfad983174c32a81077b51ad048479b405c112cff4392702c59641086c52c38932784b1d4c527e1ccc86263be5c672c8111a68cf5eee0c28ea13967949db42bbf75c0e430bb7035ca1fb490ff475b4f7b9dc34753fe71b48fc75ba9dd20336b0e45c06f2ed023a88e8c8afddbb56a64309773cd408691dcf559df24d3c87a6065864b6bc5cb877f0d504505334bdf7114f8905ab5e580f152f3388f673fe82a7ad0701a1154f44a11c35f6f2bde12fc206f395fd48441dfb2bc230451380ef5209c49f21c2e0e2b5d45d57398e9f5441628e4414f0db0c522a6f4e48836e6898b9174f18a6b223ae230f92170c08ec0b5d9e5aaa0d36108bd0c3a53aefd945e20234e1992d98bb2da0b59deaecb9d798c403242116182491b45cb5e1afa07679f0ab36641a5350424a7352d63e86ab8861937bb39fdf0bf09f189b67499029c54d9f02ba2641d9b5a7cc9238896223179286cafa44ee2409a8822fdb3e771100502492f7a622401f3c0b0cc8c3c329d432ab7eb682a91dc00c4862876745ac36cb95af0f98d6ab26ee81d689a50d4f51207409b5765b19ab7c53631ff1769dcacba7fc3fb481213b5ba2f291725bc46e5a92ee6f068e0e92ea65382f06e039520710c8a6aef324ed4d53cb5c41426251c1999715cbc827fec43005b8a52f45db09500d17ff98b536eeea19a63635d9216508fb809cc9219e039f05e692216c84a81fa644cf1b41e14fd1aac72d1b66a9005262fe27b61d36a8190a045e78ee0bc6acb63ea204f198d812066c12b3355ce0b5605a32ca187388b55114270f2ebccc23859a171f37f5df2e3a46e12bf34fb1db9b58b6fb2f33fd7917e1f9e0f01d3f6118d3bee089629ff0403f20485846ff492a91e1af104c0d353152c4ddfcbfd72cd24c6aaf9864dd391b71d2880d8e98482df28db50e81f3ce2cd0aa48b146fa1306c953b2fbfac5e5aeaca0c3b9130f432ad3b25525e812606925b2072800e468a77b184b3a493be351e431707adb45cf9c7214ed2eb064096e5ace979e0bda1a29147e940ad3acc6c3e0747ab838cd8ba831f5fc2ee725b46060d04fe04c2f84add3f1226a53ff4c2fe45ad86b7657c7aa4208030421a15f47b796d11583342dfcf607bcdaababa570dce456bffe268a38082334154c33ed18863f3ea619269ad0d4857b90bfe83ce788d69e1e2ba1fe208693ff18ddfbaac7caba36221af8ca2db56648072d47c1e15aa578c6d95d1c0e2a955e25e5d2b0ddac3ed402b9c7928283397aeb862313198fd4526c080cc88f6341002a9edbaa388ad81bf72ac840520d14632969e8fd77e30be0fcc7bcaac82bfcba23d830d714649eecb0102640d0c09c0eb58b865c6d89e326e13055b2062b3c161f785e50c2c118113c9876b4ef706b84821112e34b05d2ea9d0b719921a5f28f2938e5faa0ecdc5410d035ad8b1c61ee6e860730b1a45d2da0dfb5f1fa62d6b70c57d5f2104f2a3bc10dc14f1bb616a97f85eadd07c65a984a58ef11a7afc5a8258123c3a8ab55fd51da6f73df2d8a7f17702cc297e6313dbbf112b81075a10f2201a1c9dceb126836bd42ac5556b2d1026330086a52c1d5902ad9eab5cb4f1a0dbdaec1ce90cd128580a1f42e0405855bf342acf8672e8d1dc4dfe4b9b8f88b1e9dc46f53024fadc2c7e97bfa36a63b9f7579b2866e4b6b2c015b66059ad66d1df5cf8dede5b8c6d9c6ccb794be4da949efe1ceb8e34312351fded7b36b50a9273bf9d2ebf3ad8aab326c5c6f9df53af6e179c19787a4b1d2669e4d02a13845195b33d7735f6590d327912053ed2b26746589d76a496a3a2caccc2fb3bf493814702f906f52fbd1b0d0d8864536e4f5237c62dc040d53f739ffc6bf470160c3277ad812d5643c67f452c071f773ca0667e3f3a7e9012e52ebdd6eefece47faf266aacce01e92496e0e705ce5debc8211ce12cad4ce2559490961e016b0b62680a72a6b714a073e62309548c2fb3d9b4aa8918e2b267be15f02ed2b432871458268626f9b9a1eddf55ad635ba29c9f982ece6f73b04a12008f1295818ee543080054aaf5b071f7c52075bfcb6812532c2f06ccee3530226d6d37875724ef49181ede85c32cdafdb8d983b3e6a0fce9450abe22b9b12d5ff1c0dbe9ae338622cb0b7654889e0be78879909a388d09dd0299036fbd05f363470ec35b17eb0e87050f091c116738179ba8124ad2e32a8c880db8b352f3918593bf35c56ea076e9fa00fa73b11e16d04921df964a1adb07d7af3dd0f875a3e6c91b677871f45aeae12e15aff2eb04b6d707b14b7ebf4fe5e9cfe3237861922b71267bb4cecdb1f206114f064e761da222e4350be1c1623ddfdce23e89dca08b4df646614b362e5ff31965e65724263a468b4afa8a81233c480489634a95dab2e84f207fd7aeec705c0b0c11631b5403a5c0e7a384de392b6b430fd962dcacc4ac857db9e2e52803b80d36f9da2f3af34bb9f415d20f4cfd793b01619b689c4641fd103033048db28f22bfeef9774e44585f079404b2c9ebd6bd1cae07bc85e65fa0e03e220c3aa4df2d545df35f05105b41f8adcca89fd12bfcea45d754f58ae9d2c2088b070e7ff52652a923ba0e126ff08e1df3af26399fd74b98b493c538541c21da070453c27e2f84c53836dfd3676da7481e6a8e3e1897dd87b99d185384eefbee9ff89d97342790c99519e595f683ec0efbc3985c011d69699771fbb85e4c9047996baeb6c70d72518e8cdd4b0f8dd1ecbfb5273bdbf93fad81ae565a8db81a004b3c75bf4a20208d5566f681bfe7fea459b6af6340e58bf941580e9d8601f345e6b06abc130cea8599df53cb0ed0bc5ace91eca374c8b94d77621a8a3f3167e1521f6fd5c91e038308099b5f42759a0649a18fecafe744ce1b376b38e17e85f560e8aebe0d1b212c984784f8e4922e12db270ec1fb4e339b5c5b8c13ffc5814f811284ad8e0a0e4f418a6ca67c66a525a9a8d020ace0ce67243573b2bfe52ad2ebf8e33f7530001f25fb4902f57e4b284f85745fe43825f303dbbb0d6f3a299a77a2781d531b629650633d4b9b9aecd2d79fc3307a186a72eb965d5dcc83ffae60d53ffb4a23efe7c4972656e861b67c77169978b17a4fa8e665d91548bc187643b425fe980097848eff02fed3745873e2596c76a01b0acd0f2eb2e4fdb3b70cf1a0975364096f944cf07779c86caf1740b11f7a8028f0c3543488146b161024a5e6e623ee23a61e864001d5d5e5df01adbb9a294089354bbb5e095d614d48b75c252e8a07201b8e2c2fe86c8bf34d700d155ba341b5f226d9307ab6ef83490358b5dc08bd03de82d12f3752a17d70cabff25c199dba2b7620b3650deda880d7193154e9191ebdf58085ac89a614e1f2c6eaf668e00a42a1c96cda34e5e00e3cb0017552e12042720fc7bfb41b8c34eedf24e34985377bd597a02119a030b03c7a2a1426bd0f224c32840ae6bb73b36e72f1881914be2596a9539ecb1a2a362fe45520e3402b55dc46027a670ef53e206b309fe37157079fbc9aef985b02d897e8cad413f40171f19e9deae06da9c7495f228aafe8c155bab95971b62c0221567f299862a22584ed1b6aaac5fda6a00cc85c7bfe9c5eaa293aef42391fc1b828ffc478f150269dd2cf1a419a4136470d512c27a16749a9f6624b6e4ade587a052f763dc3f70ed5715fcfa106ec6d95b65771ef8cc6445c8b8c091b37ab55e54e7478e4105718357f4a4b136351010c4b0013494fd3e217d1868a540cb1e030e05e86a7d88f0cd19c4e910d9bc70c11daa00a62c66cca7ac0aa97e203b19337a1690f13341b12c2efa33f405a24bd7713d409b21ebed46fa4bf1ffd7cb757ffe9eff066ee7601995a15b9a0c115747e4abaf3c6f3786348219f4ac92fc2b20a9906455336d507013d746a67e669d3ce8e9578813913d013f3f673794f376bd4e762edd1469926d3e12df52754e210aace4d3432abc6eab40287ca1f14e495b7a10e1362827801395842d0d6e8e2b83541cf7dd8783dbce182ab9dd98e9132029111078fbd190681f2a55877674638d6e69701da6f3e7bd428d7e2e32d1638a4351bcb31326e0330a7407c313f597cda9abf3400df398f83266f9ce004c04f6f6a06c4200d58072f29b2eaf0ead9dc1a14653a30ac8ce8e6ee7672e28d8528d8be96f02c77d611f7c3f1bd81e80807d040f82ead98e04ec0008c19336108cbb79974d837ff4601c96eb61093083760f1bd10356e255276b088acf2657ad79a4ed2196a71f729163607eee955440f218ea180507c8c3665d184a34b2a6d886075391a789f149f0eb84aebaa51a01f4de1c6b82d4477977d87c7e659d9741ead7401337b99cd790c805c90e8324f5bdb083f6aa71c2b9784f76a3678d60482d78742f972edc3c12c4b1cff629946c9b0ee04964655db657460500efdcc8c35931fddee377acb74044ef1d23c042aa2eaad34c1e9361225cfbb3de3dcee281aceb0ccac9e33ff212a237b5ec9ca2b14766345f5cf42c25f2e56098ebe6f1aea4aa3d3c1b61225951b291af155be1b257707cf42452ce1f409de633f7f0f0fc4b777722429b8e827201ccc19edf652945d0af62eb29bea16d0551b6cc7c1552d2d10bcfc5a92d24e00f937bd8451209928b6eb88ca68e972b7bed72afbd60247f010e40cda57bcd70a28ced354b7633c8dab60224a5db9a015f323ae161f431ed219786fd4dcbf6a077c02876ddde99c97e1a92599ca71ddbc1cff43e7af3f5bb2c776d9da2d25be02cd521ee89ff23899dc2fab4d07fb462ee2a23e49813e4c616fd4a9666e7b52261edda24340bf6b6416c4bde8ca6647d283cf423d3713550b5e1c639b75a9a82210ff912893613baaef4e681147652cc7c522132ed4cc227cdc6d18129fe927189ff21fc6815fd2beabc70d04e8c0ff36ca535b30bd3f27c58e24c5303008101b6d179dfe3b0fa23fa4132a68969cf8c08cc012b3486686142ce977087032f415ff204b35d86a34fc0e203b3c457f9e0c3342809e216fcc511b205ee793a5d704746a318d4f538957e51d9d9e687721ea8907cedd9a8d392b383940199674002b37d586a14338b78feab754ea69128aa7053291f4c5b6f9a2e9c21774a4ccce03e2c2763834d7219ee1a5825a231b392a7c660a164ce4571bab1d6fcce9021f1732361587f17102270b8a3973793ed3fad8133e38995683bad172d41688d93f12eb50c64ed22420a09eba628ead21e0f72240d05f121f5f827790588bcc5e240a924a9ae5cb691aeaf9146b2e73f5f02394faa9525f7299359fa94786ef33531d75e678be32f55d270d658b2dfa4d55a01fad0b1ff8dd0157b95dacd71315c42a895646dce4c1733e9cfb122ceb5aa31439d31e8db22581a0b2beb14abeb84c09e4afdf1599bd18017c6a6a70123c077e9f7c0ba0bc6d2de88da5dd7f8cf10d11adcb0e370bc23e8f7d50d1f3d36e9c4215a295735b3310cc26a9a83f084d7111e9e566a1d5dc8ceca042955daad4792463d6f8931357c43e4b28beab3430730efe21a670bfdd83f21b639a39b9c819d0ee5cb6a260e9043d211de94558f1960714cec5d415044af15b970cb61dd6418167a363970ed878e9926a7b126d51bc0c6b48d4083b41228c1eb4a7ed3b21d6a6b610d0aaaed2a81254f9d82a55465a305cd83090b0e0319160a96c3716deb5298031e46ed5e2d557ce86cdb5b659021bb522058d51634feae2e245c1ccffd9db22d4df025a95398521c6b91d202ec317f8454bafa55255ef70e828b2e2b4d6b80c7988316230636f4b1a25b1ebc4131c33a46d103871d6a6928c0aa0dbe33abe1df5659d919f1569fb5483614e599313b72a320a96157db26a38381b096216681660d517bd8c750a37fcd446e3bd5615c81280777d75d883712163993aa5048c8d4f7ee51188e5f5619f974865235b0e4e43684232ac3bc6418b051fa96c490e5142ce812964409a5ddd09eacf2b051e109c6cfb4c2e45e5865d02aa9007dac7833a84ac066afec171de12f4779aae05171261fce0d170b40e05744683f6cbe8c028dad87cb243b03d6d5d88a908141973ed33a9ae516745191955a79f2e13685584b4ed08a5b708ecd92e253448541eb8c6fe9c3419fe384ec5ade77699f43e5b23c9e84ca44370bf2c956f4457ce0bccec91782f00fa3220e8ce93553b09243ef11eace493995fc1d4bb7d662524015e40e5a98e005424de37ddfcefc3d7153b89e5db665e2caed3c00794fe2b35270e36dda74fe1272515dab8e11aa6a6dbeebdd827b2c0db8604b846b7aaccb81412c4373fb266de6ff3bec019d8b78885addf1bf45080fa937e82065e4eb8ab296eb16a76aafbde4eb81bdac712f8b75cb7835afa5e1eb47e7cae755c32d31909cc879c75500b66129da675ede23ac0a7900ba8573fff8c9cd12d77d6c7ff8f0ac5f6156bc9058347fd94909c7fa6b3f08dcec83e5c5c972c724334884c8fd116983f5a1fa60c3c09a4c5538ee050d48b6cd2ff807de7ada2425a18fa600aa107474368b013635ddabcdf21368dcfc3736fb437bda3f6bb5e02876553bb9f001e5ab339906f42e70a0dd696ec616e03d4326330813d95f97f1324ad39bcd43c04d5f3e38966bb07d75b2e1f09f2cfecd815e55211b98375e002b41f8364187025d45e8afaa77389cbb9cb2d42ce64a69cb429720fa81137ae2bd3e0b19cdb630798390d55a9c098ba620780729d896e30d1af2eaa4561114be166dfd755d36c19ba5ba637cc6ddf10d416a49b546d64576064a2961ddd90e7903f92aee748e80cae96b1c87c2d2a98f862aaab599867a14a435fb8fd32dd894c265781f65de7136523a224c08fbe62fd811f94fbcdc3712c64a5412eda3e778fd9ff64bd3c722e75eef9e42648daec8bf49cc0f9c2627baca20bfcc3bcb23757e6b17de33583236a5cf13a083927b08cf387c2dc928a43ef2711fb90585e6199b2251b7a79290d13ba376ff27adbf1e5f8c5b83a550d323fe15c53668876877180c21f91ae3a05a339e36b048ee092c63139a518108a682de78aca0c284ffca39a1bc72f1737150eb0babe2199a7a00681f25562df9c37d964fd369f7912205b621c9c1332f009a1798732e624899150adb1b4f4897aebbdaf4e34ce26292f9e0ee4da69819f2730c88c220d6b481aff72ee44b55d4d87b1c5383b708f078208cc528aaeb075115a4a1d09b88d2edc98a7468bf8c344f32f3e844848c277161fb9c8d199611a03b8dd78f1ac8c854d92ec2e31b6e5abe0d4f4e7ea2b9ab8a2fb8ca1158877930ee991364c7c61c00c57d7b7b576a363d01012d8d5a1449992b634db010695940ee991364c7c61c00c57d7b7b576a363d01012d8d5a1449992b634db010695942b12e0dbac514daba5271b4fb44bd496732d5a873472604748b0705cdae239cd2a4edf84fa5aae83ad6de891e88fd4f190560a63a5a271ba88f57e6e8ca496661125ef5de742705214f52e3e7dcc24379cd63ab56d9f7077ac421bc5e7023a53062d15c02f52582de7a3c5979843515cc5e7d2c38996fd833eae8ac304d987c724da19665183926909db8856cf9f45e7ca5661df20dbbc9f7e4b3eee8dc1be4100325c62a920c0f0408ff1c9c1cc6abd38478397efa7c61bdb136909c9e943b414fd4319cbb1c4ab19205c813f3f205dfc24031b55c4a12df34f2a76498857b408fef9b9496fc6a6722b4e7e7b738bca80a8fbe444636d5591deedeb39ba970d04121498a5b1268d346b8a012e97c40745de906ab1ee179789ae171ca50053362f6c42fa66abdec7915a04ce05f61f64b6cd08f978a5669fef32e954d077cc0f210fcc126aa6ef0f61feae4de2c1e7092a12aac3dafb01d50edcd54e1e86e8630687c676ec1e2827621d0d866bf28b0dd615893b9b0cb2dfe311d28155d83d4d0186af3a89c136c15cc49a2812158c82dbc89aed397b9ed8ca13e4e2e1a80df102a6c1402edcad1b3e50fe8ffa713c97efdf2eae10a1120a5bf1fa5a9bd8439a04da145255915a52a14eb85f67cdd10616a431970e0bbc0a064e808eff9b4743056b065d4f72be89b783690a48a1075e41e78c16e4aba761b0ae53ad650a208d221dfa7e227b7c8382ff594df28a1f38c4efe44577c0e347bb3787a7494b29fd0337a3352032d6713ed2bb203c00eb6d4ab223611d97886bdbc1a1eeb8bbebce0081b1e68f647941f1bf02fd739db08295d5bca6397fff6bac7381aa84fa397f11707f8b4819247c4cd4629b747beb0c5d9dc619f30cc3fbe091357a9efef37d0269c1e696d2c854eb3aa683c5c18dbd496bfedb481a596b6b46f45383278c482bca8e8e17493c4e7d2290d96707b50b2b086cbe8a47e282d4846d03c1a2e05f15348015d067065b9ccc05026c7fc49ad722563cad9eaa897f78a68d82ded4bc2dac3f4c69096ab175e3b5f5f2603507dd03409e856d1c6930700ff6489174f212c5a87ffc121861652a5da8d94cc9c30b799bddf25ed04a77bb2e40db2211560f3b63cb42878ad2bb53e1b4c258c002144cd8ca4e1e201d29e8bbfa9d9fd6d7075b815f2b918fc3fd9358266e04ff29db49b7748a892eb7282fc72e54fe8ad916a6a514de15bd1d995f26f109d3dc358f2e5a48f2432c731de0f6990aaa563e00c1c12dcc1a5927d8c7018232028d0f920797a15abd857d14c6f3c590762c0927020b2e4b43968fa503d21c2c824045ca7f861953da5607aa12a287169180e709e76de64fea3c2dcc1173f53fd2cf408522c10652a09a8cb17cf289a878701723c49b980bfa470f7c16a720f2180b4018cac2082310d53021cb542808e399291870cc770a8a332edd7d2977c0662e3c4e0c8143697985ed6eeae7c1c8bcfb9d0c0cc0043fe99febd72765b4644015586031ec87ca1d3041db37100a01dfdeaa27fce2b989398baab9dc8bcc7ba909abfb5bf96c43c251ec635d52abb688ac06238529bdea0d0b05c8209fb7776d075a27846af72b478a4bfc2967465bafc01d0b5f255fa0e0fa71bf4ae642147ddefefd5760e2c4062b624a7fb0f30a7407921e8f92f67fb821ca16a97aa9f379fcbef0258a000a7d6d440e4e1d4ab307904615f6ef584d0e7d4fee9cebf71d2c7054ddbcad12cb5b6c3f3180b719dc0ea7771744b4c69a9cece327f983d7e822dda8d91e2b5a9d1541d966a431cf05e1546e259c7140796669a16da64a27fc9ffe4ceef78005ed67fe16b9517f96b7991dc310edce2d38789959f21f7e0362d0d2ea83e0ecede3f0449312d00e99dbe8c6e01055771181191cc429caf5fc217121764b1dea42d9dcabee3656270bb5913f2215f14ee36392a3a2bb818a54a7c12da20798d01a61c0a27a7834043c5349d7152ffaada7f280e7d3e37498d57f1fde47413ec64cb445f5a36c50ead3ea82a515098e6c4ecda56f8ceeb136da2308784b3f4ff4e12071fd59998a9fbdfb8db4cb2a2c58d567928b974657f051344b15f0d2ae93aaac8da5eb1dc58f80a71ddcbe007fb04b0ce8d930289b0067ce88289c9d97373cb06058106d3279e45a750361222d7594bdce240535c62d8700a9abb6e28a3e1866ebbff6cf3e1cc72e49a60329d9bcefa2c601b3a7200e8dddb8b6c798323a65894e96f844572056975eac7a1c0f109b9bad16dd585bce2ecc57ccccd6c24641a8a42179e7e73346274d57fb0d5b62666ed31dc4a5402f3d31684ab993b14f1b52b7186bf827783e34a600ea27c3392a0f9b9874fb987377350f48587305f53f8483a4c67ab5c0d7567ab51f2786605ec16f734dc4d1635a49ca20750110ca17d54c7dc16931b8e4157694fb017995c6c18aef50d51a73149e5454c8e0f6a74575a6e44837c432b53ee93c260e708769632625e61068a270295b92846df00425cc685d8196b5794fffbb6af01bbb565db9a31ac98c7b0ba42c96901bfb6f4022694be8e198e0b3281bcb909a05a2e1812dcb66f960d05a9fd147c13752a2dd1e4957bc99997f1e6828b243fe0130e2b6f72c86ad2235ee8cf7800c95d045ee00c110fcb557e440d9ed905442098af0e11ca6f0c868b74e260ea110a65ddce405fa7915f8d7d55f9a533b5bcb1ceb1dce7b9580e2a3e8d43e097d0568034db20b66089495c7d0fe2aa7d8659c2ba93f3553405ebd2df2435b138ef721451cd78ce0d4a43130512c1788c0aee91e0ebac0f6bd65550ae02a0d5f1f355e310168f583bc6da1dfde808e915735bf0de25d6f29ae04a3dd79b173e485d9f39809b9527fd786d8c826e0ef88523956021987f5c5fb8a3212812d7b732bd38bf6f15016f44623d0bcec875f53236a7024e8901d0f46cf431c1e7e274c9723d9da0be824b449617127b9fab8065879960643154aa0504107db171ee0b1222e276754efce7b9820d67ac59c160f3814b70c55672e6a1d5232d5fd8e9d095e212026fe5baabae7ed8b0ea4d858a167361a05bc4da645b291172a3b82ee9275628292d40ce1b2034bd21d2622423654a9d52e7a54b9d76673968fd38779311b0db67bef0cb1e616e56178013936fd14c35d19f89c2de002397fd0dc68900d5d68fee8be4ab4b4657935c89ef8323a4466142c6bbbea9d3f24cd149b88b28d782448d718cafff5c7e887054479895f5bb62605e915d2a8d6b80ea86b72e0e8f1f04184f78ae5224edc0fffd504eeb92cc6dd1a34851f07b001af389d42c6efcae189ea8904597048cba5b1a69f06abcc740b0bbacbab7fbbe9044b746bdfd3dab1c2ddd63babc8e53ebde9aa836de1db91ec0bf1835fe07e029bb01ea27ee78e48d907136c328377b66a1a79652dbf54334a1fac7036c75b119da0dcfe704b06024c5bce3190670a962e0161e279a78155ea0279b483a7c81905a0338cfc2b9853cf1a2a147ba1e25c2c9a3cdc0d808d237918bae17866f9ab002bca2b0a894c04556e75c0da68e3dc396ddfaceddb7f7a3b \ No newline at end of file +0000000000000000000000000000009baff01eaa93981798fc9d807e969cf0a8000000000000000000000000000000000017d9a738be38a5a3a7ab0e59afeba8000000000000000000000000000000756a5be404e56c31315ba0011a480e901c000000000000000000000000000000000012049b273fd2911d7faabff23a8a23000000000000000000000000000000d3aa08e04ab9686a554e1d4cde8d1737be00000000000000000000000000000000000302579a2456c20fdce23a57e4c5d10000000000000000000000000000001e790ffc68b1ec2d573acee238a2e2108500000000000000000000000000000000002082ef6b99c3da67db49250cdf6e7e1c646f1d4f74ad64b5e45ca48dfa53dca0d21ef986476c56a699239d41a998850b107151a0b5f4b4837c168a5837cc8cf2e1fcd769989e7c4f5498357bb7d1a2228865c1251e155d3ea7bb06c2914c56f55264e6a1152b6877629a66446183d805fd430385852209abf932950eff1335a16ea522038cf3b1f519fd6940f39d7b0f65f7adeae96c22fb012e1cce84f4fab70227dfe885dee23d677e7c7ffc73cf283b1968aaabceaf1456ccb874f434fb0e00be12564a8aa243ff37100c3137f309de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf7109de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf711c8711a492d37f6f6fbc49cd92cd73799070e193f1123dd180ac08b28962f6fa0e4f520218102f05d2be464e33ca2030e93e1e9ae6194a572cc0c39365aa4fcf26f5cf8fde9eefa7c6f677ea6eb32a051a84dff27d1ffc1e09b5deb6f323d5be13cbcac6b429a44090f823f954db32c650ab41448ce5b3a35e9bea92eb462e65196278c3e4493419a379b9418262440af8ec0f1616bb55e6affacdb943f7c71c240d051b701464a0da4acf73d842f7b4654c72803d03fb560a9804b3a55badb40cede5363a1f55518d7321747629b89b44f37c29312f9eac0f1b07332f2f62642376693ca7124ad82add24420b579fc1e3406c1f4889d1e534c6ee60c0d09d9d06b8b56e0d5f6a7b66f14ca92b3dcc656d9dfece0a2ef356b10ad32af2ef4f3d10592e0538bb117a431c04b99e0f5cd31487750b824431fafc258aab060e1fc827911d7343bcd986ab65f5b9665a6e7050eaa7611c5a44219272c97fbd71f9e31b670d84c045317d68b5680ca44c9e1f3a7cdd9fe7d1b9846c86c414641b26f3258463df2ccaab6265242de7c0036460990d8a4678430c65dfa03c5d6f9d5dd81c29980f83e058dfe0725342d1cecbf55c6268f3dd6f7aeed164b3a0ec72cbf716d66d4ce844ac7bccb042b42f0dcb500d81fbc5a22be954937171eb6d6af1011d1a699c0eb266ca70090c825312cb408fae474d8c87a3e23f04b9c33a9819f71c38cdd4ace91182b295f4eabb87fd3d70c16ae0a84b0313d8cd45e13fe4ec1e041d3c4bf18b10aebae7e0a710ef60af65351d8f52e20ad7f3ae7cb2b86e8dff2965f40eac80d55d27d50c664f348f9b62a6f15ebf82feff06e49b7840299de62a8c561dea9db7424db6c34ff9b01f48a2898479cf08cc57cdb7aebe9f17d13c3043162c03b454abe0e32248e7e1c42a01b32c1ffc606b37829d2d29095d787d300dc80c3e916cd1ca86ea49d6ac66c257c6bca9a0f9db9c101831f63ba56fb00250988c5513cd65f0c2bdb12ab7a34fe7755c19076205bee5856172d618fded0b1af8833e7ccdccc6207ce84102107c7abadfd4890cffdd37719ced2a53fab82cb463811d99cb8c8a6e40048ab4ade4b95fec3d547a9c9775b0ea4fe09e69600fa72a21de64e4ab294264601df47ea9c475239f9bf323dfd527c739f873bfd40c586a01d20964a0cba45b122133f65c415206d690a4aeb576df82c514d8ab4b1208a530c67704c527dc3bf18e680984671fefd5ac3eec57543eac73820c7dd426696ca277f6fb030a0119c71b774b61854a28c4c43f4f99574167cadec81f832314ad8ed025a691b562e683eb54164b6018019247d6b3048e40932790efd5a62dce0b8b53b6cb29304de17478145fb0034d3982a514cd4f95312a23459290432cd002c0ee8abf17406ba06ae935dae3e40e3c6ab3aef4910a8e4b8ed6dcf7d8159d9a8ceef97af7d0e67e75cdb5bb587c3c27c8f15d9bca98415cf394ebcc1918d1a828b5202012063b769d6f7a88f5f0dfa18bb62798a1ebae1858962faa1817704cb7dfc6bc9ccf669ea6e336adc69e7d09b8e46766ed1407dc154a635f9624ef9ff525d3c5be7bfb891d902984f780a5105219ea6c909d598cf3a8b911a3125c1ae9d4711d1a0a22e115e25f484e8d9e8443c88e67f95ca3af2dd4c4873f1d41bfd286b5e293beaabe8be17e4c4deb746e20503fc49891b4b3e0fe216a37259f4c29a1ac98a50af19caffefd3d954070de169d1008d6c9c2efd3f89290ef1d80707c13c6af994766b9c8db6bf0de8614f88a12b59b40de98341fbcbf24892ce903d6218fa490d112483695d1fb8e248875d389dffaca862645c7cd60de9a2f31838fdc37e72c37b78e915cda9db66daf8524e9257b24e987a3f05940262d2584b7d47030c5a982a7291be235905a080a78cee9618d53eb7aab692b8999d02a7bc712d2879d79ef8cd00c5be8b84b03bb2cd15913d4edc0aa06429e3e6d9717c2700671756ac1be5a28a6636c00a11c07062a9778dbd0f8b6e0dfef1086d51203e3927c1cefeec58f26c7d4bd918aa616ae14e2e27026852350a4a20abefa0e68dc3be68766a9b38d236a57569141a3984bc80cd11fc0050c7b16f407f0511412d0802d2a14ad697f303e7e519100c472cab82ae39d00fa0eafb44a56907026b061e2f7b96ebc3c39423a69fb36cc0ccd014aaa33a96a67e2253a38cdfb4d2e80f9888637bb6e0e48e111178a202e145e94f9323abbc80a994fdef085397f0e6d2e7bd2d00aa97f1dca15454234169bd8994caecea92a56f3b271e9e841f023f2e21e108f3a85a3b0c748cfca9a8b9f078dff430776db45a99920fd386bf4006f28a9fc6059ec00f43f19934dc7f3474089daaaf80131a8c5b1df13fe72291893194bf5235f49519ad261c5d66655f0f194ec513d453aed502132ed07d0822cc23a68838a271c578376db582df6154dd51be70c0deec2981aca2c366c227502ae3f305d1625012399e936d2d00f3ddee589dbaf2ce2a0b4753b9d26ae687c12c76edbaf5f935623712f26d06ae4ad4466b96e33ca22cdd67b2f74e289e4080cad1e8c9ecc84d45413ef2aedc5f9d1d6452cd181b27dbd8568bc4c10b30f4506b434147a86acd56b04b8deab1614122ff7d18de2107016e4be3a213c935d5724db64f1c4d81397cd350edaa8e4edc13218174b2087f647d6d4c0872ab9d04900ac29da0779748caba04bcacc5b048bc3c5398837c69a7b1a9f5c2ada329ce728721f7a24f9e00a4381fb21f58b1fad39373ca37bb34b49ff015f67aeb506fd136e666321dfd6eca03a5851e7e06e9686873323bf344cb02cd430e9705e5bd6234cafd9edc75e825fc61b96028543c3c901d9f5acc2054a7ccf599ad09fc4a602d5e934a6a8a3686ef62456aba461fe35bf295314ce5b3702bbc78bbe7aa5f52e29857b564c8a39ac352f93b60ea79b503184fd08615b24e6285f0213acfe8a0cf0d09e098d5d473813867d795ad4c9393e89017da73349a6510ce3609f18711d380fe22b4c188a480166ba673f75340e4f31a14b1bde1e8bbf3790b3c2bb910ac64e2f8e10c2d8cc7e9249f5cb38dab449a282a9fca2555b738fbcc6e276d207c8f3f59dc596b1ff68a123a09b05ea07da371ade7c7efe1d9ef12eca62e54e004883be4231c2ed69d60cd12b7a5a886e1f3ac8153e8fa2cc13984438d93c1e2cca39031736adbd4d6e92c46321680bab287a7b8868657015501a4a895715210887b473aa126a45b0971337d3e3be1390bb4e09d99fd0d294bce0388f5608b40de672091e864d980bcb880e59fbd21726b9fb7369176a70bfc7a44a6165c0e425d44265d447ead6a499810c82041c88018ea22a9a4de5eea609749aa0a866c714839bb8b1f1bf1897bdbed67da25f1e96f27c7810b6108869197edc3b8cee2d0334db9a50f4711da7c79bca008b7fecb9aa9057faa361155c67a4cb9117ed07173eaed697a993386f6347557c9e9a60202625932c4dec89c84c49ca2ccb0f181de8566e1cb1fe6793dc731a22a3e13655a88374add1f70b029b93effb3776890101ecbea9a43dbb364174d7ff98362dedc2b17ae2757e56764dc020ffc01e3d181e7ae5e5f693e35949c3b5e2cd56e4c470e859403a21af53e1dd68c9fd3b431ff98d83e25873b644460526a6333b7afb101daa89c451a5b02d00491965e863035278370ae6de6e74e8e24f93c98d74cafac3ffaca9c19d539ad32627bff6c10f41d72e76abc2000f405a1f4115c6ebd54f16f7e5aaa10969b038920d0302d22081bda8327154d18b40cb4261d5cbe8f06fa9f8314a0286a06079e22df8baf2158bb5c5ac65253cee27fc906c8439fc12bd974736eb8dc6227a9a012b863dd3252269f0770a7f3e183907111ca732f32781bba24bcfe271181c7caaf901a7e2001f503db3945d25e699faeb3083cb7443a009ae526a0b72d2d6bf8e602b2223271261ec6b40a3b18ca288edf42803c9aedb47a5e326c4139c8a79b8211eed56044d9d72a7b20b52cf47166126145760509749d0d05dd47d325e1863667cb7f3237c6cc63f44917b031a2fbdbcbdea296fe2ba756fe863b5dd117700443273fb22a0c1e58a79329b4dbd27099cd9120927a49d6ec5e28a724ad39333383d3ff30dd752ed2a5e24d8c574b22ad978aaf2c16ab8422ac44a6fccde45eb369b9d3a2b2d9adc5d0132860fecae6e6d33c1d919557552430b5332d20fafb47df3767b14f38e0c14f6d6ffaa890ce488a2b0670d353fb5486c85680cf99f75aad039f0161bf2a5969092f63afc70448b2c6bec19fd33ee4941f9427b5dad5daa152708017b3e1a18c7d093368ccae3f5e80ba0ef4d863b268080a10762741f80656bb1192502206a34bf56368768f71d49bb103839aa2e0931036c8890af20272571f72d1b554e2915cddf9bd1a463794e5daf09d66621fc3b1cd947d3d5b4ea7240ac27320c5531d04ff0018ee0f32ab7cf9c0860fc65dfb441b9035cec7acfe63db11369e5b1950e62aa8a899c1fe3cc9d54e5a1d9c9f5a70854dc0a591879cb3bee2367ed4671019b7f6aff9c9d315c5fed984a1242820039f4f23d79306bd30a66267f51ca8d9590de65a0395d4ba0a3f8fd85a544f144c735688b748f900e746c1b8a2f198c601f9676a98055675d17deb66b6ee41088aeb7a8267601b5ac5f0019a02e2edb8da1422fc6b1dd7da41d77c2b0703491a94938dfbe51afbc9c25b9040e2feb8d97ea411703e23df92be19574c2aee93ca73a4d3742b5564fc9e7fc014756ab2a54af805d76422aec19acdbd7daecc34156acc59df3efae2a8171b604e8eebdb5c98f5a037b79119eb784d4b5148cb4f1b6da48f5bb210c5dbff5bc1be685b7f7b11f24fd6434c6b6420cdb2010f1686392637b3d3e7a098aa259da1e25afeec6a8db87c255002875a5e7dcacd6579cb14b47cee9197b05b7e0f040091f65c77213a6030949c72762985517910f52b96e34883089631cfb05aa3a1613a23dd8e8a444a7215b3ecd469b08066876a07420d90dd0ebd3d2d296cf018c285951ab3714d16ee828637ddb63806fcdf3918755a86f795dbdcb1a59838e9605646debc990d3f66b864084c751daa145f1e5988840fb6f316e725b9749a46d1450104225dbd6096e610372b47e96334f6a47ff53b97d1cd17d2aff84d0c4ce09f2c5ffbcb8e0064578a22429f307b17dc712c4803118ba053c73d4de5df65d12bc7c323f10eb6989c9421d6f46eb716b83afc6b8800636488d29a882f489221c736654d7ea792ef56ea4ea35b5724c5cd7ff0fc083c86fbb57fee0544320fe1b2d44f2b9dc3e2b2a9eb03ef3f39e167cd8890b4f2a91c8af58d7e6cde1aed71100d574dc3989b8873648f6f571571ab26764fba22b89d997b0fc476d4c022f1d1cf95dc1df02b3339ad2e42f16e761e587e2de6830e858337876c9eb3ec2f6173b0a531d241188df1a71104cda192f9125b3fdef9f0c363cd0d16d6908060816aff47904b46fd01a8167c0f22a7371410e381c4dbd3c4e3f580b37534ccf682aa68b48a0ff4ce11b007618959df12ae165676ad09b643e1f49227dd1d216a42565b7c4f96d2d2db1778d2e1576ab4c4e25074510d76fb576d846c92d072abc1ad18309c2c5f067867eda34fa4d625bd5042206a244f4d479e0cdfe6a57b50901e79d810d512f745d3afa60dd1b35196d38388ee026576fb2441f1201ce1eaf1f2fd936f5a144187f83c826eda6742e0169dc29410b2a77871312a889ba8d110adad140eef3c55ffdf584c280cf3cb83e626028f1b0cbdfb0101a175cd242d62af01ee078d4130f71c1a8cf27611296f42c176fc20453711b3aebb0b7e7806a105dc614ef5e0ec802ab5d346ca3e72348ab91b7bf23a718170d72331f385fdf11519f2fdb94c043bae87a92da63fd9e40ba45fbb18fe974de23a8faf6c2a58117698c4706408f0be48a986e188bffb2d0e170a9872348815af95cd89c6b115e0afa9cdb9ccd95cb76e4b99c46f5ea092cfe3735d6c140d2bf79a3346a062868011e0c3aa06f56e90a56a3e0848f9a24cda14e85f85edd969c3ed7c1d281ff27199b1f4fdf97dd9ed82e5b200f68dee9f48cf389c6e538a071aca8d330b6ecb1135d6d399a64c1b654dc5ce94185465733222b2a8b2721afaabf00a96cf9f4d6032e40f4867f86ce62b86307bbb7427f0095f84c61e097a2dc90c322c76c0ef722f9c88460bffa4255d2241ee92aa1e30b184478d93cfdd8e8fff897233d5d0801ab08ccfd3ec01ae38ca60f8c86111dcbb8329ddb8ee97392dfb2c50dd52e0419bf8e5045e7e4c8bd902e3d2c5f1d4aa70a555ac5395ebf387729f8c3886e982b357542bb8a86c1a5df6555e118dd422d4dab2e4e13349a91f4a0dc107ad8511b87580eb44b042a7004869b45d221cb9f56dc24993a044786677f5685ce889f2cc692e6ddfe771c8867eacf9705a1b8ebd6da75fba4c47b9d65d949ceb270f122703045f97a6b886ca1252c6187add09cb000f25a144b2f323dbc434a63b6ae1bae88f44b930b8e89c90c265b301a05c9dec9f21e3842643750450c3326c92a03562ed76d70045ed54b3371717110d9b6844a6d1690eee731165c698bfb2fb312e31f659e710ecd6c808a9072a969219389ee8068f1caa9d6eef86b284abc2f2ff42a8172ef8acd31d99a8088e3e0b76573070637140294cb958c7a731620a406230ffbf7bf63cb1934ecdc6465457b0ecbd2e83c2a5a8eb423ed2680553666198c418fe519a31dc73ce7fd7a06985290dd5e0b77043cda2056605fa4c737dd2874e621f24bf1b5e021efd0e5668b8fac38567423b9494bb46a825cafc2a2ce19f7905ae5965526638a9079ffb07838636770b2d316b3cc3dac61305d240fb52c298dbf6d03e3efdd5a56844e54545de0f86a29cfa2c3248c8969eee74daacb2216e23150d42c7f9e2a02f2eb85f2d3069251a2352e57bf9b75353bb305d7951e51bc00a58f61a2c86f34a7e182b6be514f4b877fd61de9ea7980a5d322890f22b2d0af82b0c936b9131558d2ffef9783ceda5b97d4b1c22327151d6df5f97f1424da0fe678537e33bd85285bf12a34a7e29ea36ff89765aa5c4d43129b21621f957dc80249d31ae3f33b631c8de6920965055441b3346d07a4f85f1c75c9e00d6a016c451a83275b9d3857c8bad2c37030f8258f8091b44e0a625409759df51e40253c099d641d1c7427b1b109f405f9835695ace8542895389391773342d61f5b21f7b98aebe1829824bdca5f4b72f40746c5163dd97bfb2c743543f337c1220e81ecab7d426e00e6887da5c06e4905395323231d1669fb779bb006798954300a39ed6e47c7707b36b46888926960f7812a68c50dcdf3ccb540d686edca3a0c6558a5f4d0f782634b210fdc6a2b56ffade5639603e83359a9b2747b243fcd1006f249dad146c2413af48fad9b1fc4eb3f5a137b23d0160aca5f1e5d95d7ee069b345f4aac299116487649057c85531c3e53adba52f7f2656148a79cd325bc030bfbd8457c50ef8a223877ac7411198d5a3ac75e62935e4199b866de6af6a824c294e2747879e781cc73230c3b8d1274ab8f7587c81531dff8684749824a8d080f6e51d83abe6f43d2a0c71d47049dc97529b2d67f25acbc970a8f71296c1e2e786df86bf0b5b093ee90445bbaa130112319e43e7064d2ec5bdde5bda72dca1c06b7eab9f3079bb87aa48f973f6eb7572e76bd0590e13d702c00228ba147f62328531e87a8a70096d7a93c86440456ad5c2f98c6dd809f3c3b89d29cde5aae0c50e2edb243a9ad8cb56b03f119d02d11e41533bbf838004a21dbdddd6e3c6b022c764e71df471750920ef66e28989524f147477760b86c0e2679903fbcec9a0078f9cc079a153976af04d13226b36571816c7d9339e0c6c2687bf9674a94f40025d896986c0aaadcd598c9a2dbab6cd87e72788591cf04a0d1ba65de39380a0519b9dd9bfb73c8df3f098f4684eff40050c622f2bd462331087083363d0f430399850726a1a836bc8c28c9f78527ba0f12a2331af37712d06ed442aa1206a02e18e39da8cf78b4cb1c1f9952a64851a56375598d4e4750ee7d96c8d25346790825b164d76edf10cf447aeeeb0006f4f173ae09a2df091e5c323025574eaac815423f0481512b73daff133aa9f0327dcd81d292ad4819502aa80076abc9733501bdafcc7b1834b848c1c7e468e9a0cad617ffd167a1cb2ae4ae3e91a33590da08cf84f0d202b483dd6a2ae56c0d014a9362d9ad72c73460b4c85f9f719c4a7e1671fd8f23746e7c0e6254b1386c9a637e3571042626ef5547119b711d4458dd0502686ee9ce895235f1d4e79dce78fc9eee8bc317030db451d804757b7f81112c470ef241d75dfda59f98a35b66342c361c8d62abcffe55bbddc60be61786fe160bfa229ce4c6e9ff72bee8272a86f02a9590ecc3ae7b82120e75f8ea93ac550b2d31423f9904c3d196d8faacf0895176ff6112dd5c7803a6642a06a8074b0e287c0161041fdedb0b1ebc873ccc6ad3e0f54f640d00a0226bbdb2585e0d893829a8548537779a7de6ae699a151c427be63c13108dfbb4e6b000d843b6d855b63040941ca7d9b84e8d3639fe744d5029549df95f2d2d324e6888a29d6aa0601b14db7b756e1f7626a6ac96540a226559d07794628fca7ffd075136d381f1fe4b0d9235653a3c04ad540521d737781931b848ba46da16758272014de90953dbfa12040edf0c3ceb2b26d4cd19c40fb43ab596db0336a4b69ed5e470658ca74ea32037d71efb675db0ac431ab12077f5bae21865e3aa94a3d03ec5ed86dbe7ba0b20113c25b1a6eb11424136739018e8172cbe41e711ff3d074c1cbc6f1095ea06138dc7323ad4d2d1738c50f76cfab62440aac9c6ecf01530240a536733e7c19506be7008e9fa5f71a34bff29272c31e687c26dd1eebe2dcf827bc5b3046006650d0e5ed64726f75407ffdc8082f35ceaa25b3309861fc0c758a219cb2ee6be68072f98fac69be802ee967f17f8070288a40c506ae2b24a8433a371e52cc22f0d03f1593af5faf7522386408e17b84740175fcb50cf91805cb5e18ed30defd10b1a6e80218b9b3360fd40c0521207163ecfd1a8024915500b9e1455cbb3115ce90f9fbc14e73174dbe4e2a8607e2ff4549744e1607a6f58de4aa9f870235ce6550a378b9a17c31c3c51f5d031d90c8f7ab332c6655c387787d4a567af3978b30c13e94c3bc4353125a1d40afd23ad8c04aa137a6529758eb51fc17ea6c5ff109224fe522f1909680cc07fd14690ecfc75d867b590b7ac228cddebd2793ec7f7662218894e8b72eccd1138d7da1c2d9e925fe236bc9dd636583142b512f688dddb2cf613f4dc6cb701c5a7f540a3e8d7209b2f7f73f5d109dc52cd572ad7a48f2a178dfa1dac5d5dee57bc6f2ebfc06ff91709e210a46d68313c2be0675d1d60352775480244911386ac09aa7767db761d8976d3ce3d8382dc1439368aeafd15c82dc5b25a80de2c9ae2a0df5b7fd7a76f7157bf6c135d3ea21db605884f66be8e0b4ed7c723902c0f46d30f9bb526d632f36a29aacd1edb34c40cf3301fdfb91d20aedf0d6f0b1e5d49efa7193dd4d91ea2d6612abef2d34b85f0f9f71a42e81329791a8c8a5e2b28368f1929798f08140e6b25e789dd72797a9d8205cc78b0df0c1d0ceb8059c119a4b1d59a975db304a99532f6476c614624db935c546c6df91d385b7e1dfeed474688d2f998642c79b621454a217e1c07c7ab73965feb365327dbc98c1763530141205096a5d3c133b873ab878175419225d1b9767c8dd21126e426c83fde18ce7440465de223738055a4891bc03a76b2f2a9a3c5304835dd07060aed29c3b8c3ad08ccf7e5bb40458577bd09c82c369d355a9edd6dfeee2103860473423f400a0dd6d8f599b5acd1dfcee4607fc7e925286635542d1a5b6e0863f583f0326d3046cf08b4faf5387082615a4a1364ea958bc123348d1c7b56138a7db1d671106ac6a0f1d9455bdfb1e58871f3e26f4b9ca865e14f12b6bcec1be9490c725d2712e171cdbc5da40e0ac6eb94193e1e0dd1ddb3caaedb88de7f25a79dd17ef802211db8d3821fe76ad4e6a0e4aa89281f9c204c1e4d1ceb794b247a1c547cdf15e338d08d2a179d10338428eff0d262541d0f35edf87a57da3029b06ff7c58ce33754dce97972a1ee86e36c30f4baf0ec9c04845949a196e84226613bdd62d00c7fb693ebd31265eddbda5df4f1576e29cbda2a7b2aa6ac2d721ba5d805ad087fd2fed3dffb0190b259fd122207850e707553eedda6653bea3c170df626cb5e44df93cd6823efbf7194409ded69784ba0ffb80466b616eac66428b3704c312af0edc364dbc66fbe00a80a274a99b6cc568ce1bbaafa1d457183032e1c0497cebd37b1b842d853d458642feea297b65357287532855f98077f65237e977156c230af4ab4beba8c14c6445cf2977a681b7bd15e1c63b26f7b12f0237e977156c230af4ab4beba8c14c6445cf2977a681b7bd15e1c63b26f7b12f001f06501e8b1f54a1cf413d6e6d8aa06f476a32595492afb558d13d0cfe4066f0123a2fd4df73bc669e8309515614f31f1d5e094877b55aaa24f22f50ec7c12321a59762d0397675123dcab304c720a48e33481a5a18cc57d6b921ef31c2f3ed22e0be32ba0eac52d02d886bcfcacc08e821197b40e3a646b2ce7d982c11f8f70dd78ee9640ed04629b3a0b82e88e19181142449e03da78aa01230aa65279cf7024df9a15ca1a03f2100bad870cb5f447ab2bbb8aeb76167d84fd5de5c3aa8b20c2924244e57f1418dc612a15bcb96c2b2b30645a05128054064dd931f65f49202cc4778f3fdc27636e5bc8740dfb0b5797967c645d3929479bfb6b840b8e60c23680ddb3feac89534d11c38324c8a3f32b0dca19c5a279df87b3a692a52b17f1fd863d854331b0072e5b9c726727fc526ad1ef305952221024ac5535b3f6fbb0ccc28046ebf5147a5bce1998055100e3f3cef837b94c5921c3b6493432cdcb11d7f096c4eb91ed49d0056fee62c42423c293a272f12257cc675caae66a67e0f0de2ec2b2f7224289d6f5336128f1dc9821a2c8e3ea6a5cf6a33152e90d388b41e911529e5311e4ac967eb44b35695676c51420e82fd2d65d7ccc0b731953d4e23943c6b7273dd540f5f6131ca11fbd5c7b03dc5dfd5d8c95544b04947b4d2d12ec82fb2ec99eb0f8ce9c8a5c1663c49c7f1121fddb08a9e218933587c9696f225ca3ea9a528a93eeb0d308a4f1a38ba18c8c7c7031e9161e174a678f062f6e9055e57c2485475f67c3da71b9d46a4bebb6a8a5ab216417758dd7387addce34808902c548d1f9ce05035be0497f296faccb30dd319bafeecb1b667ca68aa637b207a69bc9222b0a64f85e2960de9af52c07d51f6e328bb8ae62048eeb90402a61d7db75f2ae8a718b044ed89ad644cd97f81e250b11c982fd2c39b4fdde6c6190b3d4835d77a987f533f4331458b0920704bbe1267bab32923b305830e07f70526408c7b9d98037749426c2e90cefe18893410cca8871684df2fdff2088e812427be0ed17ed6a83b822fcdcd28c68b03dc56e2c9a2a5f3d73a348f7f096bfd43298f4ac4be7abe010a83395122265455f4a1f6788bd012e38b6a4ad1c62127a424dafe1350359c999a030d2c662ff527a2ca01dd079e83cb75915d9f1ec8c28b2221c4bae4340a3fd462842cb8b28a6a6d3494f0bf7578dcdf9ef52531ec4a230ba648369f61e82441b3cd3d563b24b2eb132c27b13bf90ccce85bfa2b6a45ae04532fcb8529a755007cf3e3fdea237e70e00a93c2c336ba4507fc26b93176832c466dd34a5f161ff5e30517cd529aa0b59dd8858ae1cbe0ad69f93ec870dd802387b48591ff4e070a169216b5e9ba416304b6d7840b9f3acb7879317da8196510f5d37f8b664db4d77b2433e34e362f8929f7f8deb7f6e09036893ec73b5b8d0df0d38d80071ef0a6b28656ec10dc84ea02b859fc3b6f005fc1e87ec383fa0b136cee0f32c7d03d0bed8734233dd992517ca62a0cdaf0fb93ea57b5a0d65c9a26a956d6a4876688cac24b7d6da6fe3d5beb71368fec7feea35c1ac21de901412b716f74174b659e03ed035f596232da5b4f191e249708fe8f0307a73a5ce8680bc754006e1a7a5322efac831dfa9dcb2a6c178296a6b879131911bf13b22b9a08e7e95d57e4d1c75ef17976e1bc940428f3fb63b3c0b96d1942e701d40c26b025f9068ee9a84e0e84f17f541cf30848bab0de45710cbfb283b6585a3a71c7c5278eb08679d26b4de4f53fdc9973405b38238e320aceee3bf2d0ed8ef9d71f520ea09a3f16d0628ebc6be00986c98cd54597f83c464408927758245887d6d68a2bec97cb34d7266b4908452a17a846ae8ad49f7c2f35ac9b372698141bd8231425de36d406a2353c4fa9a2783f3f589e21d84a1c6ca4c4fe7bb1436ed3e8e48429b2d5500b776af106e5956b6c86c517ea0f16e962b780ec2ee68dd4a23a0f9524a19195528b87c74d16a85811f2f453f61e0c155b674e343c75e338ccbf169b063d13686e637d0d36ee3ab4780ba6d02f08a97435d7fb71c057892fc60c14121b4bbe338d5220a265e901b1e19b76cec029bc041802db13d0748a71912b605e0c6b218d99020723c9c6039f92de8be3881c7fc3078ebe79ab63913781d3101a0f7d42fbf75d38b238e16aaa6e601bf82c3c1c039d478469a5e254e331e833412c40ec51b568e1a528c8161c6c4cd0e122e249ddd0473e6b87be0318c5974307253019411d68b8adcd5107c2fb6d3d3936dae995867fff809f9d823a3cebbb98098247607c834a5014cc77cabd68655549c5f70fd703f6d659f4ec26653b1e7411d66216cc881c45c0d13afe59da7dcc1c796e2be0d8f141299c171d9d16620d004e8d884ef278b523875d5996309f168d27dce662df1ab048ac4e39b9652bed2703f58279a76ca5765c4898f3d6ccbee0456737a9e2818baffadbbb2e877e3403e7ada0a225e2de57a08feb18cf5ecc95c71645495f06f73778b0d53c56bd0307e0b333d71a403385890a8d2567a0de1be5c3980051151460abf58ed9617ccd171381442fa8f926cd9929c78d8992d6c94d72082425f60fa6fc3ef5170e9dab0730e157af8210dc57c6e6a7c176b9e8a160c4ba851904a2d649fdebf8d622dc1497900d0bc1377e08ac80ef7ea5175f40336af78c16f28af4ce1911746987b90e1fb05d44757cd695b38006d9a6121d2d80328d6e6c5ea066668e612c5457e3110d3e0e176412bb26604ecc65b9f3aa9f1b661f43416f26804fe5b3b5dc01831cfc37542dbe6ae384e8735a9514f5fe173c7a0d4cc48005a4c0658fecacec9e1e5286f5d5014fadb2eba24cf90bc2f7a54f6a7e00843f301ba7cb86bc5e527e0e8dfbf36af06f2549ace011c84daa47336e6dcddc266b3a1b4e8aa7b0d4222d1549caf7e613fcaa4cd4dd99b09e30eea358889926ca9a2fba017c654ba493ed1c3f61e17dc3255f7fc974a06c6739ffaaf74337e6f2cb2bec1aa13eaae8a78c2affd04472b69f895ec3ec67cad75fd2f7ebdc959b84f1f859f4f619809e715606fdc4e3ebbc3d8f55618da6cb12d77503c4ffee0a383512211cd8220b1850712eb20545c53c7e3330a9877f701a932d74b032e882c694eaed73fe43aa5b82c22a1a5a4a851531368341423102a3ca3f42f7fb14175d6b1eb347245ede697c3b0131b140d99f5261e0b22d1e4bbb1a77b65fbbce18e3e5c9b6524cc6c400d8001a5ca8a5219ea171290179f71510dac64cab243fc057beb2e09505c8d8db8dea20589d4fbd4555795fe43713c88965838febbb5324f921e46c861dd8ac66b12f2626b0913d4f2a98f459894b82abe5a1b3c29225f8eeda6996b56627631c152922bbbb8cd3596810dc9ac6d8d3b034bba4503d7d33b1c8c71705c129ba80bd881982500ec5be1fcf83cac6ff28583fa8c87f39e569602220d06c86bc45cfecf91cfdd9243b3ff7c656dde28b9059d13d9ec7e3aa0e44f6fe2eebacd675ae0632249538b384a255627289abbb80afb63c7f3b43d9388250de44db4b8a554eebcb \ No newline at end of file diff --git a/src/solidity/test/fixtures/all_subproofs_public_inputs.json b/src/solidity/test/fixtures/all_subproofs_public_inputs.json index c33d2c16b..e8e16352a 100644 --- a/src/solidity/test/fixtures/all_subproofs_public_inputs.json +++ b/src/solidity/test/fixtures/all_subproofs_public_inputs.json @@ -1,8 +1,8 @@ { "inputs": [ - "0x1a0280f3a8bfaf8f03d3871b1fbb25593a5e54d4340cf545ffd7adfb67ebcbda", - "0x02742a57cfc9af45bc5d1913479f6f55a0d15a331a2d741f45233c53f7b6d3f8", - "0x0000000000000000000000000000000000000000000000000000000069c90e5c", + "0x304c6abd032b561bfc48f768b78321a01a0bcfe227cab827fce9e71c3574b80a", + "0x0881cc6aef1d986b5593b91248bf8cc76823bf0d82ac2804770e64c5e9130523", + "0x0000000000000000000000000000000000000000000000000000000069e25c30", "0x008d535e2a7f4ee38a4d12aa88bcf21d2c2f6fa051d12eafba6655bf37e8c11c", "0x00f54fbb0f658e7013ec2114ef095a29bb3e2f95b96dbd93e46f12f67863111a", "0x008ebb812c3e10f4652083fa13b278399f162ecdf861bcc69b224a453c009396", @@ -11,11 +11,12 @@ "0x00f318521dc212d8cc8853c2fa52e1bbe948e745e3f4c501898589a2ac7aa38e", "0x002c18e52073a69b134f3213ca6d09b5d1d8b7a2ae4b7a9092dabca207600521", "0x00fbc3519eb56137394d7f0e697ae3c40907d0dd4670d156866cffa07ff49869", - "0x00e4882cc91b9504dd37b6317d7dd315bcbccd803a6a5a49edcd5942a1552ef8", - "0x00f471b5c34d9c2293e1043dc2a2117ba009ab18b844a908a644a519ba99b237", + "0x0079e4dcb99d91018851b8d8f8fea3c231333abebca0501e0d81792dfebd2a8e", + "0x00ca016e0bccc21f038b1597675ac99f919b95af6c33309e16bd15656779b4f2", "0x006f97b7c86e5e666d8a256002ff4f9ca418115bb9a4d13a7161d73896025b3b", "0x00e958152c3d08a137d28f0848b08ef4823c3d6f40a1eec3a3cbbb8fb224ef17", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x171de101deed3f056917faecfe6cc04db2ef02689a8a483962a688948ce44461" + "0x171de101deed3f056917faecfe6cc04db2ef02689a8a483962a688948ce44461", + "0x0000000000000000000000000000000000000000000000000000000000000000" ] } \ No newline at end of file diff --git a/src/solidity/test/fixtures/valid_proof.hex b/src/solidity/test/fixtures/valid_proof.hex index e69993ad6..48945d124 100644 --- a/src/solidity/test/fixtures/valid_proof.hex +++ b/src/solidity/test/fixtures/valid_proof.hex @@ -1 +1 @@ -00000000000000000000000000000018eef30c29246410871ebebacc61304f3e00000000000000000000000000000000000d9ab74f8e56a32245bf42eab0e91e000000000000000000000000000000bcd9fbcdb656d594e23e5fd2b9716acc8200000000000000000000000000000000002a13ad1c3a41756d05c7d4f4d631ff00000000000000000000000000000025425ecf84ada859783493deb14170db3c00000000000000000000000000000000001ccab57263784e12693fdbbeb41e7100000000000000000000000000000038fcf80e72bd0314e53c4438b533bb19d500000000000000000000000000000000001fe4fb6a330ca4517406d621eb9e3e25f41119f945ac698304b59db4738493a591f058657b6774af054fd0a4ce56062b083fef7014fe57d8f8633999eee2000a179156bd7bb6edc49b5531b07fbd3c225679208b55cd5aaa3b8ef1bfab026386d0dcf0fd94c102dc32dcd0901dded923f837d896e14babe7742582981143ebbe79964dc472e759d3c53ed4383ffac30e2e9aadb014514fa11d0e9096f544832ec7f31021fa1267c607a6892efd53f819da0454562d9a4c8571b3d29bc314403be67d4cb180cb259b42ad28bc1cc69e09de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf7109de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf712cbba5f17d215df0effd2740012fb7bc5bfb80a1d8f7532a2038e03afb5d3cb00e713ba5b3bc16e8ccead0c1acd0f1030c5cc8ccbb41ef2d2c34adfb295b0ecc07b101146e8e3af9903ea99cadeee9e1f1c08114d5bfb91536b2195390c9312623449891d35b44dbe37339900d11ee585ae0f0bf0eca691042e2e4bf819191d214a1a492f289be44b25e611198aa455364186417ce141f94460d4cb1333a8edf0d53704f37ba730251030e4a683583918484c051aa99fed10886608115f89d8f13fceff9ee518d5c767727ee893548169c136ad1207d5f8f1c818ab3c77f02141c675e78f2e012cd41d91dc7f84c10468c207d77593c110227606ae02880fded2b0bbfba16024dc7553a80964b77ab7325ad92da1cd41b70948eb934ddeb4d900672a6a2e9e080867719da351be4310b89f62769537ed9db12e2f83da53ccb1c03a88dfdaefb11fa5edf247ff47e350d1f4adf522976fdcf18c2b5688e14549c26b4de4ce406a99692b7c5a881cf7931c503654ee9f0057374b0e676a1b6da781eb6a8bbb7719f83d9e6f75ce6b69925b933b0c5c42de75bb8ed9ad6474db3810462bdda77cf11dac9c55ad747e05286267b87386f71296d4f285d54ce828ae5161db02bbdbaf7d9625de77c1a6229259d02f01a4b610d44b3fb2cf93dae10dd2afb093d82a3446771bf19a4b255cf5598308f899ce711e8c0900522b2ee5bba2eaeafcf238c6dd90ebf94a9e6327c1d8731dd549192cd130cb8951ec2fe07212f8ce0fb975b236c49fb8665c508011f19fee36566b0ed4dc4c081e83ecb3cfb1826988d853e7a9164d6c5545e9f888e024482c5e02ff1349c7b56355366a0fa26d8c07a97978ba1ff370f6a8b2a079e21341b9eddfab81004fec23e15a1f20714859c53e28a43b6bc705e0b890875dfe3fab7b49a735b43228a10f94da642721b323ef46e41a25e88e6f32962e123ce066b92ee67f193d7e3684b908ce42e3827129b316dc0aa364171da6643b9bd722710c9b899720dbfafa1b97a190bb2ef1a468f416d48906b3e6c6ffd76d79e09a0aba715cce235470da55685e6ef8a57101b9c490592467b1cd831f76588dd7ae1aaf5625b4275b0cf4cbf5293a8396b0ea3254fd3a8f3eed5f426549c151dac5b79331c429e1bcd8fa9ba38ddbe782c2008ce0400d887ceb15c64dde23b971f5f3775f98bc9d04f3bf8376a8446872d14a88124cede2233ea0163b24e382217ced0e017f58ea51403e6223f40fbd1030fa15c8d7e1025dde696521758811db31c8076a2c9fea16a6823947d9df745ed01f731b62d588717b431b8799fb179ddf1c83b615ee5913b252af3f6bc904c0b16e866c340fdaca26a4160fff6013250e5e93b1bdbe57a97803dc8ab3392cbc5172be6229c20c9c72676f1d5a1aee51dccf44be1bd1e03fc8b1e40e093282eb411d16128ea2ef23ce7ae600852fa5619efeed835edab16eb88701c8327a1dbe011d0d95ea3628e66e4913ac0920ef96a447cf3cb673917998efa06caaed144990db5d8bcaa64acca27addd1c79e8dc9af7576a4466cdc1a65090d47451b94636260603fcd724dbae24c48a9652675aa61a22fff4b5679bcdc915eaa05c932b110682751f469dec1adb102eea697bfec95bad19464f0a87a50d9ba6c232f46e022221ead1877f307aef68902b50f67421e626cb3a13754d69d330dd7fe593de8d2225d223dfc341d14b13f9b4054f98afc69cb35a8c49c4640c1d4018c1df5c692ad8d3808c7d6c58b194df18bf0fc3bebf5435cd3ab439d4cd4bb08a85bc76d203b265a27e95dadab8fe840c1ff493ebab65b42dbc22014ffa5ee929e56c4d360a8e6cbbf983d40df1383cddc9fb9f3f33f3fdb22055c9629fc3437bf46f7f28096a31aafac0e24ab2d2b5071234a9e919e1e8cd00459ccfc40ac148cf6e852c061d03b18bba2a1e57e2b67de5f0c8400bd1966ebea3c9551259dae715d585700881a1847b44b4925f0f58e2f056727c5c7251af663b5c6efa2c7bfb673275a72040c921d092e0de8be2381d8f8e61edbe0d903fadbaab4bfbb0e6b5965d4bc30585afb88fec1a9984fdde7ce0052473983456c83c98b871d8cfb25862bbfd101b75cf5d20c833cb6fdc5ddff4f2d3ac548be964120371b9764613370adcddfa27ba873e1868ecc7bbb0e18251468b423fa6a21ed9c0bad514a516205b30169d141a55bd374ec6134824a5a9e2fc684a0d3fbd444c404c6fca2ea23745c08aaa12571b16ee291e302332ec4b860a8501d02891a8f9b67072a82c45b7bdcf4d9b1bc12ec16760ab0d63ff360418ad49d47aa2ca73de66c6291bd18654ddc1cab42eeb9b463a16c214bbcd5b16c099472c58d8b89535eb7d352d9e2a32ddee58791809628f7edb721f47b8ea7a6f5b9a0fd8c42a4122da3e7a53ae3095fce942a12c11b5321f7878f996bd64043136e45f45d7efcef9adab08d099c697ca3ff29b2501b13b62710bbf06e36e170c9d4792f6e301ed239d8468547ceb3960640c62192cbcc251bc91ef5a7bc4dbcf0e9382a73b3809847c8e6f3e79f519ca92781d17f2134711e40b7c11908c91cff3a215cd978d73e79bf47572bada65cd50f3391185804d51f51d452721ed7d8e9ce1e061fa92f12f40ff568f9f9dfb415892a51e32f2cc08278a6a8c6e9c448af6048faef646547cf08d693634a11a26ffd53903870406e9fb0e6ab2ddc587b51789a5dda8a7cbc689354c355de47066521220207d32a7a19b203d4836bbe366275697ed0408c70fd306615f360ab7f2e54f26063aab93b2c281b4482b899d558ed08a5ef4e29ca6c466c3340aecf25c36270627798d897acd127dea566217670544fec5d1be08b77a4c1e35572348dceeed7f21391b0db01a26f761c5df4ec9f9adb77ea59efa9544fb44cfe96c1e82b16fd325896dcdefc15e5b57ab44a0aa4e049b2f4f2d7392aa69fe28b1946eec5c30230ff9bfb7744ebf27633b4310c93acc69b8fc86c85ab8137f68ea1bd7458521f81c2e9bf7fe3823d76da9f3d5765109601d0be2eb9126762ba5c8cd0453da32ca13991f8d58329806796ea856cc160ab23a3c897d8b33d5dc276147e731537f192deef0b121cebd94c26ee53bf4bdbded8cb99cb5c31aab5911d01142e4059ebc1f036defe83388f29c6b5e477e8d2e14cfc1d289e975ab8822bed3efd973ee800c9b7c6479ca60f46e3e9202401aabd7262509869de4fd5190d896d30a8e088f0ccdbc1652b325f520c42111447adca97862ea189429c5b65517ce89bc6df32f13b4c628d020c6dddb98dd32ef430e3edcfbe602f86192fca4acc9887d2ab84c28ff2bf140e901054bb77552f396c334d12ad52157d93db2ca4991d04553610c2673e1090045e0a47909943a91bd131495055843271379c7ff11b34ba555e9c30e4ab2e012565ee369a86dd75677d35106f0d116e6866c2a2b304bdffd28a8ed26389e8119496d283f98ce5168684a36caffa6b3009cd6faa46fb0c6a1d285af2a743298727ac6ba7d2776c7dd8f4ee5891ffc80a0ce9d7e569b419f576f939e0291d0e6d04bc7539e4b96e5bc5ceae62d04bb0c8b1dc10ef808ffd6539c04ce13f15df2bce9c7eaff93ae147015fdefdd05b25a51dfa8b889f2bdbae8ef659b2b51340ee6d0cb3bb9534d1093d3151c9b79b1d0bbfd50074a40ad8e658be17c043b7679637a4ca946135be4f33a729c7f1be98b9ef12b8d101960b74f4862bc21034005e3f496054d0f313e39849c32e873da9747ad3c9b174d5d230f788bef259409d5338a8aa59d9f1e90d34a85fbf23431e35d3ee013f58ace88703a201010864c7a22f3b6716558da2b1bbfc7ed1a7711ebcc902dd74a25ff126e76e9a62b6367c8d65af38757bc4c6053598d8c6f26fb3d0a6990baede4e5165c6bde7e2049b4aa41cd25614fc8a6d33531dd2054ca9e1109f61b5e6b009be3b5eeb8b51957213297bdee3ed7308cbd1e420c40ac904d138f0ac1dbb675358c3d99fc3b2b92c39567fe08bed9b69b86b15a67460d6ccc19d0ff0375ef117544893f18ae30586e1073c140b8aaf1f1518efea47dbe23bbdff1323d89c23f2045421d4dec01dbde4bf95061f4e065ee5a9cc2b0830b7871097b826acc79faa1c7379e584f2129b08a7623084caa46f98e39df11ef1c38acf36ba06f0a38737bf1f8de63d72598fa87d3a07640e5ff33e175d5109f0279111654e522c3d880438a8435e90b2ac80ed2a0b447a2dc7574f4634e0e39d3a2e2fbb2e059dbf3145577d0b0dda52d3d3f576dffc802d738bd45f884c13dba46b3b670156b8bb31a45239822b9ba1a3da35f4fad06e84363a1b14e4c608012bbe5d903d68cf63a245a11371066b10ab7401ceb1e2ce29e529069bf311aae4d5f72bf9b05e78dfa969b8af8b86e371999f20712a45e81bcd77e3ec2d11d54d24307c4a106f85d2082faf8814f56b8012477f29e97677f499f2916e7ed4c9c54b0fbdf1373d052ebf8ee4ec53200181ea3ff6e9f3da658a76f51adb15d1b98034789c679fea1fa936718a6257448c4072aa88304c6319f789ae364b850e502939d2ea9c37c1bbcc9b04762fbc2f43c20d1f05d1e4709531cdf7fcbc5d35b62751eb27149440de087942b94aadf4dc121bc565dee114d4e71743238ede9dbf19345fcb6e251436b7cc70b6ce757387419e01993d89326254f85d83cb95ddcfc24ab904f4975204bfc7ea3905afca1ec1f3c2722202405cb802f393ff60213e36cc6bd071dbff764b603c2da8be3ac30069d895a63c60988e1683795a114cd61a1b25b93d166414b06c3d5254d5c32212d462aa19fad01fc7905d820235dceee4ada0ef115783745f7b7d1d8ba17e8240b45c6f13b801957cca244f5406ff3920602ded5d7f827e3c06fbc4368379c3815a8aa8c0a067bbd33360d392ead3ba827f164a7ce39ab8101cd3ed4d8db2cc00ae5ea5147337e204b94e2d5c99bcc5c9eba3f3e742128f2bfcb1593eb49a0012f38a19df33f51915cbfbfa2ab0d5edad0d557ec4c80195364262d720c21a1aa23c74ec2071ef4764736a4b56addd36a34be4ffbfd435df6b65e936762e4969f073f4bd6200c63b0cb738ab6965626837d43f626642627a8bc3d2ae0b1a8f85002fed5f1027acb85f3c7d2c93ed8851ee173f3bbc2375ce1d5a47d7d0089329a0b9c962812d81a8d9fd6c4f1d0bbc5969c210001be4fca1d7d38c5a2c9d538e315de287a6d8a415dd137eeb7c5327e95e796ffe73690d1771d35249522617e5b05a0641e79c411ffa6caee3f565501eef1ab62481dad4b25a681d7b38ab774af0cd1261e4d5459585d681f9b4e0439fadc8294431119f85906fab79575aa0e7a2fafe0b70a56aa76b2cbe8305e8ebd844a974daf9240c64d6b03ba11d5e8dd31095cf6155fd6a17ec8a4a204cd285eedb58967404e65864a37a4e2f92a1e0e3714f4dc28d521292a30a3f16a680524a5028c6947513919741e529da16cfc32312795bbf9d21581ee9125d03689f73531879c1b3348bd27295a408f3b4187b0901ccff19716dcd36dfd5f6d97d7f05a0e0ca772aa3b756f0c089ef87412b68d7a1ee64b1628efc48e665165c205829f8f6c2752559346f3e13580245e1602625f0931c4c6dd9df12819d3c4f668d011df84221f6c4fed6466c5ce8031282b4d9c148989f98a196b1663926b2465770f5a41c59c19a2cb683173bb434cccea62df21b173a3d3241e7f901aee1de7f0c6676b8cd76e93100d0a6b3a7eaa3a4faef61c4eb51de2e203429a22e68ef50eaf07c0cb5975cc75459066b82d783af2f51a28483c92893a201cbdb145fd8113d492eb76a6769bdaf4f6366ef7956da1ac3e1b4b2e69e832f6ac3ad6f7d6df0fb45ce69caf5ef8d42994c7afb05fec480c8e2dd19dc959f5608538b74341d6032a308719ba7347ac45d4bf3220e3ead8a8a7206c4680402097be2e45482a8042562cdaaa33e895f56fd6f76eaadfbe5c73c118e1101565dd74ca2e822e8caf044ca4c86a8e248ca5632831cea5d88835b72e1eea97386e00aa02fbc62061db4ccb6dd737afa1d5fab5416b1a534116bc25791812ecb99cd181513b1b7be30828715baabe31e52ea3b4eb5427242e965cea1c0d025b5a86d48e27af5bb83607af6a0650127259180e9818746e70f0c605a1c31c5c6dd593a5db9c783d081dce8db6003edbd4c1b8f849b113bb36c7b1f0877819dd6359dad759b850e121175a1e904b49af716a4d963cb2e4028d66154b9c462c10b43e614067c8fb93e1124ba616b5ff77fa42e18060a936673cd543eabdbd1b2447c073eeb0cd82fab85c472b825f5f03ce55aebb4b235ba13e3245c27c4113081dbd520dcd7ee8b90650519089b59f7c9cefb550c48609e5c201fc6ce634234fcaf62fb94a23a3930df0974758cbcaf69e334719782e2926d942d423e815075491a202ddc5680c7189dfcc9ab85a898c1575be3cbdcefa65baea8f4ebada1befb2f9ce78ef0496a9aaccee0f264b7a94224d5bf9ab18dbadf374199bd9d92e438f3da69a65ccf6b7614c60f68cd26d04d28f91256c98e601cca4ccc2dba20bac84439cfeb738a930e62472d985f382a42fc19cad52388c1df95bee140ab922cded5ec6c9d069d95d4d00b1208f0395030b0fc26a7c787aa3082e663ef6832fff326421778599161dcb43509110ef5e24351fb5a967e59b12aa7ac8d251aa1701931f9f05843e02e976064e032a2ecb85a9709e282616e9e430f3279fddd7068e0074302e988358fa2694b1a03e50c92621244d2b82fb3a31419ef8c3e0200f1c739923ac1b4b000b03c232f73386e816e9a293e888a4fcfd278e5854efd305c878417ae2e88dcfa04ef0f4a4a6260c89b73c6fc18aff78af6a3d81803214018c4d01d3a7cca44d349ce63e091bc055181010c4c36cd540302c37b27244572fef52ac1610b2607ffa2efb792c96b050142f1fa53300c5df9046f0bd1f1a7200605ed6590ed2da08bdc0731f4c689c5e539e636b2c22e02306792b250455352334acba789715a63feef9af68e69ca11c42275ce9eeff9ac7c2822211752670233b02fbda00db1ce60f5987f94d79b7b2da3cec7cbe54fc9884294b4c86a82b1487dda8df54be27a45b9fa29794cbcd1750c72faec9d6cc668b0f8e78f393c618d02979629eeaa88eb6bb3c56f3a012c880e6a4e079b560818c59e0f8f5cbc32a89ea4373129e2ffc7ba8b9723c1b38209a27b4789833c6d30ff894fa0d844008af6b27eaca542119ae0a7c9c3377db49a50d16a92009f8538cd5601c04a7c611b3453e8f3eeae4363cb513eb23911af160462d39e4f54debe85673e95d3b6c0c56d0ac75975e948d48be638aefbcfcc1a2fae46a9b8e3fa3525c501ba3845128891f3b6a2107cde56766b36cf5d7fb986da70e13885b5f55d5dcf67e7435a4134d86a2d760ad17a6ed56968dd078720f7e6fd794b2bff4dd7d3d8501c1f43726379243026f929c16c8643034824fc662310e5f353bce1ded1f6dead1c1a4bf237d34fe1e541a5921c75b62e86ea71823919551e6e94204aefbd6d392a05d2f0794344303a7a3e050ac1ab70cb49465381e1f94d98527fc22da63b34edeba7220f0a8bf8bab11d726a4c6e6c2cd1ceafa700d5a530c4231302e539a9d8b6c8d1951cc02c83b4d9c72401e523db6ace73cc27cf7f0f191d25c3cb98c901ef9211c1ab7ba0890ee639236e6039d42b647a5bf8c7587e768d958605ee28679b88f145add002e0a4da0b1b4a5267f15f1ab8b8253b09b77bcb8f2f3f9364c94c8cf2b9ff1821808879b81bdcafee2bbb7bbcc776626df3f6d48061749175ec4e3f7222aa0e7c4b23dea0d5fe827e16c9909bbad7e740f70cf8aff27f9f8a3a8771f093cf85bc05b911389f0e6a4e8385059a4fc667d280da065a5a5e51c95998e651b9a2017d31bce2c64c2595bee11d8dc5dfe5ecd130eacfa43c18026f49b72612ee8c70c037fb5c6a23eae876013ede220199621aaf3d9d11b687d3e702bdc292fd7b4feca0bd41ad3ba86466d7d00b650cf8ec287fe5ed94a604ca0e6941384165c3cc15fe4ea693aa04d30a425f3f4fdc1a61ff32e5ad37205cb4d441429900bd7b602c2f2b1bb7700ec77a4ad69f1bcb6e99254b8d4b924ab8518f551d3e81e1438ecb9af7fd87507d033ec786655d5276d495214b95b85d0deb3c77c4c802a4915396e328270cdd250e2714084c3c430c9a3ef8d5ab3c21bdbd5c1ab69881b93bfc05ac25f3ece282d26782352d7fdf3abad523c7ebec81d5fb1fbf1a4a92c137c8176927e69034f80c4edc2400e10aa5436dc30be7aa16721a350c247f21526f340cc522251c0fd7d9c1ec21f10c40474d37b3fac6bedf675a151ee30a6226ba980236bae32848ac55d33d5ba01895cb10bd736b6b4e0aa3225ae638a0620aa78dacf0039154c38cbf0b03861915ebbfc2449c8ec66cc0182f9eec5cf5c07ee9b9d00d5f4c13ae263040bf0d235e089945438eabaf9f75cd4a309026ca208257cd8175fd16acae83adb6a37aed7c0013c70a391621050e3846522a850870c6d45a3ead73c8fa137ca49ff28e1b1f4bd1b1ba4934ffb2e3e39250f02f0a10c53c61479348070d6e464ab36e604690a9933896e5ab19244fceb8d0097749d043a7044a3e0cd64114e3271fb78ef396af356b56e91122b3ea211838c6016ff07a499bb4d45e0c96c2170882d88b9e4c8e015a7162d28c0c6b929b48fbb7ff724bf8af10734bc1529c46b6196ba4a58a9b697749a5e73ee36ddf927233fd464140adf9739c3865283a6b164c5c64e0b1a6969f8a594414a411acb3591569b001328cd9e9bc2ee448accc5277734340a79316f5307bc679a581419394e1d05ff110f85793360cfaf94d985ad64a9435b6c03c5857e965701c65991236f67e68e061ce1c2be3fe22ebea53c5779b8b7c26bfb940d01cbace7c16624bb57bd8905007716b33f68f3ab205c243a749ab6cfdf959dd5a0154873f07287395f81eb7d00095f9caf89be26e3df3f7759248dec42d151632ca294eb0b221d0276d36b2b13a258fa3c51f76aca6b496393eb84e72081feebafea657509c81c537ad5ec522732d66bfeed6e7ee67cf3abb0da153a6cb23d2a90874ebd8535f9c8bf1159e704b54470d1e00de5127a921f57bbeb6da33060b5114ff03d88f1758c171813cd24e49695081c7b37be8e145f090f88f8b91db2eb045f3b05946bb3e4f0f61e7a0f421c389251d477b89cedf896bfdd47d794b96c9f2776f8c8bc34d29486b7360ee66fb562df8d4aaf06b37714a15d764bb2d0207c171caedaacf4917b0e5b9f28f73a67dac2f02b9f60ecb9169b9359d33c2329a6bbaf4b7f23913d65ce9f1619e9e7af9b480b2b2994d8ac3bf8630bf72b3bf0a41c8c39efe32cca19ae6680287a2b835c2e1dc62128e0e2902ce9afffe45f12b89ef111244c6043eaf345b025eeadc5e81d41d2bed4019e99eb7a26c8b973c82352a816cc44f482258713142db05ede8e594e9f518f48bfd961d0d04b56871c254f3a9b4d27be7c8aedb3870ee9d3b60b28d78443eb892a8bd469da2e4d8f3ae15d0345b13d2e5ce1b674f30d07fb7828d365ea863adecc9179ec10ba0ee83d091e8446852761b4ddfa983e211b974e35863e32d7c61be2420c50e6439b30c46afd3bd478faf2c9a6ee60cb221a99747659e29202022915d85860e63e054c818df90b981a6d0cac4cd8df27284dcf7da5fb1ff62473072ef4e972338a81ea1bc09a8125d0870fd8f057e761284dcf7da5fb1ff62473072ef4e972338a81ea1bc09a8125d0870fd8f057e7611e2f34a5b3cf7ca31c60db28f505f14d40a6af0c83a82dfbcb620a1ebc3148812f90eec1c5119dbae5854eb37ef2b40ffa0b8e464c3819aedeb3ddabef340e03010b342c1b4e259324d15a0acb5d415b8837b62299e63944bdf6f01da4ff5873048109060984230a356c40944bd035e201bdf66aadd28527ad0fdc16386a80cc00af2f36245673a690383c3714d78e2c717ea83d0d93cacb89519016d9d1bb100b9cbd1b0265d859993a12509213838b2a02c94fb2b3a9dbcece3f7f99e5056625567d5ccea99573bfc8d9ce8560c2c641f5d53a1fe4e4933c68afd0d570631716bbd9376c42c6a1f0702d2aaac2ecde6548ce0c446c73b27348e2aa8453080c197cc62e4680f5a0cdf979c706f23948b626845c6934ccaf16683b26d9252b560a5328825a70240b77fe895fca3db54cb490669e18faa8cd015fefe456832b4b148a946ac301d639c20f2c93c080bc79bf442ce03ca49389e643d5354401de5f08727566a843b383a70e1dffa220c7136114ab8fc10438b01602607271054618250c4cfec8534f04581143ab6ec6650b6a4c501fa332524db196a4b4b37fcbf007f826c82ced1389eb34fbd3857c60cb7582ef151df5dfa65919dc477b1a486f1c06488066bbe72e069fef71b69363fe2cbd397a81000bd7fe54663bbe7470170b7e3e90ee3d5ed3808471bf71026483667f81846058859fa889eb53e13497a93038f2d6030b3c689b65a4aabc9ccfca91eca7daa919095425d2a78092b15e6415d8b81d7eeb226f4371929d1f2709444b542d431315c18f25ca0b8f0b95f03f151be579c6293e4f69fc798ba273b431a093f14a3e2659faab4ab0d52233f7b12c17917c943c255de2108c8c6e9b227e2d8d8cab0f578c987704f46d8b56206d17db33db550ac233662e3295b28bc171e68c9eeac7a5779910ad820a37247fcd0aefb0f9c719d7977004281c4336abf918bd01a11f874a947b8ba88fb17acd1429f90487a6d60a7fdc0a61160c0a75f8a3b70f0fc507be07f22fae8fcc2695392ba8bee3696f959cd795717154b18a59abf2e8a81109041a2217673aa7f9b2340c1a8793169ee628d384aef24bb6533c646fd263a8dad5db298aec7f64f99fef103c3c84a1c0f6bfe3c34183dce64285eac5e0a27b40883838f4dadbe6677745228624511785c57478888b1aa25971ab72e822faefc914a88002cd7ac9d73a230725a76fa174ac20f02662a8aaf406ed57d02c82163f179eb4e5765fd810f0fe27f73c8a2189cacb8fb28058cbf836f463b05e780c9a8ba1e4ad0b0d1e7245f0205c957a1a3f2106f9274fe7f8e7135d38748fc304b127ab863f9e59c33c0b1425f0e78cd747ba2643b43c0a592f88eb711f15f4db65609eae90a130861e781a1a8ed63cf08e7105ffbbfed97828ae90be2b5da89ca0b38548cc2f76c54a085807b0415d510002d4bc4388534eca93f794902ce617096263f0a5b283ac3ea69812126d1feaf89cba81b0316645eb72da370b39cd812f1137dca7049bc49d267a04f67976b1ecaf7419cad23a605c4ee1cec6fd7df4e25b52f8bd380231082a51292db6965528a57a99249965fd845d5c6eddced50f23af17e6b9b4cfdf1f278b138f5e6acd8dbebcc672f1657643fb5c93fd800e7723294d3c68529f76c827710b0ade2ee48f29f3f7e5c2e378b31ddda37210dde714bdac9a81051aa1200f7e158a15d733537361fda71506b9fb97f2d2b072e3c39d4c28fb1b7f8bbd67e38619bf6877278fead566a63797e39e64d1e59f0d98a85efe743dc958a6f1e247fd2f87b9e37c36b4c1fb35acc95f4416ea58b7bab4d084a901429f7a3b512603e0188db1bd59251596ff8513fdee9bf402eace4b68077dcf0086f06f6701460ba926b49f82a803ff0f0b2219bf9b82bba083ef4fb636a3220665af7b4bcaac29541e7758b6a2a2a708c1140c617caa01131678734d60251664f814c00a3c0953a2171a6b203431b662a1c4297d877c1239540c7ce3902888a476f4e12beb52399827db23e2030a085adb064d314b9e8434e280dc49849174e15d50bedc6643ad64280be916cf5bc0f0e50b5bb5cadc6442a206bc783a01a118ba9254bd528ec0d91a1946c756c4eb9efb35d88eb9b4fdcad3789336d2884b46514a1ce73e62703713fa9410cc7336036582e0f668be8fdb294b06685635d8ed3af9f034a267eb3c0f4df1fd0110be8ed6bdb59ecf872b49155f4d415673480eebb31ff762d8dc102547300bcdf99531e360e53533654ac36454cbbb647ddef05db617443d3e29a0186cc9a65640c830243f563bbf912c86eaece1e34482adade826e5fb144af3a41a52192c9c0c7ec16e265f52782361239e16a1b9f3c2cb6983a818af863026eb091e33bcbff44be8c56b89a09ec2e5b7287f85a753ce7d8aaf145c19a6b51d3b031d6371ef6ed72812401d76b2377b05cd91f9cb4ddcfcf56eb5df5fae0df369136e3ba63a4f38ba1b3ab5c6750c5ed5fb229c025a510c2440965a36027fd34818cceeab4d5c899e6fa44c9ced008206f56259e281cd59541b40d64310040c980b782e1fe06c73282fd75ba3966c4322dde374f7d7d079f171158473402499d707d55e37433e6b476de672d17971bafb6ba93649294816da430c161f3adb812012828eb60bc5e2479294d69f75cb6a5fb74ee04c2f2fe1a8141c20c3a1f6b3c81141d80aeebfa54725aa1d41c70873d568e3c19f4b70a1322eedbf67f95e277d07b809ac57af5959eeee1a5f319708e63d595bd18c52636f5fb94a0f274cee7f1cba47ab8df1b655d020e1633f6ee1c1abfb5bab6b9e767fe39aa0cbf00c64c11ac5f28f7bf10c855c429d9dc2fb31fd1a8d700f227bd5f427812baf130a9ebc07044720c6fee1fdd1db7b6e808dc1076a87bb4bef416c68f75190c0e0360aa71af4a3359589a8c672d654e67d51ea24e247ac6bc6617889590374820f4a3f200a133e898e392fa65bb7ecb4006f9d72e811c2fd24d1d10799a0f8b3fab107d4037e1c599ba60ca12bcd52cbaee37377ab09fb6184a314f6e64bead283b0d2480ee6e5a83573ea1f66687f22a612ea6277c211de04421063db4040d9882c022a12a47e9cb8c66f728c6eea61de2689c6b492f79f675a977feba62a74920e01a0177f06ff5ae227866dc3234452c34b9eef4ef7264d3cc0ede0f4b291de1e58382aad17b86b5e390bd21b702fca3cfb928b2b5df640cdc878956434b6e1b094d91320e2c54f6b3d900f18beee6e2e556c900e14f5e2c1f1c0ca539fa22e945abd \ No newline at end of file +000000000000000000000000000000b8d3f16635b7db263390a52adfa10749eb00000000000000000000000000000000002c011bd7ebfd863e25f8b7f805bf1a000000000000000000000000000000b67a2d24ac0a79289428f84585121683a100000000000000000000000000000000002d4126f5f31586a937be4bb5c7148c00000000000000000000000000000039cb7de370879e847fdcc227f9f2aea31a00000000000000000000000000000000002577f6d0f1b9ae29b4ae24ac968a5e0000000000000000000000000000000b389554a8ab74edee8524aec68ba8d5be00000000000000000000000000000000002ce344bf6f99f8328e21b38d2ffa9b10a8c1f210b00484007ad51026af12ad1466396198d25f37f82645a21bc097d50f17c570b600bc13c25793ef70f544c80be860f79e9a0525cdc76e579450c9731a497f56567338b05de0e33661ac0ad99046f58048f95c781068de06d1ca50921728bb4b86d51b44d168ef15e46214c6f00df80a24948ee969d025e2fc46a70309c8f17b4b6937cabd7c611747edbe6318fad2259e5656a856c2873ccf3bdc8b1466144ca041dd1e5e60783534005e04dfc52a36bfa0e2342f6edd732ab3e9a209de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf7109de4c0ce293ba3b96cbad52ea2027630b0d8ff43d9ef999a83cc1cd66bbf03c117dbcfeb68ed48d23660581568ebe7f66fab0bd8e7254d8848b80222ba7cf712daa6772d108d7e9ae82e1b82e711a29652ae67788433a7e2baddf151dd096b02b1ae389542d418a366f8824efebb0d50deffd6d29181fd1cc3222818c11ab5b26c5cda17bdd00b574e09dda21a1f6f1c59d37bc079fac7ac678743281f3b28012137cd6f7c334ecf488af5e18c0d65b4f18b05e6d2f662e702e6410f7797a7b27cb5933e46d5c3cb6c3d468b840ad19f3cd9ce9107ddb7b77cdaf7a4e8d2bde211527cabcc2d495f1bf3a6af42b08baa2d0844853f654a2d351c768f2ba68c82f02389c42b1cbdb62bc225b66b03b085c69e38ecfc97d25d95b0005c2284c1b016215d69e7fd44e5594235b1ad11d54cbca04b9a9eff36b6a86f58e2dd7b3e602550feacd6197ef11fa35d2e3ec070f33f66309e6bc0be162708a5147733d6a0a8b03ef3e5a3f5e876dc0596ce2823a874310ae00ed266f19613d8fc20a0ea82fa8281eddc86fb77f1a440ad4ef1c45c303b9bae402b09ae31b4becf84b8daa1aa5ca2dabea17b4cd56585cb96534fe781500aa12e48742583ed3443deb400f1a2b58ac40a088d0f2d33aba93d6e82d7cbb208dae998ba12bcc0d6e2d9f930c05f95208f3ee225825e5ca70d9260a92ed6e5cbfe34e45dbc4f118d2229daa6521062b1f20293452ecadff3573113115bcedb4835a73dc9b2af57488eee318c8087ddb605b3f510cd61454cd9adc7e327899556b4187149728816faeca48b2a52f710cbc716b986e02ed71e02eabfd86134c9c204e7d6170a7e107afca8651cf1742b047608cd84d5a1ad0df1d56889ac82bbe3b5adcbcffb843ef6083ae04df06c115a8a6abcb7e494360b85281377856a1e13485bfa89ee6596f7f724e8ba50d6edc16e87dd049027d4f09bd14a6eb4d444352faa9a4b6135b80b665fa7e1b25fcb5bd404ade1da73feb4ead6289c77d84fd415a195ce491ef41c976a4e36817d5f7bc474594f4d82ce2d079d3f09994ed0cc5530ca18312df645380e5577f247598f85340dce06ccb2440a9024b4f460dcaf5e6f4aecd3ecd3abca92e0dbe206a877f81831b140719bdca0b857eb7b7efa236eff0dbbdafed35db4e60c92102a00573e0195dfaaa8489be3354a3c4a0b7a987405c2460eec6c556ea9738b509a84858188cad04a844601b68913314b289c5590c1f6bffd992636fe0c5c47f0a04cb0c74ed6246ef529b3e0cdd0ae8012975a611dcfb9c68ab49e5c8fd15180e82a641d28fa3f4255ced7430ac8c46baf60d9cda393d91e97e6f6c931dc5f91ca0783f38af8a12f1c9f5d1292d883a86bf25e939ade72b1d3a2b2a1f893f112c9e9c90dec919f8124ad62777ee190087c204fe40eb18335634964808d3334002623c2807519069dce44f5498b24823ff902ecbddd69430ec2ed6a7a650983124945d3c7e9a126a4615a7f808421f35452d9a4de152d315ae919186c96c88350156c15f0a1ee8a60d193a1ac973451bb3fdafeecd5e7ca5d005a50e807e38520720f5afb7606a98fe3957015f2f7f5ee821f96176f0caf155f8176439ce18ce122d42e3da865ea384f7567d188fe9bc57f68017751db0bf32f98d421548a77f15926ef944a07afec5719205a81cdbff4c86e88dd90a7d6442c7b5e52f2e518029d1efe1b6091d02acb22d209ad795f6100c20ec554320e1b9c34eeaee6332d1296ccd60fcb35da4d2e8ddbb5125d921c034e144765829689304f5829cb8e3371bb58d38fcb75428ef6d58094cc65552bcd6ae410772c92a385a02f57de970061b9fbf48241ff8b48c5079ddaf1b2d2bd037b31bbd47351777fae79e5160defa22628adb0b28dc29b73b698c309ae057e7ef104372f049bbe9b918e0b44571d1156a30e6a4a844b449a3447265336da77f470b7fa30533fefc1e40c42c8a1c6a2f2428c0918543f4961f7d861c347a093ba1d96933308d98117c4768d59067592f1bcffe8546147c308208a84bdb1e57b479326f67ad2425c361234d8d46e2161132b289e87ef8ecc913ff25a918ece3670f058d1d3228420b29541f921f67e609a6c34e9ee764f03894569e82285529b82388186105eda5990788360d2e526022ff5cb505159751095851b587f85e2ebc6c99ba87ca7f219551632b33448214149c01a8d3bb2f18d776ca2fb3f06ea546f72d84a7ac1b227fd613e9ae7d21321c29044e21308352fbbad616afa1f0a2b1fb668d4219af92cecb83208de8d1ad15352dbc6c56ab989633702add3fadea1629753c52c4c907daf91ae2ca70ed502ef11b508216dfc7fcc5daefa250afebbbc02837b5d07eb020b25d13926dca7022d07069ada210c2223f99ef7b6f2beac31131d5fceb8fda4e1cf703d0ad3da125a247250298b6bcfd17e77b72fe1e4708db01af842f52c93287c5714b7b26dc096a3537ff9d41dd70d5ee950594ae6d9d044152d1cb9f27b3114e70856dec22070aa8b03cba31d9dd6f98ba756a9daff8816fcc174dfabe2b38b0dbab07b8330b75d7d3d73a876da541248aea4ca7fc29068de37eea8707cd7bf05dba172a632ad713f8d7aa63d96e38efcdad4842d7395a5de2bdfdd8d07efe6cad058653060a80b42af1bf982d19dcf3674e6e46e632b57f768064369f6e233c788b6510e91ec298bdb93efb399d197d9b9d86d5827792d6883a85c7ff57ed76e533f5446800261e335ae54efa641d1c3befe29644a58c31d5ed1b15afa9bfb244f607d1ca04281e09f8ce3c83b1b97472c4fa6d6426f2b18cfbe1e17c48b854f9b5c811a90911aee0e2217b7eee64691438b4276f220d6bf0ac3281b61a54b3637b72029b05f8413bfc01d50a4f169336cd31e2e5ea6bdf9da121919c8df6973f527ce7501eb29fea01a16a8eabf1f97588d7f356d47c4c5359b78d2ed963ae504290d0241e33c3ec5bfadc8d8337dc280f279ea73cf450e919c19b3bf359b3ff2c506f5316d9f5799e6f78b878518f9d193b1b918b587e24c15708de4c16701cae58935f1c032e3ca531a9b104ee82a5756c7d8bbcc4b5749193407417f3c17c8bde2ee7282b4874850ab48c0ae886a9bc1d0ac53537f85c96bcb5178423ca0ee2839d23284c970331e389ce7f86165640160c0bd122e608e0563158d47536d43a2578c20ce53863183eb1d814f2b183422b699dc6544eb41141d9bcdc66419333578ee3042c85a538f1b569beae058c6144bcaa1d500d454d59e51ceb3bbca14b5f3f321c38ba42a0a5bb3cb4c83e1799775cc30af5f564f4d72ed61111374253cbfa6e14a158936b17bef96fe58d7bf3ffdf39f5fde34574dc4faf65ef0deda603d6200564742347f8a625b25ca92396593583fd8a0909005a85ab6df21b84c4aedc730e008090a99f204877315c4bfec5bbc5cf88ea2a115d1820c63240d1675d51a41051b913b85d00812f3a3a0cd96638c9427701d630d4318c2d7fd6ae284cc0c0163a5ff7dd2b2051256bf3bd1e449c68757c995ecad3d058f6b930fe265e9d08290613ddc9f5b034d96e32012b00cd3cda97179e061f7bf4db784ee95f7d618d2fb2ed4ca65428a49b98a89e7d729578809e6eccc1c1b438e8cfef8c5968f2410dc64d950ca6f6c0bb3761fe07bcf6c12b34bc529a4c5b47508f10119b20bb9f1241cd86f155f5e00a89b09de188956ae52695c8af2c75e4b5169d949bfb23b60a74db5f4c07e227c0a39bdd411a961fc5060b2482a98cdf64dabfe43e5f6f1414700818220e8b16de820e47ef443a23591340a8b6a84f491cb032af36b85b5b16c3e71e590e98d7009ba8ac83e721c62bd7d3059657f4117cf60a633bbb93950045d304af9eac1046a9301b4a189337f92f3e01da4ac77ce8b6ca5a00f4083c1a5bf0f72c5b4527d78047c1eacc15667c5d2d4df79a5ba7d3193d4b7b9ad7f721e46c3f9a98778d3049fa8c5186ef70aa920a1a1cb5ed50986e5e671e6d8151205b842d9946ef260be627af1f369214900f9a25221b915884dbad7c2f57aa9b2bba4fb29098a72984e7df428095e8bf5259071f28924e98a367c78a9c5fcfa91bd6aea3cce83afe16d16a32ba3726c801a695acb4be799661da482f74fe8da72dd285de7d10700a367cd09059d2e1a6c8bc847876cf68d26e9116df96249162276f96fee9131e55103a2e34636eb31738a7f39414bcb5d959d591aa640621992c5497bed5c85daa27dc819e5e6aa435262104a300b6e3b4a6d9e891b3bbe6cc21fc9c5505af5fabb8ae2d4c7e47ff701b498ab1c8923097bd074db46217cc6106e14eeacf956540806d421a535a4afa0ee61f5844bd0313c9900789c21afb222a79b5753f0e0fa55d3b0040a2fc6ab0492b5f59f90149ae3d74ef5732cd24650e21f5224a0f8652dcb2394805fc348eb2a5e88b8bc8415dfc98b0625fe4a7071a0b28116610262702e63a2e14b87de5b270e7507d68cf9e495e88aff544d35e005b22142e3369a3867436b20cb01f3fbb91eb278c1ff6206784a2f7eed836660cd7fcf2cc9569063e6a93a406e8fb0ae79749e402d43ffc571590140b1749c50b55012837045aea0ce8248653e4f6420ae97f2f8bce5b6f80c31da89abf577b1757462738037d0cb5bf32ef7e510d9bf6c56efb83b4aebeca57035ffb6b5b3a27e17df8cd99d9fde77b0ba934ee9241365b5f558e14fdd35d0011a6a1e98f5a289cd43c272a2057e732c2bf30a47f4834b8604f5dc96796bf1b69530365eeda1e406033a3e558ae00ec8e1df7866e2a25d7b43260328c0c04cad454684335b11b099e7766a3ce0c054c0354b31a14925487fcf9b04458ced4838f75632ab2bc1fdccec2137c16587813a01a5085ad5b69c439fe85a351ddc3e97f524ae7114a059e20e66d10bc702849eaa3a67783ee532d92a66de228272e0f3824a0aabd030a4cd61fc58c893290e773dfd11e8464b30776828a096ae587f104b4f94a8be70a6caeb25a6ff95b5bd6c4e8840ecc89d61f57e7309eea2b34820e193ae93ea82d02681da1241fb1415d28ce9485ed0dd57a34710cb352b27384e528137b27b508cf3beaf344d629a6d4277445d32ee54acf72c4c5476d62194ea88d686ed09706b2703c11fd7ea6ac38cca88b49a505b5b2eaa8855c20169f63cb8bdda8468928fcc3327025b4e7085c5210529ab7257b48c5386f7e80b424a550808aeaf83125af9a94935e10267ec737531fbaef343fd84352a482e912df1f2b0bbd1285cd080c974d2feb408adb185caa05d0ce121b2376f0fb4eca15825fbaa21baf25cf069d63be6143ab6b2b51a5236b2f3e2548a81731945f75ac1c036545df7274e62a439fef05021e06741e50e24e2de20ec5eb0b85eeb1ecb63ec9a062a2cf3cd10d906569677843605709fe1e938cd3c88b74d183e9f3ebf7e0eeba2644de5e7f2f905894755bef191f4462231139bac77f4cae269536de36ec0dd5e53eafc3f92a6749fb5a485b9e82cf7896df4bd7409392a4995b83f62584dcbf9d87decf200020647a141351072f12416195ba8cb4257aa90e3fe873e3b51d1eb804352c030db469222de216a6bee9713dd39b78ae5679632575eb86cc940f8b9b00aaae3f2c57053f9fbc379f13f3a003a1dc20be8ddadf0c7df6205e1d663891c4e1256d0ba1a4cbebe1d8248217ffae0af12511969c6c5ae757d26859bdb9c2687310da22ca90fcf7a95a72966a46f5296d93f6a54889692d7eb7a11f97e5e9ae3cb5d114fe14dad66228154f9b50da8ba07cd780567292a1803a20b889aa1805ff5da51a380e3a41361f681ee348d9c340a71a578f4def82a87c915a8787b93b0a97611e54fc593e685ea3357edb49e25bec754451e8c4f5fbe875b1073ec4633b97c62ba144cf49b027788f6ecd406ce91032e5c568cf4d00cdbbb3c1d80cc897062b2b13ec0ed88d03a61b981704496e5364f6a6814e00066b904f065e17bfcdca191d6afd62398ea1ba39f9d9ad25ce9401cc2ed996a6d02b6e66724f7794ec0cd7140759f4823be98dc5bb6d3d05b3e6510923027a9858ce0f7694a86da23229b819b3d214d5939504bf09a04631a5f7e5e37d2f8eecf6072407478ed866a15df22597ae817dec051f29969fdaf1ceacb9f8123289ec17c3f05a527884ce15a9e824dfcd0e12b3d1a4bd36d7c0929fb68a349dd71304356f7d7560bd4089524f4b03d28c84ca2dd86a1f14d34597311af9c0eaa4ed015fd245859e869832993a952bc830020f4319b3f2e56bf1ba8276c535c70abd5b68d70e2b99bc91920c476f22e9112a72e7d4e588dceddecdfb63a75b2a9e2da2bd4c23700537aa0c9b988c1731af3ed2aa88a57e146375e2ad7e36bf2452371e073390d4502a58d5c362362a078d65f56551e3f502e1ffbc814316070a18d912dd8c687d4e40d3436a942b00326bf1b824fe86323c3c701f73c0b56a3749e1e488647106528209d559a6b2102012ec62a72ff61e0996fca8e736067cbbda79241f860ecaf78e8de8d49f4327f05be5a7ae47fbe719542750e8ca3bd5b5ffd644be4e2cf3c57c87e8ca411027cffdb35b0f99b71be9f9667523827694704c40be3e341d78fe97ed9978772a1abcb2915a80ad278ed94dccae68d507e49f79353a17c494d133e3e41d5a3ae61f10fd0a3decac59fb9e42f86dd5fc64066d391b1266bcee4dbd588df40f393129e18f480fb815c0fa2ff15f8b84f2d39314f58967d6f6c8bbc067d0d7c2137b1cb91c317e5f6f066397c9a1401188ac4eb2d838d56a50573768a6660748488510b0426ab5aae5d408e2bfe67f81c17e6f702467194e66ec358938ec736d4eef15d54068ad3ea43a39775149aa14504a5ff34428e8f3c5324d88dc2b7e8dfe9e20108ea8997e31f47ea6796335054cd4143fe1d398c89ce1b1387b2934e47d231881a11229099a4814a729fc397ccf315a02092d819d180665d1b5d96dcd532f26c6ae36ef77a23ff282b60593b0b066a08a82d1efa21300e91066bfa7cbc3391326facf6ff26f89192ac351d5ea7f14195f0cab6bba07f6dcfc79d340b4b9fc0364f9140d05e0c66511fd52f17d27370d6c14dc69b3b6730d24eae3a74419210d71747058bb5ca84e6365936b6f3ee039cdcb1e20f6a339952cf26dbc9532dd26ac05443ea4f79007579537991ca00bffeae4a838705fea35a2cdcc1963268f119b1c534ed74586c5397f37f0993e42b42da53610e3a8deb96649241e76804e0b61522402bb42a7f32242364394ce12d6dfc3ed802ee6af2d491ef2b07d5ecc12525679868b0b509c7b7aef0d45988fe3b7b4d461f026d3ff022bd2d44df63c235eb0b7d585c246dbfdda759dacb5ee3b6d35e8821c9766a8eda1c0854376fd096006fbb729917f3c9a47d1dad2e6165e73d98aeef4047d1b220bbac2f76b1f25e988a6857ec2ce5e306f06539bea8ff0983d6fd29acb318811aab2c334749f08202f525fd0ee9d247120ff566e2a5287cbd1e4eb93585337954f17d3254f3106ff0361dc204bba7aaa7fa9f28e0889e601a274173a866437266eca64a753320810664a3a318e3dc4406be761e64dabd061a426b24d44448cd152aafd97824100bf09c0cc3637fce1dc5113d01fdbe8f088b7d2b614ed21ac4a72508408e3400b5519cde13ea0efdf4c2abfed97565fcef6af97525897f86a8efc05add5bb240dd2eba8464014f5ff4bd4e4fc2d85567e366c4e3edad223aed0aceb7f2df7a10e2b4661de7621705e2a219ae6cca07aa1d30689abb0a70709bb6e40eed930f30272db0038e71ccff5559c0b881115fe9d6350266e3bb4cd8d5f4b6243144a752b173dae94e4422c983cf1085ca5de0de919c753e45d14d898d66794ffa784792139ea6de4b6947957df5e1f997521c5dc516908a333a97e9d7ae08c64b1e0d5238d726cfbeb845cfd773331b108e0cc4e73f74959a5adbcf881e659e89120911f8020e9b4262d22df1ef8ca39099842ffd97b39d04b9ddaf24e4e71231b131e044731da61e33ea45531b60c3348f6d18bfa47e3d38d0840ba63a899a1bdbb902e76bc0fd834a646a8729a42e740e4d4330d1c43a9240b3ae5c9b3e6b7e643f51d4c7efce0cd0a0a5571640ee0548b00cef6d51056a41291f0e1259b1691063d29d361f9a8e93da9b3f472b927b56c351937a0cd99beb4ca56bdd2b78efcc6432f264f8eaebd67cf38733da560a462b2b60119138588975f88d89f6c31128460290173f2187d7ff7a53e56e9e297bf656bd2c9061c86efcb65c19ab7c3b768fa0dae7748610908ffaaa5bc943c4399b3a3309754a910686ba1f854c3f39dadb32075f6023fade88f2e8d0f827887a8c6ecc8ed0e27a976547e161855841707311653c9b874002d4a503abc87d2ee56e02936a1a2a6da309c74c710cc001ee19a1de05e0e2e6f2f2fc59a325b824d4f426fd7df394e0a6da0b4d9a389f0a4532007f6b31c1c587c014c4cc5c386a94edcaca9bd2a4e4c810877f8608071182b322a21b1d6a28275c0ef041294122ade0843b4461b9f7ff2135282839a73ecbddc1f685a3e255a4b3f60387da3e6525193eeb15fe8d9722d73ad3a1aeb2de0317504e63d05fce8b723a9a4347a31242361e78b70cdb13ae0a830dd963df6c3c29906e9a65c6e3599bde2b5594ab4997f65d72a0ee35541480d95c331fc8f4b6f660ed0a6d50aa396a4c7cdf089e0a5de613d9d03c06f1777a3f858e285dd77691524b4a5becae016aeb8342d4c26ca87c38b7742fe7eb4c6866d1714df752923291babb5479cc7edab10466468e6f4036c9c5d4ad70a61edae3b4a7d8f136992561b99288b5af3f86a0ecf7c8073964dae10c87c94c34df638f48a4db62b32911c215bb6e46b1efabd923f3b4ef1884d7600976d907d5002f6e418ec2268ab8c052456b64920c7f8d51f2e8283ab3184ccead58568240402bedcca4f19690d4b612413d5cb47e63ca324807040c77f212685f5358731acc5ba2a4e4f9f8dbd1a272b665e24250d2ea758c70986fcaeef247a7e2875085364e403f3e7d03f7429ed152a7545d9edef9d2b1131dc426800a34e864d116b0ec5447b0a341135d33c312751515ab6b7b364455a6c57ea935116b508a315f4f571701ac7b3d8bdb054f2115a77caaac85bd137d468e95f4e6dd2681d0b99e124033071d1ba54ae374e3a1eeebfbf0f40fa277ad831f1620c8dddc98012738a57127d3560e0472577c0c00fb39513ef0bc937f3cc8713606d4a7b51e9774966d0649ac8b4c29308f5e9d110931578fd7def1879c087df84ba24d50fab64c586b8be8a303fe41b58c76c7729f4cbaad25601df5cda9907468ec514299706313800da207cd8b3f9e0c8fbab05d6ef4a7283efe21eb6c90778e4445ac657f0f2c38dae0205b7b88023d7b5932e5a7c1efc3e63d042d7509d71a73547d1d7cb93b0ce174c6a199a10d6dae2070c2cf24b4e0f2400728123ce586d14526828b0307c769a79669f0e738b6a199310365289c78ab8761646c35dd4746cd2e3cb199caca7cfd3d2acfed9133e2105148f45afa9b2a734cb8f8eb54ff3bab31fe4ce86d0a9a34e7ab041dab53bed141e981fbdeb1b8fdfdf390949defc1091ce0ad03614c232061659dd6c042b936a25928c0c1f8ed13b609abf24f5cb1016a49355b87c126325bf9b7a13b0f6d0a102ae31896e50871410dfe62702d57fa9c205dc21d2008d4db112fbf42d892b7e0f941535cf29c2fa568358ab8b5373f7fc043c4fc5e378ae3646a40849412f33184356144fb3111a88047815a5065abf81f2b84809631c783ea86b8c73ecca57293519c438187a359b2173e118790460e56f4df6c42eaa8b37a92c1289abfd02293519c438187a359b2173e118790460e56f4df6c42eaa8b37a92c1289abfd0208f307bf4cac0139c85aca3ea240c15a52da32c6752cd7ae96e8c71dcdd7f5f40aafca21818d3db3af44cecc2bc3cbed2c87cba3d3c9721a5815c9b8895ec3b20096c147135a2599bedef4a6a96fbbc2424200ef979369d6ddbe5375f69b19e5165a36c17c4dcfed0b739d6d61650473aac791bddd73572b81af4c32c46cf29509cae63dca734ff731f1bce5bc6016aa15c83ec67d15c576b3dfd6b04427f3900729a4ce2b7f1daa40c9c7e73f94a3991586c8bda0ef92edb6f6e6e579f5c49521bd99e58d7ffe22199498e2ed432e102ead4b7b92752f53c59dee4b6b7aabd30ab3a9dc2fc6a87399b55d1ff77913b871829e15834caba94fcbb5a0cf22ea6a128b1820b06e9f34e53dd02b8535331d192880b4648d9302c9f05053a2ad4cbc2bf16a7ed0c27de698528fa9b604b777e4834307fd68730dd985d8a44936eafc1da9ad6a9458af3f3559ca2cb7016625676ea1484249e4c9ad5001ea093845bc0b60c6fd52b7757d206ce8966d44db688d356098bbaa1abcf2f921d43fcb89d806082ec47f1520749f4388467d483963c47dd902a0a92cf35ac48ea86d11234816b87d94efe36f0080bb75417e389f2c18919a9c7e8c68b9020bb57e62d92d8a08218a84ba8d2a0ac32e0650a8dd0c702ca540c281dfcb8c344b8bdd6291ae9a114c5f8860cfef85fdc70245eb8b5addce6aba742f116d543e122cde3012944b113ebf8e55feafbbe5053db058f5e9b4dee8fcddc49b025ad2ad60f57a3092f20529b38252982bd6c534aa1810232b3255546c4dfdebda590daf3136cbee968c2ff2a7f3da278fc98f3622033f574b9ac496779b81c1e7f2fbddbfedbd6bf70e08282336364ce420c206cc83c968739a61c29e6c4839a36564d27b6b91774b9920d1d157cc03ae7f419aa045fa0812b8feb349fdc9d9368884da7dc49f2c73630d2585a9739f25f816fb7cef6713d31770e31967cdbd331d6ae50f12365ecc272af69fee3895c32bbf7c38471d3d23493d6760f3da9f630a754f10ca447d19251c4605ba50396177d4feae4eda83211d0686350e24240ec6a09225371191fa16122fb404c8c2e469cec0ad363e23d36054517d3afb4bfc095f5f18f6c343c2e60c326ad1d8cd9a5d22c54eead3f388166f9ea1e8caaf532bdc6efdfca87fa02127da42bd1817fed004110b9ab8173da16a6990b6d1776abf827ee74861b1d9b6203ab04164d2d5522f40fa8a0d53783b9fb26050029b81fbfa6c837aea95c9a4302100d9d86e2477f527e3f7abfba6d9fa1dd0c543abd5333a5630b9e5c68aa81a2ef7681056391309fa675e56a3d8d69d08c9baee5d0a56bd99f8bac032ae212e246ab0475cb50cd2d894cc8960e11e999813bf9ca500450365e30de90d2dc8264e8921cec156163824be9570d0ad1f6774057ea34b1847cdb082348fca9a18042b7d1a9c13963f0b9511d4a9e04629dc4f07f6f15dba2eb622b86ab7ee1fa91e0dcf3aa2334fc972aed3fb248adfbb251b152e8f0ec8cd92dc467ca654b003177f0e56be527c3c3ab6623aa32d191cf1be7ffe7260fb0fd19930fc025657c920574fdd9f383601c9cdb0522e5fd0d125373ea19ee6874ae1b485bc9fa75d762bc1288ea8219ee7761d08542def22a7092ce2c3a20725d1a70b311fa252481e18aca489ec43302fabea19866b385560b84b0434b2e8e844329597a419e0c96f1d83ffe48954fad97ba9ddf1d605d2697e0f7e53c660904c61f48a8a9d6edccf0091e42d9eccc91f70c45e944fb5ef8f3b139c512d67743761a5d2ea7292d8b72c26ab595d7533a286d2d40967633d50a795a4655c28bf28862852d6df06891d04865ba52f092976705005d1f8dff6799735c8179a33653165f7a4ea9cffbc0e1b357cc488992d17cf83cd4b55168dfdb0b2a52ddb175c51748e61a9d7428a470662032318d796a825f1a086ca2bf2580d5e802a95f6443691ae7b1ed5b0cb1a2317f805b3a6b78af27eb5730df216bda468d9a272e53bc74446a7d61790a03f27ccc8d43e5256524c45c7a12a6ab0015da91b24f02f11fd9d176e6915206a662a8380a9323ecc6820d28ae59b48f1085f89829ea386db99cdf55b220088b9ce20c66b52c3e1e23bac2279382f500610e64d7b769e4021aab0ef4d4e066c7bb62c3c125e3a5ccf248f1a1fd0e26a2561f9d2060e1d8dc19b678768257e79fea02229bc6886b7c1512b3a17a26444aca51da3a66289836106194d1a8fb9ef75ef15ae713ad165d7b330b6cbe3dfb1feba8692331c35fd09d39812968b9ee8b3ba1186b6f7154dc2687b4c0a8a11c6ea1cb0f3f0cb7f45c109db6854421dcbfff224d434cd8a611f6cc41059215fd1196064d7dbb1c8cf8a49a7dc4d4916f58cfc0b691e4edd97408e2533f509dc3f0d67ac421a4c6b8336c36ff8f30004a332aa0e5b21a6342a180c64578f78beb14ad4183ee4ba39a1682039dc29453f04155013acdec66c683a0faf2e376f0f8336397c692bbb5cd69920f01421b3284f26ab1b6ae77c1c6de24ea21eecfeaa0ab0f6e031c820a66405a06c73ca408de58713047e348e1d6a65c8027cde7e5cc5e3d42487c7db643d88a92b4d6a5580c69f68220366d8e58fcabf35321ed99dfff244d34de610202edc5cbcb56099a23dc3631a224c66963faf34686b62fc598b5f7ac67f2c98686d3c77cc4b280cf3bfe6e903d111bf9edc80b31927102b17642db44422760b785627599983b5ff1d9139370bb8e3f5dd55b186458023bbc78c67e6427ad634814823e8c2b0e71721e47da805705ddc6608714e6278bf16d96db43f6947026df1ebb6d2bfcde53a461889f62583606ab0886f10c38799b694d01cdcd3bd68357671d2aeace9b8e3d11ffa67161e05c425d1974fc79571cb497efa34dfc8a3fe48cfbd8f591c0619a1f5afc30936b6004673112671c890b0623c7f28535755f6c1a7ffcba33cfc10f0a2e07511c4b49eda312e3f9a6b255648858bdd8e432a719576c838712ad95abbc20c2e031f7b63bd654ba35bed9b25aed676b79b7955ed98cf01ca6ca6f199c002f4e1091bd6003a9c1e01e62522d7099cefc516d492f5fb83ada791bce36033e4d02d0611fae40e0a1f2a7f64a883921c83e5bd38db8a28017057dda081836d4f48ff0e9672dab94e3b157c9992dcf6912b655bd27c1f786082a2fc4dbc7073ee9fa8205c064b0a25b1724201966089e0b5e6eeee039620fa0571123de9a473b49dc81b21133283cfb446b5affb2dd76bda45e9091c8ce151a2bdcb1fca8a0cbc55bb \ No newline at end of file diff --git a/src/solidity/test/fixtures/valid_public_inputs.json b/src/solidity/test/fixtures/valid_public_inputs.json index d179199d9..7f569ba3b 100644 --- a/src/solidity/test/fixtures/valid_public_inputs.json +++ b/src/solidity/test/fixtures/valid_public_inputs.json @@ -1,13 +1,14 @@ { "inputs": [ - "0x1a0280f3a8bfaf8f03d3871b1fbb25593a5e54d4340cf545ffd7adfb67ebcbda", - "0x02742a57cfc9af45bc5d1913479f6f55a0d15a331a2d741f45233c53f7b6d3f8", - "0x0000000000000000000000000000000000000000000000000000000069c90e5c", + "0x304c6abd032b561bfc48f768b78321a01a0bcfe227cab827fce9e71c3574b80a", + "0x0881cc6aef1d986b5593b91248bf8cc76823bf0d82ac2804770e64c5e9130523", + "0x0000000000000000000000000000000000000000000000000000000069e25c30", "0x008d535e2a7f4ee38a4d12aa88bcf21d2c2f6fa051d12eafba6655bf37e8c11c", "0x00f54fbb0f658e7013ec2114ef095a29bb3e2f95b96dbd93e46f12f67863111a", "0x008ebb812c3e10f4652083fa13b278399f162ecdf861bcc69b224a453c009396", "0x00b667c2baa307e5c16590bc147b3a1d3aec3e5a4419fa92b30c5aced21bf434", "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x171de101deed3f056917faecfe6cc04db2ef02689a8a483962a688948ce44461" + "0x171de101deed3f056917faecfe6cc04db2ef02689a8a483962a688948ce44461", + "0x0000000000000000000000000000000000000000000000000000000000000000" ] } \ No newline at end of file diff --git a/src/ts/scripts/circuit-builder.ts b/src/ts/scripts/circuit-builder.ts index 43b8b3a99..97be9cdec 100644 --- a/src/ts/scripts/circuit-builder.ts +++ b/src/ts/scripts/circuit-builder.ts @@ -122,6 +122,10 @@ const STATIC_CIRCUITS = [ name: "facematch_ios_evm", path: "./src/noir/bin/facematch/ios/evm", }, + { + name: "oprf_auth", + path: "./src/noir/bin/oprf-auth", + }, ] const LIB_CIRCUITS = [ @@ -516,7 +520,7 @@ ${unconstrained ? "unconstrained " : ""}fn main( nullifier_secret: Field, service_scope: pub Field, service_subscope: pub Field, -) -> pub (Field, Field, Field) { +) -> pub (Field, Field, Field, Field) { // Check the ID is not expired check_expiry_from_date(salted_expiry_date.value, current_date); @@ -632,7 +636,16 @@ ${unconstrained ? "unconstrained " : ""}fn main( "Failed to verify nonce from integrity token", ); - let (nullifier, nullifier_type) = nullify( + // Facematch circuit does not use OPRF proof. Pass a zero OPRF proof so nullify skips OPRF verification. + let zero_oprf_proof = commitment::OPRFProof { + pk: commitment::BabyJubJubPoint { x: 0, y: 0 }, + dlog_e: 0, + dlog_s: 0, + response_blinded: commitment::BabyJubJubPoint { x: 0, y: 0 }, + response: commitment::BabyJubJubPoint { x: 0, y: 0 }, + beta: 0, + }; + let (nullifier, nullifier_type, _oprf_pk_hash) = nullify( comm_in, salted_dg1, salted_expiry_date, @@ -641,7 +654,8 @@ ${unconstrained ? "unconstrained " : ""}fn main( salted_private_nullifier, service_scope, service_subscope, - nullifier_secret, + nullifier_secret, // should be 0 for facematch circuit + zero_oprf_proof, ); let app_id_hash = poseidon2_hash_packed(app_id, app_id_length); @@ -649,7 +663,8 @@ ${unconstrained ? "unconstrained " : ""}fn main( let param_commitment = ${evm ? "calculate_param_commitment_sha2" : "calculate_param_commitment"}(root_key_leaf, environment, app_id_hash, play_integrity_public_key_hash, facematch_mode); - (param_commitment, nullifier_type, nullifier) + // oprf_pk_hash is 0 since facematch doesn't do OPRF - other disclosure circuits provide it + (param_commitment, nullifier_type, nullifier, 0) } ` @@ -688,7 +703,6 @@ use outer_lib::{ CSCtoDSCProof, DisclosureProof, DSCtoIDDataProof, IntegrityCheckProof, poseidon2_hash, prepare_disclosure_inputs, prepare_integrity_check_inputs, }; -use utils::constants::{NON_SALTED_NULLIFIER, SALTED_NULLIFIER, NON_SALTED_MOCK_NULLIFIER, SALTED_MOCK_NULLIFIER}; use std::verify_proof_with_type; global PROOF_TYPE_HONK_ZK: u32 = 6; @@ -709,6 +723,8 @@ fn verify_subproofs( nullifier_type: Field, // The scoped nullifier: H(private_nullifier,service_scope,service_subscope) scoped_nullifier: Field, + // The hash of the OPRF public key used for salted nullifiers (0 if non-salted) + oprf_pk_hash: Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -763,10 +779,6 @@ fn verify_subproofs( assert_eq(poseidon2_hash(disclosure_proofs[i].vkey), disclosure_proofs[i].key_hash, "Disclosure proof vkey hash mismatch"); } - // Assert that the nullifier type is not the salted nullifier - // as the salted nullifier is not allowed for now - // Mock proof salted nullifiers are allowed though - assert(nullifier_type != SALTED_NULLIFIER, "Salted nullifiers are not allowed for now"); assert(scoped_nullifier != 0, "Scoped nullifier must be non-zero"); verify_proof_with_type( @@ -831,6 +843,7 @@ fn verify_subproofs( service_subscope, nullifier_type, disclosure_proofs[i].public_inputs[1], // scoped nullifier + oprf_pk_hash, ), disclosure_proofs[i].key_hash, PROOF_TYPE_HONK_ZK, @@ -851,6 +864,7 @@ ${unconstrained ? "unconstrained " : ""}fn main( param_commitments: pub [Field; ${disclosure_proofs_count}], nullifier_type: pub Field, scoped_nullifier: pub Field, + oprf_pk_hash: pub Field, csc_to_dsc_proof: CSCtoDSCProof, dsc_to_id_data_proof: DSCtoIDDataProof, integrity_check_proof: IntegrityCheckProof, @@ -865,6 +879,7 @@ ${unconstrained ? "unconstrained " : ""}fn main( service_subscope, nullifier_type, scoped_nullifier, + oprf_pk_hash, csc_to_dsc_proof, dsc_to_id_data_proof, integrity_check_proof, @@ -1282,7 +1297,7 @@ const generateWorkspaceToml = () => { // Maximum number of concurrent circuit compilations via `nargo compile` // Default value that can be overridden via CLI using --concurrency=x -const DEFAULT_CONCURRENCY = 2 +const DEFAULT_CONCURRENCY = 10 // Promise pool for controlled concurrency class PromisePool { diff --git a/src/ts/scripts/circuit-packager.ts b/src/ts/scripts/circuit-packager.ts index 24bc9a9b8..61dd7613e 100644 --- a/src/ts/scripts/circuit-packager.ts +++ b/src/ts/scripts/circuit-packager.ts @@ -14,7 +14,7 @@ let barretenberg: Barretenberg const TARGET_DIR = "target" const PACKAGED_DIR = path.join(TARGET_DIR, "packaged") const PACKAGED_CIRCUITS_DIR = path.join(TARGET_DIR, "packaged/circuits") -const MAX_CONCURRENT_PROCESSES = 5 +const MAX_CONCURRENT_PROCESSES = 40 const DEPLOY_SOL_PATH = "src/solidity/script/Deploy.s.sol" const DEPLOY_SUB_VERIFIER_SOL_PATH = "src/solidity/script/DeploySubVerifier.s.sol" const DEPLOY_PROOF_VERIFIERS_SOL_PATH = "src/solidity/script/DeployProofVerifiers.s.sol" diff --git a/src/ts/scripts/generate-fixtures.ts b/src/ts/scripts/generate-fixtures.ts index ed11faf2f..22a320a76 100644 --- a/src/ts/scripts/generate-fixtures.ts +++ b/src/ts/scripts/generate-fixtures.ts @@ -31,6 +31,18 @@ import { } from "@zkpassport/utils" import * as path from "path" import * as fs from "fs" + +// Zero OPRF proof for non-salted nullifier fixtures. +// The disclose/bind/facematch/etc. circuits now take `oprf_proof` as a required input; +// we pass this placeholder because fixtures here are all NON_SALTED (nullifier_secret = 0). +const OPRF_ZERO_PROOF = { + pk: { x: "0", y: "0" }, + dlog_e: "0", + dlog_s: "0", + response_blinded: { x: "0", y: "0" }, + response: { x: "0", y: "0" }, + beta: "0", +} import { Circuit } from "../circuits" import { generateSigningCertificates, loadKeypairFromFile, signSod } from "../passport-generator" import { generateSod, wrapSodInContentInfo } from "../sod-generator" @@ -181,7 +193,7 @@ class FixtureGenerator { ) if (!inputs) throw new Error("Unable to generate disclose circuit inputs") - const proof = await discloseCircuit.prove(inputs, { + const proof = await discloseCircuit.prove({ ...inputs, oprf_proof: OPRF_ZERO_PROOF }, { recursive: true, useCli: true, circuitName: `disclose_bytes_evm`, @@ -237,7 +249,7 @@ class FixtureGenerator { if (!inputs) throw new Error("Unable to generate bind circuit inputs") const bindCircuit = Circuit.from("bind_evm") - const proof = await bindCircuit.prove(inputs, { + const proof = await bindCircuit.prove({ ...inputs, oprf_proof: OPRF_ZERO_PROOF }, { recursive: true, useCli: true, circuitName: `bind_evm`, @@ -282,7 +294,7 @@ class FixtureGenerator { ) if (!inputs) throw new Error("Unable to generate facematch circuit inputs") - const combinedInputs = { ...inputs, ...FIXTURES_FACEMATCH } + const combinedInputs = { ...inputs, ...FIXTURES_FACEMATCH, oprf_proof: OPRF_ZERO_PROOF } const facematchProof = await facematchCircuit.prove(combinedInputs, { useCli: true, recursive: true, @@ -341,7 +353,7 @@ class FixtureGenerator { const inputs = await inputsGetter() if (!inputs) throw new Error(`Unable to generate ${circuitName} inputs`) - const proof = await circuit.prove(inputs, { + const proof = await circuit.prove({ ...inputs, oprf_proof: OPRF_ZERO_PROOF }, { recursive: true, useCli: true, circuitName, @@ -623,7 +635,8 @@ class FixtureGenerator { circuitManifest.root, ) - const proof = await circuit.prove(inputs, { + // Outer circuit now takes oprf_pk_hash as a top-level input; 0 for NON_SALTED fixtures. + const proof = await circuit.prove({ ...inputs, oprf_pk_hash: "0x0" }, { useCli: true, circuitName: evmCircuitName, recursive: false, diff --git a/src/ts/tests/circuits.test.ts b/src/ts/tests/circuits.test.ts index a1e5b4f99..adb72d590 100644 --- a/src/ts/tests/circuits.test.ts +++ b/src/ts/tests/circuits.test.ts @@ -42,11 +42,13 @@ import { getCountryWeightedSum, rightPadArrayWithZeros, getNullifierTypeFromDisclosureProof, + getOprfPkHashFromDisclosureProof, NullifierType, getFacematchCircuitInputs, getFacematchParameterCommitment, getFacematchEvmParameterCommitment, packLeBytesAndHashPoseidon2, + OPRF_ZERO_PROOF, } from "@zkpassport/utils" import type { IntegrityToDisclosureSalts, PackagedCertificatesFile, Query } from "@zkpassport/utils" import { beforeAll, afterAll, describe, expect, test } from "@jest/globals" @@ -58,6 +60,8 @@ import { wrapSodInContentInfo } from "../sod-generator" import { generateSod } from "../sod-generator" import { serializeAsn, createUTCDate } from "../utils" import { Circuit } from "../circuits" +import { evaluateOPRF } from "@zkpassport/utils" +import { poseidon2HashAsync } from "@zkpassport/poseidon2" import fs from "fs" import FIXTURES_FACEMATCH from "./fixtures/facematch" import { AlgorithmIdentifier } from "@peculiar/asn1-x509" @@ -1102,6 +1106,8 @@ describe("subcircuits - RSA PKCS", () => { expect(nullifier).toEqual(EXPECTED_NULLIFIER) const nullifierType = getNullifierTypeFromDisclosureProof(proof) expect(nullifierType).toEqual(NullifierType.NON_SALTED) + const oprfPkHash = getOprfPkHashFromDisclosureProof(proof) + expect(oprfPkHash).toEqual(0n) const commitmentIn = getCommitmentInFromDisclosureProof(proof) expect(commitmentIn).toEqual(state.integrityCheckCommitment) const currentDate = getCurrentDateFromDisclosureProof(proof) @@ -1471,6 +1477,7 @@ describe("subcircuits - RSA PKCS", () => { undefined, undefined, nowTimestamp, + OPRF_ZERO_PROOF, sanctions, ) @@ -1622,6 +1629,7 @@ describe("subcircuits - RSA PKCS", () => { undefined, undefined, nowTimestamp, + OPRF_ZERO_PROOF, sanctions, ) if (!inputs) throw new Error("Unable to generate sanctions circuit inputs") @@ -2535,6 +2543,66 @@ describe("subcircuits - RSA PKCS", () => { expect(currentDate.getTime()).toEqual(nowTimestamp * 1000) }) }) + + describe("salted OPRF nullifier", () => { + let circuit: Circuit + beforeAll(async () => { + circuit = Circuit.from("disclose_bytes") + }) + afterAll(async () => { + await circuit.destroy() + }) + + test("should produce valid proof with OPRF-based salted nullifier", async () => { + const query: Query = { + nationality: { disclose: true }, + } + const scope = 12345n + const subscope = 67890n + let inputs = await getDiscloseCircuitInputs( + state.helper.passport as any, + query, + INTEGRITY_TO_DISCLOSURE_SALTS, + 0n, // nullifier_secret placeholder - will be overridden + scope, + subscope, + nowTimestamp, + ) + if (!inputs) throw new Error("Unable to generate disclose circuit inputs") + + // Get the private_nullifier from the circuit inputs and compute OPRF with it as the input. + // blindingFactor and auth are unused when options.mock is true. + const privateNullifier = BigInt(inputs.salted_private_nullifier.value as string) + const { oprfProof, oprfOutput, publicKey } = await evaluateOPRF( + privateNullifier, + 0n, + {} as any, + { mock: true }, + ) + + // Override nullifier_secret and oprf_proof + inputs.nullifier_secret = `0x${oprfOutput.toString(16)}` + inputs.oprf_proof = oprfProof + + const proof = await circuit.prove(inputs, { + witness: await circuit.solve(inputs), + useCli: true, + circuitName: `disclose_bytes`, + }) + expect(proof).toBeDefined() + + const nullifierType = getNullifierTypeFromDisclosureProof(proof) + expect(nullifierType).toEqual(NullifierType.SALTED) + + const nullifier = getNullifierFromDisclosureProof(proof) + expect(nullifier).not.toEqual(0n) + + // Verify oprf_pk_hash matches poseidon2Hash([pk.x, pk.y]) + const oprfPkHash = getOprfPkHashFromDisclosureProof(proof) + const expectedPkHash = await poseidon2HashAsync([publicKey.x, publicKey.y]) + expect(oprfPkHash).toEqual(expectedPkHash) + }) + }) }) describe("subcircuits - RSA PKCS - ZKR Mock Issuer", () => { @@ -2731,6 +2799,7 @@ describe("subcircuits - RSA PKCS - German passport", () => { undefined, undefined, nowTimestamp, + undefined, // oprfProof — defaults to OPRF_ZERO_PROOF for non-salted sanctions, ) diff --git a/src/ts/tests/fixtures/circuit-manifest.json b/src/ts/tests/fixtures/circuit-manifest.json index 50af4aa3b..585b4a601 100644 --- a/src/ts/tests/fixtures/circuit-manifest.json +++ b/src/ts/tests/fixtures/circuit-manifest.json @@ -1,3951 +1,3956 @@ { "version": "0.17.0", - "root": "0x3010f8b5298bdf65c08d320ef49dfd947c07258f2a371fef5519becc19f02c34", + "root": "0x0881cc6aef1d986b5593b91248bf8cc76823bf0d82ac2804770e64c5e9130523", "circuits": { "bind": { - "hash": "0x20cf49a8b2c2d3e88fc538c38acd826878d1ff0a000ec3556a2d4ef1fcb9d29c", - "cid": "QmTeCaug5JR7uZsoVmb42F5iT1TjCjtYvP7vboK6w7nqTZ", - "size": 8821 + "hash": "0x2153bca1ada0b33ad7d9079f8cd961a13489225063eb23b00801cf30092bb181", + "cid": "QmaZ2ZWg894NChPF9e6dShxtt1sDfPMEYYzGWfVDStDqMo", + "size": 74697 }, "bind_evm": { - "hash": "0x15b5da1081d1063f3297f366ac077c9218fa02a983eec3dfb65212e9d5b80307", - "cid": "QmZDgySBvMcf1MHrtih19DVuKxUooibTJsz4HoG9ctKf2g", - "size": 44185 + "hash": "0x29558da474c947bf8a41d4e621b1e8e1f87bdbf9ec056713be3bf1fee1d86d65", + "cid": "QmZmkwzqXRYpwvZ9fLkfXn2Rv8MKkTkYuRpypeP9pVouT3", + "size": 110059 }, "compare_age": { - "hash": "0x1f79a693903f0ddad0b07eaf5b1b533e33612aff273ee7a6619267ef74bcd265", - "cid": "QmXyoDJ2zSdeYeC2ZZjgr3by5Kd35SJoubKdu8c7VnL1VD", - "size": 14236 + "hash": "0x16abf86c7015cd7e13e79e3fd2a30e225970b319caf57c5fd36a55f6dfbbaa2f", + "cid": "QmPWviwEV9kVr29nXykLaaTQe6aLQnnES9Wg768WmWo2t6", + "size": 80084 }, "compare_age_evm": { - "hash": "0x288fa156739a503fce712356adb1d3fb279397ee987d759bc45f7fb7a4161a21", - "cid": "QmVd8r2vUKtVLfyEzawuP1WBLuHgZD5UetHsvmvZjXkykt", - "size": 36000 + "hash": "0x154d569a77e6862d44f653cb71d2d343ff4e98acc39f620d11af8b7448426751", + "cid": "QmPjEtnn9mgxqREFeNMVrXQL6E4LCph99fNvr9vW7gYqSQ", + "size": 83981 }, "compare_birthdate": { - "hash": "0x19caa524b5aa478362a2e43e762b735092b5c29ceff26e9607649b9a334c39f5", - "cid": "QmUbyRZmUZBR3Y3u44HX4bUsNeZRAKzo9h9qNAzVU4Aqum", - "size": 16425 + "hash": "0x17a4aa0f52b1957820f7d5203977d3e143149c63bfddf267d9753f87ccf116f2", + "cid": "QmYcVLePCeyVuKhFDP7myNnVr39VpvH693vNwZuDCGeVK8", + "size": 82221 }, "compare_birthdate_evm": { - "hash": "0x0e76cb53fa16bc3e1a78f682b684cce2f4b7148ca1fef907632f33255c92ac6b", - "cid": "QmRmGP92HLNx4DmUHg2NTXsP96ffKytJKRjfm49Erw6B47", - "size": 36000 + "hash": "0x033cbc8a6a5600beb48bc2b0b3cf32febf7c97ffe7f7dc72ad2ceebb6c2d589f", + "cid": "QmQZSkAWau6SpFmjqr1rqFCjVaAmJ2yRBRNqq77TinZ4yQ", + "size": 86154 }, "compare_expiry": { - "hash": "0x24882ae8989fd0368fc390d00f591734d6bc30a7128337b878ea836a69419718", - "cid": "QmZkgFeoo4QusTQrYPScpiZgw5fPGpnrtgqKLDfU5JTEBE", - "size": 16417 + "hash": "0x006fa89f88890aa1ea12cb2fb3118fc943770a191611f546ff786ecf72d25937", + "cid": "QmUwLUgaRyY89voDZ51kLM1o1P3X5CdhYdYFLbc6Ra4pnp", + "size": 82213 }, "compare_expiry_evm": { - "hash": "0x03ad77b6a932a77fea8dd666eae6226a4bd312592186c92f843c33447c1cf5bd", - "cid": "QmX2RH8PQ1KpbNrj861KQDCDxHZ9JcGqrEUiZsYxM4djQK", - "size": 36000 + "hash": "0x2cda4f30ff3af3fdfa84ed4d59bff941c66325b18eccfce35e4e29c011bfc151", + "cid": "QmQoZKXXyGtE686f7gY64DEy2dRJjiMfiVNHy3MXKttmeN", + "size": 86145 }, "data_check_integrity_sa_sha1_dg_sha1": { - "hash": "0x062c6768fc166d6a5791c8009392cb180be7d54096f79d8783dadbc2cff49a98", - "cid": "QmXor9tCi1DBDUCJE8vSX2cDtzXhpYT5yaWgh74fAPkaK2", - "size": 173960 + "hash": "0x00c0ab2440f3802c57d14c4c017c028624cf813cdb94be45e605a997a2f75490", + "cid": "QmSehjrTbeZEAuKU2qwqdAu2Y8rTa7tUAUfeJ5EizJKpJR", + "size": 177687 }, "data_check_integrity_sa_sha1_dg_sha224": { - "hash": "0x271ddcc9ee4e76b7a0b7712594154ff81d80d16475efc911658f576bf12a488a", - "cid": "QmTQqVfSM1dumsQosvsAmPcLGb77ZjuvhSsTZQgCYR2wn5", - "size": 165742 + "hash": "0x1c8aee3270b59ca40f62ae2f62d3940c6b52e94863ec66039547d052553088c4", + "cid": "QmSFSTA39JwxWFHv18fiQehqz3Ljp3TgHfDYdJvTbK1jod", + "size": 168842 }, "data_check_integrity_sa_sha1_dg_sha256": { - "hash": "0x00c6f7f29edf3f42567c2ff5997d45c07c75601c8878820724b101be4eb27ec6", - "cid": "QmfQye87gEBrTDb3NkaFbxQYbF1vE7RUju69DtXy8TiZ3C", - "size": 165813 + "hash": "0x112fbcdef0d8099ba9d29874ac865e71f6031219c79f237e07744163cb63a2b6", + "cid": "QmWTV8RKQqU1GgSktMv65M3YEd8vphhvXDyNVoMLy8iPhG", + "size": 168913 }, "data_check_integrity_sa_sha1_dg_sha384": { - "hash": "0x0e93e6226a889eee019c735a16e3e43769ae818286a2b6dab7634bbd42ea693b", - "cid": "QmbFTZ2jY6JDk8MZHh35MnkBPvga6wygvbkEfui8RMaMNB", - "size": 190586 + "hash": "0x0fc3f235ab9e516fa198d7fe5e1181e554bc8d3b2dacca634f476a65674a2d25", + "cid": "QmVqfXYzKsKuhxsxzaXVeXUKLFsokzfXGXPjCszBxYCf8i", + "size": 194313 }, "data_check_integrity_sa_sha1_dg_sha512": { - "hash": "0x160a7c7ccc000ca03e67db29f2accbe09b35d1a2a701bc49c271655d7d26693c", - "cid": "QmepUZBSXQ2r4TMn1XhifMMBR1T1m1D12X3mmABq6FFbpq", - "size": 190877 + "hash": "0x2c0c14fe586b1172b7734bdb8b94f0318fa82270f885d82066fea3e7314df078", + "cid": "QmSdDJWFEkdpE3YexRc2AqHqcW2TneUeMN6EB3F5XMfTqd", + "size": 194604 }, "data_check_integrity_sa_sha224_dg_sha1": { - "hash": "0x21f555779cd757d6781755580d09743c410f94da9f00671207ea530a4d76abfd", - "cid": "QmWZiSvfh5tRH7qT5N91FB2Fj1WJPGZXm94m5qURbC3HZD", - "size": 98238 + "hash": "0x1d8b9d31108fe73889f96b2bd78d3cd95b5c6030290395155165081243b3ea87", + "cid": "QmVZaYaP3bveRnfUA9kFCZDZEpZM1CzRSCJGZDWQq8EWzJ", + "size": 98859 }, "data_check_integrity_sa_sha224_dg_sha224": { - "hash": "0x250b3ce4021117fe14dae04f7d300d5fb299e039a1485941127a0a2553f08af9", - "cid": "QmRkbjeBNDWJjCWCZsuDbrhhogtxBjge4BvRrCYSmr9paW", - "size": 79212 + "hash": "0x0c193a26e81fbfd63e90cb1ed2dcdfdba46d811243c5eec4d025fac83689e21e", + "cid": "QmQSnKx7CifmPvzC1rAKNMAog5y6gbYVbDp4QXWHn8U31K", + "size": 79206 }, "data_check_integrity_sa_sha224_dg_sha256": { - "hash": "0x1947fa1752e7f1a24d5c084cc90499c16b8ecc8585b256c1d6916b2838bb7a90", - "cid": "QmWSyiE8V33yuxCH4Pi9FuxVjnRVjFeGQXXqZpUyfzWSsL", - "size": 79291 + "hash": "0x28840f9374454349b530c89d8b73e751f6c4c4c9faea8a597ef42fc0b8928c13", + "cid": "QmUsDdiYRXwa8e2appBXbwdyVXS9qKShjxHxvqrtx3sHe9", + "size": 79285 }, "data_check_integrity_sa_sha224_dg_sha384": { - "hash": "0x1b970e2891233c079b642a4af1ba0290a9264f1e8351760a996a081d0ff1c16d", - "cid": "QmeRhcmagrJtKKXxUAPKF1y9TpfoS5eCAcs8cEMD5aUtff", - "size": 104773 + "hash": "0x2e24be7fa28821b867ebc5fe243080851c545a919aafbe67b3293ac3ae1ac2a9", + "cid": "QmPuFDC2G2S85MBu71e59sMxSd12uC9LVHiG5MRTvB5VJJ", + "size": 105394 }, "data_check_integrity_sa_sha224_dg_sha512": { - "hash": "0x11f3d95ca03a9c20d0ced15b0dae5c737ef422310771e7863cecf1a19b6010eb", - "cid": "Qmd5utirAg4qzkZHqhVHozT9Hded2bBjFAbSf4QvieMUK9", - "size": 105064 + "hash": "0x1860d25fb77cc4cfb3bd89024150c33b2795bdbb1775a7e9724a8952b2012072", + "cid": "QmNfjPPAroxke7giVFqLJ1Y4Mqt7SKaQKXcNye9JATs1fz", + "size": 105685 }, "data_check_integrity_sa_sha256_dg_sha1": { - "hash": "0x1960608c759260bcf19d12ba1920e190f7f53a2814234dd6e65cb403fd6e226a", - "cid": "QmUmsBxUvbBXmnDwffTqm3Bi4EKM3Ra64K1Pcj7pyeNZMC", - "size": 98285 + "hash": "0x2f2869f8bb817e92bb2dbc620cbaee4764d11d80ab4d377d4b666e202e281043", + "cid": "QmbGx24eRNV8jodEmw8EY6sZgQ76nNd3N2m8QXJ4kJVQkU", + "size": 98906 }, "data_check_integrity_sa_sha256_dg_sha224": { - "hash": "0x2b2a90dd13d7ba5d725874deb6f118fec1b42155bd40908d8f9e7fefe61ab33a", - "cid": "QmTLARK7mickR8G3f1wWrDumf6suqjcXtKuiG71ivWnoA7", - "size": 79267 + "hash": "0x07bc57ae007d44be2689afd1191f84da241fd7134e94c7d35a4eae7c74b72b75", + "cid": "QmRV9UauhPa7Czad3eqpXXrppgFhJJR78XRtP3xAyRgNXk", + "size": 79261 }, "data_check_integrity_sa_sha256_dg_sha256": { - "hash": "0x17300515a8661bf77216136524273ae177e17b24c8e480fa09233e57279c6699", - "cid": "QmRpfjEAsmztEvbbMiHd76cUUwqPe8y7XxLUTFHi4wsgRZ", - "size": 79330 + "hash": "0x05fd043922472975f0c3783446f59e863bfd96adb9538193512b9118039b5c55", + "cid": "QmXcq5SYLNQn1rBVhksDGyFTFHk7wqR6kpg9jQtanAeqFQ", + "size": 79324 }, "data_check_integrity_sa_sha256_dg_sha384": { - "hash": "0x049b28600af60c8a926da45f9d610959bf91bdfc6acb4e5d940f919e2166c4d6", - "cid": "QmXirspVN9xadgqz1AQvVVP8kR6wKvZAaBXQqHbFNmFfkJ", - "size": 104820 + "hash": "0x02437a3aad78e3c15dc2301f3f7a3f22727111e8a1fd9bea93cbc3c8505c4047", + "cid": "QmZ26qvmJrVs98W5TE5odngQpx7a2jt7gAs9z5XWU7RGwy", + "size": 105441 }, "data_check_integrity_sa_sha256_dg_sha512": { - "hash": "0x1f42e19f7f6b849e6af8fdc288340f25f6b797419e968899cbf9519553047330", - "cid": "QmZ6VUwg6wKANtCHyDWLMyYVrzLHzY8yckGtK9rT6h24iT", - "size": 105111 + "hash": "0x1d1eab76e7ba7bbc8b121bf49b076a368333f2afe097e0aa3de4391aae5bd9df", + "cid": "QmVV1UYoyzBsMJzLFHqr9m8qVx6Eny4k93GnWrqeH8wS8T", + "size": 105732 }, "data_check_integrity_sa_sha384_dg_sha1": { - "hash": "0x193c7d6698b16ca2cbeb478649cb94eaac1f417878977593dc84e20c2825c601", - "cid": "QmbP6QHQbZ5DWv8PHzqmPpmAXrn9Rgj6m4RPbeZLvRoZ8b", - "size": 227804 + "hash": "0x262b88eb1af960b3c779c1297ef690941e30de6250ec2dd3a57f74a95b08f83e", + "cid": "QmeRyYUTwRpuEC7jYveAaAQ328MXL5zN75h179Kcy8N6zb", + "size": 231531 }, "data_check_integrity_sa_sha384_dg_sha224": { - "hash": "0x2e3c898ad6bbb4a16d4cbbe6ec690cafd779d001cc44165f6ea50cba22e24080", - "cid": "QmVYZTKaEhi1TR4mH5PNbWJDEYsVLetX4Yqt8YUeP8WQwY", - "size": 209496 + "hash": "0x2d447f9fe7c9124492e05dccbaca3a18c85d2c04deb3c6985c352d442c463e14", + "cid": "QmQyTcouH9uJMVwnCGeDmmMss7zyA2hTaEnA26zKJn4YBC", + "size": 212596 }, "data_check_integrity_sa_sha384_dg_sha256": { - "hash": "0x163213373d5791366173c5f4dd1fa45e7a11035aa1d1577c8647ac3571efec8e", - "cid": "QmZ8hT8mde7XmwMBF6Uuv8xoVN3fyT87u1dbojeTvg1TP2", - "size": 209567 + "hash": "0x2cc5d6b60b3385bac6ecc58ea048df411dbf3158bfb692f398a905db628cbb53", + "cid": "QmSKNi3RjzEmrNSLp1zaWxKMAmZRqzpHzye7jkVx3ZHB42", + "size": 212667 }, "data_check_integrity_sa_sha384_dg_sha384": { - "hash": "0x19137020a29ef4880f00e2e6e560ec422afc81ae6ac676e9e7d7ce098abdc5cd", - "cid": "Qmdy2TJ78an4yiZUuFxHnaB2QFQK1jYaNdHWSwrFYYo1u1", - "size": 224798 + "hash": "0x0791561b23f4cfcb938e6f627d7e7aa58edf89139defd521337633271c868045", + "cid": "QmVZvpfRyuKi6ndm1ddXFLktmzhz97sgprxEE1jiMcjtjZ", + "size": 228525 }, "data_check_integrity_sa_sha384_dg_sha512": { - "hash": "0x2bad8e739228af2d7d4b701443a1b789aeef3d01ae7633fd7b5d41561745b07d", - "cid": "QmZd1uHgKHXD3dCtg4srYwXA7mj928pwz7vrfAwUuw2h9n", - "size": 225089 + "hash": "0x0f5bd7f91ca919782b0379b3eef99160c2f1b80296dbff3e7c6a7e6deeca7256", + "cid": "QmeKtQRx5xjuLjR5ADGwrgaEwuYtKk6wzmH5a7g9HYuVwV", + "size": 228816 }, "data_check_integrity_sa_sha512_dg_sha1": { - "hash": "0x298a262b46fee708bdc4525cc6ea34c7edf5ac3989abb4ca91be64a54de821d5", - "cid": "QmQdQE3BZcM4478bx5QtxAu32VjdpUyLTNMThmSTqN8uYh", - "size": 227992 + "hash": "0x2267dbb509189a184e6e34c1fd62ee639c1a2a5f9406580824a697c933c1e614", + "cid": "QmXo4LRzYLpGRxexaZ1CnCJXScaUbpZJTCrkQ837kMsQYb", + "size": 231719 }, "data_check_integrity_sa_sha512_dg_sha224": { - "hash": "0x2a941b0e0cf3310c4b8969d0806c6006953a070a3ca912f264f3cc17343c35fe", - "cid": "QmbEVjukmmqpQWdg5tyvU9RAswJWeFVNwnMihM2H9fzSQ9", - "size": 209684 + "hash": "0x1027ac6240a347166cfca6b49616b2a9796a057c9d72cb3b9f5e9999541ea3b3", + "cid": "QmRbF9p9A6xJhcUFPgxCHh6T7cEGFZ9cnraR57htPJ18ku", + "size": 212784 }, "data_check_integrity_sa_sha512_dg_sha256": { - "hash": "0x2f01d1849195358eb2ab0c72821ea9210847902aca8456ef6f307a3731484fd9", - "cid": "QmRF62oqLNYLsCo8Y7m6EMJJJCLrwiA69LaXdss7JCy9qn", - "size": 209755 + "hash": "0x23cdf42e21144239e98bd70d703fd3de752c1402068331bf357282a215bdf17b", + "cid": "QmcFH3W6dnQsm5SorZAMXbP4vbMNxcnrexahZziigedmju", + "size": 212855 }, "data_check_integrity_sa_sha512_dg_sha384": { - "hash": "0x02f8d9f62ff28d3904bcc2cb8094a58ba0fc98fbfa50e5de0f77fab982932d28", - "cid": "QmaVctDgG5eNszvBgF65ctEA35ZTzADZZ1M7ibLuqMCka9", - "size": 224986 + "hash": "0x021dae045ed15edd8f64df6095b4f38327452abcc0a1ddbc559e14562975d606", + "cid": "QmSCJ1AshKoYDv3xn9bk67K3QTpqS6saaNk6D3Teau5aMW", + "size": 228713 }, "data_check_integrity_sa_sha512_dg_sha512": { - "hash": "0x257e8a23eadc16fc84926e8b7df47e477912afceb145f7bac6f0a824744ce493", - "cid": "QmQzQgQtx3z86orRLGVHUotyUX5a77osiaKCbW8RGp1W4c", - "size": 225277 + "hash": "0x141fd25ce3982ca631e87d7346d5302d5042cc7ee8a727f14e7d6913bd823ed5", + "cid": "QmeyUfWNhYqjUzzBwUKqKTjZabLayYQAVbv6xbMyeQKXYM", + "size": 229004 }, "disclose_bytes": { - "hash": "0x2553ea2d49ce6ad260096d25647725333f4a348934eae1a3103fe88cfc3dacef", - "cid": "QmTECtaMyN1YUKo1SBP7JK39QHcqY75cudUKWk3VkxT22Y", - "size": 7862 + "hash": "0x156434fc19bd472a89328a31cdbacab9bf56bb9216bdf4bb53e763dd5f9e2761", + "cid": "QmW3RYNr1vCGVyPSqMEv5AunsPvHjpDjaXY7mFfQvjXhnS", + "size": 73737 }, "disclose_bytes_evm": { - "hash": "0x2a33515ace3857f623c6319ce1dcac82aca4285477fb6e3d6187558c602589d0", - "cid": "QmdmuuDa4Ddg9FzZb84zZNDjtEMekAxYkUHApG7B5p9984", - "size": 36000 + "hash": "0x1f996319e573c798eda87543a240a62766256881d82d3d08e97f4a3ea8f6c436", + "cid": "QmbJkyAD3D3TMJQSfpTrAA7RvoRujVVCTqmxvK2x6BHfsJ", + "size": 85602 }, "exclusion_check_issuing_country": { - "hash": "0x136eaded30407e8c6b822446091fb6d1aaddff20a8b8327bda9bc37f4a421abd", - "cid": "QmXe2GqYT8ZsZpJqUiKpVmp8PEdUpw7APeQM8E8CdSJuHg", - "size": 15664 + "hash": "0x137bee48e3a44a7fc987ff7ce0c3dc8545e8c8f6a0f9cfdcf420206f1b0ef47a", + "cid": "QmeY55m5jtQBiSY91pRyzE6p2A2zckeu3m8jidvKvFuoJi", + "size": 81540 }, "exclusion_check_issuing_country_evm": { - "hash": "0x172835b07dd3170a19cafd571f02399c86c9c104aeab8b96546f4ada361c8eb3", - "cid": "QmTWottpfSYc6WiWpy8eiTVNo3QEXnDKavcWc2W1oVHip5", - "size": 54397 + "hash": "0x2efcb0ff8bfc3675049eb364b2917bdfc5ede5fd915b119cba0a3cc441baabbb", + "cid": "Qmdbxn5BpweEnoQ3bpvqqAUrMFeNiW9x1rPv2bUZQ3wnXm", + "size": 120272 }, "exclusion_check_nationality": { - "hash": "0x2db2c168a799322884ca359a96d0bfa300e772bbc2c82e8805b75cf08f79f197", - "cid": "QmWGfwchbzjD6hutxApdJNSNSCLM9LyP1wwXTf5rM6RQEM", - "size": 15684 + "hash": "0x0f29faad6d358ec0e4d5a7e68b45c9e484026ff0d7f47b3fd03a4a64f71abf1d", + "cid": "QmXWwWeRJE8FULiqknPELeGpXKfuYYaUv6R9kFWAsXq5ct", + "size": 81560 }, "exclusion_check_nationality_evm": { - "hash": "0x299859b3721dc5a23eed1b479ffef10a31bd756a6731033adfac0227ac560f56", - "cid": "Qma6X6WNEqGuAocon3EvEM6JbX6CtBeJqucSsZDXKb2sVt", - "size": 54417 + "hash": "0x075ed250b1d7a8ed521240a2d316eb8002eb61f8d60f5fd055b9b18cc54650f4", + "cid": "QmUya2VQQr673cbe7tRFMQCjFSo4w7qdfY896JHpyRpVA8", + "size": 120292 }, "exclusion_check_sanctions": { - "hash": "0x05e6ceef26d49a53876fdaebbf52d7e9c8954fa4060929a40d19a1d1dc523a22", - "cid": "QmaMZ8gUrrRN3qhmXd7M3h2zKUWnkmEt7fxTjjKkg9iiyf", - "size": 53723 + "hash": "0x040b0867e179bba268ec86d6bbd426d7bb66cdc730a44f814e8c9a088009dc84", + "cid": "QmWTJPkBHEfFUqbWzPVn4AkQGhdY7efK3WyT2fUeUpCqFB", + "size": 119585 }, "exclusion_check_sanctions_evm": { - "hash": "0x26f5185eec21e10de4f74803890182504830b7dd93ac1838a7e1fbb782673331", - "cid": "QmVCJtDxPpFhzeEHhDLveW2e1ArZth2ExtWtaX1NUsqry7", - "size": 58049 + "hash": "0x2874ed4bd6ceff7f88e25b03597cd2b90799c43a8d0416ad119e1a224d0e5918", + "cid": "QmeRW2D9zeQ1thxzkK8p2yV25oESLP7SDhcMDtQQ9cibWR", + "size": 123916 }, "facematch_android_rk_ecdsa_ik_count_1_ik_ecdsa_p256_sha256": { - "hash": "0x1e9d5fe0cd27de65f024b21c828db79c1d86a863fa7c9ee8502c6256733ec7de", - "cid": "QmUfTYmRuPwuRVL13BkfitXhvhsU2iTXZmgvxE36Qsk9wQ", - "size": 966023 + "hash": "0x0c23279c9565e0226f4c173a9dbe144ba61378245c52ca4651d37a285e7943b0", + "cid": "QmdR56GggNyeuSF1n5W8PZzUyyuKFFRUvHoP8QwgFKVuAo", + "size": 972320 }, "facematch_android_rk_ecdsa_ik_count_1_ik_ecdsa_p256_sha256_evm": { - "hash": "0x049ea3daffbcba032bc1ca4b8ebe677a36c6e855f5a64e811fbfd8097764ffdf", - "cid": "QmWzf2XeGXzoLd72herPcBKphPCLmhbWw9tDwRZNKDnRoz", - "size": 975090 + "hash": "0x04ac09c11c80ac0d1a4328d1e8e0045fd8c541498a793654de86b37ad8a2aacc", + "cid": "QmXNZaXKTDeL2XbdbAwgFgL9ZpH9MLoYwhexg5BqdVo4bC", + "size": 981396 }, "facematch_android_rk_ecdsa_ik_count_1_ik_ecdsa_p384_sha256": { - "hash": "0x15758f6a9409526ea97b688fefaf70f95310a7114da58a1e4bb165fb418aefae", - "cid": "QmUJhoMB7k5NxfN4myjLDwCezXDsXiFUijiVLqyhfg65t6", - "size": 1101230 + "hash": "0x0d02ff525def680b4d28f38b0deace0864f40853b65a072d9b3b4e3440c85a7b", + "cid": "QmZXRpcmkR6vNFQM2mgDpjC6Xk1VoTmArUucYFTU4mSpU6", + "size": 1107572 }, "facematch_android_rk_ecdsa_ik_count_1_ik_ecdsa_p384_sha256_evm": { - "hash": "0x039c8914845683ff3f8c36c6154f5c19ee95f5f653c6930223bdfaee29329158", - "cid": "QmW3oexH8JhVhVxZYprxGqPtuxVUusboxs8BPy3ZQEw2MN", - "size": 1110297 + "hash": "0x14a2b65115606b8286c9bffe3a6052c87f0121b04a4ec20f46f7e2efaa47b20e", + "cid": "QmSdMMygeTFR86uucqfLKM173kTmHbq9by9bQQ3WKHk744", + "size": 1116648 }, "facematch_android_rk_ecdsa_ik_count_1_ik_ecdsa_p384_sha384": { - "hash": "0x1b7b21822aa45ebe653371420977ed601e30267cd0a791c2d85ebbfa5952972d", - "cid": "QmZPztDjhA59e2oTFAQZSbm3pU8Uo18SsMw6o1PXjuBNK9", - "size": 1256588 + "hash": "0x0b0f2d6fad266f82b842c3986349797902f7d6490f6ee5de3999d4c11cf45ab5", + "cid": "QmXSk1YkvLo9qDPftJKbWSdxYvQPYoFBVsAHd35QfGr4ry", + "size": 1267358 }, "facematch_android_rk_ecdsa_ik_count_1_ik_ecdsa_p384_sha384_evm": { - "hash": "0x1258ecd68009e544f11b28b8d144ab9a3033364dca1461b599950601a0362d1c", - "cid": "QmNbn1QGDZrma6thpDUHf1zAxBRYgiMzji11t17EXAEdb9", - "size": 1265652 + "hash": "0x22e4b6a2f1666bdd9eb0d9daa1f8bd023d5fe3fff4c9994f50cbd5c463d28a0b", + "cid": "QmUtCz9hFgi5iZrqP1oay4732SbRqqprBnnJ8xfFeago7t", + "size": 1276434 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x20d86a158a00df5795c6fdc6bf3e3678018fed032f1ae61f92a9758831963ec6", - "cid": "QmbLborduXj4irqCLHf4BbjrXLQVQkBAnkqL1wEhxeacaD", - "size": 1092792 + "hash": "0x08908241eeaa0f19a3b01a9431b6aad3f717ed95a1b98569fc539f017ae5ecb9", + "cid": "QmdukFjPPwJCRnp8n4KyT2147iCHu2GbzUgjjHh8UJvg9c", + "size": 1099086 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x13c6cf102662e64540e4598ce4682061bff42cbfe0baa95a560e5e37a6b2c939", - "cid": "QmYtY4XcQtXapuhC24XgRuMUEhiroiM8Ap3BDPhaSb2gfc", - "size": 1101858 + "hash": "0x108031ddda416d61e11c16f490df0a3f66c2cf8c3c333cc571cc3885d8bf3ddc", + "cid": "QmQAjqqME5QEi41bRuRY8YsYKcpaUpSvvJW7aGU9vkkQzD", + "size": 1108163 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x2f9a4ed141f3b79e4a96105507e711cf489893d55c369dc9456dc646a9f3f690", - "cid": "QmTceLX1wEFgdsDrtpWEBcddqgo3VN6ESDizcPJHFVH6oV", - "size": 1228001 + "hash": "0x11d6971547924abced4b3816eeaf978a925efbf0631c962c3dc7357254167435", + "cid": "Qma9UKw27VEFE7yoLxL26ShSWSr8RJGPna96Mr1dqu3KAE", + "size": 1234293 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1e74c339f354df82e19211d0881b04a78446ce7140578765f72378058c26c22f", - "cid": "QmcdCaLSyAcymnBs7UqSLaL5BQyp95UD62qEfimMBoYWsK", - "size": 1237066 + "hash": "0x2faf3cd86d4a3caf9a38b36eb4551487accabfaa2dde7f9e5c39f202238ba2e6", + "cid": "QmVrjjST5kRdJUT3hMNsafRrPLtDRHVGzft6romYmkBbt1", + "size": 1243371 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x23fe41c7c19477949302113773aa158bbb15a0b8c81576ae3964f3c89fee8c63", - "cid": "QmUaGcSzkfAxs6wj1mx94sa61dcA6aBnJouv3yhxQajvrN", - "size": 1383354 + "hash": "0x01ade42701a3e5c6160e3d4277a439dcd690365e04b43e6b6203863b71312620", + "cid": "QmbFf4nomx3p2qn6tstkkdJPznb27A5gKZVzygsdgDmQPA", + "size": 1394078 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x29520576980d930a7c3639276f630854c65450d6210639e0112f56a25293e498", - "cid": "QmTPcw8AAREJfXsAjTkXNnGjjJecQZ9Ybjx4KFXXfjHFHd", - "size": 1392418 + "hash": "0x1d5e207989710fa1ea06e8a7b7cbc9d318b9b81e05bbebcefada314f95e2ba2a", + "cid": "QmZhbB9RMeW5Hvaz2JLNqiJLrsf3ZXSTNJXiGmYsSpdhNK", + "size": 1403154 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x251e64b8dd7825a23d97570c8d219af53fb8cc5928d55748d63052167f6d85c0", - "cid": "QmUPjYiRhbb9iG25EUpAh1K385BNS7BVc1jiZjqtnCxbWb", - "size": 1228001 + "hash": "0x167ee74049f6a84cac7e13bfffcb42bd07ba29d76c948194f8e79f1341c424d2", + "cid": "QmfVomMeeH1kee3fharfGStuxY9wVKZUtmCQmF8A3r7vj8", + "size": 1234338 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x199b9f427af188d231153b231be583fd00600ec8a4626449e90c8e70e0326a5b", - "cid": "Qmc4HDhiFPRs6jRHV5UrtcvJmLGrKm4tYNuxYhWUZhpzco", - "size": 1237066 + "hash": "0x19effceda21abe1b322cea91605c9fbfbbe362d234432fd8ee66edda1314f73b", + "cid": "QmcAyVUqHwmzww2u41zPZ53aFETaG6d5imRuWUDwnpwpsZ", + "size": 1243416 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x00db874aeaa285adefee9613d0bad90898f7d53f1d7afe521f8eb8d39954a87b", - "cid": "Qmcyka8XXE7uqpQ1CBTnhNKjjXpG3EqWh76iVZ54k8kJ3r", - "size": 1363209 + "hash": "0x0e97469d07862157fc09a3a29b1a980379f6324a10e92bffd75d275a7223dd57", + "cid": "QmRPs8uFHnc1fjznxE4wG8R6wUMtGrCDiZ5ECktE7CUXQs", + "size": 1369546 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x2309bb278898f6bb4852d2b783489e5563ed8d3491e97751b2114886b53e2e5a", - "cid": "QmemjnF5VnKo2vJ5ewUdFvsNYCuqsLY7yJvAFXiPaVmSN7", - "size": 1372274 + "hash": "0x1f2082f71aff6876bbdf717ad6795c727a3d1279ec1316a0d633d0591487bd36", + "cid": "QmUuBiu9DnbSwamKwBtcRBgqqQxxsR9KcdKBuHR5xmhspA", + "size": 1378624 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x10f74ca97cb29f935ae30123abc2fb9d63a6a351135dd1fd6c7d22e6fdedfc54", - "cid": "QmeZGX2e8ZfN6oMDSEGKopp9XYxCcKWcsP7wAHPQcYWghG", - "size": 1518562 + "hash": "0x0e8bc7c48fb5c5d2a950c13cbdf5d8d6dd2cffcc49683ec373cc23cfb05f3959", + "cid": "QmRts16njtfU8b8naKXecShGwhoGk9Zg5jrfaqzLYBqXns", + "size": 1529331 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x28c736bb89bef52fc92be03412eb46e24368c18e8a31f27b55db890ba589da54", - "cid": "QmSbfX5Xq61X9HjAnVzDzqQCwFv3juxB7WG8wvtpywt2eb", - "size": 1527626 + "hash": "0x19833cc0d72a40c72fb1bff3fe29e77c3b1d7c11b556ea0100a2da73e901b8f9", + "cid": "QmYrxCHXNnDGHpzhSktxuugACUj8GXRxGgJcUB3NKFLLFv", + "size": 1538407 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x27ed5e640ab56a2672ca0d0582a8a7367664fb14a80ae9d870e6d45a9f69a579", - "cid": "QmQbQeYh69tAnw92koQBxvoKhts3hrzME8dZsifeE8oHU6", - "size": 1347170 + "hash": "0x1c20b57c3a92002d634e72a9fcc0a7c0faac03035b21e89c232b4f798129a126", + "cid": "QmWYeu5E3Fh2YPEkXSL8rKxe2gjLYP1ZWXByX7xRSBSjEk", + "size": 1355306 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x0c07215d121e9f83dfbf25ed28669a15e4d861aed9948f8c5dfa96a1cda040f2", - "cid": "QmSRZXArN24aKigsZfRqgg81qfpkJQbVSYkeTYLyuy7t2n", - "size": 1356236 + "hash": "0x034d8ce826b04ef718d2e3e629dc70162b3e01baac57ef461654d9c054ae3554", + "cid": "QmT5i791bj4et2EAjjXWpRsreB7ezjpSJpYFZvMo2qHpQv", + "size": 1364383 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x16fdf5a55b653f022f1cfa18bf194f1ab03e377a25b7a3b7a3d3467368849765", - "cid": "QmPARYdrZiFjvC2MVCVv9Mtpvge9ZBannQTqTMzLJRsZhE", - "size": 1482378 + "hash": "0x0cc4817d3a6de62984f0f4fffb9d86d0f9aed5e390eb8bb195c17a86bf0661c1", + "cid": "QmNpWLxdoJbsXFTZat1eEpT7upMKyzWd5XWTTehazhyg4M", + "size": 1490421 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x2694e803a00a19b05ee0edc65eb0144ec2ec0a1fd5ab7e095955e3714d73a8ee", - "cid": "QmRpavKudGANbWZ9Rx93pZ93K3oN6FUy1zMevokPZkYFXu", - "size": 1491444 + "hash": "0x182ac57620d884f7d8f5631cd43ce202bf4264fdb2e0e03177c7473cee3da2e9", + "cid": "QmQ2rwA6H3YZjSBrdkVKW6XRhfEHkvf9b3AxgyZjos4276", + "size": 1499498 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x16346f8c86c9a7d63db7b9febf8e4b8f6df7540e5eca8967a8e3890847e74ad5", - "cid": "QmTJxpRmxQ78fTUXDCeTmNBdfq7J8QdyWyL2dxSkLrXeh8", - "size": 1637734 + "hash": "0x16ec617eebfbbf0f02c0bd1a214ddc28bb6f1beb059abbdef0af1236f849f2e1", + "cid": "QmdTQ35ZjhFPv41D2c1CGZ2aE2BZXgdM6eBNDs5GR7XAe7", + "size": 1650208 }, "facematch_android_rk_ecdsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x0d3bf42c6cb7b01aa40ea0519186875b74f40dbee10b916d5363fd4b703db97c", - "cid": "QmQvz9ZiuWrmpMJXk9TgCscsCugicBZE7cjL1Q3BkgmuCK", - "size": 1646798 + "hash": "0x2fb72879efba58ec9fef668f6addcdb356677b5829fdfc9f44189fa517d79891", + "cid": "QmX7Vh3yQCY7P2woxT7euka6V9bZSaCzgFRvUHReEhhiCY", + "size": 1659284 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x110ee8682418fba752528151522cdf0515fd155ad6b699ca010982ec232eb98b", - "cid": "QmTzW3F9hehKj5F3YyUx4b9a7qncHFpZdrncuetCSdGgQf", - "size": 1219560 + "hash": "0x27803fe48a1267620bc9bef90b0ba63bd75ab8981d8dc20de81aece78b8f0e5d", + "cid": "QmWQpXuU6mXjKHLjbJ3HbHNFK9c24KbrcVY1LpzrFH6tki", + "size": 1225850 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x0d5349ed1a32961ee437771846f762c9fa7e2bb34bb80d2dfce0fcabda16dbdf", - "cid": "QmTjAr9xSVzQm9VecTUTxncY2jsyfnHFGMHWegimvf9GcW", - "size": 1228626 + "hash": "0x2def0484578302ae506d9768d3ff0f5fb10f2821d30953f2426a7732b741e3dc", + "cid": "QmafeMwN6mGYErEaLRy9snJ2P8TE5rzQiQ6UswH7tMxo5Q", + "size": 1234927 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x113efb401c29bd2af3e0f1b69c8b70ce86b834af4688019c0c9de89d34566954", - "cid": "QmdRY52axWxSRyvjtqc1gVvyXBzM4uw6RcNodca6SHbTRT", - "size": 1354768 + "hash": "0x170c630181f17a058a66a7d5336fdba6bc47d61d94538dea03ab0e8f147262c7", + "cid": "QmS43CQe7kkaAkPYBeK5ud3hUSy1UY5ihhQs7TtFmwjmip", + "size": 1361059 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x2c24434f8548dfd51589a08062a93e03507f497750a7f93c5ceca75e7cf35aa8", - "cid": "QmderoaSEZWDsQVo8HHkVvYtvQGozyCwcduk4aq5JR5B5t", - "size": 1363834 + "hash": "0x171a720373b7ecc71769eef27a061f9bc0ed806dffb16760300bfce5e84aa2f2", + "cid": "QmbsqiAjspNQWAjrWFNPV576jJwKUsu14uwxCemvujv1Ah", + "size": 1370136 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x0c48b5ee132be8e94cfcbf5205720fb471922de5b24464006aba2512ae99f89e", - "cid": "QmdD5EznSiNAs3bYE3TozJLDjjGX9htuGcE1pUD1oXVVeT", - "size": 1510124 + "hash": "0x1599db43b8949ef730bb49947ea2b8411fad5a1133a6135681f8de4624992dfa", + "cid": "QmSziuMWoF2Un1396VfE1hsxpFu83HsnFF4dQXLXgmkiE1", + "size": 1520845 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x2d1a54aa2c738d5691d83308e8ea3aaa0cab73910a6698114265dae37f7baa67", - "cid": "QmNzDniFZgirAG771GAAPYdnBZVdBCRyWL1NQjFsirwi3Z", - "size": 1519187 + "hash": "0x18388a8912a2d1cfb4cadecd73a69b645d23b050657d7b6e9144f6896162b0f2", + "cid": "QmfXhgwHYsCnb8Bwa6HSkrHiuCo7W8mgLEiqVSJGU9dUtU", + "size": 1529922 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x2cf5fe3866d36df9b5aebed5a50e8dc2c42f16946510d068632561d57766c8af", - "cid": "QmbamQX3sGw86yS6TrdupA8Y4KTWDVALqiPapNXzHrEVoD", - "size": 1354768 + "hash": "0x0b5616da0c623ba41adc41d21150c6b886af87f395205bff2731ae4aa2541632", + "cid": "QmTQSMPwhATWDGUzJZN5YRW3nsCUKyfDtay8BiMKi2M4pc", + "size": 1361059 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x1f403e6b37d630f34a43e51dc4a86cfbb51c7c371bfe45df2591701f88dc07e3", - "cid": "QmeSpHCsxuG9hQ9uFuSLMmsGDJzdFDoGC7Ksk8yM4T3PmE", - "size": 1363834 + "hash": "0x085b9988bb8810705a5bd77a1dc4083f417e29916135906ff5d8386d39405b7c", + "cid": "QmcYtv6yRoq2LGMzZHAKR7H2GkNAq6h2djUViepKhpw2sp", + "size": 1370136 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x06a89c74f0ad0dcda515e3b90109c129e35bb3c371d8d6194c8964b52b62a531", - "cid": "QmVt15k9Gb2SGGXmwHHSFWfwVwUsDdaUTjEiX8bphJkDac", - "size": 1489975 + "hash": "0x27e35f436850e7665ba67b11fa3971e6ea281f0f47911ff5323fee2a2ccb3a0b", + "cid": "QmRGQxsD7PUySBNu7FMYfBzRnX2msuScC6VU1ReLEVxinH", + "size": 1496268 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1941e67aed962dec973215bec81d41ccca8cf8fa12967a628e9b153f1de04450", - "cid": "QmNc481m5FDy2EA2P4ZYVuWRdiCgnvB3n7oTUdH3k6AUC3", - "size": 1499042 + "hash": "0x183c91164d31a28cc998c525d4073eae0f63add09ed0690c4c4c63be2f163076", + "cid": "QmbnPkDhN8odYsy4567t1k8jVH1cQzFLM3jBhnWZ534e9A", + "size": 1505344 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x2d116e796a82250fbffe07baf9149bb2f5d7cd694df8f366ac15ff8d256a9ffe", - "cid": "QmaB4QSBQ1wVVJ8jcAfV6p9CysrVRuDSnQYuawqbHXFuKL", - "size": 1645332 + "hash": "0x23e90b39cc2ef400e8148cd5cd9284a2ea876d765314efbdd60c7860093683a7", + "cid": "QmbGvjTmRBZzNVeyNDNh3CjgxkceDxBNY8CC1CDYkcGw4r", + "size": 1656053 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x211362b6355af7cadbba6b944c342c1f1cbf8f863d91239d353026a587b64184", - "cid": "QmXU1SC9B87VpFdeZ2RrLrodSGPUUG8h3UHJytYVJsCp1M", - "size": 1654396 + "hash": "0x28011df77bbf5602bea38d8677d9bc7191f09c032e7db10a90cf9e8ecd101154", + "cid": "QmRssHRArAU7osLpApaexDJo9akXvjfat9WZdYGiLt8Vek", + "size": 1665129 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x2bdd792042cb6a199491b5e71dbead6975be5e5ef4f5c323b191445adfe713c4", - "cid": "QmSFQsmaArs4gMfQ3cTJKERBea5BAftzDL9mSbCxSNV8my", - "size": 1473940 + "hash": "0x14500c65aaaec49296fc8fffe3a0b4bb1056c3c0deb36b257b9789e0564f2e93", + "cid": "QmSwh19mAD9REqXVvY7fxnvMpuV6itSLz1VZJXs8mB8Ven", + "size": 1481896 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x27fc9649afb862d168dc02c3ab1f412fbef2aa796a7a0efa9024d5691ab7e228", - "cid": "QmSqLbMSaWZdcj3ngdgELn8XsckRibWumQsYGKFUR13HGk", - "size": 1483005 + "hash": "0x038ddf712b3454152e53351d3ea13789b9491fab59722dfaad55ac60b88a278d", + "cid": "QmbRQjekkfETmqRukZZtVujYkyMG17871fNZHC9iTAXuWp", + "size": 1490974 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x0c90abe03677451820a30a21eaff2d80019f3499cdfef7150bafb7a204655e61", - "cid": "QmShwTRsWmAxfk8mwvERk6SnxFUxPXUBnY59hewF34Zvjo", - "size": 1609149 + "hash": "0x1d76c52adb9f91eeac3a37b4db596b99fc5030d41c9c8dd988924f87d78989d0", + "cid": "QmR2PTbSNuiZCM1Vyf4ZFqNnLAF5MYNgPyWo6nggCHMauY", + "size": 1617280 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1e4fb30b2df7bcd8bbcbecf97cd180e015e67eef5ce4172997cdbe5395e47869", - "cid": "QmQF5AYHt1SyzrzsrCcEyx2d4987zCNNnYR4BPaFxBntjF", - "size": 1618213 + "hash": "0x2d19ac24e8a8d628b3a0c95a90290334eacc5b6fca349661c95beb912acedf2b", + "cid": "QmWjwVPJoFx7S9BQwYnW75naaaVdqCvSHNeUFCNfLkTpNW", + "size": 1626359 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x115b47855474419c9940e6de1d80b300a6f3536b35d9e7b7bb591b35cbc89060", - "cid": "QmXqigX9kMEeHixj3LCjVZDtPjnXEij3BTKkeALwDHAFYF", - "size": 1764501 + "hash": "0x0c20c44fac3d3aca030a13ee6c57c53bd9919133bc06dddf75aa0953bdae6847", + "cid": "QmdMFahvEnHF2d3dCYjExZrPJGhoLA7ihEjmKEdNfQaBRv", + "size": 1777067 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x2eb807cebc41ffb95f50a8328a72e9465890add64ead88c647d4d4a933b5d60f", - "cid": "Qmdvb4GaG7No4YASh9QRPm56hnWiWCawwXkgecQmjFqGTd", - "size": 1773565 + "hash": "0x05099d6aa9d7ad818408c78f738cfdb4761d33e13848f80e8c1477bc648df1c2", + "cid": "QmRQgB6AZ9RUM9ZbxY49M8LWBBZPHszD66J2qQf3EQmx61", + "size": 1786143 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x2f2f3f02afe4a1842233486ef76d0f528f2050471546f3219c3fb518e99bd772", - "cid": "QmP1ELFKhnrn2FE569j2r8zfGpYHxwtV8qfZcnu4fPNon8", - "size": 1354768 + "hash": "0x1e4bdeed430a25215e648bc8cc85a5966cda0fc1f4a5d495f0d5232d0804020b", + "cid": "QmREYh1sLhoFVs1dGRsHpUH5jeRHW19TuzweELyYyukETh", + "size": 1361104 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x14f99e231592f24fcec0541288d0dfafe27cc49f045117999106ab8b711b01c1", - "cid": "QmcayMTSuMaU4Z7FtT1wmnUmGw9JmEjZvuh6w5kwHtGHPJ", - "size": 1363834 + "hash": "0x00bc984560d5294ddba166f5a7f92ba2fb160e9c6c6ec8035d119a3c0cfc8987", + "cid": "QmNuAybd7xV2mJHxwsgr7D1F42wpRQJEBDpzB56GjxSJbD", + "size": 1370181 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x0bc766c69c20d1bf1835ec92fa4316ec90a6780de0ac2f30da78b655c81ee6c2", - "cid": "QmSxs9pQ8HoH2jR4UGpM1XyJDSjxUHxHEWXBCft3aR4yZ7", - "size": 1489975 + "hash": "0x0bdbdedaffdfd10efc34736604b0d3135f5b4121ebe2c28c0a309ef861f4eafe", + "cid": "QmWNqWmpBDutYGaFgPtmiJpxnHnkRD5dhZVMas1ptCbgGa", + "size": 1496313 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x0ceb9cc20a343c6b2534731e8cdeeb43afca711741ff879cf02e40cdb9dd5b24", - "cid": "QmcXuUbNozrufKkCr8kgdEd83kHENxCAHVhhG99P33dxeR", - "size": 1499042 + "hash": "0x01f87ebc638c5fbdb340338200b70bc9d3fbb3a164f56f66e165fe12de8662a0", + "cid": "QmeYW3oJmBwLsCFiWfwbp652Uoi84HZng8ivKHFNFad744", + "size": 1505389 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x2a58edcf895f5aa78ec730c15f42b806711434632c1ac3a92394dc43bdc8dd2f", - "cid": "QmP6ZoujNQ1x1UyCwonWQYALtkffi21cMQSfAqCyNWwSRw", - "size": 1645332 + "hash": "0x141f10d8e72065bea753d0fd09c6022f8490003043efd1687ff773b6651a37a3", + "cid": "QmYVff5rkkFKNbFLaswJza7GLk3KMSeJkJ4WrAT4nqK19g", + "size": 1656098 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x106bca196a0e9abaf85d7e76feddfc100143521a6df7d09258646ad173363e0b", - "cid": "Qmb9QMKxjQYKMmmnLWKQ7AH7QmFGdiRbyKNWDMTSyKCxbU", - "size": 1654396 + "hash": "0x297af49c87adaae50f0796e1f612b6ce0e0012c2efd6de03bc752b3266e96d8e", + "cid": "QmTHyfn9pDqHTh2x1chL9as9poPgafgn9dWbruh8jRL65U", + "size": 1665174 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x24d449463db47c83f6408fd282b8a3de1e53c4f5e50a4f29036d07a4c6c3d1be", - "cid": "QmYDS7zud7Ux5Jn5E17s7uLDDSjC8JBXDCPzU5ZLUCS6aj", - "size": 1489975 + "hash": "0x08f48d2d308bc867bc7c2de3dbdf3431e10883484d6a31322c8236df7a715f36", + "cid": "QmW3EVmLi9RAmsS4rwSr7Vr4QLesnbAeNiH8wghuyp9vPL", + "size": 1496313 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x297431835c2b227847361aa9a408b8c0f128b4dde7fbc41bdcff864fcac26285", - "cid": "QmcM48gg1ACuTN63CQJKzePDwDFzRonc6QUJyVUu2ZMQJo", - "size": 1499042 + "hash": "0x16b130eb61a7c8b1ebc74c48015a516a0301ccc838a5b5f4ce37e4fdf42b53fb", + "cid": "QmXQukiaFta1cykk2iAZie4kKsUjPqPw5rSX8W1TfyQFcE", + "size": 1505389 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x22d729c6f6269ce10e57f67e786e63d539b18b451b71774b7f3fc5004dca8189", - "cid": "QmUWdfovigJmcL8cNviPgFYLDdmmiwLsJGyN3YrkCd6nWY", - "size": 1625182 + "hash": "0x066fb95d4ea810a317e7e1812675eccb081c945df22ab7e129b3ef4b1a1469ad", + "cid": "QmPyukaVbi4Dt5mANauzFis2MxuDHZ9oYQ3w16Y2XmD3jy", + "size": 1631520 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1d324508099a12a276d7caa2f764ee6d8ed10c31557d35e597393a9b38e7226c", - "cid": "QmX8qwGxrScBErtHUUNj5Y1xoDab31aEhAqHcsWcyFx1Cv", - "size": 1634249 + "hash": "0x26fe6d0e1ac146a0b58192e82222c83cea4188a8f4f2bbc2306637bfabda4fe4", + "cid": "Qmc2jREvfwFjsgDESLmv5ttDCvuGKHDdacjZzVr34PHtmp", + "size": 1640596 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x03f7ec98307038e95c812a944210dbda9ee334dd2aaf3d35a77ae4f4abb154f1", - "cid": "QmTwmpYjEZasdEaW1nDJrMgYW8uEyd6AnVn332XmFfvxLX", - "size": 1780540 + "hash": "0x2faf7af5dc79b0e3458c72725d08a7e73cd46cd749216be43c12f1a96db7ab00", + "cid": "QmYsCtroSz4YavbPMXREBBRRVCvpk8v13gU7dxyJbJubuP", + "size": 1791306 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x059065c18a0e8d9ea42e7b1ab8b4e9656852b405dee572a372fba9145a911483", - "cid": "QmXcCCazfpkmQNhg6D3sDqFafERv1JjBPvdqLBB3foGvf9", - "size": 1789604 + "hash": "0x03e0d688e57ce681e2387014445e8fac33fb4d58ac45f921dc6329edd684d29e", + "cid": "QmS8ntacmF3LLutMgVmGJ93UEY74B9u8J2WHNGgxjNhdKa", + "size": 1800382 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x03934b33826d85467dd7fbd95fd2003f783d8c9734429ae02bba2675072d528b", - "cid": "QmfPjfEo1U3fiLkAXVnA75b241usnEvDjFKbw3Brzraq2e", - "size": 1609149 + "hash": "0x14681c65c7eae646fb674f687f42fa4f89098171b53d3d42c93281ab4ffeefd0", + "cid": "QmfGPWsNnqPg9RtLcEYVrf5fGAHCAmn3CrAKuncouXsokd", + "size": 1617280 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x25fe50bcc74fff21129eaeb11a0d1ba286e1074b9cc3c4bf93871e5662ee386f", - "cid": "QmbZNpYEeSiNb5GR9L9mjt2aBJnBfMtiRkcfnma1AwtrS4", - "size": 1618213 + "hash": "0x26e34444add154fab664f6e09f91ede1904cf0615207f046333442f63d1007c8", + "cid": "QmeK4kT4dTpioCSZpsT52V1GsBJ7TrRYxc63XeBLFt3cVW", + "size": 1626359 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x14266803c292351e11e206bc836af340f279301bed640d28821663babd0d205c", - "cid": "QmQbHWpyhuMryaoGZ5u8yTXZhHqz7zxuyDkHEG3xrkjLQT", - "size": 1744357 + "hash": "0x21d1938bd92fa92bf85302ad326e7742d3c7938f917e76a59a23488b35f9d49e", + "cid": "QmayLCgKfKxsKJhwJ2pg7Pq96uzd9ky8Uhj7c1ipuDnhJz", + "size": 1752395 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x2c7847609b43713c65406dc5cba021031abdcf77e701dba6049ce6b8cc7c912b", - "cid": "QmSWuiiUzhTHFh1irEWQTfkSqgENfPYwaQiEC8QF7s3z96", - "size": 1753421 + "hash": "0x12bfff3e3ef10117ff8f9daa322b6ee9f86b11f51b82a9106986ec292370cbb2", + "cid": "Qmaj7ETvugAV9f6oS7FT3TyKsonxEsa7G15JVyZMgQraMf", + "size": 1761474 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x1261d55b3f50686cc3e69e7f22c898fcb259afd4d64f70555db18833b5e36740", - "cid": "QmXZUerA9NkLss8SkwGurj2rdtR4gw4qDNFn1hBRVcq7KS", - "size": 1899709 + "hash": "0x2db988dbc7fc0b762a40c3b55026d5fbdadb1ec04c325121c3571376a5089b44", + "cid": "QmTvqL4bgRQHVd3epnZaGAtATM9hCmeBhPNNKqueETU64X", + "size": 1912182 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x2fd808cdd6bfa942d6bd4d09c5c440a29efc81ee58ac3ecc1ecaf2fae51a4b61", - "cid": "QmPavDiLQb8UsAVwALpgUYeZbv1fWXqJ1JXmSvDC6SbnUN", - "size": 1908773 + "hash": "0x1122c2b350f1c31b06d86a898929c7db5f26334d826100f080fcca0ec6e1f6fe", + "cid": "QmNYmsz9Xd9cfoDhdC9eWdYpCQL8UaGURCkPgjyBHvUvGU", + "size": 1921258 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x11469d0eac357ecc14b4be32057391361bc1cfc28b0ced841c78500cfadcaca2", - "cid": "QmbgmEPyT6CKHXDcAm5dotz219sPZ7jsW3XpMvFvjGQ23n", - "size": 1473940 + "hash": "0x175acb7dc6da8eaea804f01ce64995e26e63cd930d895364ee61829bdc3752e3", + "cid": "Qmb1o6jku3nfNMsV6bHrxbCtdqkL4GSvNPZRJjG7cNMX7o", + "size": 1482073 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x1e0f383e9eb39b3ce79eb90675a0d0d8b9e6dda9c243945da8d3ceec66dad746", - "cid": "QmeJuTAisRypMLQgr34ZYB5VYTDahtBEXopusQZUqocNVx", - "size": 1483005 + "hash": "0x1ee380a69aa96e6a6395e1a5a36ef25e71d64cf8c2d70085363b51e77d375e66", + "cid": "QmT1XpCVFGsBo7omBSaj2tAALZEn9q4kM4ErGNbCVUaceH", + "size": 1491151 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x0c3067bc645a58ec6c05e01547a7a517961e801b55bfd06c0c556a853a3c2a27", - "cid": "QmNswAiPkh9BKoCT8t6Udhv7irmGM8wBdRLijzAUfraXWC", - "size": 1609149 + "hash": "0x11dc89fd38d18ce5373cd300dfb4f6bebb520f33e81196c3c1be5baa55e68b03", + "cid": "Qmd4fyrd3NNgmakPqRzoRMQNzzaa98L5gHtbzXJnUpZLog", + "size": 1617280 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x100b0fba13314c510edca8a502cdbcd7e44757e20d79064e5b81fef28a81d602", - "cid": "QmevcC5u3Erc6ikgqUFtJTgJkxLzvxAVDFCiU59AdjBZkz", - "size": 1618213 + "hash": "0x0cfdf9d10096068c3934727a9526eeed6b9beec1ea88b1b8faee7af60dd5e500", + "cid": "QmaKU1Np7Z7GnMuMTmFURP3N3HxchvjrSdps2Fi425RYkr", + "size": 1626359 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x0c0e638814f803218cfd246b46a4a25473ed128b441aca7463385b411fed99b4", - "cid": "QmdFYs4FfhJzmrTKCkXFyyJDNHtv5EREWb1UxQMFjLjbYg", - "size": 1764501 + "hash": "0x27420b727de7c11aaabda0cc797f160304f9114c200be94a60235c887fd9b3a0", + "cid": "QmUSK2Pp9q1F9gcB4AjFf8tpuvNE7ZpCqWqgXP2etZ1GEc", + "size": 1777067 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x0078f7df6334019cf5796e25dccb75c48d214ac41ccf85963c91b3febb1a483a", - "cid": "QmfPS6Q9EHRdpKqW1mdEeRZH8f5bRhJ1AaiKUK9QcrTs4q", - "size": 1773565 + "hash": "0x00fac5d3a8806b6e3eb218a977d40a20a6dd9dc5e639f2c6c12aac0d0913865f", + "cid": "QmUtT9gzGde46tvxcdaom2pdYafuvgrsDHnDCHR9J9CtZX", + "size": 1786143 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x26030d6bd55a472a51e90308e1a450e9224adfdf9d20fbdb308bbe39d9048097", - "cid": "QmTit5TRfo63X2o32ZsHstiete94CuX87VssxCekXDskEP", - "size": 1609149 + "hash": "0x04e78c538167570d395ea465a8fe97b6c67009fbe3b0f654284592d952e95efe", + "cid": "QmXHwxe4op5GyGUXZF9iBPPz4bcVQAtuKnuPNtuw7nGGSK", + "size": 1617187 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x02fcd613adb495d53cf1676991903abb97b2a2fbf0572ab7a6be23ce3bb12dcb", - "cid": "QmfTrSTX9XtxywpyWx3asbSJNBcrV3ggZ5ZtfivSAbniDS", - "size": 1618213 + "hash": "0x135a87f01e60a0c8c00a461abe4f4d69bec179fc28fc4c9317195bff297835dc", + "cid": "QmYEdWRiQqj71ZNPdxSaxZ1dP8Cgco9A55u2e2UAYc2R1y", + "size": 1626266 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x278b63ec6a2767698f8e6c71c4c2cc21c3077f91840c7b7665eac398d836e988", - "cid": "Qmc9s3mya9cShNDFmWjiwQq4oxYF9xNXA6CPPqRL1w6kCg", - "size": 1744357 + "hash": "0x1b176fae9de1ffde66788b8fdb85a329a95cd7facc0423b209801199a5f952e6", + "cid": "QmZzoy1642zvXXPntCWK1gKGyLv3QzwFk59zBC2XbGNjHw", + "size": 1752395 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x0309ce267d2e68904395d2083135736c0cb3fd04fff7376b4e53a36e59f0c74b", - "cid": "QmcMYz9ecPzhBBNr8dSMAPZzjNpx9vmetfo5sAN8Swxvri", - "size": 1753421 + "hash": "0x25204713e8419c2551d9204a827b26a9a4c494aff33bebf2571bf14701c8d8d8", + "cid": "QmXYbJVjYHeenTzSJd9YeBZxQpVx4RimSsYRqNh19iXwAx", + "size": 1761474 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x054d59d85d0862f8888e6bc8aa9bf4133688427aaf438e9700390c2779b7114a", - "cid": "QmW84wtAQ6y9gnLxyHRByZCURtWpfBxPRC4i5APwLnEzwV", - "size": 1899709 + "hash": "0x21ac50056c8357b394307525158ec7c167e31cd1410f73893d11d3379d84baaf", + "cid": "Qmde2jmt1T3q6nbNSFJerCzD3cLgH1fwrJG77NiLZ5K5C6", + "size": 1912182 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x1a23515a33cd76fdddd193a4d9131ee41c06ba13fb63c8ad8cfd592c7ebd641b", - "cid": "QmTPY7YBoQET4kThzWkYLMeVt4DeegfHVgAkhbyG2PQKcq", - "size": 1908773 + "hash": "0x144bff9f9dde94f6e52fdfea2a1b187e553bc274430621784ff89734b827eafd", + "cid": "Qmd87Ha618z76zMyfeBDYXRdCPRoV7DiNMKhnzPSXB1BpT", + "size": 1921258 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x163c48dd489a5ebc6dc86b5f9a20a9d1d9e0bee9b16b8ffd51d7b45001cbfe1b", - "cid": "QmfB6khG4rXZmfEnBoX5pY51W4CjgBcHUBzoPgfYs55CiD", - "size": 1728317 + "hash": "0x148dd995caecc0def29f84becfa26ca8cf8223bce06e81481f6bcf56ca8d4c68", + "cid": "QmQoPUm8h1mAGQmC2XGQNK1AoBTjBjQZMhr8SCnVeyAMuv", + "size": 1738157 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x2fe34e0ffe81f247e39157f6a43bea91bfedb6a02a387a80d7701cafb8822b4a", - "cid": "QmVazjEaCCrcq8wM1pvnzX342tuJ8foyFGwnbP3YaDWMVf", - "size": 1737384 + "hash": "0x09c82083cf7ab88980cf581be6d7396daffc8736fe78dedfcb55c14f713a1ce8", + "cid": "QmV9oNxyAjVi6N19PJA3MKwhJGKyA6gnAuiHtx32q4UUR1", + "size": 1747233 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x02d659d688c9fd9d412804b6ed26434d124f8eb3b07ee6e49a081843cd78e189", - "cid": "QmcZkEsJ9oXAkWZXG2a4nCSB3TjFjUNxM2pzk4peWPXDb3", - "size": 1863525 + "hash": "0x0dce38b73c185652414e174dd2ee73cd810a018b8d97f6b9bd05d2359a9f2537", + "cid": "QmXV2catq2UK5uez7o98eAjrCTHdfjEmeFpkmTvZHCjyTh", + "size": 1873273 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1483aa610010f6081deacdea345a37d83c05fe4892ba54aefa4a028bb0503674", - "cid": "QmZkJNsapEA7L1fRsPiy43CzfaP9FR3qduQwpYgWjDDCar", - "size": 1872592 + "hash": "0x12bc9a5dca4299da7302af218ee356ad9d9d089b2fe536ee85a7132da78d4a40", + "cid": "QmP3v3UvhyzaoSbgbCYTijBURQGH6GuPuCama6rCmFeRe6", + "size": 1882349 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x28522f87b05178d91b1878c25d6e723a68a7f77e2f4b7eede661c0e8b5805777", - "cid": "QmUjp5zS7G5MN48km6SdgHea3guZkWzcbBrqhh6dueg6Qf", - "size": 2018883 + "hash": "0x09feba2d22ae761c55788bd95030328e0c5dbc9b1d1b61c043e03fe7bbf0e0ef", + "cid": "QmcLyeUn4j3LArh71VYFCSnPbA9rZ7ic9dR2Tsr2DAXBJd", + "size": 2033058 }, "facematch_android_rk_ecdsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x17b29128f8ed52fa795ddcc93218a817f945eb946768f8b6b81667bd6a0b7059", - "cid": "QmQp8QBHt33meVxGeitfkYEAjcCHvfLtKoURbAnRTVTQ69", - "size": 2027947 + "hash": "0x2d0d1316948682ce02b707fc831c6d1eb285cff103af56d2b7bc3f047eef4668", + "cid": "QmYNgNsX525nh4mTVq2CnqQBiC2vMo5XkzthKeWH8ihnR8", + "size": 2042134 }, "facematch_android_rk_rsa_ik_count_1_ik_ecdsa_p256_sha256": { - "hash": "0x24e66e0fd307ffe3e1228b4beae7e975ac526ae7eaa8cee2f8d63903d9a16ee9", - "cid": "QmX95BPURpWu9A6ZtLEBcpoqSQ7ZCVjJsvRzD9VFXHn6Cf", - "size": 689798 + "hash": "0x1b2af4d32a1df9d9e193fd4135d514b8e3a261d953733534349661c55f3cef57", + "cid": "QmTQRiiuE9xCVqqKtYWGabsQJmuk6qsE7UPNLSLm8ZG646", + "size": 694294 }, "facematch_android_rk_rsa_ik_count_1_ik_ecdsa_p256_sha256_evm": { - "hash": "0x1e378bb6f933b2a00554b3691acd7ebe6ef5da3335074e733520d1c32614666b", - "cid": "Qmbe6AWWQYjnXjxSorxC3o9viqRBKX3mtGzVWjAsVmeWRk", - "size": 698864 + "hash": "0x202a310ca6e5b9510cf832c8616342fd0286f28bd5f7b2ecf985dc07542c3760", + "cid": "QmUEc8f9oa7vMhxJeAw3ytJDezFo1zmTVYqd1z6ceZxGL3", + "size": 703372 }, "facematch_android_rk_rsa_ik_count_1_ik_ecdsa_p384_sha256": { - "hash": "0x1cd84c82fe86e94a739f87a1d2dcc59b4f2aa13d1db853a1c741074cac16b72a", - "cid": "QmVEoY7cdDj4rXMWhRjK69VaaFSVxFU62ckwJxRF432i9v", - "size": 825018 + "hash": "0x16148139eca255886b14ff702a4d1c8dbce8277ef754144d5bc062919d3acd85", + "cid": "QmTFF9d4EAKGWFbmTtTg8AcB3KvSqQWMi7oXJD8bGAF8DX", + "size": 829514 }, "facematch_android_rk_rsa_ik_count_1_ik_ecdsa_p384_sha256_evm": { - "hash": "0x234130a25f9720f81e90e9f15b0a55ccb0e3aab81bf85a980b7255495c6cbd12", - "cid": "QmZ9ikvo5Fy4VWkEUGBcZksdCrXayBVuRTv5jRy5RaHLdP", - "size": 834084 + "hash": "0x0bf5594e3a5e324e63d4693203695dec12aca05c1ef22777dfec4503d8ed0f62", + "cid": "QmdZv6LcjYupZztfe1uw2sYBbuWqo2exBXrYp32hKBkZkr", + "size": 838592 }, "facematch_android_rk_rsa_ik_count_1_ik_ecdsa_p384_sha384": { - "hash": "0x1e22b44670ebdff7b13ec6caa7883010c9b22ca2b511b739c6564f5c8447d165", - "cid": "QmbHG6gPARcYkmPTuko9Q4Htsd4to7xokzCqSbBEvkaEwx", - "size": 990036 + "hash": "0x038895fbe5d03d56c7bf4625e078d76b9358f721bd989cd3a01d696023d811de", + "cid": "Qma9zvRz97BDEZykkuhQtvVCnwH82GaLKdQnL1qMoKoVTy", + "size": 998965 }, "facematch_android_rk_rsa_ik_count_1_ik_ecdsa_p384_sha384_evm": { - "hash": "0x0d9c58cd1185a3845e7541b2e4add11ddb3efcb68e9d5ce6b269fe7030be3ce7", - "cid": "QmVyWhcfrzpatfbiUPPJGQjCjPCeSrNSc3t8fvJdMueok3", - "size": 999100 + "hash": "0x0da37bca684aad11cb62d33891806e10a2ed7d6533e795dbdaaec46fb55f1aa4", + "cid": "QmSEpsEQBHZnRpgA2zTX2gXeAj5huYccr6qQdagSJVQvY3", + "size": 1008042 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x04a6ab3b41bbcaba8e86c6ab7e731561e29f523663707ce74332b2d58b426a95", - "cid": "QmYFYYbgwpnUXfQTmtVVhFuzfoCERc2isvg9Uwv3yZdRNt", - "size": 816565 + "hash": "0x01d928cd6b41b5956fa1b115c619c6808c90fe258d57b2250bc5809210e6993b", + "cid": "QmZb6zsSbkbp4h297kTqxPSAsdvbgs1CJDu957d9kbr54j", + "size": 821061 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x224ec06607112439862c04bd38fd2a5ff5936b30ed20e9f6b35e1f709d6ce97c", - "cid": "QmbUucHfzNwiZ8jN4wAkTWeopeG1vDbx8Uhniv4HSXR1VV", - "size": 825631 + "hash": "0x1063853018860ecd22a345a4d271036d3e374603025f70b652d9799f8841b8b2", + "cid": "QmaU4pdJAqBVpp8e17nYL6wwQUNNkWFoJQDuHmh5nRJixu", + "size": 830139 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x1b64c0bf7831f28c2a1bf16bda24419870bf51c4c040d3594c268fffc86a0e04", - "cid": "QmVnqbG9ZgNkMqHBZshBaRua8ZfwAxWgJAYhmJjuZgVmrf", - "size": 951783 + "hash": "0x09a27207086e8d4e793fbd2e41f89da262d005c65d55a31789347e862a049fad", + "cid": "QmWpw4JbFwPoEFzgzHqVB8JLht9vx7Hg6ozKmKd95uiqZi", + "size": 956281 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x25314f9da9f62a9c919f0a65cc1d4b51f311b35e278eb2d0338eb774fd4e562c", - "cid": "QmVrEpMWqupCFxFMyKqr3sQaAZ4RNh8PB3seMoyCdBmpam", - "size": 960850 + "hash": "0x000ea7119829f3b5c6842af6306546dbaeb858aef42d6d1923c30acd2013fd65", + "cid": "Qmd9qbck6aZNY2tvDcesii6v1qJXGF246qqW473wUzijH5", + "size": 965358 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x20db07f6a86848dd7afc1f30595825562889c9a9eeb61ec27f435f605996df06", - "cid": "QmYrPrVE9eQQfN6bdNu1MWtaFrvQ5FHPMRSZ82mswcbVh7", - "size": 1116806 + "hash": "0x16201b87ac82c4995aceb693c8e979210a22b4333f46f616be46481a99125c7a", + "cid": "QmcviBu6XZCguGBVEiR5rUmx5EQweMrKZGFeN8p1fPVoJQ", + "size": 1125731 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x2b9340efea689599fea8a74d7da58483cc3a2cc24341ed42c5560f86d8339395", - "cid": "QmNxLWAWvKKVN6KdApXq7uYq2mqefEiwPcHG7M4zmH8Wqn", - "size": 1125871 + "hash": "0x068e9d7c4e3628bed0d1942cc36f7a58a129b55eb4ed204e23d2170d84faa303", + "cid": "QmNdqrLnF8DbFsaXLRWtZxZ686DgFnAW3W49gB3qBbDPiN", + "size": 1134807 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x2f8a245b78182afd273d71e69b0bc9be9901bcc3b5286c3243dfbf49118365f9", - "cid": "QmcKhrFapopHeDeH9tQbnV5YKftRckLMZWxsLdJvp6zTEF", - "size": 951783 + "hash": "0x1f10628b4da46977ca2a15d7acf46e57d9751ab17790d733046d2680aadffcc5", + "cid": "QmXzyTy3G9VtwkUuGdH8waBdm9uKsBPyoX3BXJzpkPkJsZ", + "size": 956281 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x16fd26b785f5f2d3e727126880ece235922817c0c25c5801dc15cf1b8377ad42", - "cid": "QmNqyiA3AnjUaX3RypMSLCf4KBQ51NEyrMSH923GwT1LtM", - "size": 960850 + "hash": "0x2a7a708dc21e65dba59b4a3c51bb9d95a66e7831a64eb46d6f5fa291ef4df1fd", + "cid": "QmV54v2nWAaSApoYGN8jVT72FK4o5CsT6K5xbh9V79au3t", + "size": 965358 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x019d41c76ed712162e97f1c51d7ea6c4786d2b9cf8791937c5d525aca84b5517", - "cid": "QmWYtM2Q6Evyej9FNxR8q9PkgZgyy8JYBqukftjSFefn48", - "size": 1086991 + "hash": "0x0c739c5bd1c39beb7158ca7e213567194120e8a52f21f68f5b72eeded28aeccf", + "cid": "QmcNpqpkHHXz9wPuBjv7v7mjVV9PhVfEJXuGounvspTbqf", + "size": 1091489 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x2c6220451600ff0a589af3c0b6a5b08743f90aaa4b844652c80df484fb769ea5", - "cid": "QmV757yiDic1yp5fEYN64GwUp9qXA7zsjTCMx4PqQ716Nn", - "size": 1096058 + "hash": "0x0483efbc32e95d334e16418ac102bdb7120db0f3e4637b4916544a4d5720a978", + "cid": "QmRi4fkAgVm2JavnHKxkvuQ6Styd1P5xRocJFEnejaBonJ", + "size": 1100566 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x0ca51b13050fa2bf008cb6d81d1bf4530d227f4a6bf503d7863e581b04b61dfc", - "cid": "QmVzDcB7LVgS3seBhXjB1tVjDAaJErAJnuw5dBJxrBe1E4", - "size": 1252013 + "hash": "0x237c3dcfc6336bfe78d10b3086b73b33d910351591dc349246a966ff75fbca47", + "cid": "QmRXgUV7wX86E2qd9PyQj35LXZFDmrvkBvUxhLHjDoLX76", + "size": 1260938 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x0a40afd77bd1563a25f62cc60aff0617bece3c95be7748140fd118c41ce50806", - "cid": "QmUzuUucAsxaWjHg9oP8DcP39RvRz4uBSf5UWW4wuvSkoi", - "size": 1261078 + "hash": "0x2ef45d5f70a58d54051e6a52d36a75232bf876b980c9058c73f23d2ba518dd8a", + "cid": "QmZ1ThvvrA126UVuafiYYKAssBERHiUybcKnypoyEPtuFs", + "size": 1270014 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x1ad6ed1d3d284671bfd1df560b9f2e8af268784a11dbd65324500edb09464fc1", - "cid": "QmdF2bRo5EwM9C2BhvkybAVcBbbU3PPAnLo2k9dR6j8mxz", - "size": 1080884 + "hash": "0x1f4c30f4ea5b4a35e35dd78c6a085dba07f6bff949dbb50aa07c297973ae49a0", + "cid": "QmQUyThNNdFx7Grotmbm3NygmNRUqNPBZcGuEq8zwhy3cy", + "size": 1087174 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x0ff3afb93c6ace53ec1b556e1ea4dba386b00f17395e667ac2b806fd0de9df85", - "cid": "QmVTzrtUfwJ6vHHVYZghRjd12vAvcm6c1cx96Q2EmiQ8wH", - "size": 1089949 + "hash": "0x211da2d40d201b033f36f2917aaf89de540b2d78e0b626ffa3fbb98e2216ad37", + "cid": "QmeR3G9yKWPYjStbUWy2WtBaurxbEKuTcsAja9fRnxxibn", + "size": 1096253 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x240449406da98662f7f72360705d7be115f21a9f1417fe7cd7c75315b6c7240a", - "cid": "QmeRbAumGREKzCERD611XfCxrjxxLuRHymwPaHcgNNhHq4", - "size": 1216091 + "hash": "0x17d591b80a55722a5248726d1226eb8c298de00507564b121eb9165333c5bb2d", + "cid": "QmYq6c1BQF9xJpLjkRhuwf3jUJ1vuo3MetWeYSThD6RRpz", + "size": 1222426 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1cc8794821924deea88e40b4ec05bb49a231e5cbef2a731eb8325db06461a6aa", - "cid": "QmTix8f9GmSDx9f5nFf1LB6yWYcbfvnp1sXwmK4wRDzKDK", - "size": 1225156 + "hash": "0x16e15df567674e0a3f5af79836e5752f9104bb1a63747489ced0802cebd889ee", + "cid": "QmfZekRjvGEKrsMGgzKaARCVh4jARDbVDYT7gnJBiAdWkJ", + "size": 1231505 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x063752381b9464784099c612ff0633634da9ec78322f2837aaff51e4b9ace880", - "cid": "QmZ49ogvGq5y23jKai5iqnJ5G49euf65jfZM95gTwDQBao", - "size": 1371444 + "hash": "0x1051ae4f158ff906a2453762f0ab522c9df1c3c68579cab6da7dd6f6a0f1cd4a", + "cid": "QmYh8DqsuNmukXZyYunVE9xzuLJDDGQkz5Myde7rqkeD3f", + "size": 1382214 }, "facematch_android_rk_rsa_ik_count_2_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x200d1f078fdac2a9a6d91f45781ff1d1aff778ad45c413ebc5a91456b8e1833d", - "cid": "QmUMbuBoQVbp3Q5o9vJs6TNaYfP5BisERG8hndqEC86UQt", - "size": 1380508 + "hash": "0x16b743685d936b6ba9a17a5580de0b146a938bcee4c5ed74c3e96477fe3451ac", + "cid": "QmS7QeAg8Kg2NXXrUqSntyjRydCvfWqmiuxMTmhKfbGpt3", + "size": 1391291 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x000f6bcc31245a2fd2953962a83dd4a4a9ea8c3b7e3b862e36968909d202cfdc", - "cid": "QmfPBDum4tjpNU3K3as51dendYrJnyk7kA8T8jdWpAHrhj", - "size": 943332 + "hash": "0x228faca51b95bada219af533c9e0fa9cda5ebdf660f8a018d582db272ed9287d", + "cid": "QmRi5rhBfkwcfXp6A1aXVwfENhLmJ4uiBErKRRzuscshYE", + "size": 947825 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x2ab0509e3cb3dbcf775cecd08c1d950224bf82f5ce69f63097cda68d5e78df91", - "cid": "QmPbWQaaY7KxTzP2Fx5HK7cKmTZer7LrxEjHbaTAQCxJvb", - "size": 952399 + "hash": "0x2281232050ae83168a55bc47056621fb5348fd3a583214c706cf313f901216bb", + "cid": "QmdyFp8DAijVnv47xJCte9GQvJV1F6hKujdMtQbWETvbVv", + "size": 956902 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x0322b31ca14e6c37e78e9e80aa29612ca5936c909aa1b8c8555fdf2fd652ee39", - "cid": "QmRj7QQzpDENrogqDbgCX79wSVHSZhtv5ykLzQDvXyFXUj", - "size": 1078552 + "hash": "0x27c79084915fa23a6eb401036321bdc4b64b5947d4d4564022b4bce5edef3644", + "cid": "QmQVcWrm3ecL8UgzjTepcdmmzGTRQFiJF6MHZXYZkU2aje", + "size": 1083046 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x28fb09261b1f95dc3803ae61c92dd8df63f911e3356ea65febba7210a445aacd", - "cid": "QmbZ3BTXBNR9YqWm886K8zbuBFuX5yWk39TYsyDN8XvX1V", - "size": 1087619 + "hash": "0x11b63ff229d128ebf671e06fbc3fc207909c77b6665eb833e5318936b52fdf7e", + "cid": "QmRsZTYktQmyFhf3FL7vFt7GrHJQQexHhAvCF3vVmsJamF", + "size": 1092123 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x234df679f339566638cd5e9dccae4d84e767d7e0b899eb9191ebde52789ba299", - "cid": "QmZGp2EGihwqUJHoxdzc3rpgJwpiRPWXpfybF94uKB8nC3", - "size": 1243572 + "hash": "0x1b0ed50bd6a65a8c74416113f78d58cf6a96ff29203ca4fe5fa0baff4bc5f4b8", + "cid": "QmTArYLAPsNR4iaaJ1tmdZbUfyjKj7DhvWLany7auz5vBP", + "size": 1252497 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x0672f1d7d0dfc028647b37b971bf35163b2e52d3e90deca7225cbc790c1dbd7b", - "cid": "QmbufURMN2sD5NMUFYwwaheNHjBt7DJ381dp2F9xVe2ehB", - "size": 1252637 + "hash": "0x302357aed273bdd576cafad2ef0fc0c5d3a461614630c6ee9345540d3fde63e9", + "cid": "QmXAVC1QSAB4982ZfxPGoCjhka5uDLsDHp9AMZY7sPSVA7", + "size": 1261573 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x2e0958d61c0cd7b7349498bd780e9c49fe10fd06b583654ffc1700feaff939cf", - "cid": "QmNt7P75BuY6cSrB3BSsMSPt88C5uXERRBoXkxCusiFm6v", - "size": 1078552 + "hash": "0x08ff3c9412653f04c54c484dee7c73a9d8c292f142b79fcbffe5711acc495cdb", + "cid": "QmNRK8b7ro5abAV8YXCxG4v4aLEt9dwQHHpbiJwkyeC66j", + "size": 1083046 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x20a3b17000b02720c91d4e9ae7c595682f48a724ee2ad1a5e3f7f00f07f254b4", - "cid": "QmbTwPfoVic8x7v56wuqWEKXruf2Fz7MrgfL9KxL8qgFik", - "size": 1087619 + "hash": "0x069880a44e7be65774227bb1be59b18993af2bfe3e47767afd7376f8e5b9ab4a", + "cid": "QmdpQakGVKvqSNsKyiguBzfdXWCotD9SQE3BNkFhTYYZWM", + "size": 1092123 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x1f69eb2a669b0d81c006186b06c112f6ffffe717934097169e0adb9c5b94b29a", - "cid": "QmPsk7LnqzcoxgS8toRj536vsVn4KhWtiiUENmRasrTqoh", - "size": 1213761 + "hash": "0x0196f0a1ba1ce67503a265da0b3062a7171893c3fd9f46a2db1489bc16976ead", + "cid": "Qmerw7e5RuBtwReBAPGxKwKJz3ZfQpCxNyQz2DGxwuoCQQ", + "size": 1218253 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x090ca549f0f5f442c03d671b7ab86cdfdfba8141b70debe2aac0b7eefd28859a", - "cid": "QmSpkiqV1qwC5QG4bbveepCxZLoP7PTMKDqjM1GoAKqzsj", - "size": 1222827 + "hash": "0x2b5099ec4494acce413ba5bb45b851d37e7e6b1b3b8948d9a2a51d25123f091f", + "cid": "QmZM6tQe5m2GK3rj5azSLjRsAvvMThZxbsFu13vgSmzCCg", + "size": 1227331 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x031590fc27640f8c3900a21b0c15c86334df88443d2870cade3c5ed63de82ead", - "cid": "QmbGPXULtgECTvy5Cv4P48jUm4fs5MthXBZCZS6Znm9SbE", - "size": 1378780 + "hash": "0x0616d1e47aacebc90ef02b512d85928ecb35ae2956d4086de710d76b3c72d45e", + "cid": "QmcxUtM5MtJA1u98MiePJxAPqzKo4SuDiqTdesFHBVR8Wj", + "size": 1387705 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x1a4e8812357f608219fc8bf022ce7dddba9732956577cf04ab351f618e8fb7a8", - "cid": "QmbhjFkrSPGrUzTksJTY4YEBuLvqGr6nSxikbkaeuqXw55", - "size": 1387844 + "hash": "0x26f106c1cd317f9bc08732967da5e86c43c37f7e87779760c5ce76df045bd4e2", + "cid": "Qmbnf65zfr4HvP79e3bJ8dpLjw73jdDjsixbGCw6BZn69p", + "size": 1396782 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x0507a62d70aec7c9414f8c522ffa2aa03e16edcc42f15a915fb2f823eade6055", - "cid": "QmYkp38EUkqDcZMmbCEXFaMjKJuugpGKM1VRKxKgHoxYqZ", - "size": 1207650 + "hash": "0x1c1abd10fd8c617cce0e9f9df613613d972a5463553c8ca32734aaef6e8324cf", + "cid": "QmPQiR3iPn6Cn8P6VHzY1rHgoVbxR7rWuH1pN3TLa4AVpo", + "size": 1213940 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x0601b195db7b0be203bc4cccef3079290e55f81767a81dbb2450335412e1a80e", - "cid": "QmV1J25tUBz1estW9dy7T2G6ZvWfb5n46mkcCdGdXGeGyu", - "size": 1216715 + "hash": "0x13782c8a9a9063ce9f2022221882830f2456c227a745fbf0a1b16162539d17fe", + "cid": "QmSJsrYGdKFjB7Ufjc7ecvDF211Wc3Z4vsbtXdAdhWC926", + "size": 1223019 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x0333c39c32b58fe524b3c878fb78b876dc4ec9ad0d523cd4329300471688fb27", - "cid": "QmaLMGogKErjfmzHtxVQ9vpa67UXcK5p3JnSzvmuYNGs2n", - "size": 1342857 + "hash": "0x2cb4215c1d4f0167b31e3fe16256cf4c31fb4a47d998b18f386e51221130dc33", + "cid": "QmVaSkCcX7Dqm5gkSA4QpfRu8Ef24xNKEyp1u5Hs4HNr5p", + "size": 1349194 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x019ac93dba1ee7c220065e8af23100331825ccb6029554ad2e27ef29c201b84a", - "cid": "QmetsQM9B2DL3EtY1HRxZNeiC6S3keaySS12TVuChP3TaZ", - "size": 1351923 + "hash": "0x0a8384eb8a84c27ab00be3afaf0b9f305e247d2384ca2c1b2f2da477ca9f7742", + "cid": "QmapbFWE2LXoKcBukjubxHHyeZtdCniruRt1ZjARWemzTT", + "size": 1358272 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x1d109effcaaeded2e4e02925370f1b25b33b23ca95ebe8bf51551d67b6013579", - "cid": "QmPjXww9PXj5LXqB8s1ueq5mqQTqzQ27YRPpKNwBQ7Nw5i", - "size": 1498213 + "hash": "0x124d3fc1eb0db472ad1c12721e75f1d7275a02c8311be183423a6fdc0b8ac4cd", + "cid": "QmXx4zbMHHUhd98UW9bRsYXrDtxAMhNAXDBum1y35wLRua", + "size": 1508979 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x1785cb82dd8a67ba0f2f53a3ffd4ffca8ffd8d5e0aa619f975df9db802d8d95f", - "cid": "QmVzQghDK9zgJzK2eaWCJy2pet5okVvFU3TMiGuN79u2Cj", - "size": 1507278 + "hash": "0x07c512cb8486857bcb8a2f7067638d110c30c83318674a1b85dca618afeb32c8", + "cid": "QmXgqhgkgYheuJGRciJDqGSGvo1BTzV9J8eifr5oUDU25p", + "size": 1518055 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x05ad589f6e87f567782af4274308b20238aa5d494ba6f8a46ab88d58cda20a48", - "cid": "QmRuaJH9FrYSDFSsXvrSrFZH3HKEZ3JdMdLqwT5Z9CAnZa", - "size": 1078552 + "hash": "0x1cb45bb6bcfe3d0a0d65a1ce34cbbda2ab0a65b3f170d22d6267e7d87c1b7175", + "cid": "QmXpsWvMqrnsHp6WPFLs3t6REkyRLED7aznFRBCNrhZwyp", + "size": 1083046 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x0cf694f3ba02f6dd8a0d7530e60261b66f07622d3d1805c420793439dd9fb316", - "cid": "QmaiRprS1oRVqAZ5wmnRoiCpofq3sPgPJXyNYBAT5j32wb", - "size": 1087619 + "hash": "0x0f780ec6f28a48ce939592fb7d2c9f1cb0c83bf02b06ff9894cc2de3a4c72bbb", + "cid": "QmYNfPiNVxuP6bEKb6n6ASAUsPRLoR5Ukb693SDT8md5wf", + "size": 1092123 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x05fac3b8e5b77436cbca7e840f39fe3b4359fa127ede0eafa05910161984b74c", - "cid": "QmV3PQ1LmswFDyjwwQkJqT5EuK7y9KAo3BQN27ED9KwbU1", - "size": 1213761 + "hash": "0x2a6b54e3119641e915729d93048893bfcc20b007c3a187dc2c09e37058d8091a", + "cid": "QmR6ToHTYT1KqutSB1PFqPoSdTQWiH9kfbtr7hWbQph9yw", + "size": 1218253 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x17691dba98a5df47b1ec016908976fd7e97f2d25c6ba7b452d245f10caaff1ac", - "cid": "QmVCupEQbrmzzg8oREm7JHrDMrkws9ujLFdiC4b27fgD6g", - "size": 1222827 + "hash": "0x1bbba0551afebbc4b03cacf32fa607eb82079b52889ac0ed20986e528d2c3134", + "cid": "Qmedf54WG5sPH8eQ6LKZuGjuyYKqF8KW2xyrXVYtPM8BV7", + "size": 1227331 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x1fd789e210c8db024a2f1c471207c92c0c12221c30b26f571d218ab89f2795f8", - "cid": "QmPG55iLoh4hioAJvSNr2xQ1BYPm28FbwSpAvAVo4xN1Kq", - "size": 1378780 + "hash": "0x1a66bdb4283788fa15ccf79e19878b9c5a5c31ce2aaebd352805daffa2aa2f18", + "cid": "QmfSrNzXUkcrBGPkyoCaJUpfLvd8juAFZGkzMW7SNFykKA", + "size": 1387705 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x2e79bf99e8a7f8c899f02457e824454c42c3ab8748a58d6841ffd8efae0905f3", - "cid": "QmWK4xCcFWHTeXC9QaJ5wuSZrZX4E279g2rxpoVzPGk6yk", - "size": 1387844 + "hash": "0x008cd1413a787663c863ae0608ca3db70731edc03234c675965f55161363a7de", + "cid": "QmX7s6qJKBNrUBinFWMBCHm4FdTNyhJWc3Fv5J9LHgV9dL", + "size": 1396782 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x15b5dbe54e8a16247d159c120e6bcfcb9730143f3d053a69660116fd01415e0b", - "cid": "QmW47GGYxSxN44pBeMWjM2FjANTHxQJkemx5XqyoEJCCSc", - "size": 1213761 + "hash": "0x0093c83c4506224805c78640e6d90a868ba89c1841185bd80a4b8b00268a4e9d", + "cid": "Qmf5kLtptQNn8uaWEresPetHHErwdTR66sGmf4UY7ZgAHD", + "size": 1218253 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x1753d5d31d54561c92ac99d5e480d360d1496eb2164de9f85db2ccd91690ee0f", - "cid": "QmPVXLRtRpuCUsEbTuiP2e5tn6M528TQ18ruhG38Vba8CK", - "size": 1222827 + "hash": "0x06ee365eccaf0f9f5204238f1c057a09785b35b46511d7b41ed962d0d55a2d77", + "cid": "Qmded7MzeM3HLvgxUYQE2wvyy3ZkcSsbjmL5TRqxiXnk4F", + "size": 1227331 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x07f2dc4573ba810f7d10437adf8051f6ebf9b5f435e755734236ca7bea625caf", - "cid": "QmdxegcQVGkf3amDYvZWa15jhcM78TdZkTyFGDx14cppb3", - "size": 1348969 + "hash": "0x02f972fb61fd1059788a611a8384b0b55bbcf49aa8c87751b6e062770a359e9e", + "cid": "QmfV5bbi8K8nzoSpkajZFjXeZMTCG7vVWmgcM1bWRD8nib", + "size": 1353461 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x189a3d748cac01487a476b644d547dc2e6f20b91da7588c899fe74eaefc8f5cf", - "cid": "QmUpF8wxpGDkbdHymKeBdtXCQNednBn2pPN6AsLktGQynm", - "size": 1358035 + "hash": "0x22e3d25ce45dae1d938133b105f4c1ed6253d983f1a4dc74db4b902e2939d49b", + "cid": "QmSMHEprn6r72Avook8aVMyJQZJjSRadYcub1uGurAMcEf", + "size": 1362539 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x028be94e8d70ce128262fb906635010580d63bd569960d69004d19934572d3fa", - "cid": "Qmaxz6hFXE78KuhKh5qxQfyBrAj9AVw9ikxuXiqfmQrwvk", - "size": 1513988 + "hash": "0x0b134bb1da0d432703f1190c3d213cf9d496c6c005924714b9f11c2f93818f7d", + "cid": "QmXfSTND44n1SSDoA22Ugf4KNfYkMdUEF8dRShZoXoJ3QV", + "size": 1522913 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x0a07662aa0978c77ef8f9f8872054bdcc16ecea884159f94727302ece37aef28", - "cid": "QmZhK4CBhyA6dftsH2p4BbCxRLYu3kQgDfnDZLVb8q4hmE", - "size": 1523052 + "hash": "0x2e3c50bacdadc03f47aec62eb29c768c2657dc9e4b1fc699012cd374ad5fcc37", + "cid": "QmTWcpaeTj1KNgKqTLnwu4d6FrNxrxXbEEPSBgw8rnpaWz", + "size": 1531990 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x27fc9c4a6148445b44202e53444d03aa396bdf2fcb39372139b83960e1d5a335", - "cid": "QmcLQvMsExYLj9KWaPRD9tHLC4xbaLD31NN8yiZB1ppop6", - "size": 1342857 + "hash": "0x13cf45e7e8deb327c6c07c9be67d86d6f8aab5a8f10a356087bb5055cde2cdab", + "cid": "QmSxVHZJdYVRsms2NtRaSmmPc8tdjTPFtxSFXXzhrfKgdE", + "size": 1349149 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x0e9c501e78876923180b413d740f94d581acdafa1e2a36aaede70be79b928716", - "cid": "QmasZchngZPyEzEYsNC3NPCTVGmYq9Ckh2ocXazLrk7NrJ", - "size": 1351923 + "hash": "0x231258fb27a06e2b99209d0427fdbcc5f419314a85e2abd560f0085f00c0a39d", + "cid": "QmbTq5hvGQtM9xVw1ew5Tf8vrDk8vDYmZvgs6BtG21jDjH", + "size": 1358227 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x0c822170c9d26c9713029531083a53e1d428e87ce830ca9f17b5d6904d3c2f72", - "cid": "QmYktQbWsj7REgNBRgt7QmwHTm3gR4c4QCfyQnH6VxVmSf", - "size": 1478065 + "hash": "0x249aec94188c314697da722303e4a0467eec398d9b073f0a1789e836c5c97797", + "cid": "Qmdg79EJ4dPJa2ri8K7pWkZ4tMJrbgJtH34MEiEbkf4sfT", + "size": 1484402 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x085304345c856b03e51f7e0536dc6d5527c4c9831cee369b842f396c3b0e0a65", - "cid": "QmbPTu7L6sgUyBxN5PDNunPcNF9kh5rsjq3LktNk5i1xw5", - "size": 1487131 + "hash": "0x13d5bc35205cf9168a5aa6240d98723a9fbb9a2f590035631f95e168f2fbeac9", + "cid": "QmSmqd4Uiakn9BviwHBQptfdxMk9ejp6RQvEkGb4RBsjN7", + "size": 1493480 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x0e957142f3575597abf0a04c6921de6802a459f7893a35f218c9f80a4c87ae65", - "cid": "QmdhBBZM2LMRitDPWcLsynygm8pbQKm1XCwhMNsuJXJkGj", - "size": 1633421 + "hash": "0x1cb83ca1e6f5757bfb809a95635f52e91919cfec14f74e5540f27510f2d63805", + "cid": "QmY7nskLD6DxX8TRD1xJsK7Tu24ZCUvSWsD6CnFxCRriAT", + "size": 1644187 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x2945cfad69f54e2a263d17dae3280f27189fb158d82e1570ad32d134af9ac6bf", - "cid": "QmNYQiRW1FekveHpdYncCZbKBk4e4ESkBAsLheEHY7o6gt", - "size": 1642486 + "hash": "0x08b6167d24b26e17a613bae13cb44e8d3d4f31cd008dc523fe3e35066b200dc5", + "cid": "QmXN4uphfMsBq219D3iuqKqYjJXw7pM8EDDzStBdS6D1mp", + "size": 1653263 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x2d24122faba90cc73806bd09324749e6307051a821117696c3ddea69480b5585", - "cid": "QmPvssgUunj3aL1DaVeN8y1Y8ATp7g9NL4akj7TjCp1m37", - "size": 1207650 + "hash": "0x2ce2edaededbecb70aae7456b22b2d15223e75f28c32a64d4b13f3b8557d4241", + "cid": "QmZyzh3aE7nx3538SkdudH4wAh6kHL5W9r1H48kc1TriXC", + "size": 1213940 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x1c0e02f901e266830abb745e46d4b6f268773629e0cc67b4469ce25ec5bdcb81", - "cid": "QmahrqNcF1LXDj28Yq4gfU77H8r3rCwJvmkkBCfgdtJkeB", - "size": 1216715 + "hash": "0x28c31aabf7f263e84abf84dfd7433c53205d0bef45125aeb87c8f7d44c6a0d24", + "cid": "QmetrrxaqehwjfbcVgkFHy59jsmf9afCaKawc6u8xWg5oE", + "size": 1223019 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x2188e5220cb5fd107a41021956248f40e22dec8188edc0169b54b736ef57bf08", - "cid": "QmWizcQty2LUxSf1aLBHhkPqo14MrtnfRR4XPgyD3ZZQKE", - "size": 1342857 + "hash": "0x2f915e369caf31d964a19dc22bc15700bf34a0984d6ed7ed2bad709efc81b56d", + "cid": "QmQJJfCBSgxVbdXWi2U4k5S4oxGQZd4wFNsWtePHx4WiE3", + "size": 1349149 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x18b3da41c6718c14f847e3daba66f41544463f2749b515489e7b0aea21123cf9", - "cid": "QmSn392ztTCVkQ7CW8oMpSbRMvS8YdrxuVnphgHBJHUjLP", - "size": 1351923 + "hash": "0x2d87602cd4860f78d0d57d97467e42f8661b0d90f9ed5250e945d32c46471c63", + "cid": "QmXYvmXESct6WPqJ8ReEqgB83TbydrvvxxigqNzNvvKbqZ", + "size": 1358227 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x14d15df350dc49b5fb5325702d00118df31640057921949546d4f1b0ca41eea0", - "cid": "QmTiQtJ659pjToTXhj6Ed9uJtmdagJWmiRZnhG5LFzmXpw", - "size": 1498213 + "hash": "0x100d9536610a1335d0c9da4fe67f94ddeb83a301244fcb1c9c0bac6581ce6d69", + "cid": "Qmbk3Z46roBK1sXfJrXUWvGXwbo37LShjD3HvFS5akwGqn", + "size": 1508934 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x26e94e4a027efc832ee5bb6efeb58bfda7c82dba4f8caaa95e495dcc04ae9505", - "cid": "QmRjVZh3R8aNkXr1HZDJxz9ZByFCXfb7Uyqk7tNANU5Uoo", - "size": 1507278 + "hash": "0x29940613a150a12bbbb92e35e8502448b743315e42d74017203935d3aadcb5e4", + "cid": "QmWhRr6NdSNDupTVp2XTiRGDPbARfhni8yhUo89wysQNF6", + "size": 1518010 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256": { - "hash": "0x2cd01ee5b5ee34bf1dd16b2371138b236ce956cd78ece8bceb1a53b74b7a8eee", - "cid": "QmWkn5ACtDZj81ExJhU6yVrqWEd9PLwPVqU4WAXn3fJcPL", - "size": 1342857 + "hash": "0x0ce9cc25aead7e35c315506f6afda41cdc347dfb27e08af2be9c89f6896f96bb", + "cid": "QmefeGA8rtB1FLkXFxjUdakTfyupBCvBoWS2hmmSDBuVef", + "size": 1349194 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p256_sha256_evm": { - "hash": "0x08d0a47fc463c1d89bb3f2c4b20bb8c949ac743ae6be7784c279476b28d326f7", - "cid": "QmVeCDJz7DHY9mVo25HChahgXYFjf3itBBtrvmvznY4dw2", - "size": 1351923 + "hash": "0x02595c995cfee69c5d13966898884adf35bafe1bb26a7102db81569b805aec75", + "cid": "QmUAHsxaaKXK2wqr3HUKakvjmGit57HmgDyFJUfraq4zDv", + "size": 1358272 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256": { - "hash": "0x2fab4710e95e3989e4b7eccb23cd9c616dd367eb7abf00a02fcdeb7d55cf757e", - "cid": "QmbKR7WEgx239TsMV6TbLiPJnuy68kp3hqCTwSRibs4mw7", - "size": 1478065 + "hash": "0x03f058e16c942461ddd4e6f9b50fd164b28176b54cf7959ba590f9da0141d9c9", + "cid": "QmXNA4rFmLmHTErxikWHjoeUGgnsfw4SJ7nr4M1BTLdeJk", + "size": 1484402 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha256_evm": { - "hash": "0x1b4db40fdf68213c63dcc305b4035ec7533126a9a00baa5cdec02cc4d0fbde20", - "cid": "QmbnhxuCXomWDEER2PADeSRRC3kuQw4AsE25pZ6h2T3UPD", - "size": 1487131 + "hash": "0x239987ef4cf876bf34703517d93e627b0eb297eb97ca5ddf6032b965849060fc", + "cid": "QmZxYYpFz6Aj6FNWLKFjqxWFzDaU5uJsfoJJnVG2ABWa6G", + "size": 1493480 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384": { - "hash": "0x28eb6cde230ba5fb2aa6c2cc6cbddd5232c2e21592ef193e88eb76c0b2e1fe2b", - "cid": "QmRPRQtrzgCSbzoBNMW4r9nDJfeo5n8F5mfHtpDMy76c4b", - "size": 1633421 + "hash": "0x062b4b268650f6af8565f2276416c31da96cf44dcdf3f1d615c34ef111c1b65d", + "cid": "QmeoJSkwsybiZzLZbZ5B9DXFpxCayUbwAWpas2axUTqF1P", + "size": 1644187 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_ik_ecdsa_p384_sha384_evm": { - "hash": "0x13aaecec28016eb9654ee5bd070d0b343c5de6a1bb0f95f8eb75605ef37fc691", - "cid": "QmUpVvjchgqN2zeL5Vd7dowYUSj5UgnpqT6XHjdZtTj5s7", - "size": 1642486 + "hash": "0x26fbe22f8a93b0d6a2c28f196aa0aeddcdbc6ec1efea04a919a1c109d5711288", + "cid": "QmbjmvRXqByLaNyoXofn7dAnQqEinLL3JhPCvCRn5L1AH8", + "size": 1653263 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256": { - "hash": "0x2d5b33d12d6512c7fd7062319b496dd2f0741aeab009c6bd18366d73c725ad6e", - "cid": "QmbzUDuHs79bnu6juFzHhTShVVH6xZTtvDsACrUQdneDmM", - "size": 1462030 + "hash": "0x071a603ce11b753a7f7b7a3762457698ccde11ee4feb426c1651ffdc2bd82869", + "cid": "QmcUogxmQRVntFxGHeBMtJPrVh8v9qcJc1nkNxWSKQrRYK", + "size": 1470161 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p256_sha256_evm": { - "hash": "0x29ba474e303874eee65b91541fe7a3118905d2f061038d29bc631c0c02e913e8", - "cid": "QmUiHQwHdMuDvcuVg11QuTHyoDKFPmA9hRcjBwb3WnYzaz", - "size": 1471096 + "hash": "0x1c2c0e4237eafa8b8c8a1ba2d35cec7f7c51b9a317f6e0c9677f9eacdbe989bd", + "cid": "QmfXyAfnXktejHcmUPjfdmaScBvvktp5SdEV3P2wyDJ7LL", + "size": 1479239 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256": { - "hash": "0x079fa09899197080999bdb6c822dbd3409e6f647c0e88c792bb3530452b41cbe", - "cid": "QmRc9kBnGGRAaceiHj7gFx3L4ehogNSqt8cRMEEcCwLsri", - "size": 1597238 + "hash": "0x24991238d8b8c2e61150d3613b42a01d04744dd9daf43f206a8cf419d42ab49e", + "cid": "QmVaDGyUMR2fJjLb69B4H3Bic1nApmpH8LiX8B42YdZEH2", + "size": 1605276 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha256_evm": { - "hash": "0x26852056d373b47c0f154d35f7b76964d6f60dd795f790e49828b69302d54e94", - "cid": "QmaCxBe3Nn7ygTXukVHj4c3z9G7JgkMv8QyUFTah8Lo7Lt", - "size": 1606304 + "hash": "0x171889869031479bc316de4237d449d46eed0a68e90fb26bd004eaaebaad4787", + "cid": "QmTvzqfCkRa5GTioX3x3yadMsXV5BRsriivx6Gdo7Gxu25", + "size": 1614354 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384": { - "hash": "0x117a52d752fb7a1b8a5e9821b1252ef910d838203205cf4405bfced190dc25e7", - "cid": "QmYNGGcGtt1Xq3bQ369QCFPNhJBnZzG7jJVXxmfU3tJbJd", - "size": 1752591 + "hash": "0x02ccd8f19f1901392fec58211168a56e9e0a59c4f568811bdd5f80c2013bcdb8", + "cid": "QmSDyAyU31mx982br5HJMxyt6H3cyD3UkMwhtcg2HZYnnQ", + "size": 1765063 }, "facematch_android_rk_rsa_ik_count_3_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_ik_ecdsa_p384_sha384_evm": { - "hash": "0x10cb6510ccb794991d5c20c97bfce71b90840122cf5c7a835083a3a46544c0da", - "cid": "QmV6yLP33G5fdXLXHvdKf494vKzhjtM7VrxqccYWawKDFW", - "size": 1761655 + "hash": "0x2052f2934126ae87f95a26bee5fc28b58821c049117596cedb39d842e41ef84a", + "cid": "QmZWyS9uL9FFkxscUaj5vDminmEeogUyfYbeSsDgkTDBho", + "size": 1774140 }, "facematch_ios": { - "hash": "0x1adae9b97b06fbd433f49c87d26302f86c8fcedd8d8168882065a31d66508dc1", - "cid": "QmdSZnAa3ztJvEWoJgKbkfZ8GMJwcDdwFToGNFQ36bUSG1", - "size": 695842 + "hash": "0x290420fafc86ce24b8ce0ff9dc4d52f113bc2b562973db8b218bbe58b962e1b9", + "cid": "Qme8YfXB2LfmXc8f4vXGJHvsNDstNsxDKFWeP2fmGpY8Jp", + "size": 698137 }, "facematch_ios_evm": { - "hash": "0x00bfd6422d453d2e5d523b166fb65e22525e0ae8e3c1f8519c1e70354295928a", - "cid": "QmfSSMWrEKxEu9baHopiVhgcH8P2CgoYgEfjeMcQwu9WXK", - "size": 704475 + "hash": "0x1d55f4d3335b5e4af291bd9d1f032589c4a1e57580630e76c96b0c9ea02206e3", + "cid": "QmcDnfoubCNpj7siNvqbfvcNRURmJc91EDJ1g5DPxzTMxy", + "size": 706781 }, "inclusion_check_issuing_country": { - "hash": "0x069f844eaa412f4d2a1a6d6b47f035095d2e334d607e68e711a99c379c7a3f86", - "cid": "QmS9xUWH7FjzeKp8KiJ11xuD9XrnoNKCKE9N1uuUmDZYFV", - "size": 16322 + "hash": "0x074839c0e10a082b5f639fcc2d738988a3dfee37f8bf5748487ea21ae9b2d9a0", + "cid": "QmfUAGfFnAoDG3KUUdvre5hLJbz58AUjfnie5XtokYm3JS", + "size": 82195 }, "inclusion_check_issuing_country_evm": { - "hash": "0x002d59afb4d3ac9942975e7d7130975b08045260c907e123d4e44c0da15b0ec7", - "cid": "QmaMNU5UPm8xibiXdGbWaRka5jA1rXqDbqCDGdrAzHsnwR", - "size": 50154 + "hash": "0x019ba4ea380f8dd5702f15187b9f4e97ddb5b2205cef7f41db40c0c84bd08c42", + "cid": "QmcjLKJc49zuy6CPfu9mbuzVhq2EZGEYPvez8hyPcnejQB", + "size": 116027 }, "inclusion_check_nationality": { - "hash": "0x09eb6aaa68741b06c16d144fecd2d56b84ee64116b8132462a293c4cf7e64698", - "cid": "QmYyeit3o72q6S9hyuozPFGcZFxGW9FZvZcHe4WwLQRUkZ", - "size": 16346 + "hash": "0x2eeb8e45480e76c54ace3644532f5e9a330769d394ab60ddc0b2140dd8d61257", + "cid": "QmQkwmH8Ji36ML5nuGkmVqxigaAFDMcTF85DPp4BFSx8PU", + "size": 82219 }, "inclusion_check_nationality_evm": { - "hash": "0x204bd7dcca745e25afa9077f97669b0d734c5305936373ca33cc654d54dd509a", - "cid": "QmY45vEeA6Pefk7hwQqVkSg5D3zpLhzc7kicQ2CxRgNAkS", - "size": 50178 + "hash": "0x131d1c3d91116a1b5ef3fa5153acadd53d75c2eebba08e6efc100feecc9746e5", + "cid": "QmZM5HcEs2EKNoK67xqgmu6NYa5ME4Z7w8myzs6kwr3qJJ", + "size": 116051 + }, + "oprf_auth": { + "hash": "0x29d8cfe17c1a8e517d50a8758c90c16c2c257f40add07a669592299e8d8d737b", + "cid": "QmZByM8gbZQz9T7QCrKXaLwXgrPfRTvkTCHCzAqHK6iDD1", + "size": 11967 }, "outer_count_10": { - "hash": "0x032a109ca8a5080f7a5b68ed3365619de7968d191a18736a749009de994830fa", - "cid": "QmWBWYtsNy9G4G7dSvhnr7PGq86qxUADGDjLC1dG4Lz62w", - "size": 8327552 + "hash": "0x1ce7407a2ea8ee6a6b6a6feee656d70eebbc4658cc002bb7c13470fe2f0d8861", + "cid": "QmeNuCyKuWBJbw7SzKwV9dZfpUbmXQVexG1CaB1aokUFny", + "size": 8327601 }, "outer_count_11": { - "hash": "0x1b34c4305d2c98c6d7b62f7c9881b2d0343654cc776d9c4cb568a1b24b001756", - "cid": "QmU1GbFKK4uUoWGg2G7oBQMAkCnSJkoVCdRagUydCZRtna", - "size": 9166601 + "hash": "0x26af4f87a26a5aaaaeb065609b5116f0107fe1a2a5733bf4a7d49f31420c3a98", + "cid": "QmUZDaBFfxRPyZw24oyVq98vJ6EqLaF9xRXn59UFuta7jr", + "size": 9166657 }, "outer_count_12": { - "hash": "0x2952bb70ef7bc0f7f4bd3ff119bff0b76366ff0ba462b6706cf43a557387ed99", - "cid": "QmYp1aH1pTKgNbzvhQQq5SbeSxw5EuV8DKmum6eQQ7W9SL", - "size": 10005651 + "hash": "0x07ea1a07b69f2974f8358d485883c30ae2251390f74550a3157b5438f6fad3c9", + "cid": "QmXHkJ5xP5jhEnXRKhfhM2SERbQ2RfzijJx8xaxwM3w4ik", + "size": 10005714 }, "outer_count_13": { - "hash": "0x06332a0cb93e4fe4f684dba9553699cb75d1cbb7e627a5576934e461ccd25b1a", - "cid": "QmVygwBo4JBR64t5LTyTNy6UZU883heM9p441agTUwXzmj", - "size": 10844700 + "hash": "0x200c38d7be1cb9a506b573bd2505fc82779e6d377b0f97953a65ba729edeca0b", + "cid": "QmU5aSPFjYuSkKfPfeFH2Tmh9FwQRvdvu3eCEm7KHanVzQ", + "size": 10844770 }, "outer_count_4": { - "hash": "0x27c25fc2dc01c1513cc1632fe5e5511b5121e66a38e4affdefe80aa7307ec8fc", - "cid": "QmWjL32K2epNPkSjRbcC6R9oeDxU8BYUwUArADNUVLz4YP", - "size": 3293260 + "hash": "0x19cd8e028bee27590aed863d24372eb5e14594c817259b6259974e18dad46e1d", + "cid": "QmRqx2s5VpvgrzJ3SNTg7pVZzckUn2nymJJr1AzhHuq5m6", + "size": 3293267 }, "outer_count_5": { - "hash": "0x24bdfb4e1d3d32c71fef79fe0fd3404f9bf6a0356c662fe2a3bd0317cf09a77c", - "cid": "QmRGhvdc49591vHcKhWGiTbswRYCHqzRG6nNdsmwhQrrPg", - "size": 4132306 + "hash": "0x20ad3a1aebd9eb43afa00c2d5e2c6a5b8af19c7867ea9c8144407685f182c7d9", + "cid": "Qmahg1dPqrxfW2qMSRwTKjf9BraGSJQjDSrbmaLGnhs3FD", + "size": 4132320 }, "outer_count_6": { - "hash": "0x2e402877ea08644a5d5bc2a2794b4cc27dc6ab78fd18a96dc7c60d5257c211e4", - "cid": "QmT2wqR9CHY4prwZyskYAwNGsdHGotKE34fkXHasWjEjnj", - "size": 4971355 + "hash": "0x28fde795d7f3b0ea37700a400d161386c540254b8d5457f4c9aeb597774f72da", + "cid": "QmciDfxnsidq7L5o4NbSASf67GRRhNe9e6NiVfKefJEYt9", + "size": 4971376 }, "outer_count_7": { - "hash": "0x034e94c58e045e8ab7353a8c4be081b158aea650b4fccd8ab7f68027964b5bcf", - "cid": "QmbZmXipdJUqaaRpdcrtLqyzVR45cyRZ5hLFkjkGYDTzS3", - "size": 5810404 + "hash": "0x2625b3f655fd85b55ef73c77ebc92d95e7a247747762938e48dc6c237b506b90", + "cid": "QmbkvcnqXWBjQFEem5bUJgrMjdWSes1DJLsGJbPg6ajAvo", + "size": 5810432 }, "outer_count_8": { - "hash": "0x08836f6aec61560cf29a1d3d7f4a759096f01dbc29d86803a1f91be73c883eee", - "cid": "QmQtNWVM13aTwgJt67bvrikXnNxBzWs2r92bd2yJkR2ze8", - "size": 6649454 + "hash": "0x2dcc3d3a87b029364b063e4f1b3ca55e9e838fa5a195a6d6e7fdbfe83f936ab2", + "cid": "QmcxSP6JgG8gNLTudMGSP2jiu5m1HJFAMAaQ5bhrzvnkBQ", + "size": 6649489 }, "outer_count_9": { - "hash": "0x27fe5ba09d625681b2c0d3d7b01818abf8e64e724a78c11453ab489374e34078", - "cid": "QmbDgvhFqmhqXaNhjhh3axdoVL3LJeki53svbnTUqLzwQm", - "size": 7488503 + "hash": "0x2fa7587f8d298972276b35f6bc7d7013ecb34b80458e5d72e42b20eb9874e952", + "cid": "QmSzLZcgMvAPtd6AqhMytf21TcYk5hBH1NBS6Bs61wkr9i", + "size": 7488545 }, "outer_evm_count_10": { - "hash": "0x2efa10b806e2e7edba75c35cd2659dc2d74e8f0f040876eb014ae6f5056e3dc0", - "cid": "QmRX1HXFDqh1brEGrMosP3CJ4UJY2yqXDviyas9dGgvMKo", - "size": 8327552 + "hash": "0x0f069d864ffc03a6696d0ae37e8708dea13c7c3802ce95839c8110381684a5b1", + "cid": "QmQenXaqkygaVtdpgyrBpVcD4g38GCDaCsvTphTGF5NAHS", + "size": 8327601 }, "outer_evm_count_11": { - "hash": "0x03cb373a16d51d7b462e9a21f6d2f34fc1009da12f0cfd6f1041e0afffcf8acc", - "cid": "QmVvicsjEVA7zKWtoPgrkYBgk8boz2YxDFJ17r6cDN9Jdy", - "size": 9166601 + "hash": "0x26be2379e1555cab19cd37061f32342d09b0a4891e84d4f1a363c93c87c7ba25", + "cid": "QmQkxKMT4PdFSvPbUpymtjWSmnwg67oRQGnBnGQMmrV2Ta", + "size": 9166657 }, "outer_evm_count_12": { - "hash": "0x2b5579a92c9a4b48a8c60ed14395bf1d2f965ebd469c096a182fa8fe8285d0bd", - "cid": "QmabuESxCEVs1Faosk1yvEC1SZuzkV4UNJ8x6UCidm1LEW", - "size": 10005651 + "hash": "0x16828fad756bb212bd1887e291c51cffd5bbe23acbdb96768b6a174d682224f6", + "cid": "Qma7UsV77Q6mFrBxygWWzTB4yTE5tYDohGyueeB2Q97JgX", + "size": 10005714 }, "outer_evm_count_13": { - "hash": "0x1e3076a5fc04a825e4a817320106b943e848c2d04f703091d0e0fee3df900ef5", - "cid": "QmVqqSp8nmh97HpFxE1TwjAEmmNDGS9qEWXaPEz89i9VWA", - "size": 10844700 + "hash": "0x0e165d27cf39d8b4e569e218dedbf60abc5badcfd936bdc54030669c382c802c", + "cid": "QmcQgmpz47YZadCCdNMAc3zjM9uxbBAeLptD4K7LyJ4R2q", + "size": 10844770 }, "outer_evm_count_4": { - "hash": "0x0a3390816e5af7359b589b74a49a0210ca7f8024c497af8eca6081e4cbc1505c", - "cid": "QmXyNd3nR9Bhrd9b2kLx7RUnqccAPE9HnJckqcxXgwTf92", - "size": 3293260 + "hash": "0x072583d991a1ef614353daed3b3e3fe5f94e5274966437a9fc9d77da19a306ca", + "cid": "QmWnBHeBy6gJQEi8yygAeNFudAzjP6wsJdYmWuqQWT77vi", + "size": 3293267 }, "outer_evm_count_5": { - "hash": "0x287292eb9eace872ef64278a828b54d51b79e1ddd159e6582bf8826d1cc860ba", - "cid": "QmV7vEtQ4ekezrEPvymwqwyrtU89NjGFcedhTiEB6FK7zr", - "size": 4132306 + "hash": "0x04ff20501e4bdd02871cc1429f70d496b4281bac97aece4544ffaedf156c7eef", + "cid": "QmSmo7qJZKuzBqTLC2NWuxty9X79LBFdjRPMKVDt9ZiLYM", + "size": 4132320 }, "outer_evm_count_6": { - "hash": "0x156252c4c996e9fb3e77f4787dae33e73f9d5c6f06b57c12e87ebdaf35c9edab", - "cid": "Qmd6aWbr87Ndw1uewDv9fdXznhCDnkZsq5RCbBsniPDGGv", - "size": 4971355 + "hash": "0x1212298562eaa813d58ea4aaaf2a4117c6f02a72f3b9c64a21b1dbc6e5fab0b9", + "cid": "QmRbLjFKRSya2TF4ER8Yhf5N6DGSmqMTnPARxj1ST9mK6R", + "size": 4971376 }, "outer_evm_count_7": { - "hash": "0x252dbc42921b3236ad115da32541c953bd20a09043e575df2e9ed274448bb093", - "cid": "QmXKKimGKVDP3nupcniU6Z1qScRc3ECWQPa5EBC7coP3wW", - "size": 5810404 + "hash": "0x0b769026390dcfb778e3e38af7b45382abcad3b2784d62b84f44ec8fecba8d3a", + "cid": "QmXxr75gipybVVHFPDog6WRVqLD7VL8T8R5uYRicMTfUa6", + "size": 5810432 }, "outer_evm_count_8": { - "hash": "0x257869d29c689652f48f8957a22c398490410858eb881967a9b8caab7b86b8bb", - "cid": "QmZbs1kxgD8PUSzHENr8yRLWXLu4m3CPtdTkfmjLmXE1Pc", - "size": 6649454 + "hash": "0x09f506d0e46238c664160fceec1bd2dec6ef39c0b584f12c316f80aff92d3c42", + "cid": "QmfXQU7HcMXEzD8xReBs1APKTpoDRm8JuTWMPfJj8y7W81", + "size": 6649489 }, "outer_evm_count_9": { - "hash": "0x0fb22360a2d0c81a4ebf0a55c474df97c053ae406980dcf0047c7c451d893401", - "cid": "QmNzwnZEqjsT8knV3xMYgANmYi61Bgm4z6uwvLYaVDUveV", - "size": 7488503 + "hash": "0x2cc2ff165f1e5a7b51d654669c5fb129384dd4c36341aeeafd5cfa8e2647e681", + "cid": "QmNtvqCvowDQuLDu7FcGALgzP23fnEvezT7eZGxNPaucuA", + "size": 7488545 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_192r1_sha1": { "hash": "0x21136fcc1f8b27d6d8d37c13a698d44b907898186494332db2ffa94b572ad959", - "cid": "Qmd8azQJ1ArG9TykMKB9wJG5uiqTSEbF4VJiCB5cKUTh3n", + "cid": "QmcXKZzq4KQpDQbUApjC7ixcw9oVxoRsFha6fuBUk53iH3", "size": 235984 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_192r1_sha256": { "hash": "0x0cc50d78a69149425b7ff6c3755900fb43a60ddece71e3d5bab7347d14a70300", - "cid": "QmaR9ZrtBmBLbxLnMgKiy5wpNrg2ohHgfXdjUqtfKuaiXa", + "cid": "QmaGzqYwjGd5SznXDdVKyhVYmDG5raJ2EGArfYg1S5drbt", "size": 128497 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_192r1_sha384": { "hash": "0x0d5f5d6516bb86d967195dc2f81b1da5b5acc63c25427e7fd99fb2cbb639d23c", - "cid": "Qmc4QwThPeNPLSoFjao1YxBUgax24tjQgiF9NNRXzFYYtg", + "cid": "QmWtJKrBEEoqZRUvxAJXdChMaihE8AoAtBQBny1BQMpjbh", "size": 293663 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_192r1_sha512": { "hash": "0x21c562e3e85f69e3e3369ad4f23694aae5987c0954bcfad045f163cdee2dad07", - "cid": "QmTUTk92rwPLu87VKZ6HKQ1FUMCke8RWW7pKJA4xtZ54tV", + "cid": "QmTAVejKNBzvghszWvRQ5AU1p5harLq1cBz6PVuCMVx2Ny", "size": 293663 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_224r1_sha1": { "hash": "0x03360bcad762e82902adb8a8aeba70c084fe4bfdc9bf6fc0ce3a51cb64e8fa9f", - "cid": "QmZpfRV5mMXNcjxE2q7f8QEn5oEjMRApNaemM6EMQ4yNfF", + "cid": "QmVKD3377cBthGDAEPHsWxmve3BZwgQZb31uM2q9FzU2Ck", "size": 246227 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_224r1_sha256": { "hash": "0x24849bfc1c718a9af8eab251124037d8846876a7f909c755354305d0c180ea26", - "cid": "QmX8JvBwimNzzokv8BUrSimxzk3rdUjWjNxTvqm6eLnDmQ", + "cid": "QmYcB84XFhhnERrJbEM5hzoFZJK9Gx439BgXoAXeXSDC91", "size": 138739 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_224r1_sha384": { "hash": "0x23ae4ab9fef9f7faa49d677f532717e402f7dae66285b059d2ff7189f3c72b0e", - "cid": "QmP6wFJEnrG92U4Y6ReqcYf8cCvyZQvo8v5jxkjhrAXGCB", + "cid": "QmP2mM3gX2ysQbaTq4PDzX5VUWrhuJxYo4ymM8bpFkTHZj", "size": 304609 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_224r1_sha512": { "hash": "0x24e45a640fbbb83baf595ee9d07ab0ed1da2467a4d05634d41ad165290f50011", - "cid": "QmeNzHvqz1s2UzBvfDFPWELUbA87AABR1pSJSPcv8JCGrD", + "cid": "QmVycNhkMxEoc8R9n5QMGJ8fCA5RbgqMi55QrDKkwDo1ZE", "size": 304609 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_256r1_sha1": { "hash": "0x11c888253e24aa5f5133352c9cf38d0a530055d02357b65d1b72b6e38e3a7b07", - "cid": "QmStTpYeLMA45aNbbco3APdbXabvZ59JLqy3mwZ5AoG53N", + "cid": "QmQhkBtX6k2Yf8DHWkNVurzFHdjpeovBc37GKRdfNjATnM", "size": 285590 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_256r1_sha256": { "hash": "0x232277c8d7743df17efddf3112c17dca8a9ffd708c7cabec73cbbf150324571e", - "cid": "QmYh83xGaBqBAEs3SwvJFT7iYRBTk47KwbGdf86Za7PrSB", + "cid": "QmRpu2hnAbypjpe46HtWWC3niQUxnEAZBFyajEixPPXgz8", "size": 178109 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_256r1_sha384": { "hash": "0x0d676cd418253677dea05e118ee548969d174933ec9ce7e951ba436c74c88e2d", - "cid": "QmYKcHoqVnEv8wGiiQ3BiKSKHkP1vRsvcgyN2wzpBQP5jv", + "cid": "QmRaDwisHZRPreyXUS5SZGfyCEJY1R68NUfieXQd9HwLmG", "size": 343274 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_256r1_sha512": { "hash": "0x2d3eeac7d9e109891c0607d5e93871eca65d0f93fde79ccd7cbdc637a8fc4a6d", - "cid": "QmW4v9mZJmppyXnY8HBTQR1VHD2BxrsHJi1CDu4qTjWaDh", + "cid": "QmQNxMzYhaUwzZ6smtFQuWh224bFgKM62oAThHtpqkQSEZ", "size": 343274 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_384r1_sha1": { "hash": "0x168b545b46847efbc92bfd1abffb46c18575dd671b58f64343333d424b4c9a65", - "cid": "QmPYzcGrTZwtJGtoTj1oq4VNkCpwVg3gKwqQmeEJCRvGDK", + "cid": "QmdGM7qcP2bE4VZUDvLr6ZiUrctov6qYJRwzPs85oga6sN", "size": 397400 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_384r1_sha256": { "hash": "0x14e16d6fc732a6ef2814bcb089bf0722421f9c4ae39e38429fc06428d3a91cc1", - "cid": "QmarKrptmZ3Y5Qb6fTpMoWNEcpPSRsn5jjXug1gqnCxHUR", + "cid": "QmYZ9WqRwjhXQKSJcnmK49BRCokMavuHA1yyE26Y3BDVB9", "size": 289924 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_384r1_sha384": { "hash": "0x0b5fd26b6590a4fcc9b2a395a4301863bce7ba5481436d5d5df31b58f9643d25", - "cid": "QmcJ7FvbbYbwN62jRTNt7dWZB8Ra4v3BPRtD3tuEozKeTY", + "cid": "QmfKwAxTTtA9HU5ai44yqNQWAmtm99dE9LaYQQHvqv4EGn", "size": 455099 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_384r1_sha512": { "hash": "0x2945dc9efe1d14a20ede2b38ef040519a4bf3ca128c93dd943eb032bbc19dc0a", - "cid": "QmaX8WEeyFAxSetLAjhAEcnSkRRxEmrcXjTmg4ZVNYFoVn", + "cid": "QmWifeuL93QmezD8KD2SKq6NyQx83nmnZgGt1C6oMaVcf3", "size": 455099 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_512r1_sha1": { "hash": "0x182d9ad421a33670f7044eee282f82342b1f036245ddf1c21b59463064afeff7", - "cid": "Qmcjaqw9MkKUGM5CkyQNX1r8kkTiFVQiG9XyvLCKL4YNr9", + "cid": "QmXRKbcuipEKA4eYgDkwZDmiJbk9sgtV7oqKTacVucXMXV", "size": 557263 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_512r1_sha256": { "hash": "0x0a37cbded575cfa7e5069e9076fa9a03144d12e623cdeab2544f8d65c00628ae", - "cid": "Qmeuc2gX8v1jbVE8eVqsCc8L19ySvrehec4aBhX9KjMVLj", + "cid": "QmdHJzxbH4D89W9F9NgTtNardf4Qn3qgTm1gA3xgd41iJd", "size": 449786 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_512r1_sha384": { "hash": "0x015d770fbec6feee276a5679777e2856a18a8ecb084428b3d69fc5661657265c", - "cid": "QmRAyPjkzt2FszudCpVntStBnDxpPcTJEbRz5VaE49uzFv", + "cid": "QmQpawEx6r3dWAXZrECfM9ijBJpNPKYbskDzZeYaZM2Ca8", "size": 614968 }, "sig_check_dsc_tbs_1000_ecdsa_brainpool_512r1_sha512": { "hash": "0x07639acd935a2e8b76dd6606d590f3c226f2fed32092f318e669e2bd30d4a4fa", - "cid": "QmRvrG8QXhHFbNURaTwYKMwtVVfyuhdJjZRkhqrsrcsiz5", + "cid": "QmQCghjzoJ29yqAvB3Sjwxw8bNXSUEg1xJdvV6sFbSSTDq", "size": 614979 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p192_sha1": { "hash": "0x1940b8df6587dd12bb7f56028860b4cd4740705e617b32618c85e013216d95eb", - "cid": "QmSmiZbZwAGUdNe2BJLPPTsuq7NecuZdBy6ZB4MEgZzs73", + "cid": "QmbxkhK99rjK9zz1d6f8c2wuUuBd4hejpxbvYUPcpFKSS7", "size": 235984 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p192_sha256": { "hash": "0x0cb04a3b72c57b208d18a806b8364f35fee3ca773286c16d4c8a113c827c2139", - "cid": "QmaXHZnK4JPaTydNg5ATyV86gShxSge27vKVnoztYTjN9b", + "cid": "QmNb8pd2ExdV3fNEebTQFrSTNWmc6w8amCN6Pp7p2nw5mw", "size": 128497 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p192_sha384": { "hash": "0x0ac121cc8efdca133f56a89b6bd767ffbfa63ddf3c123992702f47ae8bf38e30", - "cid": "QmavUiwHTQ3WimewWj4buJNTmbhtepEdRbMUMQRRBaL36J", + "cid": "QmaTQtTh64BsFVo1Hq3bBYruQP9kUjGrNC454hQUyM4Di2", "size": 293663 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p192_sha512": { "hash": "0x23f5e244ff1972f15b82f5d4601d65f20bcb26ec79e0cb06bc237d774475c35a", - "cid": "QmXs3tB5vW7x5A7rtSurF17hR8RQE72X9PhsTPxKbNNwx8", + "cid": "QmfXRTdcSUDRuy4a8pu55cuFJ78JJUd5MFACDE5gopTmpx", "size": 293663 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p224_sha1": { "hash": "0x21f6532bc0664b8cf73bf028b8b6cdbef2eca2857b6bbe60f46b65393c59b14f", - "cid": "QmZCqA6Lk3ABRHsm7CfLtSgGsYszJ7QP8uq752WoJ4o4dF", + "cid": "QmWcpi6wtJMpQdwAnaGUgUg24N42SKqChkAQuy7ucXxXEa", "size": 246227 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p224_sha256": { "hash": "0x2f9cd592260cb1426a2bb7e68a46e205b72f730de9f99b11a428ada00e033169", - "cid": "QmbSgnz5zwnnLQ9WhGq6K4ruZJgcyx5KxtNYTv1HbciTbf", + "cid": "QmUdZsRgH9BtwVZbuAJyT9JfR176vHLLJ9Q1yLFzsToGh8", "size": 138739 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p224_sha384": { "hash": "0x276d87ad92cb19028256b6de4ad60d92b6813ed04f7923427703d9792d05712b", - "cid": "QmR2EPpuGancSVDPvQQvjE8WM3Bc3uEEJtZ5eXzaBBx8nH", + "cid": "QmYbh3AtgPHq5Z4eAzoNrhnRx5ukQYyXJk52egFxkSPZ3t", "size": 304609 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p224_sha512": { "hash": "0x110464a2b1d753247e59e926cdc4fd5775ee5b307de034d0a894eb707e9daf4e", - "cid": "QmWq1VMaCbUHKj3BBCXd5pDSC1Du93HurSuB7uzfNm8BCq", + "cid": "QmaghgrBFADE4tgthXSFRufL2nZJu8Uga4xxuNQF9CnK8a", "size": 304609 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p256_sha1": { "hash": "0x0f52879ce3c0e90d46d95488e53c11e49b356129266fbc325e5794cd679e4d8b", - "cid": "QmY42U6TDohm9KAJDyJx8mRP9R6KEPCNr4dQrpQdgpMEKk", + "cid": "QmexyHvkGdf8hYaZiihyW7sqrSD8z47xsP53ES1ednAUZr", "size": 285590 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p256_sha256": { "hash": "0x13d0d039a4a1d7733200beb8317333acbdf41f19586bad3d13cbe60fda200793", - "cid": "QmUSihW8fHzmaaeqUiegPoCNbQtztNeNZctJeVe7jujUP9", + "cid": "QmYykYsZxaWfJ1gbNMpga4yoBUNR5KTJuv6MTXV8WNVjf9", "size": 178109 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p256_sha384": { "hash": "0x0bbd6711ce495cfd3d924b47d417ad28bb4a4be144def021d787d3e9cbd2e985", - "cid": "QmRpVTBnZUmviNhtbN5jEXQUusNGz463z3Qe7CG4QpHz2f", + "cid": "QmewKH6o8V7P9se5PvBGbZwnp72KgVKT8D9fHXNuXsmB2D", "size": 343274 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p256_sha512": { "hash": "0x0094395bfe7e9002bea7a30cca2053c23bf434ea02ca47cb34f275cbd631eb1e", - "cid": "QmcL3imWs4giLrn2UpmFkn1SF39ZrK6T92Afwoq29G81wC", + "cid": "QmXnqetzjLzvL2zMfaLRxSkQ5Q43FQNvVeHgcpkV53s51h", "size": 343274 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p384_sha1": { "hash": "0x0d63604dbb0a5c2aa55b00dea930e7a04fb4f92d794a670350b3216e67fab7e8", - "cid": "QmNiLbdndRJGodhHQznsceYtPh74P98eetQ2Fq9rSRVmhu", + "cid": "QmdLXNUhNWPdKwy5H2pesDS751upEdC81bd8GCFMue8NJW", "size": 397400 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p384_sha256": { "hash": "0x037b694b7e17cc574317457a7dd38a35917cabe88f09a34592f71efc4939f5a1", - "cid": "QmRLvsAfPL1XY24HZmd2tDz7mPEUHw6TRLnEqcRLwWkBqx", + "cid": "QmPZ3GfHANnKAH7RXRK97wGYBq5uCnTpx3C3upqxcSxojo", "size": 289924 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p384_sha384": { "hash": "0x1050050721c73c7f8aa58ba66b64a7ba164234be49843cadf372ad604b3f9ea1", - "cid": "QmNx2HCT7gMQBWKnFckK3DAejdvXp93V66BpQSetQ3FmWD", + "cid": "QmP2XRnPNxQfmo4M9HARBQXXg2Fw2Af2n4oEz3mdNMmUNt", "size": 455099 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p384_sha512": { "hash": "0x100689ee085fc465be547daa2fbfcafc643591878e9e9d238c3d9c2a926b2a06", - "cid": "Qmb19jcWmTAwbDAtLhmcAR9m73oovmVXFZw6MU8FkyQvQe", + "cid": "QmVVGDjs621mnke1LxirnrdpKggxCKeH2DZkCm7pzGoT1x", "size": 455099 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p521_sha1": { "hash": "0x2cd112b22ae5a6275720873438f41ed20c53f04cbd705e31aeb09a35bfb1bc9f", - "cid": "QmUHdc2SqaqP2PEcEhResNV2e7MiTCQaj4KiAHqQB1eZmW", + "cid": "QmTRJ1ATEihAs7y9UgSK2M4uwVBJt4RuWbEFjK5mzNRaYs", "size": 565425 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p521_sha256": { "hash": "0x29ac0f705f135c6b9276739196ec6be228b76a486623dfc19ef333d0e16a5da0", - "cid": "QmTXEvKsCAxrja9HYmC41fqxw6jvQThBwtNdAujrLGpFhz", + "cid": "QmckfUDhPvzRujPmeATgSMXyBwWGKNwCBCXy79VGCjCsgN", "size": 459326 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p521_sha384": { "hash": "0x1cfd6d7f0c5bae06a3f1b4511c1eaec887734ca4c19c1a33cb4447430b3a1b67", - "cid": "QmWMku9NGmihQff4VE1tk5ULy9hcL9H2H9F4ZuRu86APaX", + "cid": "QmXv3p5RntTJfHLTjakkjP6UFVahLDCvtThgt1ZCoGDEH2", "size": 624509 }, "sig_check_dsc_tbs_1000_ecdsa_nist_p521_sha512": { "hash": "0x22dd2bd34b370ae96a2c376effaff5711dc33280644aa8059668532ac84fe5d6", - "cid": "QmXDqJFdzLGxmHkPGoqSHwPRBJNjwpWF9Wmy8Bzi3bD9kJ", + "cid": "QmeeLhVEqDL8RUKYvKxtmbXNzaK86N7ijBCYnGx68xN6km", "size": 624520 }, "sig_check_dsc_tbs_1000_rsa_pkcs_1024_sha1": { - "hash": "0x01293d6914434af3224eb3e7490621f9d693d0f423f11316479443af7a4ad92c", - "cid": "QmV8DB13ZEEqRyk5fDCBEhxEHs9aVGrBetEBn3nPGyh8iu", - "size": 215203 + "hash": "0x115adf4b29db387bb196738e9e6810a3495783dbeb7fa2ce56beb889406a4982", + "cid": "QmVvc23JUHU5x47fPPTJ6qR4R3kJmNUfqYVXpiWEsvRKtM", + "size": 218844 }, "sig_check_dsc_tbs_1000_rsa_pkcs_1024_sha256": { - "hash": "0x2578ebc5f62e8124bd854874ba18fd656b029747729536f4ea2a1d43d051c36d", - "cid": "QmVgGm4v2mxA4dNitTs6QxPf9Z6D6yXLGvKdjk9cD1osNe", - "size": 107730 + "hash": "0x068103bd075845aa646f7612bdcd3dd28b5a1992906432cbca0568616b22a351", + "cid": "QmWx345kCpt5ACjzv7RPZz5mdTB1XxZDSNDbjiZfLUmWMM", + "size": 111371 }, "sig_check_dsc_tbs_1000_rsa_pkcs_1024_sha384": { - "hash": "0x07e2fbbac285fdc95a09b132a7ece14c3e371bca21b60baa9828b74e3ebd170a", - "cid": "Qmaf1gMDzg8SJfBmGXiFhDAQUQZfdMUV7uQaUS6M7935p2", - "size": 272921 + "hash": "0x1689f7ffb5d0382c3668975513373f0b450f0c6f8f3bfa3aa1b92add23d0baa2", + "cid": "QmVZNwzTa8R2fwU4Z45tfjG9f5gN1hRFxNVhi36ZocZ1zj", + "size": 276562 }, "sig_check_dsc_tbs_1000_rsa_pkcs_2048_sha1": { - "hash": "0x18656aae1cd9c96fd88519396c801382a229b2be3d51b22a79300961a9ca4e9a", - "cid": "QmZy3iU4Dc6D81xH3mcpywPAioNhGjpBxnqyPAHktdon6m", - "size": 246360 + "hash": "0x029ddbdf7cdcee0b59a71ce4e1d1f0fffe0315d00bb589c6ca63e4753533c6c9", + "cid": "QmRaGCpNLc2FU5sY7wpVQen6muMX2YhoHA6QjKCnYKKNWZ", + "size": 259208 }, "sig_check_dsc_tbs_1000_rsa_pkcs_2048_sha256": { - "hash": "0x2ed8be0c3a03816057061676c229b6f2575048eaa021d3d00fa84a017cb7680b", - "cid": "QmbrE83fQ1tSuGQNGSpQsqgJtDXwiPg3rKZHyxDrqbLzXx", - "size": 138885 + "hash": "0x025990bb114a2213cf3586bb4b6b8c51aa955a0ec4b1e2de68cabdce83eb4dd0", + "cid": "QmPfFqn9YPSKRWyMUHThiHViFrHc7XmkaKWGLCDggrb1am", + "size": 151733 }, "sig_check_dsc_tbs_1000_rsa_pkcs_2048_sha384": { - "hash": "0x1e98ae0934f87d96e60366cda181d366fbd92e02cae828c248c158e747aae86e", - "cid": "QmeaUBovkWAiwhhBbWmZA8aJNurJMzpXHfFLWQG11jxABz", - "size": 304078 + "hash": "0x09bedd8473562e6a69ce52fe2179daeee5b79cbba535314a07ae6e05dc544a37", + "cid": "QmemhxHLRMVr9pst7VomuFLRbdyKASgj6AgEgTzVY2mzDk", + "size": 316926 }, "sig_check_dsc_tbs_1000_rsa_pkcs_2048_sha512": { - "hash": "0x07ab0ae67d9e8fd35ee9cd2d4b11f7965cfc170b57390ba043eaedec55339fe9", - "cid": "QmSCZrKjWuW4MuWt9ZqtimnsEfDEetcNcgh2bfXWkUBv34", - "size": 304098 + "hash": "0x28b39905fc0ae2459ffe62ecb0d6a37f77d73c60d7bc562126b84162f5229a56", + "cid": "QmWvfZNLcTZXn4WFbyid7RHNHdE89LZFk19GD4WEkU8osR", + "size": 316946 }, "sig_check_dsc_tbs_1000_rsa_pkcs_3072_sha1": { - "hash": "0x1938c58dcf04ca92d1de5e1b938e315898bd4318a3f3f4230bef6515bbcb60b6", - "cid": "QmTT5CahKdirGdnbgUgwwFN4UWSreHsPTeKxSJYoKn4Lqn", - "size": 282423 + "hash": "0x2d4b55241604adfdc69f46db28046fa6f6a897f1256cb132301b8d30bf2201d6", + "cid": "QmbZgSF7GeCCG8TUXsK6NLzHoys2UYsf77iKSP4HvS9SaL", + "size": 307943 }, "sig_check_dsc_tbs_1000_rsa_pkcs_3072_sha256": { - "hash": "0x1eb8b6673a080f34b20f9b8e930c2c143d187b0ca961cb98abfab1b8bd22f8cb", - "cid": "QmYdoTGpfoTcAwUzh9D7YyGWPWpKiUuXBTcGw2Q5fKv5oK", - "size": 174948 + "hash": "0x023d992b64cb3f1fbc1b40aefb610508ce12aa91610454a5c5890e28d43107fa", + "cid": "QmSpQDg5zQYnURuNAb78L8Q3WQTycW9SdtDeRmf5U2hng4", + "size": 200468 }, "sig_check_dsc_tbs_1000_rsa_pkcs_3072_sha384": { - "hash": "0x1764af589d13fee0ee69650fbade3b15096dfbc2c571d9063b459326360f3f3b", - "cid": "QmeWzP8Ct1FawFk8xmEchn6ZPnmBtfGYFFVyv9uqfkzJeW", - "size": 340140 + "hash": "0x078ebb08b4017d75a66193739e9a0fe9f1cd383159ff688369f2e94e26e64cf7", + "cid": "QmPFrRB3gpRCcfj5TuBDHAtd9APEuFBZwsKAmDYQkqK2gc", + "size": 365660 }, "sig_check_dsc_tbs_1000_rsa_pkcs_3072_sha512": { - "hash": "0x22b29cd34a537d79cf0a11e7904d00d93160d25a314368e9580d109b8b434dfc", - "cid": "QmaLCzPXwJT4cXCqHiiDfKm4d1BSAuFdjLAvYzsSTe7faj", - "size": 340160 + "hash": "0x05158e6631b40d0ef09865fcb7d067f2e53b64ff62787a8ff092f1c3d980ca89", + "cid": "QmfPPzKWoGExt8P6zZYHdYTVkgnMNJ545AD3yKcXygrHtn", + "size": 365680 }, "sig_check_dsc_tbs_1000_rsa_pkcs_4096_sha1": { - "hash": "0x213a83d51c85d45285a9dd09d3710d6b4cbe9bafeea0ed5c87eabdeab0ab8dfe", - "cid": "QmT9cuM6kc6UUW3Sii4MVvRcmNUaMtnKcgYnFZ5wjJegtC", - "size": 331354 + "hash": "0x2e86c08189d40c2e45a644a98b6e6fad780ac91c973669de233a2c41cec14c63", + "cid": "QmPoHqkRqmEWbNTtTnBmxR9ydQMBB8aBfyUKA5Mbfx6ii4", + "size": 376179 }, "sig_check_dsc_tbs_1000_rsa_pkcs_4096_sha256": { - "hash": "0x22ed7b3656288b751e7de4681235b2a5eb05240985517f248d12d95e79e35c94", - "cid": "QmWHFbSu1SRDysB5YgpfEzasRcBYz7FnyfWXKC6kzqDNAs", - "size": 223881 + "hash": "0x038e3102327d34c916ad76ab8f7c0edcb4051d9e328cb7b9e6e73f5d745c7d4f", + "cid": "QmcUL6Mu49QtVCvbdaCtgp7nP4yXjoaaZKRoJJG1mm6hks", + "size": 268706 }, "sig_check_dsc_tbs_1000_rsa_pkcs_4096_sha384": { - "hash": "0x03d7946dd58d635cdc4c022ce8768387f48b60604ae48896994f62e31b98f7cb", - "cid": "QmTX3WdVaNMFV4Eo8g7Htk2D69VdvA45ZMTys9G7wNQDws", - "size": 389072 + "hash": "0x1e4bbc9a74d4ffb1ec22827dbba3dfd8ae02122a1b28a17f425bacfcd494089c", + "cid": "Qmdwz9GMytiT8zSW9d8TTZbFVJyA9XHxf4iJ161UL6XqtL", + "size": 433897 }, "sig_check_dsc_tbs_1000_rsa_pkcs_4096_sha512": { - "hash": "0x0e6271532fbb5539a6f3753f9e1c7f69c11eef4bc9ff130ae4d4077490fdeee2", - "cid": "QmPf7CdVEvbaGssTJhXH5fWhB2KovZDYfjGeD24J3CrqWM", - "size": 389092 + "hash": "0x0548a2c458cae4932ce779c54d8a5d753c37b6c7957067b836a7e723459d7550", + "cid": "QmcQJ4JyW9UUNSpaYJLupL5ZmuFj5NdKQhPbsWCtuffPwe", + "size": 433917 }, "sig_check_dsc_tbs_1000_rsa_pkcs_6144_sha1": { - "hash": "0x2a7208724587fc7cdf60b986a9568c6ca7f197f11073a6d8eb2223ad6afe5d34", - "cid": "Qmb8P3ykxiLgGtY4fTtinUGHwUfxQHVs9nkh3DsqQRfVna", - "size": 450444 + "hash": "0x27c6723ece37dbaa160cd61f2c37536b6101f8013c211b0ca7dc82bfd8690feb", + "cid": "QmQR6dmGoJbxp22sTW3d4wyPHWbiGmF5mdNi8HfdmaNbAD", + "size": 546320 }, "sig_check_dsc_tbs_1000_rsa_pkcs_6144_sha256": { - "hash": "0x26e5243dc336c55afef5e4884930814ebb0bb21203d4810ae514cf3e1a290cfa", - "cid": "QmTnTw6A1SimBVyw4jV8k1vQRYjBGGWbhpasXTgWfXJsJS", - "size": 342971 + "hash": "0x0a6a6eba9afa04157d61687266c2b2f5064f86ecf56db9aeab977c4e97f05599", + "cid": "QmaRBZJbMso7KfBNKNjoAs6TNyqJDk9uVar8J3Q5jP6QwW", + "size": 438847 }, "sig_check_dsc_tbs_1000_rsa_pss_1024_sha1": { - "hash": "0x0db217885ef4b9066752eeeaaa04c3051f064b8162a03582894eda6425a912f5", - "cid": "QmVRuUQdSwwmf5gpYUsjnAft93rAu4xYsp7m1BNBpXJM6J", - "size": 290426 + "hash": "0x2489fb4a3292644b02c3654cc00bfa5f5d7ed93d37027ec0853e66f57ea0d864", + "cid": "QmbgSQg662Tn3x8fKp6M5Q8BFWf2xm5mX3LfdXdZd83N63", + "size": 293949 }, "sig_check_dsc_tbs_1000_rsa_pss_1024_sha256": { - "hash": "0x157c0a5fc42874c3e7e81c26efef8113fefa1570e56f9add90f02cd871bd5ea8", - "cid": "QmQz2SZs3x5pqABscroNHLp6bJqC9TjQFkbWc2FaPtqXSj", - "size": 135340 + "hash": "0x1def6d5f223214bbe21a3880cd6119f8235653ad893c0836a04233be8de83779", + "cid": "QmdTAQBhBdnbmq91u8i9RZ1FF1VxrprnQLqj2jDyLrpTRq", + "size": 138745 }, "sig_check_dsc_tbs_1000_rsa_pss_1024_sha384": { - "hash": "0x291f18081a9473c3ecf11bd2fff05f757cd47488f72171d480f09c9829b7980a", - "cid": "QmfRnVARf66gmrWXMAR7xjM32okJEJQvTHSgaj5tUC8kwM", - "size": 354562 + "hash": "0x024570261a59420b13ace7bcab709add95d42ce72683afc436b9e5d4f089da48", + "cid": "QmTgdxEzA1yiPVKSBET48uoVG7eFWFrvWcXf81VKuDxV3X", + "size": 357621 }, "sig_check_dsc_tbs_1000_rsa_pss_2048_sha1": { - "hash": "0x1e5288b1a55dfb93320a748e50254c8a285789a2d26b7561787f3152d025c008", - "cid": "QmfQRuJRSt9FTHjwGJtBJFeXCnbFS8YCbN4HGPSbi6xfnN", - "size": 374065 + "hash": "0x296442e8afc6cbf28751090aa1ed5b85050671a443940787426aa96ce4075621", + "cid": "QmWfyxeWTpJ2XUeSLA19jNZsYPFJgQdsyY6vkJhxErXtc9", + "size": 386475 }, "sig_check_dsc_tbs_1000_rsa_pss_2048_sha256": { - "hash": "0x22222a2453f5b41c8d2ecb4412bcf00be37b7e464c7c9a67d672454b1277434f", - "cid": "QmbHUQ6ZFjnXd51n5Sv2bfQbreMk4XDWvA9iXx45tHpTr4", - "size": 184602 + "hash": "0x0e1b129ecbc209401878c1e35a2998b79f0bd09db3124af068c55ae47d30fead", + "cid": "QmSLg4XJ8V8XcfRqTeqp9pn5ApdYCUjoX9fXvZMUDKijgi", + "size": 196894 }, "sig_check_dsc_tbs_1000_rsa_pss_2048_sha384": { - "hash": "0x26fb18ddca0aa1157a197320087357a78b18f57c24b23c68c29c10a77dd57271", - "cid": "QmWpAH8UaveJJ5AeVZ4rBQ23MkNgNfPfbf7jrbYsah9Qkn", - "size": 459654 + "hash": "0x097ad507d3844f3c20a03b5eb3cb9d4b818a947e3d03e5a4643018d246827806", + "cid": "QmYW1EoVMirxLj3TPutWuiYfL6fTBpuFwynfDrTvk6k3Vw", + "size": 471582 }, "sig_check_dsc_tbs_1000_rsa_pss_2048_sha512": { - "hash": "0x1375d6862585eecf8a8d89dd9e97ee2597d4d3d406df5d56ccf07028fe668a72", - "cid": "QmUYcGE491KHeksxqYEpHbBu7RVnYX96GzGhyP4Ak3XSDU", - "size": 439011 + "hash": "0x07cca80480a8acf7aacde53c8ff6ed07bfab5e523267676a0d14ff7e1dac15a4", + "cid": "QmXdHx2SnjpmbpysiLpH8JQckjiaCD4UxadPAGJw7gvLBL", + "size": 450811 }, "sig_check_dsc_tbs_1000_rsa_pss_3072_sha1": { - "hash": "0x2b95c36a5f1027770966cc9d4d8f1128f708dc4920feb10edd29d088871bfa47", - "cid": "QmbryTo2mR98P9mBgownF8RXyvhxaemwvKUEwSaiMwNX4h", - "size": 471030 + "hash": "0x2e1abb4870c8352f3a29390220c4dba0b6602cc7448e6aeb313f09b72419532f", + "cid": "QmVeD6K156x2FDtv4sh6dfjyReREEt5eSCWkJxAPfBhrvd", + "size": 495792 }, "sig_check_dsc_tbs_1000_rsa_pss_3072_sha256": { - "hash": "0x024f0f8667ae1e96b0c41d6b6e3929820a93582e84cd90adb4c157ef01bb02a3", - "cid": "QmYAP6xrX5m1hUUdj2RUbucUTcP8eTsgrZQ1MDXXy7QKUa", - "size": 238864 + "hash": "0x112ec4df06b3e94b37d695f5a086a3d00e056bba524660a337d59a81b22032b8", + "cid": "QmchW8WuzjyYAwkfBBh8GrMxCGoNNTj8eXLKzkFG353NFD", + "size": 263508 }, "sig_check_dsc_tbs_1000_rsa_pss_3072_sha384": { - "hash": "0x1c091c7eee5a92d369d936fec37c4ad39786ac8ed08cf49917e7fde2ec986c0c", - "cid": "QmXr7zJ9mw552AhFDydZYGq5xxmH4me2qcLEK2XaqKbLAX", - "size": 545654 + "hash": "0x1e7581124e26f38e512f32b56ac6489b58b0ef2a030bb7a50cf706e391af04a6", + "cid": "QmWFT9QUvcD21fQGRJ973tym8WmHk2f6g51vsj1C7jRN4C", + "size": 569933 }, "sig_check_dsc_tbs_1000_rsa_pss_3072_sha512": { - "hash": "0x0118873d37d9b313c1457dc855cc107a2f50b636944d344b335fb452a7759846", - "cid": "QmTzyFL32nNngjytGy1268Q5zKmcGjfsqBdAAjHLCou4vx", - "size": 523607 + "hash": "0x1cc41cd1a9c8c01058710212427df1d8cf014aaeb6685a66414af2aba9f2f3d4", + "cid": "QmaEAuquKiFs22Tp18q52JW4C1nsG1jhhoGWjGB4kDWqx9", + "size": 547752 }, "sig_check_dsc_tbs_1000_rsa_pss_4096_sha1": { - "hash": "0x2f317c04edbca93ccfefb522c34d6fe1a6853a17ed6f523c16e78128d13752be", - "cid": "QmSsiaHEdyw71UussmcG8qrpD1ZhPHxs8gmN9HKtq3DeWy", - "size": 572446 + "hash": "0x2d042f2e8fdedefffa16004ff5a4e61746a05d51755799bdc8e578468bc29c49", + "cid": "QmZQCg76dzqDJWXHGa8TfqaV1euNPMi9vUK738NJQaA2M5", + "size": 616193 }, "sig_check_dsc_tbs_1000_rsa_pss_4096_sha256": { - "hash": "0x22f803aaca163e4ebc5b810cd3b236eea522b0b679312fe6aa6e8b6d6744b862", - "cid": "QmTaHQXKyC9DbACU7MsaS9MzXLnjUfXEJTpuZ9eBFHR428", - "size": 306029 + "hash": "0x0e7bf413485353c5d6a60df4b1e304fe521d72609522cd965f79a639fd37cd9d", + "cid": "QmNVJV7M9AnktqMVR2rEYASiPMxVuJkTHmfEa9qBMMtAEd", + "size": 349658 }, "sig_check_dsc_tbs_1000_rsa_pss_4096_sha384": { - "hash": "0x15ff6edf6aa5130f36a4541704c4911be8577afcb3b2383d26b8069d04f5f223", - "cid": "QmdTHKZPg2DPaoeiwAMqagUBLuzeEZYzkHLmwmoH2QL2si", - "size": 668500 + "hash": "0x2afe1eb1cb2eb9f18294128c616bc1eb151838b9de6bab4f4dbc6d52d0d1e0e8", + "cid": "QmNY6Ez7xnhJNb8Z524gyrf4CURWMiqRLZeo7eddGN9hUN", + "size": 711764 }, "sig_check_dsc_tbs_1000_rsa_pss_4096_sha512": { - "hash": "0x25bc2018c73dc538a9f69ea39c151deb8ca58bb595138715f1b3743e9b894b14", - "cid": "QmWzfbRb8btTTETxSsty6v44VqjyGd7o6eRn143JaqyPEU", - "size": 621066 + "hash": "0x1aff64d18ae5343428007dad60ada82dac634648943a6dfee6d2c1045bc59fbe", + "cid": "QmTNUCiNDiqciLcGgWtB1hedS6CrrDHg5scokdoJqdU65X", + "size": 664197 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_192r1_sha1": { "hash": "0x26af175bbdcced1eab2f584c2dff0942bd9f7e906591d5121d2ebf8877eed4d5", - "cid": "QmP14DDgiLTbXxx7rE4CgcKnNKd1RtqjZ3cycBPqMoVhgZ", + "cid": "QmTaN6EACdPrJV6F4FkcRgTAXpkPCJHM2mQTesCBc1Jxfe", "size": 269492 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_192r1_sha256": { "hash": "0x23ecefd37c9705d260a28df86a5ecdb309d2fcec8b54ba22c2bc696e0381b1f1", - "cid": "QmVgLz8h2WS1SYJ9FwSKbnbzqxN7ygTHnAYRHL4LtoP5rN", + "cid": "QmcFHYExLdMo8obxhZuEDaPHh5NZ6P7hCvFpmpg87SWZAH", "size": 142974 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_192r1_sha384": { "hash": "0x12b71f6a3ea9f09d90702321a43b038fc6d54884e2623914d74408242d58d5cd", - "cid": "QmXefwcMDGET1DCu1c9tFZv9WYzr6b4cVpYRZfFsUE6UKq", + "cid": "QmZzqHGuE3x6Vf7tUzcJXgJN9mR2RsUopUWAaAaxJjwNkn", "size": 352829 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_192r1_sha512": { "hash": "0x17bb0a0773dfc7d3b1fa39d01b3d15bb9775f0915b2a86c2e4bdf5734f83e23b", - "cid": "QmbQsEukEX4weu3sLa4zJbva895H6fEKVnJJ3YLh7ST4vX", + "cid": "QmXEodybAxmmxJnLzypQVTKFoXhe3LTft9P1Z44uT9hapU", "size": 352829 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_224r1_sha1": { "hash": "0x1f99add3fff644fa46938170d5d788e1a1be82509971bf6f04af654fae7d9e0b", - "cid": "QmditHnt6cYUWu1MM5Q4tUSG5nL7NZ2P9k7156v68zksYF", + "cid": "QmYZ4U5iiEtayuCDW2SRpKK1tF8CAiXuEq59AirBF3pwF6", "size": 279734 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_224r1_sha256": { "hash": "0x0e2f6affe39d888e91be2cd40662286a5f1c785549a7a45382f5c2222dbd04dd", - "cid": "Qmc1qpf6JwVT3YjYsDxEXQzPbPZERoM6V58VhXeKCbdDvs", + "cid": "QmZ8TUfWMh9dM22X9ndmF48nGFc9vczbsZXt7Kz5TZH93i", "size": 153216 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_224r1_sha384": { "hash": "0x2613ee79b0abc1b8eb658efef3c20dbcbe2515339cbf90d365b17719c04d9418", - "cid": "QmXySpevqMJ1muh8SNd4aLHmwHEsJUWGiYDPiQZ8Q6sY7b", + "cid": "QmX1rRKu5AxdHRSHTYGKuxwQwyHjwvYG9BAVSivpAcRBj6", "size": 363775 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_224r1_sha512": { "hash": "0x02c69d5c271443562d7487348f8c45a448105c8be135edee6ff1695aa9d4d83d", - "cid": "QmNsdRsmqAMMUiP2eXcdXqUcgawFiPzkGFLEbcQczFqBob", + "cid": "QmWKzX2zqMLu8a2LVfSQGFbve1WH7kmaUxxzavtrrtsifQ", "size": 363775 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_256r1_sha1": { "hash": "0x30434a0bd69e047933acd8a46116df27534321eb04b3ab1a56b661b69a621bd5", - "cid": "QmV9MCXYSKYqcS5w7qhPb1mfL8XH9kM3ZTrUEydoNcLJD4", + "cid": "QmbGBPvdKXyWFypJSLHUCHrVtVz3yV5ycKSVntK4LHjf1P", "size": 319097 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_256r1_sha256": { "hash": "0x1ba892e7a362e8c769c926ce965af82f2cc6cffda986460ea4481236ee7ec0fb", - "cid": "QmNfwPLx2XHEgZQCi9Y52zvGAg85HvQAB1gzvGHuZhHxXp", + "cid": "QmfYabNuyw1ASqcAhcG8USWZokBxfJn6RDLnCozgcXghRR", "size": 192586 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_256r1_sha384": { "hash": "0x1fa0c9e41f0c9cbdcf7201d6befe6bdf6a9a04806fddaca1fc1fc8727a637ac5", - "cid": "Qmc8CLaxupuADEDy8Bz8tcsofP3nmPGM3VaC9vsgUAM245", + "cid": "QmdyrR5TBh8aaU9umZWaD4udNTTa1DomArxxjAzXrKiNyD", "size": 402440 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_256r1_sha512": { "hash": "0x239526086462b54c5b49dd96b0159324c29f2148f729b1f147692eb0a57d007a", - "cid": "QmYR1BGpYGQbfbaRg7nbuXyNuWWh4zMEmqPLc9vz5J6WVm", + "cid": "QmNsyEPLneAyZU8ckcQyrBd7jACXniFTmZ8UqEBY3x8PYo", "size": 402440 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_384r1_sha1": { "hash": "0x2069ad851026f50a8992d46a4238d4b41cf7e3cedc7a967ff3570bd54f612f11", - "cid": "QmVZxQpypBvZsqqTJ54yuTKrTjZ41NTWca5tX77qofDJfD", + "cid": "QmZwxFMkXLiEBhZVJh2bQsqdq6hUHmCbJQGSdpcUL3xcFe", "size": 430907 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_384r1_sha256": { "hash": "0x00182e48a8456bd8afa2471de5de448878e7012d3919f0d5bab598a8666e5332", - "cid": "QmbGWH9uUGiaoxFQzBdgsosv8QAdVRFKC6sX7eLYVHjF9Y", + "cid": "QmNu8Q3a2rfLMnTJfoqrxtRmEqpogMMCz27WFbX6Hu2d4n", "size": 304401 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_384r1_sha384": { "hash": "0x2f5022c2fae36f8ab7817364af8e9824f74fe766ea22a8b1fb02b01548215c43", - "cid": "QmaYqTbVbGCXJbxhZYhQoTz6vPV576AuFHLY9CWeg78R2A", + "cid": "QmTmoEqzBqBwMHuhDajM5VRdENktk7muRgYY5A8VuxxpwZ", "size": 514265 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_384r1_sha512": { "hash": "0x0767da7e5222c696fe507ed89491fa6d9625111b8f681771c76c1081d7b6f484", - "cid": "QmQaSoiJRgAWcRomksp5jrz5pB6UdA9HakrUMzuqUF8sBy", + "cid": "QmXVsS6ARNbc7Z4UdbRsbmovoudPsKoX7LfgjzTzAvR7LJ", "size": 514265 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_512r1_sha1": { "hash": "0x0e097b5203dbdfd693a1d89b1a8d30f31af2800122e66ec62dae9713131b6852", - "cid": "QmRcCFGmjKf3wgSvot1FesTwTm5bJiG9zVdRaQnnZjnt6i", + "cid": "QmckbnFuevqMwVhNi4zJA3D3VCFPsy2PviWoPEU1UiZLA7", "size": 590769 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_512r1_sha256": { "hash": "0x2dd19313d9259911b410d18839ec795b92dda5a5a89acb7014e200028ac95e08", - "cid": "QmfLXuwCiH5ZjQmZmQM8KKFxvVdB3K1wMo9rtuJGdyi7fY", + "cid": "QmaAKRZFQR5jn1raSPSKam7xPQh5CjMgLaaSAWjL1gAECt", "size": 464262 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_512r1_sha384": { "hash": "0x294764cee77a7b72827179654c76bc089855271055a5fa3a5cd7654068b65d5b", - "cid": "QmQnMqufhaowCzbgYeN82zgAW2aSMHoKZCNkSAcm31Y9Aw", + "cid": "QmQgaff1RCqPf2ZNoxbhSd4iKNJDcBtQVLVRoxzKbmVPXQ", "size": 674135 }, "sig_check_dsc_tbs_1200_ecdsa_brainpool_512r1_sha512": { "hash": "0x1184ec98f30a60ee908688e8663327cdb56c2a956d19302bff167ee8b31f31fb", - "cid": "QmQ1HVgAQTdr4PZkBAxFJF2nXatpYMTKeQ1W5kdeHGVkeW", + "cid": "QmU8bTCeZYxw6zdMt6nuQnc9pza25dMsAmRst9x89Fq9A3", "size": 674146 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p192_sha1": { "hash": "0x187b3fe67614dc2012e23f098bda0f94d1da63d395a47c1c40f305d2321dca20", - "cid": "QmdW54MunhdvhhU5FXsu4W3v2BwMgsKox4uz4eChwLxxtG", + "cid": "QmRur26WR8QJhTy43k284eaxvJJfBtWbtqW2xTRcDshPaU", "size": 269492 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p192_sha256": { "hash": "0x03a3522a416dbb9c1ad5800d2a0a0b6f9107de052b9271970196833c1391a3aa", - "cid": "QmRPy9NB3tNU22FnpQcEko8n9tvks522cWXoKmEHRPHSng", + "cid": "QmQjpopX1U9F59NiT2RwTigdNK7P5wpYB8oZih4yH8478n", "size": 142974 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p192_sha384": { "hash": "0x1ed05d047878dfae97c885bed61b079f28337968057fb65accf00d7b46364938", - "cid": "QmeJWA9hYbFXjWUWyAEGcjpPjTw7x59VSZ5RteUyLvj2bZ", + "cid": "QmUay1BD6tQymNBxh25RCtfp7Bc7nMofjQCSC2FTsbAjCe", "size": 352829 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p192_sha512": { "hash": "0x0f57bf0a57930aa6fdda3b91b930fe39d69493643d5bb223652b19a15aae5ae3", - "cid": "QmW1jyp4pbVNpuHA5JwYhZfdv4KP3aBrVedjupzqJATjaS", + "cid": "QmXznbK9HeR4e5ryuxPwEDDB3LPgBAh83SV8u7zDxUjqhR", "size": 352829 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p224_sha1": { "hash": "0x29b02370ba2ce8281c5d3d71584ac84a9ea59e8972ee6652df2680425b3db610", - "cid": "QmXmVQU4eqFXe9aKr6QmgCbtWKLwYCC99xP578rTpybhop", + "cid": "Qmez1YeNd7ZnEUMATtF19PNjuHNJ4RL6Wax3hw2L7GFoyf", "size": 279734 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p224_sha256": { "hash": "0x1d1626cb468a59083d589cb9d42bf679f475baff71519dc40c6e26fba5157bb9", - "cid": "QmZPj7vjrZUX2LS24RNM24bMPabXfH5iEvt6aDafrChqHK", + "cid": "QmbC8S4YEVUhdgSUqGryaJxgHymzKUaGazTsrwB3GyGKXu", "size": 153216 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p224_sha384": { "hash": "0x05b490847ae4885045684cba1580a40ff3384de3b042aaddcab6ec6893c9ccbe", - "cid": "QmXGEUHvtm4YNW6ApvTwfV8kFbonNnfiCA1vhx2XYDQZpL", + "cid": "QmT8WKYnPj7B3Co71vYvYVg4hh6NbDY5hfAKLFNcUi2JFQ", "size": 363775 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p224_sha512": { "hash": "0x01658d2a541d6b46da2118b07eecbb87e9e37b01985f1a6578f950aa53306150", - "cid": "QmUe1hG8KBxe59F13HfrLarta15WBdSa5gamsz9FPJeh9e", + "cid": "QmQ9dwKcvDqfafhskoH6NETuSGgtTZto5tEAL9B5fZXPKk", "size": 363775 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p256_sha1": { "hash": "0x1519816a80bc27d74ca5221d59a0108694ff4fe3ba75af485764a095bccc9aa2", - "cid": "QmbANqanXLeiaB6DVmmUwTCPW2KMxjTRLZVCAxyc82GKPu", + "cid": "QmUAjvaMTxrx15FzdUcqJi7sEiVRtYC3MftQhjX7pDWuBh", "size": 319097 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p256_sha256": { "hash": "0x0431a9dee7b07983b92bc9c03e624ba30ac14baef119f80a89e91b5b5305d062", - "cid": "QmeoJLDPS2RAWNend4sgi4P9JUZMrbLArr7hTkVkjSvWun", + "cid": "QmSejAMB2wCxfgxeeH1m6oZ683Cd72oXjSs1zYwAeinCU9", "size": 192586 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p256_sha384": { "hash": "0x0c651dff1aa9cbb4562819fee921e65fdbb9c9d88cf2e23b6941273f2bc76fb9", - "cid": "QmWagCoFHKePTzVPrpAsxuC9KR7X7UhTA4bSjxYL4VjsWp", + "cid": "QmRdbzc9zAoMwb4qs8xV46gecc3gKwvTJFWnzhZforSarS", "size": 402440 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p256_sha512": { "hash": "0x22d95bb510a04e92e3f6c7c230a34c55b012ae8a6a2d357e5b7a34978c90ab3f", - "cid": "QmeLFLAq8pRpz3gLdcSMREQDjqxwsgZXZsaAdoCmSggzhp", + "cid": "QmarU7CEtWsgaPu28mQaY6P4gyPafSNpxbPNU4N9qciRQK", "size": 402440 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p384_sha1": { "hash": "0x164d81da511f9e9639c806eaedecef76f2ceb821fd32274c5a6d806295f3ac01", - "cid": "QmfSXgbv1gbRKVsxy9ycC37qmomwGXB7BcBk5aZ8DgtEKV", + "cid": "QmYjP1ugmHDLVfDe2hLA9uqDGREF4a6Yrg5U9hmuSwgvew", "size": 430907 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p384_sha256": { "hash": "0x2eaaf730a69d75d7ed162882684defc00be11798930aa93e03a13ab59ab85aeb", - "cid": "QmcGQRYgmp2uyWBAFiBjm12R42T42BUpW6CDTPqeTVYUEW", + "cid": "QmVYQz5rj3pRqoVru65p8CmubaCQexrK8KkGNqJ18g6RMB", "size": 304401 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p384_sha384": { "hash": "0x1e5b113cadaed05ce54fc76c9c6bc9feba61a07d0bd3e6783517103e2db19333", - "cid": "QmVCzaHt7kZSFHQq76dAepJHMY6cf7uBc9bHUmfau5mi6s", + "cid": "Qmbyz29yBZqjr3TPizQj8vmB1cyeEKMR2wLJ4xmUGHaoX5", "size": 514265 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p384_sha512": { "hash": "0x1e445bc3aa7194395d6d9558ae1a48b27578448594a8a439dced4ac9818816c0", - "cid": "QmeWjLbxocHKfKWem18SHHARs9KEY7SZobRF7nyGL1JSEK", + "cid": "QmaTPNUXTkjyJtMog2mBR1EeyjyY2AWpobLJVxYbqgQwSP", "size": 514265 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p521_sha1": { "hash": "0x069b7764e49a982fc1ebbd645668799fbad44a8e8632babfb459255fcb8c8727", - "cid": "QmaqDBsFpquskVAJea6NDWntVUX7sL1YhsffRgCgL4Pb6d", + "cid": "QmStkA7fnVHBJhGoGXxrjEJRUaQ7DhqQ4V3dTdyxRnrGNX", "size": 598932 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p521_sha256": { "hash": "0x09f4211f87284a0a4381a817ac27042f1bbf6039470dfaabe75b9a4d67580d87", - "cid": "QmUQT9kGBHSh8XDoXMCYYDdXWBEVCf4uyJNAcMnKeJvmSR", + "cid": "QmPPM5fZ2cFNzwKWKYeHKzsJMtrMB4SPnnHw9uwQ8rbUoQ", "size": 473803 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p521_sha384": { "hash": "0x29916bae4900b36a0359371bde57db0188210523182ada9d1dcc764a9fcaf8a6", - "cid": "QmXWdUE1SFdyctGhDtQdUWUdo2NvL912wZXALySW8dqHGm", + "cid": "QmfNyZsAMJ47TEvP358ywWwemWZXuXXap6NzjHaj1QsqS5", "size": 683675 }, "sig_check_dsc_tbs_1200_ecdsa_nist_p521_sha512": { "hash": "0x1206495adac0285f790accae770421238b85e47addd421a2dd8cdb15c8fcf80a", - "cid": "Qmdvij5dQXsvfPiZsHCYX6wNhhq84hjYbJPs2BJ5WQndSC", + "cid": "QmcHp1otCoASNpJ84wLBaFn3CCETKXuZHH9AAVTa6kxGLU", "size": 683686 }, "sig_check_dsc_tbs_1200_rsa_pkcs_1024_sha1": { - "hash": "0x0af61182eb40f1110b716e9d5b1f026cfe556b37dada5ed232dec8c5c807179b", - "cid": "QmTgEYKH5h2dnUjrCaoBoeynAzG9RKNfG8nBcedhiJMyjA", - "size": 248711 + "hash": "0x179bda9364bcede526c5388515e992128713188c6c5621de7ab33ff827f9ec2b", + "cid": "Qmeyrn5q8A2UjTG2h6Jt2dYmvMQeve5YuD1NT1Mmzwmuby", + "size": 252352 }, "sig_check_dsc_tbs_1200_rsa_pkcs_1024_sha256": { - "hash": "0x29f688a00af5de3fa0033dae59896447dbb12a79752f36588c9efebc89d26b61", - "cid": "Qmefj4RhEY1whY15ijwTgw7zxuT938pUT12soyGZW87Sve", - "size": 122207 + "hash": "0x2c4985a6c9740bb537511f206b61c90d72707566a6228224571bc8ecc34f5a04", + "cid": "QmUgFEmbBRjpHLG5nAioedAtdXa9ERSNBDpchtVtjfA17o", + "size": 125848 }, "sig_check_dsc_tbs_1200_rsa_pkcs_1024_sha384": { - "hash": "0x18a26061c2a8d0b89387f4591a22a29a22b15d553c870d046cfb688159c7a138", - "cid": "QmaunxaCXvApLAmomqQvnAkdSueEuqfquSRw6BnbksocPB", - "size": 332087 + "hash": "0x0cca0fe235b0849f2773768cbda9049aa00cc3f2c83e0c6c885dd57106e2e998", + "cid": "QmVZvzkEb3NR6cyXUCLCNJGL51axi1q12XAza1CJrL2jxg", + "size": 335728 }, "sig_check_dsc_tbs_1200_rsa_pkcs_2048_sha1": { - "hash": "0x2b331e344f900cf264547008bfa2d1f814bafd7819ec88146c6e4f72519b2012", - "cid": "QmbDJFuctN455pCQomjj5BVHWY28x9ymMBQpjC6KtocHGz", - "size": 279867 + "hash": "0x1c25bff4509dd8f90adb888e1dde97a4bbb046ff10944a4478733a5ac1ba6118", + "cid": "QmVavRtjZbuDUCvxiTfHNXXWTL6UrN1ceCk8Daq38GXg7E", + "size": 292715 }, "sig_check_dsc_tbs_1200_rsa_pkcs_2048_sha256": { - "hash": "0x0a780521ae787a3befd0a28ba5eaa0c86725e1fa922d1cec3d99419591ce3362", - "cid": "QmWCCtHwgHME16JvcK5xicAM8W33RJUwGgEt34TWurP4WV", - "size": 153362 + "hash": "0x099ff73b85ce025dbad148345d23aeed3dec44aac219088b0f3c5bc65fa26286", + "cid": "QmTdFRcrrj4gQVBRURcdSewWuwEpWYkBSAhodi8ouV88UG", + "size": 166210 }, "sig_check_dsc_tbs_1200_rsa_pkcs_2048_sha384": { - "hash": "0x0f76e6df407dffd042a20b25d1d393b554465fe43da08e75974e5d48891c97c0", - "cid": "QmWYHYWhQFPuz8cby1Uo5zXTgRXt8uJ8HqnmSPMUaCAHcF", - "size": 363244 + "hash": "0x15b9e7546edfce23ce984b55b5683a53acdd526257ef597aa0025b54096c697f", + "cid": "QmZNhA6AdJf6gJFexuQgKeYUNxFHfRjimExG1BGPaq8jMH", + "size": 376092 }, "sig_check_dsc_tbs_1200_rsa_pkcs_2048_sha512": { - "hash": "0x25d603f75a47a2aa4124044a359c590272c419b02b35073af5423238631605b7", - "cid": "Qmc4TmUBgMRBh1SuSjQwKFWYzMR5kzx1P8vXQgJxczJBsm", - "size": 363264 + "hash": "0x1038cf8f8f859cde004851530af504931668dc7c7fc9e7a22670f911434c1dd9", + "cid": "QmR6g4jV79dC5WDpYEdGcZS5c1AFg5wHG49YWJFvjkz8ev", + "size": 376112 }, "sig_check_dsc_tbs_1200_rsa_pkcs_3072_sha1": { - "hash": "0x1229f1af5986d0ecc32b5095521e59b2db0c53a396589d4436348cc7c02fe5f6", - "cid": "QmXji7AtdfgrN9tkaLaSQ9qDKWpiqwFLduNEMzZDEuDkkT", - "size": 315930 + "hash": "0x0810275cc0210ada1013f72d149a5baafe65737831e5b448ec4c97548eaef8d1", + "cid": "QmPexFiMXRSBNPBHkuctsqHiubEyWpbtvuLRBLzhoJig6h", + "size": 341450 }, "sig_check_dsc_tbs_1200_rsa_pkcs_3072_sha256": { - "hash": "0x2b7f38663c8dc3e55950b6704e53df040f04e97d27b3054fb35c78d84c8d94f0", - "cid": "QmUQivn1rUtSn633pXDB4WfJ8AXpg9eYgRqM1qq9fjpPfk", - "size": 189425 + "hash": "0x1b7fadf1286f55e819d55c959553a5125eddb71ab74788b0106ff54b129649a3", + "cid": "QmXhq5u4KbzGCMp7t2ucjQEVP3gCowcXejLUB8dXaWTK6F", + "size": 214945 }, "sig_check_dsc_tbs_1200_rsa_pkcs_3072_sha384": { - "hash": "0x232767a5edd9df226beba815a2eb671561e90f6ea7b326eed792d0e414cff2c8", - "cid": "QmZvGVyds5Gi564k3zb3gEURiv63hRZwdGojBmfinHEo4H", - "size": 399306 + "hash": "0x2695ed96afd9fa729c85f0deceb87ce1693d71606dcc230e08b0651f377a1c64", + "cid": "QmSBHuhPqvPn6YURJEzQr3mM5sadHgHeeXDacsySTYqCmy", + "size": 424826 }, "sig_check_dsc_tbs_1200_rsa_pkcs_3072_sha512": { - "hash": "0x26462f52c2cde3ddfdf13e91a9c980c9ecf1b4d06614427e8d8031ee5095050c", - "cid": "QmaKKb6FBdwgWTCFAcf8SafzWoYBzMK9ZixFEVbYuoEPkz", - "size": 399326 + "hash": "0x29e7647e8957dec6e46a545382d7b16672042758e9321daee27fb0b349723590", + "cid": "QmPj8Kqgd6Xxog39Bid9Lvhsm5NZt13tZx3kk81FxrmGa8", + "size": 424846 }, "sig_check_dsc_tbs_1200_rsa_pkcs_4096_sha1": { - "hash": "0x20466be7cddf669297f30ccdef77073d1c2d8e43b763ce9acd4fc31d50c96d9b", - "cid": "QmNtG97ykUkt9P7uZQZMWvTYC7Ms7WY9EhqYWqor7tRSMJ", - "size": 364862 + "hash": "0x11f033a69def6f58b34fefea324e3605616bdc1b3867968538af0e76fc71db82", + "cid": "QmSqZa9yqig4gM5k2j2eLedMhwFK682V8GucaKRuTPVg2P", + "size": 409687 }, "sig_check_dsc_tbs_1200_rsa_pkcs_4096_sha256": { - "hash": "0x1fb5751f7c4105584532998f25748ef43362d07aa8a87815658a499db80b6c43", - "cid": "QmWf6dVQnmqKr8GM3tcrJdRf39RPsqay9BVveM1Q5jcDT1", - "size": 238358 + "hash": "0x2da72667a27f402c8d14e2bdbb8948e543065a23e79369b86177736b9cccb664", + "cid": "QmXn5xZyr4zHBGRS6aX9PuLt5EjoE3yUcSrDHrGabGqGZg", + "size": 283183 }, "sig_check_dsc_tbs_1200_rsa_pkcs_4096_sha384": { - "hash": "0x2a7546205d2b17a9481cd28f5dfe8898b3b26d6fcf9a1af501cc5debe5e18c2d", - "cid": "QmX6Q9pkRHiCXgmvoUETUBefa9oVLWb8YZ1vcNy36SMYnn", - "size": 448238 + "hash": "0x0c6a4c3417a6dceb2a184b68ae74bb47ca7680cf645ff7921e0c04c4e6a43d58", + "cid": "QmSygjro6USCCHoBKp61sy9QFFBez19o5rHqGTGjMWD8bc", + "size": 493063 }, "sig_check_dsc_tbs_1200_rsa_pkcs_4096_sha512": { - "hash": "0x16d21b0121aaac2f6554db9d42724c926c9f9a150f318f18b591f600a23ed4c5", - "cid": "QmcXyM83GXpSw42dfxzLUmiq9YW4o3ay5mHYe5d8zubZH8", - "size": 448258 + "hash": "0x06c8cfa885715b2419622382ab6acaa1a54becfe76b1d41234b2d7e67a269b30", + "cid": "QmQ2Hy8sFDvibLhmTcUXNdbb4yABV95pdumqVWbwA4TmBv", + "size": 493083 }, "sig_check_dsc_tbs_1200_rsa_pkcs_6144_sha1": { - "hash": "0x065581ad408385ca3856c41eae4a7518cd51c8c5f41ac0d1bcf26462b13523db", - "cid": "QmPNv1cMaxJoeG4u1eNtM8vUfW3PUXp2t9KvG1qRaq7Z4z", - "size": 483952 + "hash": "0x13d13e5ebed687c7cd52c22e7b908bba23b2cfa2b012df54718959d183ab8c86", + "cid": "QmYF6FscmzDV8r31SLJFwigCNrTvucnbmKSjkDzARXGddz", + "size": 579828 }, "sig_check_dsc_tbs_1200_rsa_pkcs_6144_sha256": { - "hash": "0x09dbd000bc1ac1f476ca60dbc80ff0e0a93f68edeae0c357a6cae44ddc8c4ce8", - "cid": "QmPow8sHroU9ZzVuBAyx7rj9DAsrtSJV8FzAVrBG3VCuND", - "size": 357448 + "hash": "0x02fb570f27a9955618e77aa9d308d054999b6623bfaf939ed777c39419be4281", + "cid": "QmVg4naK5hBLg5AdJaHB3kDEcd3d6PPoJzYFZVwDJ3Adry", + "size": 453324 }, "sig_check_dsc_tbs_1200_rsa_pss_1024_sha1": { - "hash": "0x2f54aab07d225c1dc57d3fd2a44991747ee747a7be0eb87b07e5989b27cfd2f6", - "cid": "QmSekXB6DRrSGCuTUvcDqsSfDnWxQjzUDhDvDrSmEvisDy", - "size": 323934 + "hash": "0x02112064832a1a5c4d4ac9c9938307e160643840348688a65eaefba0888e4815", + "cid": "QmT45pLF4PECtcda46sWbDqQEHxveUxUAHMEXeMNgBjV6M", + "size": 327457 }, "sig_check_dsc_tbs_1200_rsa_pss_1024_sha256": { - "hash": "0x19b8070a888548d8c5cbbc39ed12569e5860d738d874f8a0967ba7c779fef8e9", - "cid": "QmQtxjUwiAQWkyaufEyEgi3o9yo659F5FZj1zidaJs9rws", - "size": 149817 + "hash": "0x0e256afee8769ca7066cb76fec233e8f09e206b84f468164c5746f6578a740c6", + "cid": "QmTHTHM9nF8NeKuDRCnBru1VoCKNGJvXXsJRL777Pwg55q", + "size": 153222 }, "sig_check_dsc_tbs_1200_rsa_pss_1024_sha384": { - "hash": "0x2b0fffe1e23fc91c7a0c794ade8543d097d62de57b18bcbfdfaca89ec0d409ac", - "cid": "QmNR7bVK6awBrCwUpHnBJoRpgPajvbeyqzXQDupQ1szCF7", - "size": 413729 + "hash": "0x2d7300119071c7594237bd4e20688b0be97db8b8cdffefa4049adbfa8b0bce91", + "cid": "QmXhTU87zacQ3Utu1ocyEvtZcLfECnkTyNwBAPPPP1UJDk", + "size": 416788 }, "sig_check_dsc_tbs_1200_rsa_pss_2048_sha1": { - "hash": "0x220855018ac457ba6d03e63ed958e41e62a9b4991aa33f8f241404a75588da3d", - "cid": "QmXy8rdRiDpLJ7Lf81pBTvzpt9CGkN2JhEKCi6RAoMAoba", - "size": 407573 + "hash": "0x21a4bc3ec4c4de7224cdf17882aa5c1d78ed69f5e55984b3a9d5bbbd0f16f7e8", + "cid": "QmexMLUmhiJqZBztBPGTkjfVtgD8giyBfhiAXG24fAvzA4", + "size": 419983 }, "sig_check_dsc_tbs_1200_rsa_pss_2048_sha256": { - "hash": "0x1bd07bbdf18c73a7591bbaca81f77aa8e10f6b0bb11b5aed1830f4edcfaee718", - "cid": "Qmb2KsxBtTDYeb9PkJPxpMosf14zPbSENzok6mHtp3J69x", - "size": 199079 + "hash": "0x11c320719813937a406cc5dd431e9fd20bab6e497e3a4be5bd7ec4f0aa5766fe", + "cid": "QmQu3j4qXFaqB72WxGkXS3dnoHLpcgoY2DV6dkNX6hufFb", + "size": 211371 }, "sig_check_dsc_tbs_1200_rsa_pss_2048_sha384": { - "hash": "0x2670d4be79b4e32179f298d43056b81953f13819556d5ec1d4fcff383b13381b", - "cid": "QmQRPwUsJo1YZ59np2rGxt9m68tcLMk81bbCXDWE7AgDyF", - "size": 518821 + "hash": "0x1ca426be4f1b21b7de80590a2b413f217a56908532a9b1ba6ad8ed74165ba1eb", + "cid": "QmTbaUcaL7gCmqLvA9tMqXix5pWmkawgR3suyK64BEPE2L", + "size": 530749 }, "sig_check_dsc_tbs_1200_rsa_pss_2048_sha512": { - "hash": "0x0d8a793bfaca545d4fedf117498e7965eef49405f318d4db543f3c4605ea60da", - "cid": "QmY4YcS9UVzr6tb7LXUKWzwVUYxVsqjSJDeJ9G7GkmVq24", - "size": 498178 + "hash": "0x1fbcc00657d09de46af1519eb5f8d9c9f9c3ef74d0e45f7df37a1b6ca3eb3919", + "cid": "QmakqyszxGVLhQQBbBcbkUbbFQkC1BHV4jSH7P5wJicD7H", + "size": 509978 }, "sig_check_dsc_tbs_1200_rsa_pss_3072_sha1": { - "hash": "0x0226194dfd5676917809f3740177ef20cadd2eb07a0787cbdabf8cf5397f943a", - "cid": "QmYHXN2SDgttRCDVt2zVPF9ZEchjNe8sUxb9sXw5uQhu3s", - "size": 504538 + "hash": "0x1af1232959dc28cb2ee52f81e79b732b50a089fbd40124e8129dc7f485eaa5c8", + "cid": "QmbuwChM8KXhivbiW4Sd1YiyWGuPZ4viwPjjFqVEtbTPsj", + "size": 529300 }, "sig_check_dsc_tbs_1200_rsa_pss_3072_sha256": { - "hash": "0x19637da4e0bf71554c29e1cc82f8ee1f61da1d0f20e713f8bf6717f4ce052c23", - "cid": "QmfLEyp7CaRxLA5aDLkKoruCcT37rvoPmF5pKXuqtQeimG", - "size": 253293 + "hash": "0x29ebca73c7a8f6e1d29923b6b732ab17dfd0cb4a9cb1b79dea88059b28596353", + "cid": "QmPYUHY3tjfdWMi1riV191cN4HZmDdmP2yWGSGfxQ6CbHx", + "size": 277937 }, "sig_check_dsc_tbs_1200_rsa_pss_3072_sha384": { - "hash": "0x224156f402735903179b4e0feb7bba4069862ecb8e55a752a02e4783e11927ab", - "cid": "QmTDv5tbfSY6V3e2LSmaevhbUJosR8XjcLed9zSrbeQfmG", - "size": 604821 + "hash": "0x1ea12560ae0a8a091e88b70e134e865d0229276016e4b6df71c8b86fbd39be62", + "cid": "QmdNwGarwQbmrVowzkNFyaQy3gSkdGu4bMotA99qRXbGU4", + "size": 629100 }, "sig_check_dsc_tbs_1200_rsa_pss_3072_sha512": { - "hash": "0x2f9657a0c9c5d6dd03a55ac79803a3c21f86c946c3e9958302b5e461f9df17bc", - "cid": "QmaHzY7gTkXiJfik2Nmptu9U2FW4QHevEs3h56T3qbdG6j", - "size": 582774 + "hash": "0x030e688215aefd6fbee01a0bc0ed8dbc25c33fbf9bba011359746d4ee9dc875b", + "cid": "QmXJxAE1ryC2F1W65iFhDPJJPpARaSxuXdjc7XYiHmKK54", + "size": 606919 }, "sig_check_dsc_tbs_1200_rsa_pss_4096_sha1": { - "hash": "0x1f541f7e16f45447b3aed574ae79a7a61fc86036b8145cb7cdd457a87e77a197", - "cid": "QmRoCY3GfpKhJSNRCofwjfGAFw1hHqe92fTxefNSu1hnwi", - "size": 605952 + "hash": "0x2cece37bc87d5cf5bba66c8e29c64e659fb5f4949b33036fa0da03cf77456e34", + "cid": "QmS2yiVEbFw1u4wFPXDooDYkLd6aDUEVagGbme2rbSRNJt", + "size": 649699 }, "sig_check_dsc_tbs_1200_rsa_pss_4096_sha256": { - "hash": "0x1371faae3d376cf8622001d0a66bfb34b13305ce466af3e6d1dcb2371a05d7c6", - "cid": "QmX4EFaNPhcZjB9iAN25hNMio3Z7yhLUs6XJbwUT51q5u8", - "size": 320458 + "hash": "0x12b8f9870eda0f1a0aff9e8a9edc2977ef140f748691e60a7ca276f860304ad9", + "cid": "QmdYFGSQBH7TFVmQhVQigPJ7GiudrvewdK8bXwaMXbjfTA", + "size": 364087 }, "sig_check_dsc_tbs_1200_rsa_pss_4096_sha384": { - "hash": "0x07f4c625e7077b6baf76d985e9376edc6b16650708392d32a1bd0a9cd03e6b4d", - "cid": "QmQSSiZY78Anusuvws8bKh1JxhTbbCLD9yQat6Sndt8N9g", - "size": 727667 + "hash": "0x2d489647a3481aa127b45deea5069315762fac0842fd42807f8e274b39a41ec6", + "cid": "QmeZCjTxZNpLnzsTCQXqHdMXEVrZUg71rw1onCyLoctDrc", + "size": 770931 }, "sig_check_dsc_tbs_1200_rsa_pss_4096_sha512": { - "hash": "0x0a6567ebb9cf98b6a44c4a68a576d71126972c29f3b7e951de4fdcd03cd67954", - "cid": "QmQfWmiRmXMSJcj61PQdXZyz6ETEd4uhmbnayV8haory1T", - "size": 680233 + "hash": "0x024e4c856146c01f933958424e8db08a637986b99f07a2827a26b58258749fca", + "cid": "QmeJPJgv4vWxiAeNzhsvSWjEiKWgMvWaj91m5DE9Eimft4", + "size": 723364 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_192r1_sha1": { "hash": "0x00a9118b97a1e7d1a910ce9648ff7fa953cdcbd1934a3d92dc3dbcee94e1483f", - "cid": "QmRe87UTcpe6UtnAregifajSV14EZEQrPFV7aS3DDogCfR", + "cid": "Qmci3XjSVMJemAhFA6FVUMTbQABSCkpAz9HBkPBShZpzce", "size": 347223 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_192r1_sha256": { "hash": "0x2569b35dfff793f8e462488cf8668fd3ccc0ad01954f0987befb716424141881", - "cid": "Qmbouz4fSefB8Ph89nQXhWYv4qAm8PHk45p35Xbez6gsX7", + "cid": "QmWabX2VWbyNyeyVn9B631jDLPvCdySEngKVrcZzHBiVWr", "size": 175930 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_192r1_sha384": { "hash": "0x1b2c07cde2b9bbc12e27a76510fef01bf9a39df6d5cc67547ca3843ad6a4e309", - "cid": "QmTKD6nWM4N2a1kRSdjvMoC5vyR1rmejpvrZn1M3pB6tgm", + "cid": "QmVXPFEypymsgRiRACbToYxeaJwmW16Q54zE4cjK68Yv3U", "size": 442297 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_192r1_sha512": { "hash": "0x277e32e8239d6a540eaa4087b1d70c0436e97549f51d1e5fca8ded575deedaa9", - "cid": "QmRk8ps8JgA3N39X9XXfpNAqw3GZEeMSvAYUCvuqDoDP3X", + "cid": "QmUV2V1ksciUuMTPUSktR2K5JCDMCbdjmRhykpwtXb2Wrx", "size": 442297 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_224r1_sha1": { "hash": "0x13bef51d660c810b20300dbe4aeb50bd95f15883e019bbf916fc467d6aa37d4b", - "cid": "QmUjpLYr8mnBD436u9s1D5CAHe3VoVjkhXt41ehK45YtGf", + "cid": "QmPynQmQdseGoWwRTgyxFyc1DLBZhpKAoXUbaTHpcC7jRE", "size": 357466 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_224r1_sha256": { "hash": "0x0717e3bd46f151b7186b8e276653f05ed77e949aae9dd104073724bc9757cb52", - "cid": "QmVvFVJ12zzWwsdW2FxuzzVPvsXM1zvzA3a1VUkpFymACF", + "cid": "QmQzjCC2Fa5Dct7WmXWjMxkP4xcmTEhohcLDVpm96tuope", "size": 186172 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_224r1_sha384": { "hash": "0x18c6f7ee332c63e703512c158d8932ac9c94a1f65b2caebb30439e2b2cdff072", - "cid": "QmYUsfW8jjhRjuQgpvYbzfT8yA5gD1jHz6zJxjMGHwUcHB", + "cid": "QmS5qSJR2stNxkBKJ3th8n4mmdpKhULF5Pu5yKvPUQrn8Q", "size": 453244 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_224r1_sha512": { "hash": "0x2d769dafa477687bcd1139790870539ce48b22be7af1579316704a8664d5ec4d", - "cid": "QmeAR33Cb2VGvEiow1ifhwhZbYaqrbvk813yeNspnV1Dbb", + "cid": "Qmew5qQ25fyXp3vSvWN3hBSp38csgLfyyM75MqNx9soDWg", "size": 453244 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_256r1_sha1": { "hash": "0x073db7e6114c9bcc29c27475a4737ffbef1c77e11cb62f0efd07afeb05f3d5ab", - "cid": "QmNNBWyGnqWK6yDrVUxA3JKJUFFZ89zML8RPVeM7mmS4T7", + "cid": "QmUuSZCtn1U7k4BVmPzc2eGgHXKtGgqSBe31PXoJEeY3mq", "size": 396829 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_256r1_sha256": { "hash": "0x030916734d4cfa9632570364a07fb956468eed75a60eedb15b94d5887f1333a5", - "cid": "QmZ7f2xN6wMnYBXisNciYJrZUsjEAULZWfY1JAzDTeZTE1", + "cid": "QmeZ3RCvhwr2QEAnH4EH7NPVtcJdatmX8cyTk7XXsFQxUo", "size": 225542 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_256r1_sha384": { "hash": "0x15d83c8a9b1ca0bda7264fa04f3e8efe755b5430c67bd603a7be96062ea535ba", - "cid": "QmSXHCHz1QN89F7ojgniRdKZL397iejWbCxXVZue4VmaYp", + "cid": "QmQMrxfbeb3Lih6guE1JCb4nEwnQdVdbMJd5KixbFRW5bE", "size": 491909 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_256r1_sha512": { "hash": "0x0eca050b939ad38133ccf8657b59f20891be505fded953864225b9d7c7893c0c", - "cid": "QmV9GGKKrfnWHfyFRDnEjUVoMGsHdPc5GLuUnqUGvTVeE5", + "cid": "QmUQAtvBKdQ5ffniNvw6ToyKCVASLss1G75EAsQ84hrhWf", "size": 491909 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_384r1_sha1": { "hash": "0x18b03a455f7f894478c265af5d12353e16e5b04fae8f67852f7a4d8471c6cb96", - "cid": "QmdNVRBuTBEkZzkptDFBTB98KcEW5NthouGotiViTFcbnu", + "cid": "QmRRQA1c2SidCX2kXvR3G96oaSNW7f5Kkbwfi5iRdF6rLY", "size": 508639 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_384r1_sha256": { "hash": "0x128c6d9b2ae9bf9b8749cbada9c4b81b709e93d11c16f8668fbc0655ffe5da0d", - "cid": "QmcM6goPqZGLF8YwNDKkqphA22WTWPoXnMVUUGCKaTn3Nx", + "cid": "QmNgJTpGMi8uKdMoAJhr78SxP9mrVsehNAof2mJbMQZYcJ", "size": 337357 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_384r1_sha384": { "hash": "0x22202f572a8456a97f6c9f55ef459c52ec26c25845c993a1458b17efcc28882a", - "cid": "QmP6MuNzXx5wQMXZJ5QZjfA7jenGaQpJghvMtdcoWTsNj2", + "cid": "QmT6EofqqapTprqRZcsGE5nq3pMiqnJUWxE6FfRGsXvMXZ", "size": 603733 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_384r1_sha512": { "hash": "0x1991da2460418cd7af1fe489730957ab78708d17ec8f5a0fcc987bb5090ef911", - "cid": "QmTxRWr8ofDqUd3jx47YvL9iE2JNeM1Y2CjK1y7xew1cCL", + "cid": "Qmdcnak5XhsZLJaxojk9mXJW2rpnFRsCaxLWUnUWWPhSmK", "size": 603733 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_512r1_sha1": { "hash": "0x24f0d05b84efd77cb47e816f5c1c7e76d4d71720f25b0364e906710e0d232a8a", - "cid": "QmTrbmrL68YDjhTTeozia7sJhpgdy7vp5UizW5k1XMKsW2", + "cid": "QmaS4eh5UoztAFHqtrYtczv3363gZp8934k1oJxWiGv9Ca", "size": 668501 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_512r1_sha256": { "hash": "0x04346ed3d39b4d12ba2e724253f38663e164d6f0f18d140ae70a3421981606e9", - "cid": "Qmf2mCwC535aWEntewfwQrhYjjWaSMqQarmqavGjNP7R5N", + "cid": "QmP3UfuYBFv4w9uuwn6V9Tco9fJJBzeQUB1TZxhKsVjis1", "size": 497219 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_512r1_sha384": { "hash": "0x2e07dd197ceacbf7504e872dbfa6a243e4a5010003b93810557557743d6aebf5", - "cid": "QmPtLy3pvz83Spvf9AnbM5A3f6GLoJjbFytdh79r3xUYiG", + "cid": "QmNi6WmoFaVo16FY2ELmcXTFeQvr1UxTuRv4gu1x5DtrhA", "size": 763603 }, "sig_check_dsc_tbs_1600_ecdsa_brainpool_512r1_sha512": { "hash": "0x1220fbd952cf842b99591dda84d0f34772fb40a8a1edf48b5d9533cfed9dbe68", - "cid": "QmRPWXAVHzrAe9jnRvx8rt1UjVuwyTi2rSCc7h4Utvh6zT", + "cid": "QmR7FcU5NZQyQjmbfU6Um5p3htQM27RhNaefoQKBPMnYYY", "size": 763613 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p192_sha1": { "hash": "0x2857add44c548161022e99d78dc3709ff5f7fc37755145ce1e7f8c6d0bae92cb", - "cid": "QmciH88P57QCgnZ98uokk3pbprTozaxC7AeiH38RBekBfB", + "cid": "QmVe1GQzddRpdCoQajApDy9iZrGjZda6iRufzLPrpy9CKS", "size": 347223 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p192_sha256": { "hash": "0x18d3dafd5d520773330a37a9d51e35afefa30d69fc2cc463722a8b1ef546d49d", - "cid": "QmQ6WaYwKeVaYFyMJih2XTpUXQA1M8Q4DmnymBTqZd1Phy", + "cid": "QmPmo24zm5XidgbaahXMrmjoNsxe4dSnjc5GffsUhGRGUA", "size": 175930 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p192_sha384": { "hash": "0x0cac92e0e01be6719a77921d32500d32bf61780e01097879747390f487a9ec05", - "cid": "QmPo3sZ8eJZ7aP8MR5sV1w9APt5S5h6Ng9CpVhJLfzDRDk", + "cid": "Qmdk3iUdrkSL2Wheif946u4Vxr3VeSqrWFfy6RSy8SpPWv", "size": 442297 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p192_sha512": { "hash": "0x2147270b3e072c58b7977f90095036ad8003f88a6ab4a59402be1715fa1d37e1", - "cid": "QmTtFsMVfp3sX8k85SMnAdcnmuTxQ8i6ydZVwQQkvWqGfD", + "cid": "QmbP76rpLY59ynZNGUPzhS5Dh6SxG8xN4t3RkHxiN7DDKu", "size": 442297 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p224_sha1": { "hash": "0x18d702fa344ecd3c41ae5af6930247b37edc50a785a0aace5c69b677bf734c71", - "cid": "Qma3VoYUjPstWmeJSnLnbhi2AkKKxA3VBk4DUNQNFfszDp", + "cid": "QmSjS3w6qPEM8AjGVUpmKEssTAmtGcNdbP6Vo1N3uNdTRx", "size": 357466 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p224_sha256": { "hash": "0x236e3f765e8fab6f23e024290310df6eff80e791cc388c751a335bb613dce8d6", - "cid": "QmPBMxw5XJojVQ42wWCtZeC3eeCesuzJi8dHRgcU4WtJpi", + "cid": "QmVG5C7LGwCwKAEFiz4BFWozCRmG1syteZfrzQcUzuq6ck", "size": 186172 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p224_sha384": { "hash": "0x094070d41626cdb65da626053bc48855574c304757f1a0178b42cfb902ac7d1b", - "cid": "Qmb58qNbenxzeBg7kdaFGLKLjmJVtkZtRriiZrrZeCxDHv", + "cid": "QmT4P9tAp8uZVVurUPXCVRrWVS4x98BxTSLr8wWwAL3yAV", "size": 453244 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p224_sha512": { "hash": "0x049d4412cde46ba310cae154e80c7f3298d1400c6dd8554ea0824f94e4ebc457", - "cid": "QmUvX9tHbH2X872RyKueakWk18qw46AbSvJuw9kkahWRmq", + "cid": "QmbvmRGgmJVePrFTCiyxJNgURLSXzp6KLotShZXHSk7fsW", "size": 453244 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p256_sha1": { "hash": "0x0882fdb4eb37a55e5ebba49023522159ac2c12ff30e777a29b4df940e16e36ea", - "cid": "QmeTE6UKB8uQE5XVp1DuSD2Pe11MY5j7LH5DHxmPAGPnha", + "cid": "QmercmLpRDzNoieTkKxjGd8e23UTmZ1CLbCmxjGsqacVg1", "size": 396829 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p256_sha256": { "hash": "0x15045aace05946ff1d9613d974603d0769647528142e4526cbc03713ebb5d388", - "cid": "QmPaZEUffdjXzNtYTiufj7Gy81PWkbxxUdroMdeVYEgsS4", + "cid": "QmcNcAmbyuXmwMih6wabuzbQ6rzb58JLJZBqZbKD1Tw7vt", "size": 225542 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p256_sha384": { "hash": "0x18fd9c1cba632432885f544f3273bcb536e01d9dfa3c2a94cdff08799436a232", - "cid": "QmNNApeU3tHcWpiZLRSSTkwrcePRLKFKpRF257aXPn12Jh", + "cid": "QmStEgjqu7cq4iZJeQAoVceD5nXM19mKuttuNDNKoRwpbE", "size": 491909 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p256_sha512": { "hash": "0x18466c7385fccca2f1e84a8689c90708bfabb57b31dec8e2e1023893f592ee5d", - "cid": "QmZh7DNc7UzXHVKUJZfFWGopuLGcqbUXyyub1ePX7kNMoD", + "cid": "QmfVmQ3DSWXuRvgMPWujtiXaRQksUkvmpm3pR9XTGdNhzz", "size": 491909 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p384_sha1": { "hash": "0x1d21899f1fc9763fafeb8b21123385a8492bac62c420c66fbb4c9b72aa327e3d", - "cid": "QmbqK5azND9rmExTbr4GCPm3CBrrBpiXUQaeqXM3SFQGzJ", + "cid": "QmY9SsTdxYuqhQXcbHSypVgBC1FvCXGBfBzf1ezC2QeBeJ", "size": 508639 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p384_sha256": { "hash": "0x28395582700c9282f84376ceb000b05e1348d0ca2a0f5685875212932df84178", - "cid": "QmRPa3L4vjyxczPm3PiVPzYt1GgoPZbVu6iWBomn3o2a65", + "cid": "QmXtuG6voWVKDoFdZrH9eeacYmHsFqH4VGC7MZN5iD4qZS", "size": 337357 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p384_sha384": { "hash": "0x0572faa3c1d592abfc0eac9c2e02e03d4a29dd51d3dddc65bd43cfe3e5ee7382", - "cid": "QmXC4ojAWsxvrvnEN3Sv2oWL6Ym9YvX6ZArY6nUQvieP8J", + "cid": "QmSwJR65HPTWFUW1AAgzXPNA6iEPymJD9HMSuCjnRjv3wJ", "size": 603733 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p384_sha512": { "hash": "0x1c817de90949462fc706a952354847e81eb35a7768de6b32cd37516117cabc23", - "cid": "QmUDpyGgKovXsPc5RacuemGJcTUgFHjBhsSgZ5u1wWiPCg", + "cid": "QmPktUTrm1KGz98i9EfwrUgAdsn2L5KEuTdD6vbJYzp9Xy", "size": 603733 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p521_sha1": { "hash": "0x1894dd3cb7d865d5926e636c30ecbb34dde2eef5691e5204be93a53038c06581", - "cid": "QmTNDSsb4vkWjxFKgKTe7ZGsSK9neQa8wnmJQBRzeAD7Gm", + "cid": "QmbV21dMqk2DmU1ouXtfR2KSnvakAssSnEiwwEY5ao7KXV", "size": 676664 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p521_sha256": { "hash": "0x062647f8642f0b91e5df1b323bcb2d2d185a0168b8a36751cca1a70d24cfd3db", - "cid": "QmRdST6dNrmVpmi35UeMWMF43DKEnawCUEHZ27kaoWZRkK", + "cid": "QmdxiiGtaftn7NZGcBcXxWi7arndcS4D3ERYy5JRhLhjHS", "size": 506759 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p521_sha384": { "hash": "0x19b0598ca40ff3d0e898a0229d1f026f516511b9623af31f95e8d8ac89d8bb63", - "cid": "QmUafguEmLjhipoPztactNpRMC3S5GH1pBJTGiNyLVWpNP", + "cid": "QmTDGsatg2DVm6tf2KQMyyNRckyMgdqy3CS2UHr3t1oNGe", "size": 773144 }, "sig_check_dsc_tbs_1600_ecdsa_nist_p521_sha512": { "hash": "0x2505eb2328aa7b4e65ef29cebd0f2b5dee5e64ef0b73f507653e6c83db024b25", - "cid": "QmQTeFvQbhh9GEsPYdSsqkPrFCnYuNhMuQjwnKxoWVjFGi", + "cid": "QmZk1mVwJcL3ipkDukUM5TE8g8vawW4jJyrgxmzffTfjhk", "size": 773154 }, "sig_check_dsc_tbs_1600_rsa_pkcs_1024_sha1": { - "hash": "0x1ff34c256fdc411671b30b27c39996b043f3b48cdded9fd9f66438ac078d04fb", - "cid": "QmRXb3g1moEuMSbuUnCuUzYGNLAiU1xzZNbm7Gz2Fqi89Y", - "size": 326442 + "hash": "0x23a41987f47bfe31047fadfdf7c88f184e9cd830254df7f0c8b9738202596cc1", + "cid": "QmNeS1jk7ZCPz2GVE5CAmq2NwaVUrSbtgTh76iGjADdWzQ", + "size": 330083 }, "sig_check_dsc_tbs_1600_rsa_pkcs_1024_sha256": { - "hash": "0x2f4814c29513c05dd07a3724ce102f4dee44cc0e68abb838e2ff9202e7c3243d", - "cid": "QmVKLS5j3VpYaruikk9mBKix7EoJdqWNKjbFXnMCePhQBL", - "size": 155163 + "hash": "0x286fd0e36359266e6fd7ca4e376ef6393314b97109038733c132fc5d69899cc6", + "cid": "QmSWFy8LQsTxxnLh6xQCJSZk5cmuNeS91q6DnEKgiJMsCh", + "size": 158804 }, "sig_check_dsc_tbs_1600_rsa_pkcs_1024_sha384": { - "hash": "0x2032b118a0a79185dfcf08e027630cddee6c9fac8cf0b8ecd7658e6546b8d177", - "cid": "QmTdrdM7Y1WcsTzwhC3ji8fJmybhJmnLobh5CBDAQ9vwMY", - "size": 421555 + "hash": "0x25805847b6a93ebb2d0e2b01142d28508d586780efdf2da440fbe88dd9be5882", + "cid": "QmTTmQBSZcCU1ryMcrLfMN81oj6D4Zsyo3SVx6znq2Mx5W", + "size": 425196 }, "sig_check_dsc_tbs_1600_rsa_pkcs_2048_sha1": { - "hash": "0x088e7041daa6fa486ffe64ae1c63ad1d92c10b881dc91a0f381b2034fdb48ea5", - "cid": "QmVWwtMfyqvHh2ojkYZbtXqi5aF9Fv9c6My8eV7EHwKru7", - "size": 357599 + "hash": "0x0cb16de5b8ae43f9081905a95e6a4ff156a8db5752f14b0c7fee0d8d00c1599e", + "cid": "QmTAZXCqhJaWwzhDQEoAyUQv79kcg3hvmg5QhLUZ4RCJrF", + "size": 370447 }, "sig_check_dsc_tbs_1600_rsa_pkcs_2048_sha256": { - "hash": "0x2f075096bfce57ec3c9e5ee5199bca945e5866a31d4524cb06d74e88e8231feb", - "cid": "Qmdzc3yeJVvg5y75oVagkrTh2YG1XTTLH7RkY3TFWJrhfd", - "size": 186318 + "hash": "0x2c18eb0155a09515e11e570a852144aa752c3ff0dbab16850a9b7538df2592a9", + "cid": "QmdxYm2cM4fAdKRM8sWJSE7Br5SMgNQCYK8aer1D14nVzt", + "size": 199166 }, "sig_check_dsc_tbs_1600_rsa_pkcs_2048_sha384": { - "hash": "0x026c147fdf6f01eeb7ce86a4116832b6c87cde13a26d5b365c5f7215b715e4e0", - "cid": "QmURUsoMtUtRKqFyhoFJrjV2WgADvRDEJ55jK49pzdxq61", - "size": 452711 + "hash": "0x11a7a2f98a6f75d515a049c560e9ed105227663c2a673c87e594597ede4d9f3a", + "cid": "QmNhhbawtARwTskGQXAuoBTF5UJzUgCTVUFyeVHAW13Qd9", + "size": 465559 }, "sig_check_dsc_tbs_1600_rsa_pkcs_2048_sha512": { - "hash": "0x145647ead75f7dd7c1e0a9154a248eaddc93a5fbcccc6bd3eab01ff3ebed7d0c", - "cid": "QmS38kLtgdUCoZwjs74KHKo1gCNvaPLRayFos1zy8w5jZQ", - "size": 452731 + "hash": "0x1ad3f8171f2545c50012da614a9dca8c97a6d6af8abc47ab93b80da55d5dfb73", + "cid": "QmXxrnPQTWZSDqN67UyAxC54r73oXEG8D89b54XK4QsYJd", + "size": 465579 }, "sig_check_dsc_tbs_1600_rsa_pkcs_3072_sha1": { - "hash": "0x0e0dbe5796244f5768d958c412620beab5d09b46e7e09e6cb71b5b89fe8f74b5", - "cid": "QmT98NCxqoHHwESd47G66JGzMxSjyCxauvmxJyJjmPysX2", - "size": 393662 + "hash": "0x085bbd47dad7d5696ca8329b734f4964ff0434a1162840f659fe7fe184db6d52", + "cid": "QmYvSaupogS2iKgURmJGZs5MXoGZjL5wBkE14cinVs6ZN6", + "size": 419182 }, "sig_check_dsc_tbs_1600_rsa_pkcs_3072_sha256": { - "hash": "0x0a63952e626a75ed3ab232b57cb0be814aa6a47b6a7e89019dc9ea6755c5eb77", - "cid": "QmUezfNjaQzbGqsQbieJnpuVyjq3C1utpaquopfaTWRcJm", - "size": 222381 + "hash": "0x00b54eaa81fa7cf0edd1ecbfced1cb9131a9d5d7766e82c838eed71e82039f03", + "cid": "QmVxp4meMrnkiJZHKWgHNjuK9LcfdfjRY1BF1Bnoy6PL4i", + "size": 247901 }, "sig_check_dsc_tbs_1600_rsa_pkcs_3072_sha384": { - "hash": "0x248da917a25359dce7baa2a3ffb81cb5102cd6377b553f9a141263429e3b7e1a", - "cid": "QmPS668ZVbLhCMf2pXV9u4HFbNV18xYBApuuFHZMGXmAWG", - "size": 488775 + "hash": "0x0916553604109f13ada413946e676a0433181dd85b7830deb28dd277295f88dc", + "cid": "Qmb1J2h8M8Q6t1t2tsVMMVb8mMkd1BoZ24hmXWjauv4E5W", + "size": 514295 }, "sig_check_dsc_tbs_1600_rsa_pkcs_3072_sha512": { - "hash": "0x2a4917b1796eb4c2bad1c2e66520d18c08e1b70a9c111af2304f660e5442a1fc", - "cid": "QmcBrgB4cqDWo6zvxpUHYrMN23YwGqQ6WngoGVYXcceost", - "size": 488795 + "hash": "0x0aa3c2f39258107c4438e847eb8f3c7387cb47664deafd0b6f470f088f7fd587", + "cid": "QmRxSWgNM4jM52tpEhHK6USvK5wtzXSx1Q2nqBQBktSPZS", + "size": 514315 }, "sig_check_dsc_tbs_1600_rsa_pkcs_4096_sha1": { - "hash": "0x1959904ef40f761daad764a94624e940b70cec62352ae751686f91c126ab9c11", - "cid": "QmUMWGfFzsgXmXaJBWpi53c812kZ4eXzvYisSJSDqLQc3W", - "size": 442593 + "hash": "0x14fba63793c67dbc2c30c85a7a713dfd2e62bb7dddd0d43763f2f198ca3dfe6a", + "cid": "QmcNoYVeqWEXBHxkNRoVCFSvx1ygxHaK87K6TUeEJyRMd6", + "size": 487418 }, "sig_check_dsc_tbs_1600_rsa_pkcs_4096_sha256": { - "hash": "0x11c2644640084a88ce6f6ed056380f3fe7a5d20676bc0be4403b785c46ce396e", - "cid": "QmTVv8K2CrrXVC4aiKYd6wZU5QDCMMiw9QiyzdFSJ7CFr9", - "size": 271314 + "hash": "0x1518dfa98b34858e6c09f0157b51a429581993d630bd9ede312c40518b3cf053", + "cid": "QmdQoru8sHemYx2kXvEXQrELvW7mHKAYGMWDSkBtVvb6Qh", + "size": 316139 }, "sig_check_dsc_tbs_1600_rsa_pkcs_4096_sha384": { - "hash": "0x25f082292d26f4c91a92615597728b62cedb690c99cc58333f9b76189a442cb3", - "cid": "QmWMpD9R1G7bB4LBfaFA9XbvLMsw3Rskk7ufi4LnScJGgS", - "size": 537706 + "hash": "0x05db287ddecc747100cdb15166263001aa2ad20c417dac084cd23a5ba8ddcaf5", + "cid": "QmVvZyRfW7esUxDBEqXYYcZHUyPnPVck7BvFbzZi9NRWuB", + "size": 582531 }, "sig_check_dsc_tbs_1600_rsa_pkcs_4096_sha512": { - "hash": "0x12f7274de0dca364eb83eebace3aa04ec80b968a490b0668738576ff0a667b4f", - "cid": "QmYzsyjTiFfB6WqPVLG6qeWZkiqZsPWck51FUVVgk9QqTa", - "size": 537726 + "hash": "0x11cf662f4a87bf94d33d44d5a7f3282b49656800cd824022529b3a9a0945a23c", + "cid": "QmbA1jXkcN5fFtStKhgLMezjAieWJamd8cQ7x6GH7AocNi", + "size": 582551 }, "sig_check_dsc_tbs_1600_rsa_pss_1024_sha1": { - "hash": "0x2942ffa619fa5fed9b36beaa868e14dfac63d92cb83b58d680ff83847a330555", - "cid": "QmabdZRfMUU7eZkUbo5DKQQiPSbqmeMxACoEF2rFjkbeVT", - "size": 401664 + "hash": "0x08d0c8f76c9fc811ea02164050053afc98592099b6a0bdd59d93adbeb834028a", + "cid": "QmPLoxcLKJrhCFDaLrT1CMwhBERcYsxyjgex6iSa3uDtVV", + "size": 405187 }, "sig_check_dsc_tbs_1600_rsa_pss_1024_sha256": { - "hash": "0x1e0676fa0cc208fa383ae21fa9a2dfa4b2ea6dd6fa687c36d0a88dde87489da4", - "cid": "QmYM3qWJhitNcwG3nCS6bcUnvPMRtodw2ihr4P7FeDz67h", - "size": 182773 + "hash": "0x1a61a5538c3d28ebb0169545873ca2524079c8897cdf8ec99f53b41ace6f43e3", + "cid": "QmPecx5qdu9Th3uEP97cYwFTtfYeiKom8vQiM2uBNWkXPA", + "size": 186178 }, "sig_check_dsc_tbs_1600_rsa_pss_1024_sha384": { - "hash": "0x09febcffd7e84be42e61627bc5327bac63f0c98c85332d3539207c331a1b8246", - "cid": "QmPEmojCCKCuguB8uEr8ZKT7R1CXRz6yidwxbJ8S7BrJLS", - "size": 503196 + "hash": "0x11358a28552dc32ce8af340e44e164d4a58ae5f502fdaff2aa494e3f2b78e590", + "cid": "QmaUuAWcH7EjUov9WtPbbkhBnd3wgEjU4DiEQpKvLgYmWb", + "size": 506256 }, "sig_check_dsc_tbs_1600_rsa_pss_2048_sha1": { - "hash": "0x272a65d334498360e82f8966497f27e734584b172909a2cda727925e65bc4578", - "cid": "QmX6J6PhdtVRGh7RjUGfhSm5kTmfTNDqPXCPaUPGPsVYkP", - "size": 485304 + "hash": "0x2612343d7ad456a153acf2a1acdfdff9c60b0a76d95029585e0d393e5fb67907", + "cid": "QmUNagr8LEkBnwK1J18Lj5NUXdBXUbMQwKJRdQFDk6X6mt", + "size": 497714 }, "sig_check_dsc_tbs_1600_rsa_pss_2048_sha256": { - "hash": "0x0ef423ec6a2f1e46189725e16c5f1abe935359710364bad01b70f94d97012340", - "cid": "QmYeXWCBhqdcYUWNvWBN5u7PibM57CrCZkNPLmoLrRqT5F", - "size": 232035 + "hash": "0x088c43b161cb67f459da9804c078590b406444b9c4ff3749afb53255d583218a", + "cid": "QmdNcbLXvmGwbtBqX9XG54b4fKpgU87yjsQgFaP7xdX8su", + "size": 244327 }, "sig_check_dsc_tbs_1600_rsa_pss_2048_sha384": { - "hash": "0x03467e4be736e80d422d5b2e7bd79a132a5468355295c4357c66d122791efbf7", - "cid": "QmVMMPaTDmqhJUvakicDLQnRDduoNFQkXXr5ufB9SpcBwx", - "size": 608290 + "hash": "0x03e559810feac7e01cd83ca43908c31180109f0181fffdc7047291cbac1e7086", + "cid": "QmS2D3BAtq3jmdY2vLboKkYUUQLpzGax9L6bKa69mLDceP", + "size": 620217 }, "sig_check_dsc_tbs_1600_rsa_pss_2048_sha512": { - "hash": "0x2f30826ec8cfd62132132abe9d44631383db1ff1732775feb4364cef8fece81f", - "cid": "QmfH8hHyCFRRA827BXrvnmAm9zqmPL6vzABR64XaYNnhHE", - "size": 587647 + "hash": "0x2aecdf3fd41eca1e34685f1ebc8527a25af6087937996565d647beee848054ba", + "cid": "QmdtSaBpghmUNMKbe6NKzCnKBQAgHByfqFuwx7yfkxmJic", + "size": 599446 }, "sig_check_dsc_tbs_1600_rsa_pss_3072_sha1": { - "hash": "0x0044bca81fde02f82a0b8ff418ba53c821bcfa9f21b8fe603c3a8621e886d529", - "cid": "QmXcrDcgSH9LAxWPGi9cGUpS99576PbPuEawQPA5AK8KMD", - "size": 582269 + "hash": "0x1bad30d383374f00f258dc7adf3b97502b069b968ee8ca4d64540f33aa301708", + "cid": "QmNiN5ypznZH2G6DJvAKdnDTAH6VZY1WigkwkNt1oFSMTW", + "size": 607031 }, "sig_check_dsc_tbs_1600_rsa_pss_3072_sha256": { - "hash": "0x295f645c95c561b589da377797a28d00aa398974fd70b3614b55ad19b5e1a699", - "cid": "QmPYtR2SQ4EQeffEEvzYS51skE1AKdxzfE7fz1j9Zr5ivW", - "size": 286202 + "hash": "0x08a5383aa03c0afe292d06cd7285b1bea92fee4e9c32a2e292e66f23b5197230", + "cid": "QmZhkNVdRP1prTownhX3URqQGJY7z95hzMEn1kUs2DPJaa", + "size": 310846 }, "sig_check_dsc_tbs_1600_rsa_pss_3072_sha384": { - "hash": "0x08c48bf93d3714eac8eaf6a721d56062856fdaa8a082517c2d7fbcce346beeb9", - "cid": "QmZSTFgdS54rhZtHGj75aAcF2ANY7qauTPWiWeRfEidcA4", - "size": 694289 + "hash": "0x2a4f6482f63887e25836368171b816f98e406a57e183a7220c109cd18a66ff6e", + "cid": "QmfE9s1HM1Hg9MnrTF6ByLM4HQKybd7q1hzpydmMBXbpgM", + "size": 718569 }, "sig_check_dsc_tbs_1600_rsa_pss_3072_sha512": { - "hash": "0x1cacadaa2d3f2f9326b5ef711785633b8fa12e76ded5440f93f8fbd6b4588f6d", - "cid": "QmP1ULHBWg3t8tzpt1nhBupJp2YKbpXKh8CQp8wHowSbvu", - "size": 672242 + "hash": "0x059276affdf89753734e70bcdaca3d21889dbb136070878c3e38f7ae4a2c37bf", + "cid": "QmazCYapfPZg2nDSDepXnCkVd36qPGbv8YmkcwG7SHSFTz", + "size": 696388 }, "sig_check_dsc_tbs_1600_rsa_pss_4096_sha1": { - "hash": "0x1c5b7805f6aebe6ca27a0a8a7cc1ebca7d8482440436a5aa850941d8a2eb5283", - "cid": "QmWwmYxYvKJnoMgyJcTwCfxrebtsyKCJfBBrHqX7euhnF1", - "size": 683684 + "hash": "0x1f9656700c5cd6c11f1352dca4ee5442f95bf18b6f56a1d87e94c382dbae52cf", + "cid": "QmTh3Nqnv5cePc6pNLdNmLTKEyvsrvPqu4c9rsFUKWuX7U", + "size": 727431 }, "sig_check_dsc_tbs_1600_rsa_pss_4096_sha256": { - "hash": "0x2d9104c6b8a98c57e614e0fb8d04f7c281274f19617fe41127bc1fe31ce9e336", - "cid": "QmUcBDWnsSENGPHJvMMv4FvDEZiUjdNysjWs3AgNMvAZuo", - "size": 353302 + "hash": "0x0d2e13223e0d418bb38b099e3280fcf07a7dd81549b2469326282c6943dc6f08", + "cid": "QmeHHYkqhnPU27Q6RSX6FCxMVrF9NR9op3TyBnjfhbV6ju", + "size": 396931 }, "sig_check_dsc_tbs_1600_rsa_pss_4096_sha384": { - "hash": "0x124b6030726614854c1cdd0623dc60f91cca4ca764d5b359f68129fcacc9df5e", - "cid": "QmQQLpDrA4uVP1fTRVv3NiJ3EcvuCjfXdJnDzAAvfqSJqu", - "size": 817134 + "hash": "0x068e27efe95ad1d96af4534ec6eb4d0a64fca08d01b85c1dad55f534705b00d1", + "cid": "QmTYsvFdF66Bsi75t5Fa1f731ahEaxNgFMB2T29cdgD1cK", + "size": 860399 }, "sig_check_dsc_tbs_1600_rsa_pss_4096_sha512": { - "hash": "0x179234d364c2a6edbfa5eb44da8513a895bfb0d6dcbef1d728260328444a77df", - "cid": "QmekVpmrYQY4rqhs9ja7rnUJ55fg62aPsjNF7pFmzLrEbF", - "size": 769701 + "hash": "0x30456ed5a82b2d31444e7e07ea796803a0b6fe9a92289df13502c736567e5fcf", + "cid": "QmR4nEGoUJjj3B5HC8hNEs3A7ph6H1tgiQ1r4aDHB1nT6Y", + "size": 812831 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_192r1_sha1": { "hash": "0x1c8a70ff38378bbdbcb9a77f258617a50543b743916a57729b4159ca86e31960", - "cid": "QmSgt5qPocSjYBn3kSFfaMjpB8bahMSrdGh8DGz3J9KLaP", + "cid": "QmYQNFbT35YDmjxohh65JhakdXaTzrrraUEn1HmMw4uDHt", "size": 191050 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_192r1_sha256": { "hash": "0x232c9ddd60cd6c6554fda7665277e9a60c15bc3752cc560939af152cef0ba1f1", - "cid": "QmaQQ2Vcu643XB8UVVqkXzHq7hGUNGmWfV7U6TcMGSv8H2", + "cid": "QmWGCLPenmWLRK3zrLkaCKxpCFHfkXo8q69uxVmNG8dQWA", "size": 104645 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_192r1_sha384": { "hash": "0x2d4c0dab64a9eace03616b8ef5211ae8e3af32bb131292d8af2131302967c351", - "cid": "QmPBDNmaj33qKbgSw3oHtkvjtHC7X6gXXu4sKJK9Pjragw", + "cid": "QmYo2GhrUS2yYJ4W53Y3jHWH1D7YSoMMygyQXtXVXvPrX4", "size": 233770 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_192r1_sha512": { "hash": "0x254cc8842805c1a95107bae1b643d5957c9c922634bf292a00843557e0b7a201", - "cid": "QmRJgAezBKA1Urwcyz76b1jK41RJKfNcdRdKsKqxVA7NpS", + "cid": "QmPU4fzrDLaLdHqkBk6XUJhFDhqw7Khgw3dFBC5EZn8VLu", "size": 233770 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_224r1_sha1": { "hash": "0x2d54d683bcc2d9f9fdb566a27cead363baf57f2217bfe048085eeb97b4f3be8e", - "cid": "QmZMUFpCVS81yCZu2hnebH7DMr7jPKp73PtVLCmz53tr3y", + "cid": "QmRbQ9hb39TTLLScwqz8uBXNmHy27GY357G6ujGtRZuVjC", "size": 201293 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_224r1_sha256": { "hash": "0x0df963342f8ba12089f2e5ffb8b5d0e3c28a71d2ecc9e1687f82d5e1ec94874d", - "cid": "QmWuXbinGH1wBNwguLkBSTmsxCcn1EPv1Nbiu4TvcySFAd", + "cid": "QmPduhga7NcdMWTR6z2ceWLxfdsPpYkQY3NCpZYQJan5jZ", "size": 114888 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_224r1_sha384": { "hash": "0x2881b006c9f14728cda56ce9e8cdc545899de11bc2cea2869b7e9217248e26af", - "cid": "QmbaqVGCt7LdVsJwWnj14S4Eh6xdrRBp4SE6EQuXKiCATy", + "cid": "QmQhreMAgseLvcXTnKjxYA6pztPj2AeTMjSQNwAjmm5fTw", "size": 244716 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_224r1_sha512": { "hash": "0x2eac968a5617bd33270cb9c67a7ad97235bea09b7911386cc06923f49f4ce695", - "cid": "QmfBHpvpZzRciu5aXeBRKEDKMZNESjumDB22wkV4jZGAtE", + "cid": "QmVodDxjQo6977nWPwmWuFJ7RygEKxB849w9uqazT2aCAh", "size": 244716 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_256r1_sha1": { "hash": "0x023d69ded7c4218eaab1fbd0c69b202cc2076ccdb7b1e28dd46c486b62d76eab", - "cid": "QmchWdUkvAmgsy9aSRK5bg7LS8r4sQJKuV1pEoPhpFa5v4", + "cid": "Qmcpt8yTzVwekqSkAP8iXCyCbxGe9YvtwJvyLVLNkzq7nw", "size": 240656 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_256r1_sha256": { "hash": "0x2d469ce2885dd3de85b5d4c52ef0768d9ca6f0d7a9018f999b551b927f555453", - "cid": "Qme49zXhyEAA67MDmHrovVSz4qwzoKBGmV5EMqgNCfQgqH", + "cid": "QmZpPF2ruWWmyACB9ZumkSqTTTUmer5iEzkJ88GBSLKt1R", "size": 154257 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_256r1_sha384": { "hash": "0x24c159389c44727a9af79b70cd47ed816f42a9355f8f735ce1e59788797f5379", - "cid": "QmTPyZzouSuf7P4VRV8iP2ENiHr676rNbdKx9puYsTTzmE", + "cid": "QmRBMoCqR55CbcATT916pAPVzYAnR5b9rDjmEmzkTRppxc", "size": 283381 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_256r1_sha512": { "hash": "0x1d0aa6d00ee4433780cdfe1cb187b123a681cdb5c1cb1f2c88e9303d85137ea5", - "cid": "QmXBDbh8ppfz9zN5QYTxnWXu1pCd6NPRrsJUdCF43Vj5Ke", + "cid": "QmYU1pNVfgt896AZzYJ5SCU2JnsZ89hXSiGdr6tmMbuYJH", "size": 283381 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_384r1_sha1": { "hash": "0x220527d060eed8c9f1fb49a95c06653e30a795259f458333771698576aa7aada", - "cid": "QmSyCEeu26bwg8sdMCfSUs8woCMBDmbpyjsHA4NTTpKxKY", + "cid": "QmVy9NJABhC8vcuRpntVBfh31qCjScS6oUqa7pjtwv7Ynz", "size": 352466 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_384r1_sha256": { "hash": "0x0f1f3b3c1c165770c02ec998c28533e60bd416054ea21462ab5972d38f6d4bc6", - "cid": "QmP5URHHgvDsfq9ban8j4giuWRbuyUJbYaZ9GeAxQMoM9h", + "cid": "QmYhoi3N1KsXY3QZq7ivDgADvHUMt2vxNnCnCwM7FrP8mB", "size": 266073 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_384r1_sha384": { "hash": "0x298b8657a1258b06eae0d4b22da842ac3d8c7c9e3310dcb8abc07f76c164289a", - "cid": "QmYaNid92Vbrqc6KtM8NdnRjYkwS1kiBAoFwMAg9BeSUdk", + "cid": "QmSNKoLFfnKMnYrk81mf4oBt7rxi3ozuW1wpnL8JY81FKA", "size": 395206 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_384r1_sha512": { "hash": "0x2e11a99e4554d057adc44c8cdb902d29b53d98732c7908d8e6737d8a8ef4f415", - "cid": "QmeGbwp43kVfyFBp77NvRrxwqJn4CCLCH9kRJR2DgRbr7q", + "cid": "QmQYpBScPrs2fRY69zoMDZpoUAXuCirzpNotuvpbHJtRme", "size": 395206 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_512r1_sha1": { "hash": "0x0337444c5e317fa62278aa5b98da81607ea49946ec35b590f197bca27cb27f45", - "cid": "QmRuYXoxCcRH5SUUJesUxEyHn5ETTouvJCsrY7Y4XcB1Pu", + "cid": "QmWfRsMJTq4BW4tb2kR5iLxchtSCuAAxGRVRsXTtWS6EaU", "size": 512329 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_512r1_sha256": { "hash": "0x18e832536e683ecb96e8ae882b3adf98e7c8aa329aa8e5ff4446f7ee406017c5", - "cid": "QmR1kDCexZjNm8uMpapnzea29Z2mK8N8rE3t7ko1QidKVi", + "cid": "QmSzwjqHPpFJihSnoYJWZZcmMAHfaki9iYHiBSQjXesuFS", "size": 425934 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_512r1_sha384": { "hash": "0x04d9007917904f29543f8498615f4f80d735831f94806f0544ab750859a2b4f5", - "cid": "QmS86NvcXoebkz7qPRiU59qwQrJmPFr8FVnKzT2BVpuPUE", + "cid": "QmVHEwB7scLC5WdWUEKqhpuga1gjKGosgLk8cv2Y5WJkKY", "size": 555076 }, "sig_check_dsc_tbs_700_ecdsa_brainpool_512r1_sha512": { "hash": "0x20eb69c195a95a877f4bd68067a153bfc3924c914a3252b5ddbd4848c6905677", - "cid": "QmW2RmSJoWzWsGoGw3wPLHBasTSkh3J2Uhnh3UT7BTZGtW", + "cid": "QmWDKdZCGKcbe96Gs1DdTTx6Dnj7ZhH41gjga7gN7hjx1d", "size": 555087 }, "sig_check_dsc_tbs_700_ecdsa_nist_p192_sha1": { "hash": "0x2e10ecee82fe5727786870bbad458516ffa797dc28993597b0e002c3add169c3", - "cid": "QmcorUY5Uc6vriFDzgBxb16Eg53wgsFJpc94QRL9Cz4SsF", + "cid": "QmZQPWozz3sbin4GDSTRpEsts2VZ1TJmtA7BzKTsFUzk5A", "size": 191050 }, "sig_check_dsc_tbs_700_ecdsa_nist_p192_sha256": { "hash": "0x01d97b200e8784f652aefde2f51bb35bd125031c4bb17b962b522aa969e99996", - "cid": "Qmb8PkVTxNHNj7Nm5vc7Stc8qKv3sSc88hYGn8MzUWRaZw", + "cid": "QmQDFgqLrufh4CZern9STp6vuFSZuD2cABpKVXfHGrydkj", "size": 104645 }, "sig_check_dsc_tbs_700_ecdsa_nist_p192_sha384": { "hash": "0x1833cdab74231861ebd74e0b19082801033e64e9d1936b6e2bccb25f9eb3ce8a", - "cid": "QmYFMp8SYUeM7YUx1K1BaTM1z4wDroZZW8iu4wvzzCHTkB", + "cid": "QmWmW2GHvvV29WAHZoZbn54VJZeiGBKL43Q1kAyifKrmvA", "size": 233770 }, "sig_check_dsc_tbs_700_ecdsa_nist_p192_sha512": { "hash": "0x06ccdbaee3aab117e43c33e01576d68dd44bb70638b310d45a12dadd7bd00db4", - "cid": "QmT4TwEV1D3CbwgwFRBMdqPPkqFw9WN1QYYGZbcbzvqpxy", + "cid": "QmWS4vjCnrGGXZx5daAn927vAMPNYp8sPdwM1jjQ6rUtPo", "size": 233770 }, "sig_check_dsc_tbs_700_ecdsa_nist_p224_sha1": { "hash": "0x03938f84fcdc1cd4607a5885ca8f87f94844281dd219609190cfcba19b9bed74", - "cid": "QmeHCSPakPaRrmuRhbFNpovPwZPeCPBNdo8Kcx52WzsoaR", + "cid": "QmcBsBRsiKpxRF2iGSDpMo7h4yh4GEXFYg2zAesg6wH91c", "size": 201293 }, "sig_check_dsc_tbs_700_ecdsa_nist_p224_sha256": { "hash": "0x106cd25fd2e65ac62b2f8bc163c6d5479d5a5e06e7be51989416928d5d734e78", - "cid": "QmWEK5D5vS8VrfL52Zt9kLJv9FHj3HR2wFey7dUEdzSnbz", + "cid": "QmaDj9TfDcE2DpdKZHmov2VGHaigN1DaaCRnNzwUpV2t6H", "size": 114888 }, "sig_check_dsc_tbs_700_ecdsa_nist_p224_sha384": { "hash": "0x18ed1dd49a34632912f425a05e0bfa95e29e0e8531fa9d43020b36a78f5cb8fc", - "cid": "QmYYbNGJZu28j86jQ5xRDgtPaX2d49ci6gyk9i2j7qMtgj", + "cid": "QmSZXPZNo4aN4HaDjhioGJ3MEG5nXWqNZXABUJnRcn8U4p", "size": 244716 }, "sig_check_dsc_tbs_700_ecdsa_nist_p224_sha512": { "hash": "0x03f22f6c4875f05fa676080b19f6abf0084b8556b4941567963af87dc70e06e5", - "cid": "QmVVPhzTiAaXGUtnnmfn2HuCr4asQkVKJZnXPmfZcei4EC", + "cid": "QmRJFzWgYZRuMPTMj55X5iNhr68W2cLEmQMCsMdqeBWayi", "size": 244716 }, "sig_check_dsc_tbs_700_ecdsa_nist_p256_sha1": { "hash": "0x254feeffa9148174a9fe6fc7cd595ae2f58ce72aa4d9afc6cc216cf426583e67", - "cid": "QmQFY5BsqSruv421KsosFeH8bPjhNU9AWqjid3n3BQ2sEm", + "cid": "QmXd5icrnhrUyPQBykeX795bUQAUkfPxJxnZxPw9GA7cC2", "size": 240656 }, "sig_check_dsc_tbs_700_ecdsa_nist_p256_sha256": { "hash": "0x0857840895b4b5c81100f622a2151afcbf37333c40d6769283c14695a2cc7fe3", - "cid": "QmVP4zbrgp7hMZgmiKUQixqCiFg3uGDUNLumLFdvc8qt1f", + "cid": "QmagkzAi6ExSxSTjsudjKoh4VE1WcaTCqntmZ4WoCNp5qY", "size": 154257 }, "sig_check_dsc_tbs_700_ecdsa_nist_p256_sha384": { "hash": "0x23515e16ef496df4283943c39cb316de41a49e27c7f05f18b3c1135513a6ed81", - "cid": "QmVCCraBHPwvryGqcPpWyCCZoxo1BFQ8ZsuWnMA9vwauHM", + "cid": "QmU7WDBrtGZsbdrt6KJrgoT9s5d6Xo5a4dqd4QWkSnyetQ", "size": 283381 }, "sig_check_dsc_tbs_700_ecdsa_nist_p256_sha512": { "hash": "0x274d82100b2d0eb44d0e9b4b38c47ce3df3bd97d9b1c6606bdc79efd7d81f4a9", - "cid": "QmQT3rnrpgicc5phE5nJxUCaUFf1fzfqnj2fStbaNj8fpP", + "cid": "QmcHJRuScQnzCmQGFmPKPAy7WrQwM3KEbYTxgxBPBwJmGo", "size": 283381 }, "sig_check_dsc_tbs_700_ecdsa_nist_p384_sha1": { "hash": "0x2f0390f0e5c8f20ba7e034c506313aadf119f12c522f0a2476cf596edff33811", - "cid": "QmUcKPjDpgWxfSQew34ejHEbbHoLmB15h6eBAynGWec5VA", + "cid": "QmawCiQ345CfFgeVxTSz48iWRkGDctieQg5LRHzKLDrkSX", "size": 352466 }, "sig_check_dsc_tbs_700_ecdsa_nist_p384_sha256": { "hash": "0x075a0013a86b3c5bfe23ec1d3e7f33e503e11c339d6616e76b6cec76cc9bd7e7", - "cid": "QmSd1uoNVcdAf9SnAmYikUZYuf4cLGeNrCUyMEKSrNYtcG", + "cid": "QmUDLNrTMESLnfDcTLAasZ52fXEuQSGSM7CiEA43wJdoSc", "size": 266073 }, "sig_check_dsc_tbs_700_ecdsa_nist_p384_sha384": { "hash": "0x1c6ba6ac734da3636024ac4f651db1342d4fbe8e270ef098672fc55377479819", - "cid": "QmV5spWDQF9JYgbhQVZynV3c9LRBVvdwdfLVpWg3vPgKCW", + "cid": "QmSJBCnhfxSjLcrWDf7fbqbWr3fnt9SLBQbqnWCwrhUoV8", "size": 395206 }, "sig_check_dsc_tbs_700_ecdsa_nist_p384_sha512": { "hash": "0x0e90729ad75e8ae48f6ede90c55665982fc843f477a30fb2e90cd92b78c43544", - "cid": "QmXBxvGNSsQfVtsT66nnpt9H7LhfFg3c1eBKPmjb53e5zj", + "cid": "QmPHKteDs29C4BMP9KBsZnbqoUXnUe3rPvTDcNuWo8JL4U", "size": 395206 }, "sig_check_dsc_tbs_700_ecdsa_nist_p521_sha1": { "hash": "0x20fc1064ada578e4cef6db951448e13ab3bcc2baec21398d5ca7bc4abf1e8f9c", - "cid": "QmevqNSSftJZ4BDP9WExatHk9amhKpNiq5t48a2Tv6PAoS", + "cid": "QmYZ9mgwAKMPuRCTVDQcyAuiB3mXEzSst6PyTn7YuKRfVJ", "size": 520491 }, "sig_check_dsc_tbs_700_ecdsa_nist_p521_sha256": { "hash": "0x01592be0ef4b7719a2e63d9874e86eebd4e200b34ef6db09dd173a9ce1ba3395", - "cid": "QmbD73HAabmoMxvMPn45kncTYRKDMS3xTcH9NiTxCZcGt2", + "cid": "QmZCJwWAE3nrK1X8mEAWMxNZGpkEPWf4t931XYRQt8CAuh", "size": 435475 }, "sig_check_dsc_tbs_700_ecdsa_nist_p521_sha384": { "hash": "0x063aa41d0d8790883476e0ec28d3efd284152364c404b2f6fca5fa92e4ca8615", - "cid": "QmUiGWfSzuX6bBMHhHjCQZudNbm5z9yPCeeKsuamoAjV6A", + "cid": "QmYWdEgmCpjakDgu5kTrPRNcNbxjzribLJgUm9DKPpFiWg", "size": 564616 }, "sig_check_dsc_tbs_700_ecdsa_nist_p521_sha512": { "hash": "0x12732f4466693bfb28675de56385372fa285f1dbe3e96aad335a0f1b3ccf85b6", - "cid": "QmagAD56Td9CSLALCtsMzdoTHUZbXiyRGpokF4mX1biMhf", + "cid": "QmcNcsXGbaxY3c2AFH4oTikExsUkxFugsZfM59uPF2SHZT", "size": 564627 }, "sig_check_dsc_tbs_700_rsa_pkcs_1024_sha1": { - "hash": "0x03b466f5af34724fb9058aa9694f8242b5e41f90d7ffee72cf99a71b84e9a58a", - "cid": "QmVQraimi9hmKNPYcRYg5kCBk9zKLtkLfvv532Kg1ASi5F", - "size": 170269 + "hash": "0x2b474d35f3eb46dfe1d76788a517ad839187cfd81e5311113c81c2579c733ade", + "cid": "QmP9eohDHZawRFaQpSUc6MJtrA735poKy9fUSyjeapNrxh", + "size": 173910 }, "sig_check_dsc_tbs_700_rsa_pkcs_1024_sha256": { - "hash": "0x22b0924fea5f808c7e2132afa80f225cacef25205d333a15fd97d6c361fde33b", - "cid": "QmQ3Dh7Xa7Gj5sohH3STDkWo8APKMMWFwWWwimGMDzDn5H", - "size": 83878 + "hash": "0x0099f0b706d9dce385c891149fde3b1e54897e519c57c0a6eb6928a179c42ed9", + "cid": "QmVn6rqd2BHyGgWFLC7dnuBk9WSMoLjidjzD66JrGxpMGw", + "size": 87519 }, "sig_check_dsc_tbs_700_rsa_pkcs_1024_sha384": { - "hash": "0x03c2cd6bf175cff41aa9a83366e37671f92c9ab9348118096c1e96c4e2e31634", - "cid": "QmYYgSHw9UXW2RhJ6JebhJnCmPhwz5dvvAMzLCkVh7CCuj", - "size": 213028 + "hash": "0x234e28b375fdd768501fa42280267197d46eb7de9c85dad6b26721b7dbac3574", + "cid": "QmPtDkhbYisQ88Uvq1vH5PqffkohJgQaPBW7VjQcdqMRBu", + "size": 216669 }, "sig_check_dsc_tbs_700_rsa_pkcs_2048_sha1": { - "hash": "0x055e1e9e5bf748648ac80b815e9cceeb9b849d783410fe685fa8bd1fcc8250fa", - "cid": "QmSe4moknzFPANatjXz9gJ7XytUXoj1vzXvksqZq7wjn18", - "size": 201426 + "hash": "0x0e55573a98d597b1c8a855a23f035a76f67172b91765d9bdfcb6d3e4e29b12aa", + "cid": "QmQH9V9Pqs9JEbCGatBUiFJEuCWjeTPnySg2M6BZKjeCtP", + "size": 214274 }, "sig_check_dsc_tbs_700_rsa_pkcs_2048_sha256": { - "hash": "0x0a80e4fc4541ad57b15a6117a79a3b53c264d70d9394c04bcec7106d6bb288f5", - "cid": "QmWLfoz9SNj1rzAVfbnR8dxankZPFELdAkSej22KPNMT4v", - "size": 115034 + "hash": "0x2c53e3cd833e3602ce3288db476abe51a7e0ec139d2a2c0a6b987b1fd2227aab", + "cid": "QmWpBFKoqYdUr1tK169Gpypf8C6eoA5KFoc98p5dCsqcQ7", + "size": 127882 }, "sig_check_dsc_tbs_700_rsa_pkcs_2048_sha384": { - "hash": "0x0dcb03d47175f2264b244b847c1ae33df599f1ef8b62d1dcf5ef828a655aa992", - "cid": "QmWDyiQymMp7biWE9MrVm36bVMWcQq9Yp3uv3izx8ohRq5", - "size": 244185 + "hash": "0x26ede3d9928b5ad2283388816b54e15679bee834c28ae878519d6e9830e517fe", + "cid": "QmXaL7AecuJq82ku8R2jQLtuLHwNBhCd5kdk7U5Q9NRMzf", + "size": 257033 }, "sig_check_dsc_tbs_700_rsa_pkcs_2048_sha512": { - "hash": "0x1fd4cd3869b9250b95b80995b97f1616a34d42b049889a3efa2470adf2686e18", - "cid": "QmQymarHSaf3PHJggtZVuG1AzgufToFzs8z2oUUz7ApCkp", - "size": 244205 + "hash": "0x11d588ceeae40c3e2f268d4601adad1ca7348ae926ec38003d0f2d65fcfe9ea2", + "cid": "QmSCDa7henE9z1XfCfKwwn8g7G8LzvevZeU6wfdav1XEzF", + "size": 257053 }, "sig_check_dsc_tbs_700_rsa_pkcs_3072_sha1": { - "hash": "0x1be40aec8c0ed5897418b4fc70cdcf598642a81ffcab44bbc1f9fded110868ca", - "cid": "QmdhNjXmVgQKHsDHqsUr6DMgh92etHiakEeENgh8CinWbj", - "size": 237489 + "hash": "0x27acbd1e77762ccb4b53ec0ed22b0f10e5a32ecadba6cd29cbbde44671a823c2", + "cid": "QmTJERS11PqKZ6X6UWzf9vVHjkMGq2GpT28SBRLQLmxJet", + "size": 263009 }, "sig_check_dsc_tbs_700_rsa_pkcs_3072_sha256": { - "hash": "0x291306486de80b86b195ed97b646066c0edfd59435ecafa09154eb175a9e517f", - "cid": "QmXPUw5ecC8oLxBPr625RDXgoDsDhbSZU24RjP7M3h4cCd", - "size": 151097 + "hash": "0x0a38c22865a656b0d781876eb5b81002e5d78644864ec1300b00014e2546099c", + "cid": "QmP2uG3tRNVq62U2cHkTBY41qZr3Kap8Uqv5y2HJDxi2XG", + "size": 176617 }, "sig_check_dsc_tbs_700_rsa_pkcs_3072_sha384": { - "hash": "0x248866a3aa68db849e6845be5e9bd0623db520b33947093b89706c2505b4bda5", - "cid": "QmbgmxsvZxR2WqtK75ecACG3MNvbKuMbNqG7st38fymWy3", - "size": 280247 + "hash": "0x11251dff58acae6021d6228890df7b79b517cec660063b15f9028d507607fb27", + "cid": "QmTcyxbSpNpycCiagnnr9dSwv2xN2LVbEAp9iuAKdxkgTL", + "size": 305767 }, "sig_check_dsc_tbs_700_rsa_pkcs_3072_sha512": { - "hash": "0x0d07e7cdc83dd8b397707acd52cee07a183f9353a920f40508b655b7d0fa7800", - "cid": "QmawkSMeR7bP3rkDzu48ZjWhDerNGDz6CB2kkYMMRahSJF", - "size": 280267 + "hash": "0x01bb7f944ca676b674b8aca4654f188cbe0288a56b5c5e3f32cab7a07859c8ee", + "cid": "QmYwHnaqBHhXVpU5GSTe1bDND6foY5Dv7xByGQrC3imwk5", + "size": 305787 }, "sig_check_dsc_tbs_700_rsa_pkcs_4096_sha1": { - "hash": "0x0b462d6335b7a0db5bac901b5acc54f78a4a3e094788d9de44660dca4b70bf3b", - "cid": "QmfFdoXDvc8KThsaDuSPRBLzABL6uf98FxtPiwvnMhBpNg", - "size": 286420 + "hash": "0x059e355f0ee23856c95f34cefac5258e49ca4348e3592188238e6f39fa13ea8e", + "cid": "QmQjFmYVYb9wX1AsuRoJKyrr5hkDXBmcufX65DsqQwHAsp", + "size": 331245 }, "sig_check_dsc_tbs_700_rsa_pkcs_4096_sha256": { - "hash": "0x2d8df7a54761b2f085804f6b46f9e4872288b153863c401ed7910931247f91e0", - "cid": "QmXATUKBziWDzCWTzgv7JhQQSLv5GLMTS4izXsi4iAQDTC", - "size": 200029 + "hash": "0x2564689ac3db3f70eaf5ccac8eb61939bf309f5c1729110dc8f0dfbc88bc5333", + "cid": "QmcjCb9gVeQfYcoV4PN3JHtuphwsF88TgvcWuaGzvSrNxs", + "size": 244854 }, "sig_check_dsc_tbs_700_rsa_pkcs_4096_sha384": { - "hash": "0x2e16265824dae28fd0d37fc919dbc532c080e31f84d937572626a1b9deb4d155", - "cid": "QmdBfiSAVkGJtqpKexz3Vic1RNPkpFmH4MsUX2mug727Zu", - "size": 329179 + "hash": "0x15fb89cc1baa666eeccda7dd410cf2648e9073d35397d921c421b8055659f9a1", + "cid": "QmeZanNcLg8bBA3JGXRLzY6m7tXyJCJoxcvJaX1QdX1KPQ", + "size": 374004 }, "sig_check_dsc_tbs_700_rsa_pkcs_4096_sha512": { - "hash": "0x05122f4b9e2a3ab245b58badac3500428f1f935254e5ae0ba4905b22d02a8011", - "cid": "QmSFaY56HA6nKpm3ASDngL8dBbevnhBrrqkeSsyJvf5Hsk", - "size": 329199 + "hash": "0x1c3ea6d52d8d9656e2b24c4f932b4f02e51d2464ed7c73ba33c8c4eb2d10bff1", + "cid": "QmabXPodF4gWX4AGkdCjbbrwhwJe9WFd4iSxNycjBXJXH4", + "size": 374024 }, "sig_check_dsc_tbs_700_rsa_pss_1024_sha1": { - "hash": "0x2bbffa0c7bd59d719fc8afa56bd4f1f478a9af3ca94942104b7854d271acd259", - "cid": "QmWn1kmjLGPDT94ETmEM6swTNKyJYQ5kmPFHunYEg2dKWt", - "size": 245492 + "hash": "0x098e5bc03e5086521fcc6d26b67f720a3d260ed9219622b5f4c9f79245a05b5c", + "cid": "QmNfaMNFGurnPQinw3cskcXsmWiVvwqyMFczDNMdHP8Li6", + "size": 249015 }, "sig_check_dsc_tbs_700_rsa_pss_1024_sha256": { - "hash": "0x2c24b134e2395ffb6ce51df047631fb521dbcd14f5bf9eb278c1541b21dd5655", - "cid": "QmeZgSS6FyCX7DvJ2CXJt6FkMtjEx1GQXdn7b7HhVYAJi2", - "size": 111488 + "hash": "0x1959e9c2a011a13152c29dad83ac4ad6e36325e98458f95b9349f043b1e108b9", + "cid": "QmesZrhYh5tEcyvV6sYDMArjgJEvGuLYBFowEUfHZSjctU", + "size": 114893 }, "sig_check_dsc_tbs_700_rsa_pss_1024_sha384": { - "hash": "0x026f5a940f4d3bf50b8e0d235cb5100f95fedaa0f6ffb2dafddc0783fd5724c1", - "cid": "QmR8mWXNk57p5hTSbBiFsipM1T44jGNVUwNNPdk2m3FFV6", - "size": 294670 + "hash": "0x03193eaf3faa751639407b5b535008293931c9dfd9c9e49470328d9475d62522", + "cid": "QmRtwst8PuFacWAY19Xr6JMg2wW7RkmnYpb23wJWCs6XU7", + "size": 297729 }, "sig_check_dsc_tbs_700_rsa_pss_2048_sha1": { - "hash": "0x2c3e6d010ac3b43db8a086d6870392cbc9d62fc81663c0976102fefccf3a15ee", - "cid": "QmaLYq7PgnJMyAajZgPEcvATJYB4EwsCVMrHSEVvrsicMd", - "size": 329131 + "hash": "0x262a60e2856466d15771bb4ade4a869257399e50208a0d443aa313f1728515a9", + "cid": "QmQy7bLDDBitHq4n1KdfUUq8SC2bzSM3ovYsK3WxY7n9pm", + "size": 341541 }, "sig_check_dsc_tbs_700_rsa_pss_2048_sha256": { - "hash": "0x20e3f2777631cb2682490637052dbc060ea5bc607ee4396134b954f7bb88255c", - "cid": "QmSLGC7HPiGmjECnrHLD5Uxi98ASVMtJPqGp5FQanJzjMt", - "size": 160796 + "hash": "0x17cd7c313dd81e309816368616f0704ca1e55b42643e401886cebb399e8b3c8d", + "cid": "QmT6Naw18n6dtiueCQ3Wpot2GgAnusrfFa5v5vMG8SEaxF", + "size": 173088 }, "sig_check_dsc_tbs_700_rsa_pss_2048_sha384": { - "hash": "0x273de8ef0bddb005293c44530eb0acd482575b90c93533aeaab71a3c90faf836", - "cid": "Qmf63pGhYbniwQhvyPeC8a8y4B2hERL8gXaHXQJdZFZrDM", - "size": 399762 + "hash": "0x24a16774116b2d02998d6e12634f4563e07cd5bc068c2a9b068916ae100a6072", + "cid": "QmY6vW3TYVq4jRMC7DgGVrB6AwEgznjdRL7KhqfZmaYnDz", + "size": 411690 }, "sig_check_dsc_tbs_700_rsa_pss_2048_sha512": { - "hash": "0x19aafee27c479c2e924ba6aafe2b5e806f1eef94aa72702632574f3216f487d2", - "cid": "QmaWUAsF6XnquEDVQJG6jNS2mSGkPsQLaN96iCkB2shj65", - "size": 379119 + "hash": "0x1ce8f73ef2ee8c7ef5064279258bf39282b87e7c5c6b8a78f45285524da78407", + "cid": "QmezUPa32vpnzMRiYpRxW3STiAAF7i8ncosUdsQsrQ6twa", + "size": 390919 }, "sig_check_dsc_tbs_700_rsa_pss_3072_sha1": { - "hash": "0x0258e7a57bcc4969d0331f93562174c0a345d905911675dd8081e08fa6c4248d", - "cid": "Qmbfq1fgeY9ftQhJpzCn7Xa4aKTPhnEMyoe7AvDkc7BjdP", - "size": 426096 + "hash": "0x0a9ae809e3e58a2c5b5a34a4179e52490aad736d1b5ecad7af41da911ef7b76f", + "cid": "Qmek2auRQtdRGkPQ8RVbfvVhnq23eUz52XjtF8Zhj8HZUV", + "size": 450858 }, "sig_check_dsc_tbs_700_rsa_pss_3072_sha256": { - "hash": "0x071390f9d31454d60e04ebc7037974d91430a80410f4f944565758f4a89da4ed", - "cid": "QmexJiDqAircHae6oUuyU757WDYGCfQSBSghz4Yinnv2kG", - "size": 215091 + "hash": "0x135b12d91dc4941e05b87942ec55d0ce6ee93b0d628b6db3f5ccda4cc373ea08", + "cid": "QmdQtMzac1Y6VeFWHuWctdrpw2x1C1TUU4xeAfG7PnR2s1", + "size": 239735 }, "sig_check_dsc_tbs_700_rsa_pss_3072_sha384": { - "hash": "0x0257bf967e6fa238661fe81a5211f5c43cc0b73961cc80f5e24428f9e3fbb0bb", - "cid": "QmTW1UTSMiBap74Sb3DHLDteJRrdwPSS5BxS2mUCV2EHFJ", - "size": 485762 + "hash": "0x1baf7e5c9c8376f9ca6c5e06e0ecafa35e97e14c9e978e4f55d035eafc83f91a", + "cid": "QmWB3AP6tVVTzNknjtMtuYnjdmaRRWXd2h7kbCsexPmuz9", + "size": 510041 }, "sig_check_dsc_tbs_700_rsa_pss_3072_sha512": { - "hash": "0x1edfb3f127d691e7c5739872cf3cc4c8101640de2d4d3aaf6233678cbfcbcbcc", - "cid": "QmZesJFvXtiJjX1xnMcnz5apxupPoF8f8cyX9X9RzqnqGC", - "size": 463715 + "hash": "0x017ad44df660f91f5fb0e6813f597743afa778199446a4f42d905cf5c448b66f", + "cid": "QmYSE6udthue97r12paLCHfpqGaY3Q5M7TaGxq4d8AbAPr", + "size": 487860 }, "sig_check_dsc_tbs_700_rsa_pss_4096_sha1": { - "hash": "0x293ae75aac322255ee70f963a33e733971ff7bd5ae983a63d3738e4d3780d2f3", - "cid": "QmfCPXRh8zEe2MMhBRLRrMu5a6RZ99wtaTRBBxRgfwSagH", - "size": 527512 + "hash": "0x0cf3f635b8d3d08683e8ac02df013ab2d9337d96e028ed43e705f554fbe27399", + "cid": "Qma9nJZBDBPRs3x4vc1hX5iYNcQu7mgXvfW72FBBCxhA5Z", + "size": 571259 }, "sig_check_dsc_tbs_700_rsa_pss_4096_sha256": { - "hash": "0x1b74dfccba66bdd053b86ba0562970b1be4bbb291f170cd17b575fe78d46abe1", - "cid": "QmWsEKFwCWribkVcB2BJoTc9QuGng8Ld7xjFRqe4GLNVFf", - "size": 282257 + "hash": "0x1e8202e9d6c4ba3751597ccec91f28af4ad3d2aa7fbfbc1b9c1e3f9ebfda884f", + "cid": "QmSVHuMB657adsjhE2SbX4GneG4Avf58ESeHmkdEzB1JCb", + "size": 325886 }, "sig_check_dsc_tbs_700_rsa_pss_4096_sha384": { - "hash": "0x0c460824c323efb4ab2faddc2be99f566701de01fe123900b1ba609b119cd9cd", - "cid": "QmTRmPasGNSYXbbnnGiMAcorqMoe7BPHrstMfyVW72YFYZ", - "size": 608608 + "hash": "0x23ae014ebd1ed0ed3973f0776ffc1ac25c8301ae578a8dd7a1435298c33d70cd", + "cid": "QmRMd5y2hY4sG5jqZEDC4qRFtJQwHdBevPm9Q2NzeTDf91", + "size": 651872 }, "sig_check_dsc_tbs_700_rsa_pss_4096_sha512": { - "hash": "0x28b6405b5d02d00d68807e765649bb7ee155e2af44d26f5704f8378a5ac70638", - "cid": "QmRpAcR9JBZbaY7msCDwUR1GgsCApR5tELn9kmfTgDCrV8", - "size": 561174 + "hash": "0x20414ee441738dc7322626f25bf9f382125a3bd8175f1ae4b974c9a082835e8a", + "cid": "QmVjFvkBnpbG4aGxqssgqSME2TEke1kqybGYN6i3DGTxu7", + "size": 604305 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_192r1_sha1": { - "hash": "0x178674a71737adc5a74f6e8ce667fc1c673349a2c37883746b3e3460319e47af", - "cid": "QmcF2R7Caemj7RZbXwGw6KvLPf8PXj7zkwR9dcMxct1LA2", - "size": 119664 + "hash": "0x1f721487293e649697be508498a6fb116e0ffed85804529792838dcf06555d19", + "cid": "QmXEXeXgcT1kza7NMCZpaKWgySMxVYCn5UqHp7fE3y6wsJ", + "size": 119662 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_192r1_sha256": { - "hash": "0x015e1af3de4bbbe701880cb170708b41027dea2a6fc3266787c61c4843048dc9", - "cid": "QmPCzxHKo67rpatGY1hayW8s7frJR7LgCtsDXGvPLbNAi9", - "size": 82265 + "hash": "0x2fe480bc05aa45e42b443561dd1ac32082cbfdadca94bd712cbb6828d65b4240", + "cid": "Qmewike4YLFVVYzDuBTGZXYVKa7QucbqfGVfTH7WuVkag5", + "size": 82263 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_192r1_sha384": { - "hash": "0x0358e1ee860dfe39c9c7a4743c62726f9e976071dc4d79af7e699695749c650c", - "cid": "QmNn6GrxEqWqxeaoQWprUAUeWdNzCLy9CATwYatZQSxbuK", - "size": 150512 + "hash": "0x05435cec060b8503af09ccf82c2d1f77e16c30cf70861a40a655427b7f6ed00e", + "cid": "QmZgqZSrvGSnYKENzitqMS1gBDJ8NzH7WLbUNJ3KXvp5AD", + "size": 150510 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_192r1_sha512": { - "hash": "0x0b8ceb680141e66c0332a2e09257c7a533a73ce4aac1ac7fad4ab8e2056cbe36", - "cid": "QmYGTRWKYXRu6RWj4znmW9VEGkQike8rG411TuCmc7Gth4", - "size": 150512 + "hash": "0x2e26aace45a25958c0d0986cab6499d6c2bfe209223e69da13ae41de5c91182c", + "cid": "QmX91Tg1Zv33C954PWHhtpRkq7oXkWw9GYvMkzm7N4Xj8Q", + "size": 150510 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_224r1_sha1": { - "hash": "0x17524c7cd1cde7dec5fcaa063dcef8c7640bd96a7c66cb5e4a406824446b8b88", - "cid": "QmeYwqM4ZapWcDs3i9wt7hbRGZpyedFpuH1mRoJqFzNBat", - "size": 129980 + "hash": "0x08b7a5dd2e1ad3e3dd149ce48428da8278a6181530c9b936e3a924cd00cda123", + "cid": "QmP2qa4viTReX79PiGeKdWPVSBYE7SazcUgveN3yGkaNk4", + "size": 129978 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_224r1_sha256": { - "hash": "0x20e54198b86878bb22c202b3190f36c1acc8ab5b3dc8a172d09be95e893afd70", - "cid": "QmV8YzgF6QxuwGdjXfwDHSvtR45QRvcwAWsGJVGpziipvt", - "size": 92581 + "hash": "0x29b25cfdf165cc5bc8afa75ed3c7306670f85aa344efc642306bc80e56d03879", + "cid": "QmcQpRKEGwnQpQwP8bZqpKQCqttBi1rotF3s1uLpuPmsRf", + "size": 92579 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_224r1_sha384": { - "hash": "0x0fe8906fa61f749f96d113497a7b731ef7dadf443d9c4e7ca86354e3d5e2700a", - "cid": "QmZDUQsiVCropTGNjto3QqQ6vsBtN2eNGGBreAZLpkiZBJ", - "size": 161533 + "hash": "0x19b77b7759b8d4f19e07ac9c70787a0e166f34d272c98b4870960609e190851f", + "cid": "QmP5Cq8ReeWSXrjTATJF6ziBMx6U9iXerto166XJaXZEdg", + "size": 161531 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_224r1_sha512": { - "hash": "0x1aa7cb1da3f03c0aeadbadd66cbf5af5977d301790f0ef6ec401364c890b91ae", - "cid": "QmX1GDQD45BXBP3C8jxDFC7T31sVJo4CvJBvbRvgBwNReQ", - "size": 161533 + "hash": "0x2d2bf4fa77c128a2f00d6b7f76e4050004b8acfed9bf0b48b29b548656e3f791", + "cid": "Qmb4XHENQJCG9k7Vd2hkV7s1jcnURjDzuCtjiByzmFA7Nh", + "size": 161531 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_256r1_sha1": { - "hash": "0x08a00ff2669d6fbd3413702089f4c0267dc1ef51460628fa9c41787615675c31", - "cid": "QmZjog2hL5XMpG5VSnLcyowAjHBkYHYdjau5V6GWqTvnV6", - "size": 169344 + "hash": "0x04950970340a24ec51c1c5ada8beabee980db609f139591e171ebe4d4588f4ce", + "cid": "QmcZD49bTcpZ3hxhd5j2jXU9tMndF8hidnD6DEx8UxpDNE", + "size": 169342 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_256r1_sha256": { - "hash": "0x0c38d7161abceecb79aeb93c7e7cc58aa96b74bf5cf245b439f9060589765b25", - "cid": "Qmau6hJczLoq6g9kyhYMshZkhX5Saw1umgk7bc4VesTqMp", - "size": 131952 + "hash": "0x21ea1bb914522f428606046caca323e5a6c8f389a466511207d2c2968d1d3014", + "cid": "QmPsQ8q8t9SX54pRP5pYj4PECYnbaToeZg5LKdwqJKuYsU", + "size": 131950 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_256r1_sha384": { - "hash": "0x2dbf708ea9355435ed8dba3cc92d46c7ff871a6943b412752f25d8b82e527a59", - "cid": "QmRAmv9c3ZLSzWkMGasKLxS1HPp3jsEeWMY7qw9LSW7FuX", - "size": 200199 + "hash": "0x18f4b7107cdb7f9d1113bf48956b32a4c7a6be7b25728fddb292c1b224d784ea", + "cid": "QmVCw3tsQgU1Ue7vktBAqRQfhD9gGBJwh6c6qRm7NmQkFa", + "size": 200197 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_256r1_sha512": { - "hash": "0x24c3ccdc252c2c1c1aa3744ae8af08df7e1d98625fea968e4aed1d1fece324b3", - "cid": "Qme1tUkWb8t5yfBYaLUTkpz2JaghkEtoWgLR2LVngVA1wK", - "size": 200199 + "hash": "0x19e9408d8880ea5c207968397355182fb7ed9898bb1a66014ae00fc102c349de", + "cid": "Qmed5FQi2ktsY6GbdpBMt9f2jXeLDmFcvQXJW3h8ognYyG", + "size": 200197 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_384r1_sha1": { - "hash": "0x191b08a39d7c34dfb8293486f0986f79be65a604611caaf8578027f610ccbf94", - "cid": "QmUXobgD6L45W7QjQLxNU6YyewMCootMgDk8qDmLAASBZn", - "size": 281523 + "hash": "0x1a5026942578515a0e6246cec39a788e7faf6c98e7b4b6809f2b27e1cf6377cb", + "cid": "QmaGf3LzevmP48HS3UYVMvQXPVKreTWxcVFF4eE6CyZbDi", + "size": 281521 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_384r1_sha256": { - "hash": "0x0cbe870c34abcb980d7ffa2a16c7c9ca1996890a9035a5da1743756be4880853", - "cid": "QmZdxHheYawHj5iuF6zVpmr5LrWaNLt8wVS9icKDPZUqJF", - "size": 244136 + "hash": "0x224bfdc898a716e35f8b2706862d2bb1e9ae675d24721160044ecb5e31740678", + "cid": "QmY8uCwx1xTUuWw2ifSiC68CfgvQ81LF4TCsPXv1aFZdvz", + "size": 244134 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_384r1_sha384": { - "hash": "0x215366a3bce23510a61bec38f81b1c1b585b655e45d6c41a70ae0438ae42a154", - "cid": "QmbbaxE43JvMDUAbEaGygXrLmvCs9w2FSqLjXpi7Ff4Fgr", - "size": 312392 + "hash": "0x248f90739fe79cdc5d67f275ea8bac2273e309004738f5f8a7b287c425b34d94", + "cid": "QmRz6DgM55Q3Tnm8GZRsF4PXcBNkDK8DACnynv2WrDDEUj", + "size": 312390 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_384r1_sha512": { - "hash": "0x0c8a6966caf446bf31d7df547a68ca79080c88cfcaef1a829f5f584cbcf7ca40", - "cid": "QmRDF8dwdcmtb6Lqbakru9QoLNTD2dk7MHdPNjpnrmjZxg", - "size": 312392 + "hash": "0x129f29a327b6a9a6f4647a91be3918eb1c4d383d1dcdcabd175c06f1967d747c", + "cid": "QmXRswu4ci53JSeydGrzGbouS1i6zSQhQnmvmwHKjfC7BT", + "size": 312390 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_512r1_sha1": { - "hash": "0x1a56d7a4da3fb325f3b3141094bf66ebcbb7f053ffe572c88253386b251cb83f", - "cid": "QmbhydNmXYuiYLgCA5Wf8EaGa6dhNyvDPhfGLokbE7TgaC", - "size": 441681 + "hash": "0x0dbab18c2c177a87223c3c5ef53f585ab66c2546d4a982d1990c86208722d89c", + "cid": "QmcMqqbszVX4oygNynxdvgQVftLR1JyHanbskcvSfLM6Ck", + "size": 441679 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_512r1_sha256": { - "hash": "0x02a4a7cda874e0ca8e0887f46d1f708286ecf8ca9392dcf66970b55364944fb2", - "cid": "QmNQUeshuLxSjnJnCW44Za2PMNvwUmsSjd5J3V14e18dyg", - "size": 404293 + "hash": "0x2f3f43f55564ee9c5cc43ec2374d0bf002fe94c68a5eae557d75b2acdee76f32", + "cid": "QmQjSPXNQsD3gqU1AzKnu5TGXAgV64NnURhTgcjtNeVLJR", + "size": 404291 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_512r1_sha384": { - "hash": "0x0862ea8a4ef694991dc2190073b96cac8a2b3b597933b86ffbd97cdbf091864e", - "cid": "QmaysJh6wWJKHnnrAM2wZbGj1VW6nh7hNDLHBTsqMtFDwB", - "size": 472558 + "hash": "0x118b56bb8f1dac5c9dcca4ee9ba4f757f5cb887fe25b04638439695e9442e9cf", + "cid": "QmNipwPSjsD5i43nJpP4uWw6d3XSjFzUfvozjXqMTmb4Bc", + "size": 472556 }, "sig_check_id_data_tbs_1000_ecdsa_brainpool_512r1_sha512": { - "hash": "0x24529279a1412bff9b54288cfbede9878cdca2364bc72f614b08ab9d11063cb4", - "cid": "QmR1QH6s6kp3udn8nhhAii67v2zmibquVZwRbWUaVNuk8u", - "size": 472568 + "hash": "0x07e1041c1a6fdb594777ba1aa54f56ab853341728afeea157da899cdc08bc811", + "cid": "QmaAmw8wXD29ssx8LiR8cEgz93kW1FR5khrBeRskjCTjiY", + "size": 472566 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p192_sha1": { - "hash": "0x2c3ee1eb48f90130e3713945b7838a30905df3ad7bec3d6b5d0e3305a453ff69", - "cid": "QmfPC51sXkroTCYQ95NoSVB8grPgnsbXoUv3X5iZafo9QF", - "size": 119664 + "hash": "0x0a93a23cf70425dbce3b42c291c872cfc6e18428f68f07d10d892744ef108f71", + "cid": "QmT4Q9AXmKmV8FWsTEQM2GCsWywqHRP5oceGrTfCxibkwm", + "size": 119662 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p192_sha256": { - "hash": "0x259494ca607d837dd1dc6392c990215f032e7d70674d0d43ea6c82a8c39a011f", - "cid": "Qma2i9cUgZP9wXuU4x8GQSyS9WbELoUMJ4ut7JtchrzdAP", - "size": 82265 + "hash": "0x2247791ea4b2916241eba0a316062272c9d1166471d0b9bdc898fb0d55bd36a2", + "cid": "Qma4pXrkRtJnAomhe4aqjXJjWQ4aAG7DBTboQoLVJRcm3Z", + "size": 82263 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p192_sha384": { - "hash": "0x0a1b1756162786a4dba6114657444089cbbb6b71deb294bee266b0779f54bbd2", - "cid": "QmT3jaz8R1qiKqgkGbqHFVwPZGy9pRoGCsomU89KBvMfiF", - "size": 150512 + "hash": "0x1ddd5fd96786d21c34ba4b2b83ecd74fb7e1943707f2f37bdda57a8dcda5e84e", + "cid": "QmczVwz3FHyhvhpqZQfsDejRM8g6ygeEP25tLMxFXAeHor", + "size": 150510 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p192_sha512": { - "hash": "0x0ca877c8eae686c529830fd42b3a19fc248cc0e79616906c09c6e3de99f09c77", - "cid": "QmPZaVKHkDMX4EnYQsdy8qqCwF8xnN7SS5Mxztv7vHk8ah", - "size": 150512 + "hash": "0x2f02e3dd7c69fa4d3f0201b7e116e44687a59baf195efa9c7918ff24575ede70", + "cid": "QmUWAST8Ym9MT536Akys9fDvJW1Snn3zwT91m8XxTmTfwc", + "size": 150510 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p224_sha1": { - "hash": "0x0685de446d319faa64a0ec221c9e940dd83be301c0e182ca48126de894b40b3c", - "cid": "QmYvzx9pjUH379eZnnKpd5CNyNoaPdEhp1mzsVuHaZEf6H", - "size": 129980 + "hash": "0x118c2411a761c7375bd628b4e6525c935e27289eda0e79809ee8f0465d493825", + "cid": "Qmf3b5U4DUUyTHVzp38e3ECCy2VVEhopAKihAax89AUBnP", + "size": 129978 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p224_sha224": { - "hash": "0x14d6a76fc1ce43aa8f170dd8f2ed21664474e0ef00637d2de4d4405a9c7de02a", - "cid": "QmQ2QPicH7pPrpYsmXf8jrL64HtuPV7bBEJQ5DRtJdXHSD", - "size": 92581 + "hash": "0x1b84c4ed1dae0f6bf50265e04b3b2f0e3b1b6bea8b3b0b01df0b81c309c53f22", + "cid": "QmcDohasfRR8RcHncEnp4GVvS6bWvLUCZ9cpM6Wx4MbZEg", + "size": 92579 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p224_sha256": { - "hash": "0x1a1f3eccda66666cecaf3eac24069954c9be5c03bc90c99cd628c9e35fb921e6", - "cid": "QmSyAuHmGwYtw6x9BgWqosRBuVHoErheaAUG3TUZsqd6bx", - "size": 92581 + "hash": "0x2a610690accddb53281defcc34f5f3bab749ad9317e907e40151ae7190925fab", + "cid": "QmR3qvbH6heMyZDMhVbmBpY4cZRa9gWr4SZgNUJ7owXDgT", + "size": 92579 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p224_sha384": { - "hash": "0x2249f86f858b9d4592f825f9fe4e8131db19708cd316c3a056144cd7e7b36606", - "cid": "QmRWeeh7hCA1fnULeibn2uRzqG4suCXDJQz3SeXvTrVtgD", - "size": 161533 + "hash": "0x03863dfda893679579bc23a8a1035dc815b36d700c92a86f4ce2f469572c598d", + "cid": "QmT56LrJ5uzw5bCrojP8fXARG2SyB1Jkoa9PVXLEp4yPZ6", + "size": 161531 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p224_sha512": { - "hash": "0x1c14b58fd5b10d2c4dfc6db3a2ed344d0939a273150edc1e065a35fddac60183", - "cid": "QmVG4hbDd3eF5mbhut6SYof45sjQevo9tw4pQYnCrg4pNB", - "size": 161533 + "hash": "0x2611531eea8378d084410a213e8d972616130ea48c7d572c0d95f02017b8ceaf", + "cid": "QmeCP3zNv6AvZygsccXz8f6DUcL5aHo8A2eNT55z6nwsfS", + "size": 161531 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p256_sha1": { - "hash": "0x26e2fae9644f673f10b6f4273a5ffe5e6ffef9db333dc9d48ee44599020f7130", - "cid": "QmdWaApGVSBMogJcTSFfvva9n7wAtaB1vHwWgSh2cFyrmS", - "size": 169344 + "hash": "0x19e32ec5e8b76405ccab36f8c4d64b9af743055d9a47436fcb38e9e5d5d66feb", + "cid": "QmeAmpMkZaBj8mBisJVdC8vv1A6NnZdeg2156zvbhhMtxq", + "size": 169342 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p256_sha256": { - "hash": "0x231a9bb61ea0de8be3f0674ce7daaaafeb5ba4fbfb57d527c666c88891068bce", - "cid": "QmZvivc9iFdNi9YaHHiZk9e5Sxs7fDuAtTxNavWmJXecsg", - "size": 131952 + "hash": "0x1e11a548aa95ee12ac9a9e7fcff7474b2bc29a4c32f061f1c2d28b12d059f552", + "cid": "QmcdYFuVpz4xxt365Rj8tBKEkURZsMDCa5gaJZ1VQ2PUpA", + "size": 131950 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p256_sha384": { - "hash": "0x027aafd4376b04540d3458d06bdc7325a44fdd0b2a4a3e85d32ff7a1983d3fd1", - "cid": "QmSDB3366DwZjqMQPzoM1kngH3iFspsFuuxgXvQReSJJC6", - "size": 200199 + "hash": "0x0e33d8fb62b8466b3bf45b8faf43588582999c596e86ad5c509427ef63e7e082", + "cid": "QmQVTavcREFsSgpoaiVUQjUX7U8toTfrhUrWqnJXb2JREY", + "size": 200197 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p256_sha512": { - "hash": "0x25a1583a49d046112346daa23ca306d65083d6211dae6d32663bde192323cf98", - "cid": "QmQsXKGL726qv8R2kyvNA815wMc7TeqLh3qmnVRLPYZjWq", - "size": 200199 + "hash": "0x2a811340de52c5e1d14de3a8f17bb4fe76d9f3c7b9ec70bf188c30a34116377d", + "cid": "QmeZtj4Jz4CS1NpxRyr4c2X4CHShRAdeNhrRYdGZvWEJQd", + "size": 200197 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p384_sha1": { - "hash": "0x11153d8ff9f529149be0a749336fef6f48abd1bd215ecae82681c8fbe96a90ee", - "cid": "QmXFuFfbKpDWrPBfMgz7mAHan7FvTPqAgMRZM1evEeQmW1", - "size": 281523 + "hash": "0x00f2aae55d9b8948d5a20d12876b4938599a1da2605d2ac2a788a25764a557bc", + "cid": "Qmd28wqFx79th5ZynU5fXUnyzEYogi3gdMqdNzoisqwgsm", + "size": 281521 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p384_sha256": { - "hash": "0x18a0f88998e55e06154583ffdfc26451dd4bfa4756ac227fa46dad256aef1209", - "cid": "QmRF5VqEwZNTMTX2MRsz45GNenKxFNRCtVPwdrVQLM8iZe", - "size": 244136 + "hash": "0x1de0efc3aad54b3f96e5e0007746d6956664b3c2cbff69711f44581f78b5d213", + "cid": "QmdxngP2XftsBHCBVUUVrgR96k5VjRLQCgFVt4RZRiZaE1", + "size": 244134 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p384_sha384": { - "hash": "0x2e718ecd58f27025982feb1f365e3ed2b05fc22c5d35de16e47cc0016cb5b481", - "cid": "QmTytKWVKNiQXXZt2kpPMPBCJ96F4ykB3P5REUhfuSoSDS", - "size": 312392 + "hash": "0x2866a46c68329998bc2a7a1eb98409e4d15caced9fcdcfec6a7ca46414a5a34b", + "cid": "QmZRHTHxT2XYMRX3V9gYSezVyMFuW88qJ2jhF44RhJb1X7", + "size": 312390 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p384_sha512": { - "hash": "0x1f385b6fa0ea98e45a02bcc25c883f4cd44f9f288c96dd27a269e26a6921a075", - "cid": "QmW4K2webxkVWjEtG1voSCepYrtC38xsev94GEHMUXgfcc", - "size": 312392 + "hash": "0x1f1d1503cf7791ee26b9ad29f33c57178f97237e378e7819d9c69c15f3ee6917", + "cid": "QmNmhsSU2jxf9ZKG4hd8DHjqSW3DC7zKXHJx2sBwCCebc9", + "size": 312390 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p521_sha1": { - "hash": "0x22370cf73c2db00ea277fa26d4d7b96b5969445656371884ebfe76beb9d1b506", - "cid": "QmXh21FgNcvDgVveeMALyyDTX16ZGJFv4DaMhskhtANTep", - "size": 449881 + "hash": "0x27c021bc921bae431dd26735d807d32748a242ca899c0b1aaefa1bfefb0b888e", + "cid": "QmbkswH5hArCt6B69iq7TzwCLBLzYytN7KjoKb4cu4Kk5D", + "size": 449879 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p521_sha256": { - "hash": "0x1da07297907f2c52474dd81e12ea81e22a61655dff1a8d0b7680b5a1aba2548b", - "cid": "QmU3923bq1vy6PxYU51p6vAgvuVwAeNZiq4R8am9BvK78S", - "size": 413871 + "hash": "0x043ec533a3f405c83b659772d7d9c23a626eda847e3565df8693ad5e0f12675b", + "cid": "QmUbLerSnVxDdt3Ra3VtJQpm3sZWFYYNuvNaE8vWkiaVvF", + "size": 413869 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p521_sha384": { - "hash": "0x10f7fe46feaa04f72fa3c127ea606b226ec45f28f0cff3c4910f7e1fd8396797", - "cid": "QmQWCxjo8GVPi8qbfN9Lk3NVjQKL3BH1kHj24TK1ETMZyP", - "size": 482136 + "hash": "0x299ff18f0088a1c29a805eb9385dbe2fb55881a5ee633977b2f78e7f19951682", + "cid": "QmYcxb6MWw6UbsmJedB5HwbBWDEd2J2ta1PU5SVix69ZLB", + "size": 482134 }, "sig_check_id_data_tbs_1000_ecdsa_nist_p521_sha512": { - "hash": "0x0710b61de1c54d668efb6e14cc4e1743fdc9d29c8f80b4a8e3a528ad91085696", - "cid": "QmPDaPgkrduTrdYg7jbHVe9xVgtYHXG28uDRfgmPLDiUQ9", - "size": 482146 + "hash": "0x02f0e0699b6cbab5730b65e7ef8f08a4649360b9f19238fa9009481cc60cc2a5", + "cid": "QmfEAw1frL1pw9L81iMqq6vZPReMF69HkgJ4Vs7KrLNccs", + "size": 482144 }, "sig_check_id_data_tbs_1000_rsa_pkcs_1024_sha1": { - "hash": "0x06cf927ce63e92885f092fbc3fa881583bc7a3c174dd549da1cc5f6bc2db872c", - "cid": "QmceY3ucMrMfGj5Ebgwdx1THtTVVtFju974SB7TyefzoVH", - "size": 100457 + "hash": "0x12948f528586659f904db5e961c3554bc96d45fbb594aa215859276c8afcb043", + "cid": "QmfChoT1Y8D7F9MSvUx9rsucWafUpttsmMwNxgiya2Cjj9", + "size": 104096 }, "sig_check_id_data_tbs_1000_rsa_pkcs_1024_sha256": { - "hash": "0x01afd9508b3fac36e1abf1718a4d426dc79dd4b5ccd464047fe56cc54b249f40", - "cid": "QmdzGPJLFmmhSArnEhaUmBBWHq4kArorLaV4mTyYqwbmb1", - "size": 63072 + "hash": "0x0a465e9f199352159da7939083d2b3d3407fd590810d95850439c80465fda6a7", + "cid": "QmeSG5NYh7z927z3gW7NY55bcpcFschbbWKexBk68LnqHM", + "size": 66711 }, "sig_check_id_data_tbs_1000_rsa_pkcs_1024_sha384": { - "hash": "0x19414dbf216ecb31326a7f0fac6e0c3c482f04c0ab2969c45972f0992d14d7df", - "cid": "QmUFCSGfDPBBsUrRRuYdYex2gDz8oziBsxJVzyDSHjWp6H", - "size": 131346 + "hash": "0x025192e73773f854100a444e495c3cccf7d8c4f67ddc52f14b85e48cb1bc00be", + "cid": "QmU6Sot267DBF6UbRJUt8TbwhGwmFQQGwuYmv2ourrY7jJ", + "size": 134985 }, "sig_check_id_data_tbs_1000_rsa_pkcs_2048_sha1": { - "hash": "0x0de22dc3c478fe2cba000da06eca56b2bc7af4261db7a171e37693d09a0097e3", - "cid": "Qmbfj9GR8NRdVyZH6Dfyau7SZCE5N3yJamiJ5egxiNy5Qj", - "size": 133557 + "hash": "0x1fe5b306ea8c612fb359415fc9f1f5e8c12d6951b3efe6b9b092c74964053f0d", + "cid": "QmYXaiTAPwtyDNGyFStVt9ymjbgjFGR29W9UmgcdCBE1ya", + "size": 146403 }, "sig_check_id_data_tbs_1000_rsa_pkcs_2048_sha256": { - "hash": "0x0a58857d2a07a305b0df1aebb0bb8c25764692037e24e288c924ccbe3fd9869f", - "cid": "QmRY9UVcFVrAYDatvaGZgebMuEKgZS57kHpkacYpPRrjKL", - "size": 96171 + "hash": "0x23fe15128333f9cb6f730b3f0a6b0e81f87910c6073c52cd13c16d3eb1162e67", + "cid": "QmYuTSFL9ERmevvuLJw3N9aUU71sHdwHyGAVmM8Ftke8FS", + "size": 109017 }, "sig_check_id_data_tbs_1000_rsa_pkcs_2048_sha384": { - "hash": "0x2db45b3e7a3cce2cd3115290785a8a1f1a4e6715a2f309550a3965f2f0766d71", - "cid": "QmaYk5mUEtYkgsYp1nZnq6aL5sM95cWSAnLZnC8efgpL53", - "size": 164445 + "hash": "0x10c983400ad94fd9b133ba4b25e4029209aed6bb8c572f18485ee8f7ed04fc39", + "cid": "QmWCo2Y3uTRo8xjMc2mAVtUy3Sp3JmxmK8SLfdFbLR9cJH", + "size": 177291 }, "sig_check_id_data_tbs_1000_rsa_pkcs_2048_sha512": { - "hash": "0x169060209e1f13e969065dba147658e29b85845a79b9c1343f196791e26aa811", - "cid": "QmZvDKbKwVGYMu1jqsNKntYzd1a37PAN3vLAu7mZYVrWLn", - "size": 164465 + "hash": "0x06ffba56e13902200ed940bb440fb2cf1bb0ef327d290585a1d0d067ae1f10b5", + "cid": "Qmc9LzzZyfbatsnrzrn1MzU4W7EFphaRk27EpUYq2PdQQ4", + "size": 177311 }, "sig_check_id_data_tbs_1000_rsa_pkcs_3072_sha1": { - "hash": "0x07d7157be6a85812fb171d303bbcee595f908390effc8e433a583556b68b7638", - "cid": "Qme1fha7sjDFxhuT7aczLwZMFvXNcAdDqYEwnwzpDyGSKF", - "size": 171708 + "hash": "0x09ee4f12639f5b378d2944017ba51db24177de5748106df2e97609b06c635f42", + "cid": "QmRLA42ybUmieo1oxc5sLCcQsScAUDs6HTknu8VeGT1KGe", + "size": 197226 }, "sig_check_id_data_tbs_1000_rsa_pkcs_3072_sha256": { - "hash": "0x2c12a140d93c40349bbf46c9a0b53c835e546eeb5f7d0a1ffc34aeda3accb2b9", - "cid": "QmZ3sTFZXtJ82mn9iVNzTigaTdMHtk6EQPM4tuzxFCxMz6", - "size": 134322 + "hash": "0x17064a3e6b504a99985228a0bd5dbb99f8602430e40e35ffa4fb36035815c6bd", + "cid": "QmVU63YXH5hFkZhbHDNq5PtgqKmwvJA4knSAr2vj2V6Eyf", + "size": 159840 }, "sig_check_id_data_tbs_1000_rsa_pkcs_3072_sha384": { - "hash": "0x1500cb43a95f1ab77e101f01c4b59694a1a7ccf56161d877d0f167b49d5a32fd", - "cid": "QmT7nBiR72kNgdbKbAMvLhk28pdBt5Sd8LR9y4poexfp8W", - "size": 202596 + "hash": "0x05957092874cdda73666b2a504503b4fdb32be01a537e322df87ecf3a1ccfe68", + "cid": "QmPAAbuZsyKjKSKopmx4PGgAp9nWJMzxDYAyfuT4j9WEfU", + "size": 228114 }, "sig_check_id_data_tbs_1000_rsa_pkcs_3072_sha512": { - "hash": "0x07703587aca94d94bdf5e1f651fdc340ea1f44d7e37cbe0ab35c01ab8635fcc1", - "cid": "QmSCLQmii4E4cku37kESuhK3nauJrnKUvMkg8fqrJbSyzT", - "size": 202616 + "hash": "0x1f12cafc91363736b41ad869b77f29f89b5d11a61836776a8113094e6c3c7cdc", + "cid": "QmQ3MBgcgd7ncHKQCMRfboaWu9VxyqBfVDKUALPTKPnk9c", + "size": 228134 }, "sig_check_id_data_tbs_1000_rsa_pkcs_4096_sha1": { - "hash": "0x29dbcfdd7111f2ec5d66ddd31d957611391425c70aeaec3903c5210ca920fbd8", - "cid": "QmeC5hxkV55YsyYvGQRnFNXQRoJVwqJGtrVY1hJJKYNcWe", - "size": 222656 + "hash": "0x023abcfb47ae731845263aba6e3624085e693a8a0fed0c95ab86cf35ad20ee2f", + "cid": "QmdnG38WBzmXBcgTHxHe9dKJ4zgUarcGdRbwjUh628VVh6", + "size": 267479 }, "sig_check_id_data_tbs_1000_rsa_pkcs_4096_sha256": { - "hash": "0x1cabc55ec2041780cca3bc0c1274b29e7b3b22eb0cf15f3a964e0e221af182c2", - "cid": "QmezcRVAaNns7p8Fr4ckWpTQafeW54C5ZNnwvphTFNicJq", - "size": 185271 + "hash": "0x15c3675818b3e02fd8b5cc9657627985bfbd48e8a7480c541959ef8dc371ab38", + "cid": "QmZYA5iTnGa453Z2GpNFJik1ohE8xneGx3wFzfy4QCdpjX", + "size": 230094 }, "sig_check_id_data_tbs_1000_rsa_pkcs_4096_sha384": { - "hash": "0x1c56be7b564f171f4a572dc9ac8c418ce102723967b8c8f49ad5a30486641efb", - "cid": "QmVgZEGJwoen89Jgbkc22vLPZLyPVkFrA8PjcPzdqiYUNK", - "size": 253545 + "hash": "0x0abe18f5248cec59c8157052110d49aa135c83dd8ecc7dc5251938082d4bd7a4", + "cid": "Qmd59FwMtSsns3ftKJ4NkMvxp1u5HQHmN5hmFkiNFAJk3M", + "size": 298368 }, "sig_check_id_data_tbs_1000_rsa_pkcs_4096_sha512": { - "hash": "0x041aea217ccca591a8e4c4a1f30c14893cff4499f973358dfd149d18a2f938cd", - "cid": "QmZX6avhFJkEh9b76PmggEm2We55JxNNfkF3BWMd9hf7j4", - "size": 253565 + "hash": "0x26884cc3a1db13b32c66917bd63649763968838112ceac6a4c31e235001c95fe", + "cid": "QmUmK5XtogSVyoNQebiuoHWP3ZDTryjwUCyw4yxx1nj1hP", + "size": 298388 }, "sig_check_id_data_tbs_1000_rsa_pss_1024_sha1": { - "hash": "0x2f1b38082d765f55992c06c9edce32309e4ee327abd21b3e210bab2009f91d11", - "cid": "QmYjenfAaL4up7gQ2XeoAchEEE5N2xfi66JUJAHYJgfo8w", - "size": 175680 + "hash": "0x210467d536bc4f4770c7d2c5861dbf925d5dd230534182958ab23c55d0129a9f", + "cid": "QmS5t2qkE9MSR5GeTxJdrqVmBwyHCHAexYmKPR1Cjge4dC", + "size": 179201 }, "sig_check_id_data_tbs_1000_rsa_pss_1024_sha256": { - "hash": "0x179fffea3fa1458dd52fb59830ae476f86bdbf3383699937707280dc7dd6848a", - "cid": "QmPG4irTTQz8qA5GnYS9mBwg4KNte11fDsaYf4ohTgzpKb", - "size": 90683 + "hash": "0x273a2f198a653c4d7c7927b14d2473b20633d47f73661dc7789b5c5da3737051", + "cid": "QmRwsD5GptDCX2vah5XPdURjcc5TChErMGjtUXwUvnfj8U", + "size": 94086 }, "sig_check_id_data_tbs_1000_rsa_pss_1024_sha384": { - "hash": "0x0367f30e9a53a2f6549bf35f70db308ee3089b2b123110b99e765f9b0ca6fda9", - "cid": "Qma7t3odMZRz2Rkgx2cmGU1k9kXZ8bsGCvmoY8eqSNGZ6r", - "size": 212986 + "hash": "0x16fbeb4d0a422d96b4459236c43e48e3db394f092d2e44bacadd512496fe9301", + "cid": "QmXTtBGrHazb7Te83MAEyfbjG2CXkhbES3ZwXjwAMgt5r4", + "size": 216044 }, "sig_check_id_data_tbs_1000_rsa_pss_2048_sha1": { - "hash": "0x0ce06290ea2bc7c16b515cf5b4e928ba6182d39e13c1375bfa997865ed0066ba", - "cid": "QmVf4Qe6cVxzKBLojVYUQHyi2PHUtBB1JhpBen5xyFCCrm", - "size": 261262 + "hash": "0x1914f2d4bf840cc1ee18120fb6bfbd14da8b1c2e5736990047730dde4f3c7d71", + "cid": "QmZ8ptRmZrPWChQGqKbVXp1baMYbiMCJr3c7PBHj4tLak7", + "size": 273670 }, "sig_check_id_data_tbs_1000_rsa_pss_2048_sha256": { - "hash": "0x0ff567f97bb77fa5a673685eefe9d6988f7ff5fbfc0989d68f4fb4fa04c9aad1", - "cid": "QmcVHhocTZojYP4bKATnarkbvzouQ9mgYjyGc5d2hk8s2P", - "size": 141887 + "hash": "0x04eeeb5b7c62b217033a9043ad14473d47b72b02d7efc1e145668bbd0d384ed5", + "cid": "QmeJoyohGbgLBJAyzYMYAcptUphsVgQGPtW9qDYhsqp7xe", + "size": 154177 }, "sig_check_id_data_tbs_1000_rsa_pss_2048_sha384": { - "hash": "0x1947287fe4591cb89ddf1ebf342a0e1ca94106dc0a252d427ffe82bde920faaf", - "cid": "Qma9wjHFKFLtmbFefKrrpuZ6UDq5b2R3EqdqTN4zDHJSsJ", - "size": 320022 + "hash": "0x0c39925263b56653fc0760352091bae8546454e61f05d51aa0d74b71c7368f6f", + "cid": "QmV6Yey8XknMqGAqrUaUciDXV7nkkWcxf5ApUKWnttCQjg", + "size": 331947 }, "sig_check_id_data_tbs_1000_rsa_pss_2048_sha512": { - "hash": "0x25d8511ac0618f029ecbe4acae499c0e2d2ea2fa12b9405fbb869fa0005d6069", - "cid": "QmWKXZgNySiDNoWZZ9kC1XqXkP4iDh4ZJTyitvqF7LdkWv", - "size": 299379 + "hash": "0x24f6364ee0db989e41996431bdd625884fa5d9e6564893d137896ef53badd2b1", + "cid": "QmfHkuWKrgCmznf7sYJFkV4LmT34osaciHhtvi1d1TPP8e", + "size": 311176 }, "sig_check_id_data_tbs_1000_rsa_pss_3072_sha1": { - "hash": "0x1e258be6e2fb0465f6b2667a0324a5098e531cd6ad7d974fea45d549d37fa01d", - "cid": "QmeMEpcx41VYtSiDBsCvzQfeGCy23djV5xJML42NiUzQwF", - "size": 360315 + "hash": "0x2bec13f9a2397d2f12ddb2d0fbaa7e13ae73bd4f7da5baefafe940e8198fb535", + "cid": "Qmcgfgyufo64tzv26ujRLFrDbiHwkPbRPpchFT8meEi4Z2", + "size": 385075 }, "sig_check_id_data_tbs_1000_rsa_pss_3072_sha256": { - "hash": "0x137b2c25bc5775146bf4fa17b594d684f944dca2e342693a34f7846537343cbb", - "cid": "Qmbv6FSiwBQq8SjbRZH5Agu23uGtM6Cy1TpraFMUYDMFpt", - "size": 198142 + "hash": "0x1f5c95a0b2e426ddf6f511ee16dd907444985c35bb923c013f5351293271506c", + "cid": "QmTLpERVm8AtYz4q1jibRELmryqjNSprUphfD6uZQyzdjF", + "size": 222784 }, "sig_check_id_data_tbs_1000_rsa_pss_3072_sha384": { - "hash": "0x1667f713435dfe976b120aa4f4b167d7043f25511dc6bd0d9ede1f2f51d6c8f1", - "cid": "Qmahvm3fwVqti6qXzGq43UUUe9eDoZHjT2thLYAcHjFKZW", - "size": 408109 + "hash": "0x2efcf751f4c3f064c8e61bf3fd1619a4e8073465baa194795c0ed83935cea1dc", + "cid": "QmZ1yPA1JVcxv2vrCQiHvXs1tyvTHEHN83SHJEwJSYc2Vq", + "size": 432387 }, "sig_check_id_data_tbs_1000_rsa_pss_3072_sha512": { - "hash": "0x2bd629e7ff3dd68848b071f7158b9a97fef146e76ad36da19a888a9c5a1013e2", - "cid": "QmbjRiweGdor76PgEmyZdUGzfasRfhMzXk2W94TrZoQVQP", - "size": 386062 + "hash": "0x0f4dc7ce4379a711a9693b15a447ef79a048c8913dd017d482e6df9b210b2518", + "cid": "QmUeawLmzXGVLrA5ZupAoU2gEcANFKPHXo1kFPnd5ZTVWm", + "size": 410206 }, "sig_check_id_data_tbs_1000_rsa_pss_4096_sha1": { - "hash": "0x21106a4a59c63b4d9f6b9004535b3e0800590839faf89975971fabf02d599456", - "cid": "QmduE2PRF84it1UeUuuqsFTYeP7WE66vL91o3svpxScQmx", - "size": 463748 + "hash": "0x02042616e0071b861724d3d9cc81fff20ba8e17d093573115154ece55c5ced2e", + "cid": "QmdH6KoiN5i4gc9YPz8g5uBSRry6jAeztqNvEGKJiqK6c5", + "size": 507493 }, "sig_check_id_data_tbs_1000_rsa_pss_4096_sha256": { - "hash": "0x2a608f1eb8f9de79b27d7857814035176e603750f69c43b8eae9c60581cd9d01", - "cid": "QmUro5fBCcj3PtMD9p1oHCSMXNdLsNtacsHvbJYPqiYWn5", - "size": 267197 + "hash": "0x2c4a0cb04e4633690b0a415cd4f241f7c481124c7705b71b7ea24d5322d07c69", + "cid": "Qme68ARfsaWtsdu7X3x4vYgpKYDkGqdEed7ScvJKiMSqda", + "size": 310824 }, "sig_check_id_data_tbs_1000_rsa_pss_4096_sha384": { - "hash": "0x245cc8244a3f9a92645a0ec79f9ce0ed6c79a5cbc39d7b14c634471bb82e5659", - "cid": "QmW4w49psYu8nMpgi8vtFYnb4nNN6E2zMmPWbdtqRm6LTK", - "size": 532972 + "hash": "0x026754bd007d84eed29f19bc9c4d8469cb730551bad4680eef3468942119614f", + "cid": "QmRFR9A7gpfjfhGYdz8jqK39AxEpXBFG4LS4B5d13Cmgj5", + "size": 576235 }, "sig_check_id_data_tbs_1000_rsa_pss_4096_sha512": { - "hash": "0x20dad9d47201ebd7c68e4cb15cad664467c015a028dea66becfafbabef8a11a7", - "cid": "QmWoSU9dLcn2VYWGXGZoLxGvBifUmgJTJyzhHbBm1D8xGY", - "size": 485539 + "hash": "0x2650b3b6fbb15f3ab5aa65317838abfcc8f95da6954878d362bfc2f56f18050c", + "cid": "QmNQ83UKBSivJpMxkdKJq8s3Rz7BpsUUXqjYvVqUJYzcsH", + "size": 528667 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_192r1_sha1": { - "hash": "0x1c85e089523cd5f771364ff8b888125fa84cead229cb9fa7424da67eb27d0e80", - "cid": "QmZ5y7TGLWQBZRDnwgaw4sHJtXKEE3VPWHgNMpnzHJvJei", - "size": 120707 + "hash": "0x2bd73491e89cc942d3816c34d12c1bd41361c7456bc4807df1b256f986f420c9", + "cid": "QmWYrdfdrKYev1S5wyN6VLkGQ95HuJ9nsoooGGbgDM78LW", + "size": 120705 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_192r1_sha256": { - "hash": "0x194c942345388c542de0ef26ebcf8e1d23cdc11ced56496146a7b6e8d3e9037c", - "cid": "QmUq5ttair25ozQoUrqCmei3R5Ucp2bb5a8rwpXGsepz9p", - "size": 83332 + "hash": "0x0d51037555bf0190adb52f1a6193b5bfbb457d4249e4379e4ab0935e4a76049d", + "cid": "QmPhgEwVVnY4kpFP8rAH6b5F2YSUnn1crYwTvm2yezsCQP", + "size": 83330 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_192r1_sha384": { - "hash": "0x2b44550343b1ddce5f78570cfabc0f89943c5b8fea5b88ed7f11ac517ef50b2a", - "cid": "QmU4KZBcm4KBD1atuigYPjGNWMSCTspMUeKUC2kJsF7QwS", - "size": 151555 + "hash": "0x0b244b08e4797508b79d46639abf52e3468716a297aaa88670bb578977b8dc5a", + "cid": "QmVW7ScGVsdS7ke9aYtZXZhWLacCtWy8hgcLHEhYWwcbxN", + "size": 151553 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_192r1_sha512": { - "hash": "0x29ef20c2fe2cdec4759fbb676cd2c196fe59d616c261c87fcab882ae89890778", - "cid": "QmRFbUdFxPWizVpqXwGCszZEckWDRVvJgFt8BHtATXk9wH", - "size": 151555 + "hash": "0x213e42399610f57ac377c962fa506dcf99790c08fb51b4d903285df154af1391", + "cid": "Qmb2UJgdw3Sde47M6iguLGQYoarf99kzBq7qFoLyF9ZM7o", + "size": 151553 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_224r1_sha1": { - "hash": "0x0feed86decfa9c0c0f9698e30bc9f78a3b6ca00a75023d7c48897998c278fd09", - "cid": "QmeJZFGSg6sdHoe7ZRtcLT4oZn72WBhR1GE4TFS7EMKU57", - "size": 131023 + "hash": "0x16cf02142d962c8fd60b9a4f90a6cbe3b1219e71ea96e359716540af592f122c", + "cid": "QmSZNTU7BciBFSqMHVi1FDVqnjrNet1xPXbtgLzD6yZf24", + "size": 131021 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_224r1_sha256": { - "hash": "0x2e07e46332205d898bc77c9e3f45a2e0e8a63f45bd9feb6b978c271394b0bc44", - "cid": "QmPehKQRk7P7mTmXRrmRCieh82HDYzToHpRkdSV1YtYcnJ", - "size": 93648 + "hash": "0x21ae06c8f59e438e47874f1605ef3c533cb76cd7d562d2472e0eac8edafda7fc", + "cid": "QmNpSCq5Mxtt2CMAsv1Gcjmm6insownxP93nRBQY7KNTYp", + "size": 93646 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_224r1_sha384": { - "hash": "0x255358b0ffa2f35a9e21f5dbd1b07dab0cb85fc443c661b40bb0f3bf94b631e6", - "cid": "QmXJbLVdm9w5LYprsAruBsCbBRQ9KbhzHhtVBrLyFAAnbY", - "size": 162576 + "hash": "0x156ae350118cd1e8796b691165060435a2db4b54a8345016d761468da7da2bef", + "cid": "QmcjGMMyBYKRPVGKVxj2S5puCaopwGCzMmo31X8LAQGrZo", + "size": 162574 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_224r1_sha512": { - "hash": "0x005681eacae046ff9f1dd889a0bcc4a1a50fc15cc0e712cb7071876b26e5cc78", - "cid": "QmPtWZBCFDKaKBRD5U1AjjWmRj2Xi6XQKCgVgJ8TfJL3Tm", - "size": 162576 + "hash": "0x160549ceefa20bdf98b8b1b367e742762f0d560d92efa317fadae1976110bb24", + "cid": "QmPVaGe7yJis3r5UUbPp8E3BYg3SKomG9WTMP1v2zFPwiv", + "size": 162574 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_256r1_sha1": { - "hash": "0x144e3ca81149931f35350532ec1d938443932f3e97dd23ca10250aafbe29b956", - "cid": "QmdGq4TNhojdWxmP9ebnpsrJWCxpKsHV7AbNMYx9pouWud", - "size": 170387 + "hash": "0x1951f9bf11ea9e821497db3d893a034a7771a70a6647e93c71c4fbf0937f2142", + "cid": "Qmdmqr5Vs3TVcR5wJB4wrs68V4br6yLtPupQJmv3VLz1Wi", + "size": 170385 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_256r1_sha256": { - "hash": "0x0f5880005224a85937fff5b2859a5af04ae66478b092bcbe276cda009b8cb9b7", - "cid": "QmZWHkcuMdBaKsbia3HERbQXcVX7khKABUFie5ktQmVA9D", - "size": 133019 + "hash": "0x0fd2061e3dca67564c583f4959c3308069027f55e412e46559c5356662233970", + "cid": "QmNj3Z2AzJVKx1f94zx6q5CyxutFXNzeCe1tcPfiSbYuNH", + "size": 133017 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_256r1_sha384": { - "hash": "0x0ad08123dac4e733f7652f726c09084939b4c532984700bad1215a573d1d1cbc", - "cid": "QmW6h5GK7hvAecYF8HQmrVFCx2s4a3TZMh1T3RwiZoAZvk", - "size": 201242 + "hash": "0x2bd2396dcbe0cbe5f412bb8534a8c55fcdb857117d6afbd300b01e6109c61f7e", + "cid": "QmbhX1zBaUn2Pk1uhRNNpBkVNrLCZr3dRPwKRYpJDMnfvm", + "size": 201240 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_256r1_sha512": { - "hash": "0x1cc8958e909fe99a725b7fe0c5f304b2e79f912db20490a1fd4c736246a22f7b", - "cid": "Qmf46cTGAnp6JsCSXknb3zTFEivD8H7dEYYnK6bP15j9En", - "size": 201242 + "hash": "0x04f3ba857acf16ce45024182e98b663c89c67908639a0e298d62e6fc07f07c66", + "cid": "QmYWnfbaejJc1ZxLzSJose6BFHSoNbbhBYY84BP3bkF6tZ", + "size": 201240 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_384r1_sha1": { - "hash": "0x0e78f5cb7712482ec830212142dda45879543e50f88ce48ce76cf2170e7d0e41", - "cid": "QmYqgRNez7KEJRJk5qMtguhPghknUE5ES5TaP121aYsvoD", - "size": 282566 + "hash": "0x167efbe7f111a64c9e0440bc7cf84024a46fd9270684426fee8bc8d0cea29996", + "cid": "QmUkvD1cj9HL222hzkTzoCQEMVUuab6h2R3D4YGcDWviFX", + "size": 282564 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_384r1_sha256": { - "hash": "0x2dea898e7b5f5bfa29a26531604a205d4ed79f7023d0795d8dcea855bd532e9a", - "cid": "QmUGUFpUPv26vxhRF7giWmoDSdHi21btqyverX9tbmeL9T", - "size": 245203 + "hash": "0x2eaced0de7c47bd7c142c15297bf8b848568c232627edd19db4fd26ee82c482c", + "cid": "Qmcx3w1xRPbxMB4kjZphvpUGpbSvd9g7ipEcypefnY7j8J", + "size": 245201 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_384r1_sha384": { - "hash": "0x1336eca605f9f92b4d0efeb4aaa6fa97900f6fabd3174b95c7d1e503873e2819", - "cid": "QmT3gZ9cWRGN91gDbyqZJxfxseJckMxXbriWWWNA1NAYyi", - "size": 313435 + "hash": "0x2f6f01ead99586c8aa8e5870f911cc23d0765abe66ed21df53201bfd93440264", + "cid": "QmYi5YGPMGYk5KXmn8AKH1zmTx1fZoVJELiAK7yGGgb9Kk", + "size": 313433 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_384r1_sha512": { - "hash": "0x2beebcef93e1fe1194cd008f2816e42eb9acd34beb5afd60daef8b214dcd2a9f", - "cid": "QmXEFFgx6TL8vjJycbA4xTV7iV5iyH9oWCDcPVs2swY1PN", - "size": 313435 + "hash": "0x0ecc86d6d7cc43ed7de14c87d07cff87ef5061f447de0ab60e1fa17081511496", + "cid": "QmR6Po4dLosh1jQth1W7ArnCXiUmbVuAhCUnBUhD4X3KXx", + "size": 313433 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_512r1_sha1": { - "hash": "0x2524e12bad8ff1b320d24c9d7d0ac7858a7c6c4414d31d100ca639ccd018b9cb", - "cid": "QmRceCfgpab96ZMdxEpt1QU7ZrX6hH2LJTYQ9njsa3fm91", - "size": 442724 + "hash": "0x0c3aebcd55d506f0a54b07b03c24e98cc8cca44af197917353a979fbcff84879", + "cid": "QmWr2Pp9jFQf3UHXYsvvCou53f6JssWvgkrdZm6Z8y8F8B", + "size": 442722 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_512r1_sha256": { - "hash": "0x011ac8a404fbbf021722e613e6e7e203d70c5b97a575b8e38bf59fa39c569837", - "cid": "QmTrL8xSUsfvVXZyu6Y1PBgNm9LawxPgJoq4WZZX1FDAk8", - "size": 405360 + "hash": "0x1127b1ed713145b40e8ae06882c783de0fdb5717b607b10a1bb9b029395a5b37", + "cid": "QmXxtuoN5RRCRqQDsgxGPhJiozNp5jZuEqxWmccGpgH8qk", + "size": 405358 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_512r1_sha384": { - "hash": "0x1f4b3aada777a4a74084fd9b1b27c55c7f9744ab5f71cc4bedf3525ac445bfb3", - "cid": "QmTjpGtnGKiQTCkbH9WYDi4bKKnbwG2GprboMgkuiq8auq", - "size": 473601 + "hash": "0x17d3abeceab700d5fb32a83ddd0c65e6b7664418aa619480849292e8f5bb68e3", + "cid": "QmXusQ2kqE68qBLu3fJr4GL33rAHekK5HxswvkKJ84SoJv", + "size": 473599 }, "sig_check_id_data_tbs_1200_ecdsa_brainpool_512r1_sha512": { - "hash": "0x0a2860f57fb8f2161419e2443cd0572bab534624c1ab4baa4024703bbe821be3", - "cid": "QmZAQxo2LygL6nfr4PbJvxbRMP9k8tD42d5UZhNVSBoYgj", - "size": 473611 + "hash": "0x0636155f8ec05ded7fa17af69873d51e96a7cf175674d177e23cb620e58bcf66", + "cid": "QmdxocyZSB5JkR2CjBmNRwpwEUsfQdCbFvAE5hJhTtQC6w", + "size": 473609 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p192_sha1": { - "hash": "0x293dd1faf7fe23418ff8e566dcaba4cd3ea2652293a7af6bb40e54d1a1bfd0ba", - "cid": "QmRCQSwDF4pLHvuBrLDmPc2fsWVPGKqtgH4JPB2zXbxBVR", - "size": 120707 + "hash": "0x043a3456fc0f1091804de99e5a7e3929aaea22ad9bdc1ac10cdd0eaf8fe1f721", + "cid": "QmamXyhPSvR7HrVSu4J56yM41A4wW9cqs83tmNjWW4G2Yu", + "size": 120705 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p192_sha256": { - "hash": "0x1e99494d8432101560cbd825425f50c0bcddeb896c776e99a18b27da2c61f6ea", - "cid": "QmYq8ZKRUXFTithXrMgAZMYNz4c8TXRYr8VAyamnbTa61k", - "size": 83332 + "hash": "0x2975e7697810d4265c9e3a00e2cec8bf288c5109890d57955f4c4f7d824d38f8", + "cid": "QmcPTjMfBVuQ8P93GUEtahbR23MWPraTkqajUoJEFH9cVe", + "size": 83330 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p192_sha384": { - "hash": "0x06527766a12420ffb46db6c4176f52454e004a23bc62f886d87694841562eddd", - "cid": "QmY9mayJp8ageLNe5Dvai45KZ4PtPRRbwrJAVTxk8KApTL", - "size": 151555 + "hash": "0x1a947f5646c6594c3b104b820f64d81dafa1526d1ccff4d40fdcd43d2359287c", + "cid": "QmeXsED3ppsPPyny7xAraRP9UkX8QMG5WHPuGEUbCTQVnR", + "size": 151553 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p192_sha512": { - "hash": "0x27f0b291e45d3c424a2bb1d513173274792478120de24566903ab22fb99d127d", - "cid": "QmVvPF6BKPVtgoakxJY1Koq1a9GmP4M2LnoLMtQoe1rXzb", - "size": 151555 + "hash": "0x1fa8b951712f636483d771c72cae6fa1a5f1e565c9e91291ef362daf7a73a6c8", + "cid": "QmV9pc5VTyZZpW2ZDis8m2PavwgssQnCFAbk49YctrhQoF", + "size": 151553 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p224_sha1": { - "hash": "0x26a08f00df8bd350788a1e673b484e13fc16ae76ede84fd55b6057068957a6e5", - "cid": "QmNdTT9r7ZDokMyf1mvA9GGym6L5EtjQVT67kuVsiGsN56", - "size": 131023 + "hash": "0x175a1b5632de31b69aaa835ab82b6cffe614b33c9007dd28056da831c6657725", + "cid": "QmW8yZubXRczmZD24iWPuwaaRdZjvEUMtrnNLKjvZpKmbv", + "size": 131021 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p224_sha256": { - "hash": "0x279483148b47c09294a1f6adf992b5b5f5434f7cb201b2b2e2e2084bb6991cd5", - "cid": "Qmcc5UeVJ7iwTj4SrzpEPKPy781rQ12oBsKaHxtZExzFQD", - "size": 93648 + "hash": "0x27b9277985453ef8ae361a5184a0450cd146f3c303df9fbb3bc0831d82539afd", + "cid": "QmeHgf7HM665JXHFmJ99j9Bx49gSxatCw3VFxhpEry28j1", + "size": 93646 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p224_sha384": { - "hash": "0x2aef90f45745b164ecfe77324769109c5b2e06ee3b6a3eca3b0e96383030a6e9", - "cid": "QmdfpHCJ9L4LG4arXnVUq57dU8momEMnjs4nEGu2LWaTnk", - "size": 162576 + "hash": "0x1b6e6922ef2583ea9cfb0156c0351ced465624938bf911a799890117a3f70941", + "cid": "QmTQqzAcAawpDmLdDDam5x9L27Kf5CRQCkua6HKa6aHe6y", + "size": 162574 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p224_sha512": { - "hash": "0x2d24506413db29c2906392f1db21989b0bd3bf135b959e0a81c02899dd2eef54", - "cid": "QmRP6VbWRT74xMkASfqCDdwNhcnTqAp63bkftdnUJMcE2V", - "size": 162576 + "hash": "0x0ec96f4fba1190332098a7b21c36f8bbfa11d95db44d0a9afe94d4f7113f8d12", + "cid": "Qmf7JBhzmaT9NK7MDmriqgdGJt7EUUjFVLzd8zo6eHhFWr", + "size": 162574 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p256_sha1": { - "hash": "0x2299194365569b99db297bb426de9db1e8df75c711d5430571bdfdfb460f5fb0", - "cid": "QmUtY9iGsEWBGyyS4UB99jAi7qrjJCogN222174egKqSzk", - "size": 170387 + "hash": "0x16adedac93639c33bb733fb5a2bc502d5d99e85a7fbf1a8e9eab98ad4d9492ee", + "cid": "QmXYeADFtC6vvUt1fAXcoPTyARdaZL4SxMx8E67kDCjPFc", + "size": 170385 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p256_sha256": { - "hash": "0x1ff57b1b61af44b52f558534d113daaeae7cca19b5eab8e8723728252d5a1630", - "cid": "QmNjvx46wJDhKy7g3ydAp3QSvcyHwCuwnvGTYHfKN7qFsj", - "size": 133019 + "hash": "0x1b003ea60e2981ea612cf045ead48032416b01b220d944c1a43d34c1e101c2d9", + "cid": "QmNa2rR3FqCEUz9b1u4pZnj8p6mPfNeLQ4FXzY3855TLi7", + "size": 133017 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p256_sha384": { - "hash": "0x03fbee59af277d3fb3c55fd4593b6a1643491bf8f98085204af060f12af23d7f", - "cid": "Qmexg57ep5s99B2cEuVp1MoVXkhBd9gdDs5bgU5pNC32d1", - "size": 201242 + "hash": "0x0e251f455712f4a94c13fa26aa3d1e5c6368a5fd33575e1dfcbe2b102116e304", + "cid": "QmbqHiowdYjmuCP3zEbVxZRiM945gZmugoQHWo9jmktGTK", + "size": 201240 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p256_sha512": { - "hash": "0x08318c3da1b81ebc0c66bb2686d020f1123f6df16d3dfbcdc7694c9768c8f8bd", - "cid": "QmR9djwthoL1ZNrM14aCjsU2amVhr72GAtqqXDfik3Nqvn", - "size": 201242 + "hash": "0x17fc65346eaa9458dbc5b305f95a1edb6df8f529a12a1aee099fa45fc25d55f5", + "cid": "QmNedyqiKveHz7yBZ9de1Mzth2MGf4r7wZ6rgS9Uu1Zzdz", + "size": 201240 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p384_sha1": { - "hash": "0x10e6dda606a0ef16f6d36f0fcc529d2e1f3491c038e4619401f22397f70ce916", - "cid": "QmQTZ8XSfu5xPgPt6Mh3P7XXWsa9ERsE7LJF3z1y2wVoPi", - "size": 282566 + "hash": "0x24da5ac2a4184853fed1eed085c1b5e27432d496db12fc72504b7426966d5d6f", + "cid": "QmabGTjCFqNzJxAVUYnjj3BbcXZJpFX95chkbM5GNLttoc", + "size": 282564 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p384_sha256": { - "hash": "0x2493d8fa22cec139eba644a7de33dbe146fc40027b4c2808c2ea0b3e32909ead", - "cid": "Qme3yU38bhx9QLAmpJg8DKU45jfEMndUt61S424R35eNsj", - "size": 245203 + "hash": "0x05852e8961b97021b7bd76e500b53e1eee52b2fe5c94815cb62b3b9f6a37eba5", + "cid": "QmPAfREtjbFsUXgdS2yUuKRX39hf8cytNU1HYoXSNLEnEb", + "size": 245201 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p384_sha384": { - "hash": "0x28f5b4345bb952deb1806193b6f070b304e2a1491e53bf4747a7bead92c1b72e", - "cid": "QmZU1K28H2nHaytZ9fyPGi4UVEA6vPgFG2QPhTwR5x84eW", - "size": 313435 + "hash": "0x1512ca114b508d4b9a514a22b21682a95135e5e462fa45ee7e3b46cf04b241a2", + "cid": "QmausPnpMAVxH6QFoizB9cdR2xXU9Tne44CvybcGAn3HGT", + "size": 313433 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p384_sha512": { - "hash": "0x0be5a16bc091b00cbbd93790f8d22b652cf1553dc940bb761956bd67e8e7b9f1", - "cid": "Qma6eH6qU9iycmt2rb1adCiRJmqHqebghfn6sYdJqmY7Xo", - "size": 313435 + "hash": "0x2913c6cc53f3189665fc2dee83f64cccd33c52e3b7faf6e50989458a57672635", + "cid": "QmPHKnsMktGoYw4wx7tcqoVNXHz4BtgovogQ29zt5tPUjS", + "size": 313433 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p521_sha1": { - "hash": "0x0f97dc089e7d0c9d58831e77770a20a5a94b468b2eef4d146bef8703f4201520", - "cid": "QmdS2ZFkfJAYopMWWmeGmTLj9cvvR3ABXhk8KTLGgzBZB8", - "size": 450924 + "hash": "0x203936b05e3e2452123deb6efa2eb176acbf0cb017f032dd4c1c1b0115ba2dcd", + "cid": "QmPq7GMZaLRS91bg9yDWxSuJYVj43tWHdFZ1iXuAgJ26JY", + "size": 450922 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p521_sha256": { - "hash": "0x2a169c200aef0ce92a09963c8731507e0351ed978693bda9c3d2bfa4ba698b4f", - "cid": "QmedeWhxmNC62XjgjcxDnfES2fmMBwVAmCTvWYNzPqzWaB", - "size": 414938 + "hash": "0x169f9d713ca2c4eef606d1b2b01ae80b83fe3717e8bf5ba01c61013419fadd67", + "cid": "QmPQttDdh6zLHDfno879W2c7tyCEbtdwmioWSSuwkvHVrg", + "size": 414936 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p521_sha384": { - "hash": "0x0d12a4a1990fc506596104a4519fd28dfe88d024fe23fb4efe9e483581b8dde8", - "cid": "QmZmTBv7SubqbsPqL1cH7hReqmq2qygrt5USgbvvcPoSM2", - "size": 483179 + "hash": "0x18c7360153b5d40a950d828d9d4b6e2c30a032c1bd704d591bf034a8c6414152", + "cid": "QmQbZUCzzB6msM5mPDbt3BnsgM5ZLn6dUkZJJFXFevcShx", + "size": 483177 }, "sig_check_id_data_tbs_1200_ecdsa_nist_p521_sha512": { - "hash": "0x26fc5e8f46bd35dd3da5dad4e665c1d5a21205dc7b90e5a4a0fbe48913ba84e1", - "cid": "Qmf3uwVoMahRArijeXkAV8HixiXsJhC3YHMJB5iVhQcvL6", - "size": 483189 + "hash": "0x1c149a327df7abcd315e79c0bdc177f5c6280648efa40994ceedbd8891b28046", + "cid": "QmbKxPikSDB1vSCb5Z4tQSiAHHD5rvaHzdCmcGheC4tvzc", + "size": 483187 }, "sig_check_id_data_tbs_1200_rsa_pkcs_1024_sha1": { - "hash": "0x1c2235b68e1ff8283a39331f26457132b596164f2ee4fcd5d5294187a0686ccd", - "cid": "QmeiVSGg4RjkWKVs2JLmrrJ1fdnLnThgzZag9NfvPwKfYx", - "size": 101500 + "hash": "0x11e211422c3718ca0e7fcbb1b2f9ba7588a9f01d916ccc59909b3d37f95bcad9", + "cid": "Qma3ZyTiK7UE4RtCfAAP5okTRBfDdrZRGN8wzW9i9kXXrV", + "size": 105139 }, "sig_check_id_data_tbs_1200_rsa_pkcs_1024_sha256": { - "hash": "0x02db0ee69debf56c4b6ce9307d86339ae742ded3767e4c3efd5e56ca0a6b5d9d", - "cid": "QmSEiUZVX3c2vLtT67ocrU9MQHSUiEKcjUeGDgC16XkYbG", - "size": 64139 + "hash": "0x2874ed0ac8b2945478de00315b436e157a3ccfe1d9de05db22d5987b19a2b990", + "cid": "QmdKNNLrxsWQG5oVdEwdzmasSsf61BrZhTwKqARDwLntrG", + "size": 67778 }, "sig_check_id_data_tbs_1200_rsa_pkcs_1024_sha384": { - "hash": "0x2a9c95a99e683ef40db909aa1b8ed0eb0c8a7dec865ad975f42f612041acae45", - "cid": "QmPCShH65Zk47koyt8zDugawUEcEpTVwyncgbQPZf8yV1f", - "size": 132389 + "hash": "0x0403624a4ad3dc46e9a1219fd61289ca597f52d5ea5fcc0f40c39282d936aed7", + "cid": "Qme8UnFAFRhyhq6BgDWBpEG99Q36v5BuJkmW5csdWiJuiP", + "size": 136028 }, "sig_check_id_data_tbs_1200_rsa_pkcs_2048_sha1": { - "hash": "0x2f5210a74334a1f66310cfb9757c79e30b2ba13df65dadd3f8c72e555e3b2feb", - "cid": "QmdkHtwD2Vb1HF9ewn6bBYw4iPc43pe6CiN3tvs2xmC14D", - "size": 134600 + "hash": "0x0a9af5d05ad8958f1fc37499a15dfeb2923b37744f8d94c6acacbe9b6ce5bd1d", + "cid": "QmZGcUmuz3X2TJA6vkukp9DrNav26V3bkQKorTCy1h8wxr", + "size": 147446 }, "sig_check_id_data_tbs_1200_rsa_pkcs_2048_sha256": { - "hash": "0x021ecc154f3378092f29f8d321ab0f1d5516750d6185cd345d0963f368a757fa", - "cid": "Qme26ybn2grkQCDujp7fDYyCUJxpDiVLzNZwHmEc5dzVLU", - "size": 97238 + "hash": "0x2310b429092aee8b7b9fc4b8e52fdbfd8b798f81305056eef7ec01fc7fda6153", + "cid": "QmabWzZHqNoXD8fpdRmwdNGBbhZiJWiU8u59t8NgrxxRxA", + "size": 110084 }, "sig_check_id_data_tbs_1200_rsa_pkcs_2048_sha384": { - "hash": "0x14077b8d94ace252e2a05f702dc2d4ef3bff0bfd4c9a041a87d3fab7443d0298", - "cid": "QmNV6MGb66aRVgcr7JLUeXWh26tgYyn35qMorCPKse4Hfs", - "size": 165488 + "hash": "0x2c344017ab79579b580e075d5d5fe92aa6d7838a124c29546acc1c9f1aa770d0", + "cid": "QmfVDwRv7Kq875SSyKa93vvVpLMTYyEzNzjF3GJE4YB86U", + "size": 178334 }, "sig_check_id_data_tbs_1200_rsa_pkcs_2048_sha512": { - "hash": "0x1316799fffcadc172cc97eabbb3990a7f9fa2e2b977e57f7081017e8d858bb44", - "cid": "QmdfTo71NLNYvwkLWmabANtBvLRLaRJF1g1PWndnQrcJuT", - "size": 165508 + "hash": "0x2766d491e5f8af9b8c31336cfd91a4d24782d964c319a0957a02a9a132fb4864", + "cid": "QmU5FRKVyqxLQgzLaK5j1mZsth7JnSWxK27xj97fDibz3p", + "size": 178354 }, "sig_check_id_data_tbs_1200_rsa_pkcs_3072_sha1": { - "hash": "0x07072070b8e6e91762a30d6ad0385ae5941de7242f514b9f139810e4edd760e4", - "cid": "QmTN5tzRVigzfyseevh9MtPi4BxSwY5FAw5Bpu2DkA2ip2", - "size": 172751 + "hash": "0x29b5eb7b2856d4001420779824479d3c689dcfe3ffb531a32f8a3623865e2c41", + "cid": "QmYgqLcuoMsxcNfbJyf7d8oNKuPuvfSbdEUTiSdUk59y1e", + "size": 198269 }, "sig_check_id_data_tbs_1200_rsa_pkcs_3072_sha256": { - "hash": "0x11f14e6d023b7a11e00d358462da83db548645cbd6c6d830cb7a9e548f1d7749", - "cid": "QmW6jhZU7zfm1ghwbyd12iAwohTPvUzud9QLSVzxxApiqj", - "size": 135389 + "hash": "0x2398830f294fcc227bb182032b003746d7384e74ecdff6e8739490b170bd7c10", + "cid": "QmWdg615oWncMrUF4Csb7F7tRUxSL315urG7nd4RrgAqxg", + "size": 160907 }, "sig_check_id_data_tbs_1200_rsa_pkcs_3072_sha384": { - "hash": "0x1e13c36790752bc35106649c543e58bb844cf77aa53f0428aadbc539841684c0", - "cid": "QmTXXTrPcgrFnknhZf9hC9fSoMs3nTYw8jPpans22BfUKN", - "size": 203639 + "hash": "0x1bd5e5ee69beff83dfc494f6fe9acba6d89e78ea5040a1f3d0aab402daca498f", + "cid": "QmbejkRgXnycXgb22W1sViMwcn9zkEAWePGjVgSMjW2bkE", + "size": 229157 }, "sig_check_id_data_tbs_1200_rsa_pkcs_3072_sha512": { - "hash": "0x2334c2e5b2a2e3bf320a3d4b4b3d9dfab13b2d4c8d1cec3340a666dc82f4657d", - "cid": "Qmc7GrW1wNAiBmKyzkco4FA4auNLJsR86bu7FSfSeiY4U1", - "size": 203659 + "hash": "0x09170cd9f877d4f4661bd1dde5b2ba1a69091476f1b2f2e3f80a8eaf95eaa119", + "cid": "QmZ25mKSVaxn7wxgj5sFa45ZsuTBvJq9QKguc91N3E8sLj", + "size": 229177 }, "sig_check_id_data_tbs_1200_rsa_pkcs_4096_sha1": { - "hash": "0x263cd995df0a9fbc43cccd1eff14088a443e0127482c36252e65888a629f117d", - "cid": "QmYYVz14oA1SPDg1AWKcAX1m6GCUxjeBiN3c6fSZDXsjxi", - "size": 223699 + "hash": "0x16279700269837769d426c23c82f5076d782ffa0e53ab36b00358f92438cc86b", + "cid": "QmW68ubazyR7DPvFh8UDEgtcA9djrs8EnavtpsVXD6cbzb", + "size": 268522 }, "sig_check_id_data_tbs_1200_rsa_pkcs_4096_sha256": { - "hash": "0x1959b4ee786bb29fdcbdc1572c935289779c214a1e8e3a88bd3245672e00d362", - "cid": "QmbMcCxS99BnusHmuRTacRpHZtM2Hrgk7xyDXb8Th6895i", - "size": 186338 + "hash": "0x121eeac804edb0a6a602205344796c52686d69a5349a6fa069de4b8e4634cb6d", + "cid": "QmWbqXtdeNpiqSbCgEriAjGV15KKF4fiMqreKhM8KCYsji", + "size": 231161 }, "sig_check_id_data_tbs_1200_rsa_pkcs_4096_sha384": { - "hash": "0x15a34db11ef54ac3bfec917f92b3cec9d5f28d27c54583acd9dc71c228c708f1", - "cid": "QmYXegtFPfS9nZjZbtQDT4GzuhoQjJdf9yhVZ2ZvLGDwzR", - "size": 254588 + "hash": "0x1519f0b45b810ac95d8146725c93cb221718ff00a689243282d1935ec41f71a3", + "cid": "QmXj5GsTh6UguoNoVJ1MMYS8WCp7rKZgmXDvEwovGT4LJH", + "size": 299411 }, "sig_check_id_data_tbs_1200_rsa_pkcs_4096_sha512": { - "hash": "0x200c68165e5d68317ae0d81c3aa9906bc2752d4755aee3045657f01d2bfc90c2", - "cid": "QmVHcZaEaL1KBcSva375UB6z5JbDAhMKR9DvpQK3T6hbG4", - "size": 254608 + "hash": "0x23282314dec3f3e90adf2763e84850dbef4b7d637f8fae7577fa430300ff4f9a", + "cid": "QmNhcc7mDXFcopHcpRMLxRvMb7NfBehqc5QsR6gYK6VAiz", + "size": 299431 }, "sig_check_id_data_tbs_1200_rsa_pss_1024_sha1": { - "hash": "0x2b08e958379b7ebd513b8ceb9b9381288063a7cf3fe2e3315f4ccf227b161c62", - "cid": "QmSG5MkFydhJJ6FnsHYY6N4o7zhnkxTgb75gEkae7JFPGK", - "size": 176723 + "hash": "0x0caff0741fd24556323e4df86e855a902aeb9f441b8d76e8aafc52203ea117d9", + "cid": "Qmc7GRm9Jqzn2DaqpB1TNHgZQooJncuDRAWcpnw7G1kVtM", + "size": 180244 }, "sig_check_id_data_tbs_1200_rsa_pss_1024_sha256": { - "hash": "0x22c3748c8d021b8593cc7afa3e3a23401084210f8167826d4e978166890d4381", - "cid": "QmUwQgDLSyNKJPS4qLcwj9xTvSwvUEJ93frtemFmBaurBi", - "size": 91750 + "hash": "0x115fa3746b93033e05cba4e4359f2468ff7017186de57c18278ece29e7a768c4", + "cid": "QmXHfB9Fa8Acs7pJFor9r1KsdDM56wjPeZcsvtW1oQGCfS", + "size": 95153 }, "sig_check_id_data_tbs_1200_rsa_pss_1024_sha384": { - "hash": "0x09678e3df1916ce1fc2c219aab25693f475bb6d80724474543d5069dec83e784", - "cid": "QmeJkgaySZTsWhdfY8hei3oYq7Z99QmB6RtYqQ83mVxJri", - "size": 214029 + "hash": "0x1143dacd378fa083a2666d7aadd3b44b2748217bf2299d0b93173db7cb309661", + "cid": "QmUCKaV5SEn771R1Ea6yVq7YYs6HGwJ99CuY5ydLgciEEG", + "size": 217087 }, "sig_check_id_data_tbs_1200_rsa_pss_2048_sha1": { - "hash": "0x2d8421375e064ca239132566963aeb0530225eecff9a7d059f5e94da1d3dc32e", - "cid": "QmbNFVvtbvfCzJ72K52kVM3QGv9sv2dtf2qgkLrhL3MySr", - "size": 262305 + "hash": "0x193ea90b661afca1b880d0328441994638cef83f3b00552008470fa3da704938", + "cid": "QmfJRcBwiGEALFByhwr4xwYXvLwwhv6NDh5gYttKNhvKYB", + "size": 274713 }, "sig_check_id_data_tbs_1200_rsa_pss_2048_sha256": { - "hash": "0x1d46e7561608ce13b544a414230a3b8c5b6e945a7b4c8d19052d3eb0ac72af4f", - "cid": "QmdmmgjMtyTjUmrSuNcthUGfCVBW7oefv2Rc6RaXS1MoBA", - "size": 142954 + "hash": "0x1c03fd99e65f3da1dc539310c980b29d99f43b033a90552b64a3f34e584ed711", + "cid": "QmQDqoUGiS4KC2xv6oTM3bATEGLeqnSAZHRvRGizfkgTyK", + "size": 155244 }, "sig_check_id_data_tbs_1200_rsa_pss_2048_sha384": { - "hash": "0x027841b98e2cd37b55f50294a422387125d105df72e808f31fea93b30e050cb6", - "cid": "QmVr5JJ6msXsMM7eWPqhx847qSXDkQySiFtPLT5p4gMyCV", - "size": 321065 + "hash": "0x19f5544adb88d6982481e913230ad612707457f8bda8e18bcb83c59f74020c1b", + "cid": "QmRxhvwyBd9q6Hq6EXiXpWM8DzeTcN8osWvKzcxaWArQjm", + "size": 332990 }, "sig_check_id_data_tbs_1200_rsa_pss_2048_sha512": { - "hash": "0x0baf1c50b0983fcb2ac93de536d33508b8ef5a6aecde21af50e79a9ed72927e4", - "cid": "QmZETbbUEtbJPNk6hqptwxyNkU6PDPokSSLxusutcnGS5b", - "size": 300422 + "hash": "0x26667ae2306a4c27097eb48e8603a7ceb265cb0b0cb81aa85fbafcf6812feb72", + "cid": "QmUntUwNTVDQWfuriC4BTvonqbg8zbFxDAumicHwVwyJgh", + "size": 312219 }, "sig_check_id_data_tbs_1200_rsa_pss_3072_sha1": { - "hash": "0x0be40ae91eed0c88ac2115657045e2002fc85fee042c063f3516fa7944d4e111", - "cid": "QmQJRkVs7RvWBZmi44ERSrLsAXQ57pUupkhKMykFokpYRE", - "size": 361358 + "hash": "0x141c7235d9ae453468918d24005fc1fcaaecc0aa7f9080391479a9d10ee2ef19", + "cid": "QmRh3ivrqpkBnPtH5sqnsmKUfrmAYZuDmNEF2JNG5UYasW", + "size": 386118 }, "sig_check_id_data_tbs_1200_rsa_pss_3072_sha256": { - "hash": "0x07a353ab99d75e1e6e3744b21c1b8033aec94c2bd8f585d52b53113dbf54bbac", - "cid": "QmYGsrBqwWLsW1ZRNWMkdhaR4un8WqdJGjPYusLrnY9vS6", - "size": 199209 + "hash": "0x084c453840cbf301d088f5d6f0486d3f1c2444ba4a729bbdbaec9ba404fc4f93", + "cid": "QmNSVk5G3vc3LjxFzsSgUCfeV6zWxhxbsLgDABqm6xziWR", + "size": 223851 }, "sig_check_id_data_tbs_1200_rsa_pss_3072_sha384": { - "hash": "0x2688665b7cb514e4b42f77850e116f95eeb22e81473766161f7b78560dd20f3f", - "cid": "QmTvQymUgXY36kWmLrd6Ly1ea82EETRPkD9rtw9QArMKCe", - "size": 409152 + "hash": "0x14e02aef37137ca5f7c538f7cfd40fa96e0bf96b8a44c956a81e6490193412b5", + "cid": "QmcBRUzZMra4xrXrZZApGvxV1RYSo4FMCxcXPRzKiMiT2r", + "size": 433430 }, "sig_check_id_data_tbs_1200_rsa_pss_3072_sha512": { - "hash": "0x26b5202cf733d628249c06176dbcc7c2fa64ff0167e4872b261c8679aa9b88f7", - "cid": "QmfFJqFjwgsXCaBnAN3XJSG1QXGS1MUMzt1bJCn8wsFP9Z", - "size": 387105 + "hash": "0x15975755c7e98e85d00ea7c00e1cf5d76f97bc03474a4d78f1d50e4dff626036", + "cid": "Qme4Fm3PJn8NscXBU3oASZ9wBQRP3KBtwbE2aB1e3A2uqy", + "size": 411249 }, "sig_check_id_data_tbs_1200_rsa_pss_4096_sha1": { - "hash": "0x08133418b860c369e202ad1058a789f913c3b7bf1eac1146554743d17f35ea2a", - "cid": "QmdEHoNzboPoqNGGJctrMYrrbeS1HQbyS15DcbRyQLNTen", - "size": 464791 + "hash": "0x1a630f9a5da2ce2f76843b5af508285f7dd69f0f5bc4df63b6e513060bbc1c3e", + "cid": "QmPgr1sQhuG5ZmBEeRjbMdSsNejT646WQznY6X69RY41Bi", + "size": 508536 }, "sig_check_id_data_tbs_1200_rsa_pss_4096_sha256": { - "hash": "0x2315a26674ff77b92634493c50bb3d679bf1205a64e519b84ed41450c21407a4", - "cid": "Qmd78Ltaj7UHLe7RDxQsmmPkwLfidUjxJpPPc1tBQT5TC5", - "size": 268264 + "hash": "0x0c58749c84c784023f36a149a478f7a1311ce239187dc789344bacc218be2fd8", + "cid": "Qmcv8E8a9TtBowcLrmizFRX2ukcv3tFFiAzkzuEaJAiKkN", + "size": 311891 }, "sig_check_id_data_tbs_1200_rsa_pss_4096_sha384": { - "hash": "0x17f040e36de815c7a84bb851732b41b1fa8f1fff2adb80cca4a3d714649e592d", - "cid": "QmY1VeRX9iVAUii1xxyCWUBrMf5Kon369QH2SKTDGxsp9q", - "size": 534015 + "hash": "0x19a458c527e718989060b2f115fb9674ff92aa04b006cd95b7d5b58cfb246c4f", + "cid": "QmR4ELXFhnAg2fXPoZnD2aG7ZYKmLsKCXkCt9Up8UVMEBW", + "size": 577278 }, "sig_check_id_data_tbs_1200_rsa_pss_4096_sha512": { - "hash": "0x0a706a98837503338caf87de39a3d07c5a5f79c17a198638e2e6abde6388f5c8", - "cid": "QmdQprtkHHqZBGHU1vyCLcjBaJ624hgRFXq4BLuugJGMWo", - "size": 486582 + "hash": "0x1e5d59c6d039d7ad7d6eefb1d61392a606796d39ce0ba4650b6a2526f0c12db6", + "cid": "QmYhdeqxhcidXCbGDZAZyKTd9h7PgEhCw1w8CqamzpiFKb", + "size": 529710 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_192r1_sha1": { - "hash": "0x09ef4a80a8910bea202724052b33a2a134433f4968f6a2b7dbd4a569ac378cf6", - "cid": "QmcA77og3kaRCEe1HTq5V99H5dajwRDmZ2oZvjxUDKdL9i", - "size": 122841 + "hash": "0x0a284a8ed67402b780c793e3643b6fdeb64dfcb6420d148c747065b08c0b59fc", + "cid": "QmcVDhFa4A8igPs9ZpS4V2yZnMMPf9KDS4s98NGT1625qM", + "size": 122839 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_192r1_sha256": { - "hash": "0x08d5e3c751828adb16caac9b8d9bfbabb005c3742a4575c260a10d119ef1c1be", - "cid": "QmVDRPvcRC2DKb3vXBByZWvpeC9LPokhL8usb8d8ZZVcD7", - "size": 85466 + "hash": "0x172fc9bbd35c238fe269833190554f34915a86854c47044da24b0ff2a934a321", + "cid": "QmeBuLixTjjxvDWmcwx89Yi5rgdBySVyhPbrFRMgiPjoXA", + "size": 85464 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_192r1_sha384": { - "hash": "0x1ab159fa6615783d4bf3a62e0d7ebc660c49fcc2786634b6762cc6dc94c7614f", - "cid": "QmPpyKVbe4g5S5L4TnTzYJrsvX1xZB23bDFVJxfMruoWKD", - "size": 153689 + "hash": "0x0ac8b5febbdb5a9d341b36884788e78bd917192d12dc3fa4019af54724969da2", + "cid": "QmbEemF6fkyf5db6tswSQRFQgBD1q3BYeMWWnmy4TTh6Zb", + "size": 153687 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_192r1_sha512": { - "hash": "0x07483412444449f5911333500e372a806e6d4d9b14f85cad5875b21a86e37c90", - "cid": "Qme7RAhNXdKH8JwfCoZyHFKuVwCuqNBmWPNcHr8uqWmyJ3", - "size": 153689 + "hash": "0x1cedd26e6bc1cdbf60f579a7c16cfc763d8a730954ec94f355222ec626f39dcf", + "cid": "QmYD8buUke4vbZ5Tos1rRNq7cgtMJwbQjGpEQcNK8ibgZT", + "size": 153687 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_224r1_sha1": { - "hash": "0x0adf2931ad300e272d33316384be7eff4e265ac67c5376c245b811fbdc7ffe10", - "cid": "QmY6nbQr6JXXH8bF4AyhXuAWPKPG6LRfwcfQX6vQSZYWv6", - "size": 133157 + "hash": "0x301867c412db42d6b75e0622d180987b5da511b682828a326f68387e20155d25", + "cid": "QmVC5SyKW8G1wFLPg2YLpeeCW6vZVqggiJ7He9rnxUDLah", + "size": 133155 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_224r1_sha256": { - "hash": "0x1f79c04db4c851b2c0b5b200936e46eadf6145458ccfd272ab340a752e808513", - "cid": "QmbyMMYZsb26oxAMMjYe31utnEC9sLsmqDvbRAfXP4Dewf", - "size": 95782 + "hash": "0x0ef5d66091fad8aa7aa0e62d57e9005c5a9d45d16de225e2e808f62dfb8f16df", + "cid": "QmdzDkCx4iP9PUU1RnD4LUEKYxtCMSJC3or5Fihru8XXBL", + "size": 95780 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_224r1_sha384": { - "hash": "0x094ef5c1bfa867b1a4958d4462f7a94f9362cae3d6678ec300ed77bca0a4a676", - "cid": "QmREZqCXuPGWz8t5NtZQKWhKGDvWJ7cLeKbUTE1KFfVuRp", - "size": 164710 + "hash": "0x2d4a5d8b68a8b4cac4896e09a5005f5df16d4faef5a8bf148e561dab625c0c35", + "cid": "Qme65ehQaEqbwMR6pxH9mzTvHGoSPQt1HpXR3etwP669aa", + "size": 164708 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_224r1_sha512": { - "hash": "0x2d4296c896a62827a62b2f83d3445fc88f01cc21b99297e8e4c28488714cb7c1", - "cid": "QmP3Jx1ttyd3Eu8Ujx1bpFVYsqE9C3VmbwbVs1hbBynhzk", - "size": 164710 + "hash": "0x1c403d9d31fcef2f3b125fb5018c26e4b67b0fc11971c0b7f2e674e1168cadad", + "cid": "QmarL2koWuK8bhUofHELbD5w52dVnJnY5eYzzUXt66ndDK", + "size": 164708 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_256r1_sha1": { - "hash": "0x163be97112cf732af900830582ffafc757b97f502571ae24ae7578b6a75bc9d7", - "cid": "QmXRf6mydQJMJsQw3Ndf6YHhmRzsxF4QimCvt2zsMA56Wf", - "size": 172521 + "hash": "0x04f931b60f49226571b61b5275201da236267c1322ab3a1dd07c209b3e8472bd", + "cid": "QmezKEYPMWFNwGqSxaNVJNejgqJhWMsV5hWoKTogdEJnKS", + "size": 172519 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_256r1_sha256": { - "hash": "0x1572ba3a269e222b2d95bd2942b8fe82932dc7d928a339a18a46dc88710f88c7", - "cid": "Qmcf2fiQTBeo4hhHtGBkjywmTjDkvNa7oL9msHv5RwK1WY", - "size": 135153 + "hash": "0x16cae35f92d81fbafabd37883c7f35bced862ef769abe1bc085331f96d3ad046", + "cid": "QmPsYykZnVqsUPrbxQXLejvCQ43Aqn5AzsYkE1Gs9w9KWd", + "size": 135151 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_256r1_sha384": { - "hash": "0x06745bb002c1e6cae1b5554bb962f57056dc905b2829fac8f994a201669e7945", - "cid": "QmTreT74X9qM2nFtbZsPseEBheRvs1ZFzLKkBe7V3RSuAt", - "size": 203376 + "hash": "0x0057eb25585233d308b4d06c454b4d5121eb3eb30360a7e5f42962dd22fe5e89", + "cid": "QmXEmbNCRHbnsC5CEmLSujLwZu9ZUbDzFrt5tcpK22HEwN", + "size": 203374 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_256r1_sha512": { - "hash": "0x223e2e78c7efce6ec8280871456e4f5864889d95af8fa96020ed976266c0f206", - "cid": "QmVx8R8gNiJ3j1vvgU2KCK51MnQsXZWTyDKdVRYQmsNdpr", - "size": 203376 + "hash": "0x265a8fa2428a0d11801bdffb7a10392b2d6762fd23feac23b5363a63b63507a5", + "cid": "QmaPHd3JHab9eGXBHMygzh5uSB3kvQLDmetEsMTuyVHM7F", + "size": 203374 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_384r1_sha1": { - "hash": "0x2c8c80010a03a6f793e73e1523282d7299ecc136ef15ec243ef5615b7b965d17", - "cid": "QmXw9AseUpk1MWPxo7vLBiA2735F33sJmeDZys4dqTeD9K", - "size": 284700 + "hash": "0x015cb42923594a7573a7e363e51b5cc1ecdcf3155c5e0ecabf5993ca55c1f300", + "cid": "QmeLkkrE7L2E61hBGPo6sUjtSdTu6GzPUdqMpKrybS3aYG", + "size": 284698 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_384r1_sha256": { - "hash": "0x130bed7606495a49770f09a31c66207066d6942a88f83ed9093901e304758000", - "cid": "QmXvvRQ8CizkDBG87BpbXZLZxMKsrQGJBWNS8QTWefjVex", - "size": 247337 + "hash": "0x2c5153ce0bb4f23ad4f65256622d1f3accbb379b059b905fe87b59af2fea1350", + "cid": "QmRcFpW1bhNZHpDy2huwatTUtXQ4bZRpoWqV7cWd5b59SF", + "size": 247335 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_384r1_sha384": { - "hash": "0x0d41fcedf4003336c5ee94c3c7ed52b2cf406e1fd3e8a62897a6986745f5812f", - "cid": "QmSSVET5dxu8HeadBmiwQb5GAGaLNHmDportVbJchWv9cH", - "size": 315569 + "hash": "0x186d13a808cec98cb5abbafbdd343d6f71a07c3bf55638ff3bfdab3a5dfcab5a", + "cid": "QmbgDxkYmgeDub17UsMhmth38tmaZUpvFan52pNmk5STTR", + "size": 315567 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_384r1_sha512": { - "hash": "0x2cdd0e238c0967a59b45356572695fdb5664742ee275937c3756d2aaec79235e", - "cid": "QmTfDE4fcfp7JXkDrti1sq9eEvYDPmK6ycbb2nH3RdwoEb", - "size": 315569 + "hash": "0x04985a8b00f65a4cc02e0d999f567f02cbdbed5105f9d99f19e4ffe6ad2cdd7c", + "cid": "QmPcnwz5as4S9X3VgEFhq7yt3uVDxJDPXKm2JruR3KGHoM", + "size": 315567 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_512r1_sha1": { - "hash": "0x073d59a28bb006c11009f00e55ed4543ee2a9e5ef01b2282b88e1e7384d834ea", - "cid": "QmdMzWxEf37ir7KG36VJbvkkzDF9fNEhMv2ZKn8dRYFGyR", - "size": 444858 + "hash": "0x19f0967527c11543e789cf96e88bb7d7b5491377693ec2ad85df38d74e57540f", + "cid": "QmdekfZK4pjULYHBELxjtLc2e8hD64o5Vv9afMS15tJHwT", + "size": 444856 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_512r1_sha256": { - "hash": "0x041586da1a4cec49c5f7918db899ee2038889c6076e3baecfd56e707b2143195", - "cid": "QmS5b5P1jTsRARVRyEqxUQLaHQZhsChPBJdJE3nWWjXXbq", - "size": 407494 + "hash": "0x148b2d520f975731d61fbef718f9fdb975e6452038717a82cbba38604b3475f4", + "cid": "QmbCixVivnLtpVrgcKnGDXuCaXQTapZt4iXgMR2YATupnp", + "size": 407492 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_512r1_sha384": { - "hash": "0x021aae4bc08252f3835cab6224521aec7f0999a60d7a555d4df07ed6a6fbeca1", - "cid": "QmcpzCJxm7vWzAJVHsttKKaDLym4SCf2aLL8Qve9GEMFm3", - "size": 475735 + "hash": "0x14fcefa20e6be4b152bdd90545900a407dfb2a45a3e0670af0fba988237f6a66", + "cid": "QmaxpdctUyAZbcaQsWLmjxyouTmdDTgERBrPyNtW1h8emn", + "size": 475733 }, "sig_check_id_data_tbs_1600_ecdsa_brainpool_512r1_sha512": { - "hash": "0x01ffc0fa3b1482467b29a96b73861b6dc7775cf57c73fee5accc57a7a8df0ff7", - "cid": "QmW5Fmay7bSqPmTDiB9swtJChjaX7iozyWdNFJM6VUmoRL", - "size": 475745 + "hash": "0x168170d9401d8cc62b27fe49bb0e3236d69d2c6f81f74f36cc8cd3163dbfd394", + "cid": "QmfXYYGyycTnFtsQyhWwHKG2Xi2c55BQx2XuR1su4HpwLd", + "size": 475743 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p192_sha1": { - "hash": "0x2e4c5d1a60ba2087c208c51815a7c420a75082ca8476e7572a8c3bdd71b2d4ab", - "cid": "QmbdgxtwhdYiZV1aPhWPwrLDteoNuKpGVcknTgTwCyKtoF", - "size": 122841 + "hash": "0x023241ab8c4268bc7d6c4a3651aea1bbbbd63b695a59f34edeadf7a3a5035d75", + "cid": "QmRGw7GLGWUdMFo4jDwSyA4tk5BypvSanZZwbjR9DMZHfL", + "size": 122839 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p192_sha256": { - "hash": "0x12ec16045ca93c4700b6f7fcd8fb2b0fb604e0651bd45e10c4f23fd42a3d527c", - "cid": "QmXBb86zw4aNzHBHH6PCXcG5m6LSogEnGWrYioJ3VdpBk6", - "size": 85466 + "hash": "0x22c8afc30525dfd480dbfb7f14c51be065d5f6f3d5de4bc8f2d8e475fec03fd3", + "cid": "QmXSzWHS68P6tJj11fRWU5d1L818NRwWnaMmNd5WSrhViu", + "size": 85464 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p192_sha384": { - "hash": "0x2d55e4b7a17771b3ecb58b20a55a7c81bb5cdd3f079475621b67161b4dea36d3", - "cid": "QmRDNC1gqQicJN9xgXnXDGq8oTiCUnUutYndtvVivCgU5k", - "size": 153689 + "hash": "0x1f66934edacc7f65dfa2c0fc91be4a2ef8d8693c5fa0861b6b2d73f5fdc272f8", + "cid": "QmPfFuxTQLWahYAa8DYNhfs2XzRxDDYJfpB9CAnfgMUZkm", + "size": 153687 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p192_sha512": { - "hash": "0x1099592d45a39b1107253616c95b64524eb37222f1ec5eda1b543ef0dea1604a", - "cid": "QmNmcg14QDjKGpFVBVD8STwRcZXWv5VxDNdXd8XsHnHzTK", - "size": 153689 + "hash": "0x0e3a300c71efe026d7b3e2057894a734e513ecebc68baba4582a75f38be7584a", + "cid": "QmeQZQuZnVfDgHdiVAMt5NtyB8NCgEC6z6DJZBLBFmJMTD", + "size": 153687 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p224_sha1": { - "hash": "0x0a52bd9adbe1709502dfd576f652a920ac1b48ceea5efe896687fb4f46c70882", - "cid": "QmZy8zQmmPEAGcccbA2xNjSY5QHRcp6yv8o5Exurqu1mm6", - "size": 133157 + "hash": "0x0bbe733c257a013fc01e6314949810f3b71e771cf421aebad231e245443a5f8d", + "cid": "QmZnQ6nCU1b6PuB9YNsqw42haparcfnXmyV7Z49yHQz9Vi", + "size": 133155 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p224_sha256": { - "hash": "0x1c0d5dfa2de76caf95225c911f63a0e9b0d952983f27be0a43c75128879d5aef", - "cid": "QmadhSsU6ecDP8vrH4gMUqFvm47rUtBSThrXuDH2DgMa6j", - "size": 95782 + "hash": "0x03c2869087f9e6825ca1042fca8c8f93c25ba86d6b87b84c17e94b8b84c9ecd5", + "cid": "QmSZ3B7RLJJrPPySdUmBrpVTqAn9Vmrp4Gg5wGnX3uSDFZ", + "size": 95780 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p224_sha384": { - "hash": "0x0cf06e4fe18c455c9c906dddd957befc96ef444a71da7e8bca6ac5c01720b8d4", - "cid": "QmbeFAb6AGtvpZd3ut8cspTpqMfoFgE1erMCz8PJbDinHk", - "size": 164710 + "hash": "0x0fc1ae06512a86907570db192996498a9e371139980f96db8ecc252b8970a870", + "cid": "QmeiCcAfJ4ExzoR4tVtQbrFawsuauDVEamKgZsXTzZQMZW", + "size": 164708 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p224_sha512": { - "hash": "0x1a7a7f14bb3b3ec20799591208ba94f00dd69ddaeaeb8804286cabac0a2a237f", - "cid": "QmePqxrths65cFZpU5LAoQ1YmfgdT4stmxVZsWDXSGbZV1", - "size": 164710 + "hash": "0x0473fbf4f51070a39885b451a612c8cc20d1b6fdf0f468266286cd2128985074", + "cid": "Qmc72YX9cfA8RxmH3uhhA5d1NsZP522KAFXsaTLd3Jqrzu", + "size": 164708 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p256_sha1": { - "hash": "0x1e35edd9799aa147de4c33b3f1d75b01bee357df0205095840bf89d5152ad3c5", - "cid": "QmYDAsUDGYEDEHK2iz2B5ZaXNTdGue2N11jVy6e7eXxirj", - "size": 172521 + "hash": "0x2ead37453c49bf8d7917eb3567b4f0cb581d0e3185445573ab96b7d1973d6a61", + "cid": "QmdEg8icqLpjXq6TDLJ3Smvu4LNiYAQSr7LUppkiFSweZm", + "size": 172519 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p256_sha256": { - "hash": "0x18bb66beb1acdbe7abf07081016ef5ae9978ecbcfce0f60b12d1a20715016b64", - "cid": "QmZ7fqbz9J8iBNZCYXBEaBPHs4Qv5y5tsB5pgU2HSXHjDr", - "size": 135153 + "hash": "0x0c79ea6c3d645febd034e327955b70ea24af10352b56c6fab9d97dba8befa78b", + "cid": "QmbXCnXJxjSUoRpHAiLCJrD6UL89VCNgfLdVwkbQ7jAVQf", + "size": 135151 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p256_sha384": { - "hash": "0x1986df13fe5886c3a4a402f860a2e7a6695c2ebab65e3e6815506fdf0ae74c46", - "cid": "QmQi9aDjy3q2riiv19DPvwShbWSaMxUBE972Nbgh42Zw2C", - "size": 203376 + "hash": "0x0daa27da260228a7fc567408eea7fa2c29495b5abd0194be80037167e88b5933", + "cid": "QmUzYkBXBwfEqBdVxy7KgDuorDMYBzzigotXt3uH1rJL3M", + "size": 203374 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p256_sha512": { - "hash": "0x251fe48f9e0f1329501ccfa37c5cf6abc9561b44bb18ca6866b0e7ae295f5e04", - "cid": "QmYiHs2PNUe8ynTgx6qz7WeDkvnGPKKyhy64Y69xs7JnSF", - "size": 203376 + "hash": "0x1ab2503111b42dee7cfd77bf8702731f91c720188832f62da96c9b9a85f44174", + "cid": "QmYTE6vzRY14vGuRDFWRvXWNGB159JTDGVRnPYwLvqYcVC", + "size": 203374 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p384_sha1": { - "hash": "0x112886ff49a0fab49698d3999ed3c90d936adcdcd04326c1aedcc4b20b919308", - "cid": "QmcY7rZXh26Y7bEWnoyyBSjEQGASdYX16acZQmoFdnmCJr", - "size": 284700 + "hash": "0x001f6c7fc86b664359a1440941c84e4a7db01ec2c9ed3b8f69317814a911900f", + "cid": "QmdUQEP5VyEfYxMbdEyuwEt4E51fPRrJdTfdV78cwokxmC", + "size": 284698 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p384_sha256": { - "hash": "0x1832cba048f8fe0de59d10bd4d67e0610f46ede10638767e7d814e3df79b73f8", - "cid": "QmZ7VrMuykfMvrg2RrSDfmfvF5A69h5Vrywvp2KdH55JKs", - "size": 247337 + "hash": "0x212eb5247395457236012887380a461248193af40c76742fb50b35e6bf1a784d", + "cid": "QmTEmBpkd7SihpUiSZSwJLjib5NRvd311zr2mm7act6tSf", + "size": 247335 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p384_sha384": { - "hash": "0x1629dbecaa32958be94315e6c9766663352fd8e20bdcac9228cc8114fdcf2626", - "cid": "QmTwCce1WW5N9uRToxBhDdsH3SU8THHHTQAd4jJdXWpmQv", - "size": 315569 + "hash": "0x0008f98593753ef35663011ebf313e167e12559e1fb1455942d4af8fd1d990fb", + "cid": "QmUeG4s8ZmCghvjiCFwTbEnay9hL8UQ2eh6AcTSD9PuqyB", + "size": 315567 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p384_sha512": { - "hash": "0x2bbe60f81883ab42925d49177bf55be3eab0b33c0a78b5bc59139e4ab5f7c70c", - "cid": "QmdPB9qKfjVLCn2KZBJ2PYRR61ykRvoG4kauKRH2tK8HEG", - "size": 315569 + "hash": "0x00bddb3c091aa90b8a3b227d797a2468c969e3a7866099466c62a0414e4a2c3b", + "cid": "QmdwVFo6UDCRkDWWsXL6zYFqsgEHDi2Vsw7SZoDNN2isnr", + "size": 315567 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p521_sha1": { - "hash": "0x1a22db62d898a8a3118238c671a501c10da5f940ffce7d78bfc19076c3d565cf", - "cid": "Qmeu4Mffz8XxWHzKRM29rK3SFSHjAUAL8cC6nrqveb56sm", - "size": 453058 + "hash": "0x1e955d9ae59c578d63b0231dcde0a25091928078a7439b418986249ccbba9108", + "cid": "QmQ8ZNgLLtEEqYwownG3mwDpwqnq72bmCNNndKmnfudqrV", + "size": 453056 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p521_sha256": { - "hash": "0x121d8c05437c4dc7139a7248da4ae89a44cfb766ec4f79ba16b95f8fd7953c9e", - "cid": "QmQwmT53W2j8F5SmkGmWF5EMS6YabuQeXFk1SrRpox8wxm", - "size": 417072 + "hash": "0x0d85b230101be563681c0b5f04e455a6f6d812f7296a3a33f7b395442166785e", + "cid": "QmNtb1hZAm22rHeoShAyaBxBaU3soYvMXpZpDPnpcHTxZc", + "size": 417070 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p521_sha384": { - "hash": "0x1c418c0f2b49928d0ed457887a737e9a3dd5d8cc31fb752de01ce75006739aab", - "cid": "QmfHeMGPZ9hMRaZWyrwX4yqtbEEackpU2tzdvdSgLoShnw", - "size": 485313 + "hash": "0x1063ca8c9ade70157dde8c69255e8391240b5ced0c4ddc2a3debfa1605ada131", + "cid": "QmTJm8ewVh16nCnzaghje1oMUHD2cMfznZcbkmAjwdLZsL", + "size": 485311 }, "sig_check_id_data_tbs_1600_ecdsa_nist_p521_sha512": { - "hash": "0x1a95f099b2d336d2c767ae9a5e8460e562de69196e4661623bf9396d81d01593", - "cid": "Qmdku34odBhmaTFJkeRA3meWnsuzNhGJ7kmNhydVGVHScG", - "size": 485323 + "hash": "0x1e057f7e173fd772ddecc7d01f40d7755333d1573a5b0628e3be7b3ff45a8e95", + "cid": "QmVv91C12wBqKbUJ4GorbKmwNM3BvZX67hs1a5qnnGyt5N", + "size": 485321 }, "sig_check_id_data_tbs_1600_rsa_pkcs_1024_sha1": { - "hash": "0x1be84ef1c37f2d52bc020421dd03ab2281a647717caea4cf5a66b1f13870bd61", - "cid": "QmZEDvNmWEi7cXRHacU5hQnYXamm8odUcQ5cXFuxNRYyEA", - "size": 103634 + "hash": "0x1c263ca1faa8934a88cfa0d8c8e8e7e01f5718ba01d12e4747c85d9ad37c6630", + "cid": "QmecDBz1NGEiRKWwbVVmM1D66FaJDt3iUKhc7fj8pHX3SQ", + "size": 107273 }, "sig_check_id_data_tbs_1600_rsa_pkcs_1024_sha256": { - "hash": "0x1c609049626d1594ccbd9c397d585d0e2b7d51994904f7f29abab0d2ad2563cc", - "cid": "QmWTqT7mN81pjnHAEyiiHfaDERs4nd5qnwcqd9ms4Bfmew", - "size": 66273 + "hash": "0x0e7aa1f441580d79a2f80dbb703a29cb9cbf7ebe50100e4de52d43b952665ca6", + "cid": "QmXMpSAndgasMSJpwkDFQ6LkCr9Kqw7sZ9S31der3hZSqM", + "size": 69912 }, "sig_check_id_data_tbs_1600_rsa_pkcs_1024_sha384": { - "hash": "0x228d5f737c590697db931853709bab471627490751536384a531d6249d66f909", - "cid": "QmP1kRxuCBCHQGFwbQKe1qQFWeJE6c5qBXVbh9QHNgs13k", - "size": 134523 + "hash": "0x2b2c926660f5195dcfa43b84e4471ff5facc73a84aa8d1b44d69e9899522fa7f", + "cid": "QmXTewDbEYGNvskqxUYXV6gQAMprYU5AZfGwnBYDyiwuoE", + "size": 138162 }, "sig_check_id_data_tbs_1600_rsa_pkcs_2048_sha1": { - "hash": "0x0548abc27b2d0f4bc6a4fb5f4bc29e85306b6633dc11920786465a079703d257", - "cid": "QmQinnVpvG6Bz5d34RsEb3HkLYSmDVidLbSeR2DE284ika", - "size": 136734 + "hash": "0x068444edc6e7e57b4b88f237d421392e05c906a464de32e764ba4b5108d99de1", + "cid": "QmegKoqA9LMWi3zjuRujhaH3ZBh2kZ3U7Ks2SMZ55B4CYq", + "size": 149580 }, "sig_check_id_data_tbs_1600_rsa_pkcs_2048_sha256": { - "hash": "0x04d2e2e22f7835d4b698808fe9219c1583684d5b2d00102b2733f38bc6ea04b5", - "cid": "QmPiSNgjhxLNSLzGzzTkW6VwVNwcuQDiucgGma2VdG9UBr", - "size": 99372 + "hash": "0x037e88d4ff9d61072652cfd99065f0a2b4ac9132c4e478044b26f8e44162b5c9", + "cid": "QmXvq3CDPS2A5hVSLorxTYEVaqAXRpr4uh37BGbu5ndJrW", + "size": 112218 }, "sig_check_id_data_tbs_1600_rsa_pkcs_2048_sha384": { - "hash": "0x2eae41f75891cddfddade64f75816878fe5e5525b2e4f496d784e4b98e895b00", - "cid": "QmPPYb9Guv8CGXP3bcUPBhuWGXki1bCmvipGdBwk4Uj9dt", - "size": 167622 + "hash": "0x13b8358560ad7a87d8aaf2cb28b2aeaea063cb794297dbe12d80afbe98b4e97a", + "cid": "QmWX4sCLCJ11jxe4v9ZPQKsooTT1WVLBx33U8QqvAFRWwh", + "size": 180468 }, "sig_check_id_data_tbs_1600_rsa_pkcs_2048_sha512": { - "hash": "0x181e5a6422e272748ad4fa5633dc3f3600cfb4a79e89e139e48102ffef5f7847", - "cid": "QmRBYksxXWJuqTCHfWgZU1iHebiGoGPdvivFPQuni9YKyp", - "size": 167642 + "hash": "0x07aa6ce3a65fc98603e9e855ea7823c851dce3373a50f3fde6ed78900ee8645d", + "cid": "Qmf9W5jCowCLU7K7VdQX6mhjKycJc36ATqAt19tdbSagxA", + "size": 180488 }, "sig_check_id_data_tbs_1600_rsa_pkcs_3072_sha1": { - "hash": "0x0628b959a826cd921d08f80a6d6f76e6f8451391dfeeabab25213de732417b4b", - "cid": "QmUbQJvmPYhNAsDxaMJF5zWBjF1Vh8qiN7WSYKAjAdtE1Z", - "size": 174885 + "hash": "0x218d50e3c14b84f82ea7343f3d5c1a7eb3e831c541270a2da8fe17ef60c6fc6a", + "cid": "QmY8LjSBS1ex9MNki6Wsqp7oBNwyyNY5VjB1RskB4GkdGB", + "size": 200403 }, "sig_check_id_data_tbs_1600_rsa_pkcs_3072_sha256": { - "hash": "0x1c7cab9825f5b0506eea28ebf47be46acfb307897e75656237dd16917a63e293", - "cid": "QmRCTZYKyEfbKUC1vu7XNq6gMLbTdEfnECwNanwrHEnrsm", - "size": 137523 + "hash": "0x22e8ed4cd0dc58bbef3fd6f8dcb20c412d439c0700162efcf9559971145aff36", + "cid": "QmbrwkSLcruYjhLjKeZE7MAjwpoZVWcz8yjfaWRS545rwL", + "size": 163041 }, "sig_check_id_data_tbs_1600_rsa_pkcs_3072_sha384": { - "hash": "0x0fdb0e1d82b5e0baad4d8f6c2b664533e7b07ab10236569d0154a461c2920db4", - "cid": "QmQEjv9ZBqGZ2vNDiioL3fsPEqBphPCBDqY8EgSyJuYy6K", - "size": 205773 + "hash": "0x03c3a7e3e983ca5861b25a34a6ae703d64fa1bede076beca75ec2f52c5c76b38", + "cid": "QmV3WzUpKqUD5TxQjjY7X52ipAKRpYWHmBP54cZR26oi1R", + "size": 231291 }, "sig_check_id_data_tbs_1600_rsa_pkcs_3072_sha512": { - "hash": "0x189fb0fb64e2ea796bddbd59cde5e4617eaf1ce5eedbede6b77e3ef96bf8b1d2", - "cid": "QmZs3b5Bg2MDiaBPdeTdfmdd7ijgjhAbL8PXS8SUDFzBNW", - "size": 205793 + "hash": "0x22ef70d1e1c4c4a14375f56b21954afb5f1c052899cdcef2fe2e98cb6d5bbdfc", + "cid": "QmW6XMUgY8Ee8Y2DXXRcsKXHjmVgWb4Zsbedg9wUBLHJLx", + "size": 231311 }, "sig_check_id_data_tbs_1600_rsa_pkcs_4096_sha1": { - "hash": "0x21bfb9c7425a5c8b9a19c235a6aaea691194f945cd105e273479d693711b2006", - "cid": "QmebUUHYbVr6J7KGLo6yW13aB7XDs7WtcTfdeSuwaLTyuR", - "size": 225833 + "hash": "0x152ba6d4dae68ae0e947f0e1140886e696bbd5edded906eef429f918dcafc6d8", + "cid": "QmPiGRZWhXNEHhnsm8Afk5AgzxxhVtJgDr38MPRybD414A", + "size": 270656 }, "sig_check_id_data_tbs_1600_rsa_pkcs_4096_sha256": { - "hash": "0x18d82095c864d40d56cedd2c08809dd95ad698e64f1c774fd9fa51157f26683b", - "cid": "QmejSfHj6jJqPHnJwLoLuu9LnkjL5ARdH78nSTnHjgk299", - "size": 188472 + "hash": "0x270b23c79997f2f99fe641d89fab639f56b031abe4342efcf3adc52b4d3de050", + "cid": "QmTtWPafQR4oD59VYYV6yuEA3u7XoFu8kCmHiPmqFx1BV7", + "size": 233295 }, "sig_check_id_data_tbs_1600_rsa_pkcs_4096_sha384": { - "hash": "0x104a05b9b663355eadef972d47e4fd560d78724166059b73e34e0cdef5fcaeb3", - "cid": "QmdT2AxT4jS5HU9FonLYjuRAeXwnpPysZuiG6zfQSwaZEE", - "size": 256722 + "hash": "0x0cf3dc0935a19815d06e10e191297b3ad9cbf9a482dbc3ec0221a321d21cf258", + "cid": "QmcXkjnEwmJgePctBrEiJgqB99P3Bg9V4PMp82L7W12hTo", + "size": 301545 }, "sig_check_id_data_tbs_1600_rsa_pkcs_4096_sha512": { - "hash": "0x272b3bd04d72749359f811be6431bc46f3fe6511c140d9a42d47797a16c5ca0a", - "cid": "QmZKvceaRVCpaijrWgnxXyD1BGKL9HoE2DR61C8PuFoYUJ", - "size": 256742 + "hash": "0x056103fb48e5ccaa18d2431c95a3815815e4a080b71bac0d1ef35beaa127d44b", + "cid": "QmZ2sN5TviRy62GoPd69cd2GiT6m4fR4MbQxKxCMGttfye", + "size": 301565 }, "sig_check_id_data_tbs_1600_rsa_pss_1024_sha1": { - "hash": "0x21ce9042e3e212d37941ea721a70e9d731949c8cb65c10458b446a52483d8b1e", - "cid": "QmTDU3ss3BLbVsWoEYomiyG2oqadaEFhCrwRkuvrs9hxf6", - "size": 178857 + "hash": "0x208445f982122c9b3cb22014a246da02b97b0417128add23fbe512f15ee37736", + "cid": "QmZWcs3spS2yx33ssJXio3f3KDoMbKetFH2G6G3WYuKBWs", + "size": 182378 }, "sig_check_id_data_tbs_1600_rsa_pss_1024_sha256": { - "hash": "0x29ef66b90d7a555f514229fe3c79c641adafe25e146c4a0c1426172895082dbb", - "cid": "QmamHkv99FayHG4ybKVJpFegTetSn7Mq48WiiAbi7rQddA", - "size": 93884 + "hash": "0x1a6fc25c007ee2e04bfa3e9bdd10fff291d38979a10902e5590ae57020e779ac", + "cid": "QmWio5H3juAkWMH7Z3Jt2Y47GCa4vFfJYt8ArQrCvJYA4J", + "size": 97287 }, "sig_check_id_data_tbs_1600_rsa_pss_1024_sha384": { - "hash": "0x25e7d627eadd707c3a2a619071f0ad0d2c0684ded34e493a1a3faf25d78386fb", - "cid": "Qmeophu9GN1nTUYYPzu582muBXrXmCcxEdMQnjS4PM97Xi", - "size": 216163 + "hash": "0x23dfe9fee69d154c9ebdc556f2f9b9129a6dd88c02f4061137bf8ab1904210e7", + "cid": "QmQLL6MXpZ8gCbcJwZTtzXwRRDf5nit5Khf5Tz9DQ5JqMt", + "size": 219221 }, "sig_check_id_data_tbs_1600_rsa_pss_2048_sha1": { - "hash": "0x0377df49e25a929a4f8a6ccc46b49437934ba2c6d409492ac9f613ee94a0df63", - "cid": "QmV7g9zW9xyrb4uwVa2vnoVV6K4KCF1SwTpMUboDTdKPSz", - "size": 264439 + "hash": "0x10e5c58f3030d3577cb18a867532d7cf2d6198becf099bf443feec48f5231e36", + "cid": "QmZu73etjzZAZhSZPUUPfijCxhzWf7cjRv97LYiB8fD9vW", + "size": 276847 }, "sig_check_id_data_tbs_1600_rsa_pss_2048_sha256": { - "hash": "0x2e0b58a60a3cba3ecdaefbdcb6b3da8d470fb725c840d17088557f05ecb43552", - "cid": "QmUjeULKZaSD2CfvDVB2iRCGkPn6rBa8o6goBkR8y4BMx4", - "size": 145088 + "hash": "0x22df95a78ffdee8a617b9b90307cbe80e3256742412f42017f8e4e3a9846dd42", + "cid": "QmfGdW72JwaWohDocXsuu5ppmD9ami7MonGTSDVAV5kSDQ", + "size": 157378 }, "sig_check_id_data_tbs_1600_rsa_pss_2048_sha384": { - "hash": "0x1276e35d81aff2cb072314c82c950a3d76e7038c5426eb20ef234faac4004694", - "cid": "Qmcs351i4ncTDxHYqRbCfoRVWiYtBmFu8wKMxHowDdmz9F", - "size": 323199 + "hash": "0x2c98b4b5d5a3b4a68f61f89ef2f9ade14892604fd769195f7b09aeb66ec0bedb", + "cid": "QmbrnK7Gcped2VJ3a6j5cbJTtD7NNdF4YWq549mEGn3Uh1", + "size": 335124 }, "sig_check_id_data_tbs_1600_rsa_pss_2048_sha512": { - "hash": "0x081c18e725f483d743cbaf4f3db07f7174400f2647eb11a3c2757ccf2a619739", - "cid": "QmQmT6Uu9jYRbnssbjV4c42MSv2ngMXQZYzeynCNVGFQFg", - "size": 302556 + "hash": "0x20a21f6c2273f294d8bc0406973ad990c0c71e7e7eb70edeacdf7bd9a2f4d290", + "cid": "QmXJfHVZpbEYBMQtq3VxTbyMgoav2ofPFtq28d5UoNRFX7", + "size": 314353 }, "sig_check_id_data_tbs_1600_rsa_pss_3072_sha1": { - "hash": "0x227c9584e4312edd7bd0d9a0c3b2479597bd8d9bff381519b4b61cb5cc50ddd6", - "cid": "QmTXiVqX8u3kdCvdMYwHjuj4wvVoqxzWXXsr2Tmz5Lnqzn", - "size": 363492 + "hash": "0x167e21244037f23ead98be22286969a61cd2fab5249e573924b6662a32d17ba1", + "cid": "QmaLJZjWUsRgaQr5MeDGxH2HfqJDjiWQJJZFD3eSyHJEob", + "size": 388252 }, "sig_check_id_data_tbs_1600_rsa_pss_3072_sha256": { - "hash": "0x15458b77ce77553ad3cc9cbf42cd7a04ab14f5516b51a3973bce2f521ef7d073", - "cid": "QmcdabCdgqMLQoCb84vrBsGaXQfGLJ5QDbR8FXUm44EYVR", - "size": 201343 + "hash": "0x20aacddb4e47eb84f35b824e5dcb541871e295b225fbf4e6ae4749170f28d830", + "cid": "QmewVBz9Dsr7Eff9YqQbSR554MFZ3ubjjJJdyPtSq8TRLH", + "size": 225985 }, "sig_check_id_data_tbs_1600_rsa_pss_3072_sha384": { - "hash": "0x173b0fed954303ddd3a4565ed2aa0fa90895d571877489a6eacb8a5dfcbecaf7", - "cid": "QmZQ3do6fK2qXUR6cThKkLdq5bMXC5tfFPzVyurAwnjYA9", - "size": 411286 + "hash": "0x0faef94e2345a9c52ac193da1d7bd1ff3a4fcf7a2271ca567a1b2eacf31928f5", + "cid": "QmV3SL6JBNyvYz5GCoL7or4DmEs9LNwkbRpHmXmJ1sic6R", + "size": 435564 }, "sig_check_id_data_tbs_1600_rsa_pss_3072_sha512": { - "hash": "0x2bd32e39c8e1f2491946cdc014567c57d487b7179fd0e03a12579315e167e18a", - "cid": "QmbFLPVp3ZA8THp6HRLmkphoG3YzdUSLRZgKoXGynoQzYa", - "size": 389239 + "hash": "0x1e61d3682f6fd021c3b6ee391609c58de80587f465da6d6f86d0060320ad7841", + "cid": "QmQgcgSzu8AvqdnqVnt8szZvfRzxdHyPntgB5VqysabbTZ", + "size": 413383 }, "sig_check_id_data_tbs_1600_rsa_pss_4096_sha1": { - "hash": "0x28e99e052aede6cc34f02e3e2285c8d754752ce76e20ace3430ccf534e57fedd", - "cid": "QmZY32nfXaig7q9oQ2v4MeYUmvHSHor4gYcUJX6453tMn9", - "size": 466925 + "hash": "0x1c78addc9d742f5a19da461a10b2d41c59a4295f0a8508d68faa7117278daf73", + "cid": "QmXPhkrcVoAjwiGAUF97EKtircsSxP4WJHex8nzxE5D82m", + "size": 510670 }, "sig_check_id_data_tbs_1600_rsa_pss_4096_sha256": { - "hash": "0x06dec4eeb87b693affff533a5107e8738a7f6ba9f7d2f260ee62f0458df5ff87", - "cid": "QmNvUAkS8Ycw82Q8u2dTKbmLprP5gtVBtiMJZ644b1ievi", - "size": 270398 + "hash": "0x0d5ddd59ea2401e19ff3f398b95402e9483e3ddaaf1f45dc5487705d795ee7cd", + "cid": "QmX5scSGtGN8WgYo6No3x8AfNHkjTwuzGigmxWSqVCnTSR", + "size": 314025 }, "sig_check_id_data_tbs_1600_rsa_pss_4096_sha384": { - "hash": "0x16462bb46da49502139f3f6f3b186119cf9f824518cecbbdfa87d213951592e3", - "cid": "QmYhV66paX5y87eNTAV88PhKZ9HojxsLp4hLRBycSarzYE", - "size": 536149 + "hash": "0x209b4dab8f38b08309292eb84dae1cdb956c879f0f1c8b464486dd8479949f56", + "cid": "QmVcGftuuQeUKjaYHW1LSnqeatJ6R8dr6fGVQ3uLyjoQFq", + "size": 579412 }, "sig_check_id_data_tbs_1600_rsa_pss_4096_sha512": { - "hash": "0x23888cbd86f956ff3d387a06fda5b9fa2c02b2021aa7956cf4b2eb85c109d048", - "cid": "QmVVhdo2VDaWQD5UwtinERkSiRgB6D1iCdFYy1AYqbR7g1", - "size": 488716 + "hash": "0x00dc8b5a070968f2a0ac8e68d19f14be9436ab956ddb808d983d745e8a4aecd6", + "cid": "QmUqAgoyKdcXvgzUkieBbFPvzxAmo8JL7DQwVcTxBDXQkd", + "size": 531844 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_192r1_sha1": { - "hash": "0x205cd77b21e2e115b16d465f1b84e6f815a49c064b2e769ef16b8fd1fc00f4b0", - "cid": "QmTT5tosdRrsKsqgF49PGv9yiYSqUMqVUtYqPhww9yD4MZ", - "size": 118364 + "hash": "0x25c25d99e09952cdb06979f06941a4411414b48a8cdeeea9305bef3cdfec522f", + "cid": "QmfL1srmhKMzsRF5UCb4YMYJcrfrgQbeC4YHGeQDoJx3B8", + "size": 118362 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_192r1_sha256": { - "hash": "0x0a8aaf43192b6b5213df15490269bc7172295648acfd3bc27d2a1a652ccae50c", - "cid": "QmeEbW2KkB2KSVHhraraoQZo8yCkFqN94WCKHp7NXN4eTu", - "size": 80665 + "hash": "0x19fbae59ecc181f1532ed73c63767fcb58b3649901ee7be4a02530cde02e636d", + "cid": "QmUCxNtzJKe1ySjn7nLN6XS7ep6fUmKTHxRcyNfvmaMFBm", + "size": 80663 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_192r1_sha384": { - "hash": "0x09fa4f44f826f838c8909c2740c656c5b37921021d19f2215535baabbb087aa0", - "cid": "QmVyhtcZixQsXnp6BP88sbLuPMmrms5VGVF5gvp5dbba1K", - "size": 149212 + "hash": "0x165883010745b363f20f7fdf868bbac5e5e340f8b31cbb6ff22e1dc71189472b", + "cid": "QmYS5RUJqFHorkgudAQ5nXC8nRppx9pTdZXszg4Vz3YaPo", + "size": 149210 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_192r1_sha512": { - "hash": "0x23f22276479aa855319f31f8ff076107b9a56bbbad3fd8f21bcf532c7424b0b7", - "cid": "QmQZRcEHFWG4XDuQm1vBDq4otSMoCDdLd7HdkLyNjY9dzB", - "size": 149212 + "hash": "0x26eb4ab269376da0cf40a942a84360f4be680be2bc3c913928e1e97d5930a9f8", + "cid": "QmeZPomZPY17FbyaL8NYTcKtb6UWmWVk3tdJGKwfo12RYX", + "size": 149210 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_224r1_sha1": { - "hash": "0x16cd897585b772826440f70c46733adafd7f6a77d36f14acdae2226eff10776d", - "cid": "QmbreCn9BM59Tn6ZM6bqxwBoiZjFHzwwXvwYigz7mATyhM", - "size": 128680 + "hash": "0x20b00cf998d1d556f860cb2a946ae4336f471060914e2b156c460bec34e09dd5", + "cid": "QmY64okpXS1A7USH7Q3awyxkyZxGDNq9RwGphMGFjr44Pi", + "size": 128678 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_224r1_sha256": { - "hash": "0x03bec2d117e6932e2b5a389620e2b546465ee1f460f7dabc2464b128d51d4f38", - "cid": "QmPyxfFEtfxRNjfcBKkkMkuD5Jeicdo5Vg8exu2ibaPuaL", - "size": 90981 + "hash": "0x2116b1000ccb0d7e850cf6c31eae636155c290add3923f61f76a21c5aac013ce", + "cid": "QmRh93mWgEEZMkFJebxDU3v6ccXLgrTiW1QvBV6S7JSasa", + "size": 90979 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_224r1_sha384": { - "hash": "0x0a56de72314f7d64287b55af8955df8aafd5917c3ad73c069c45988d56387d7b", - "cid": "QmbBCVA865eb1EZXnBagMyc2LPQ9TsccoXqSJMn4GxUizG", - "size": 160233 + "hash": "0x1c4231c2d971ff25db66d9c84b41693cd7366314fdd6131e5ed6d0d8d81182da", + "cid": "Qma4gMtug2zApV9kigGCrHTLjh2VenQVukxioZkc6Patjs", + "size": 160231 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_224r1_sha512": { - "hash": "0x2681ec9b520f6e8d508540f8fa8de8d5cf74c0282e0b459f53df17c6fd3008a7", - "cid": "QmQCsPVH8D43US1hQW6YRARTD9TtkmoVoCsgjHrw2CpjrA", - "size": 160233 + "hash": "0x2362e7717e90b85f96411b7c19cb86d661da884642bc39a846a7736b66dd136b", + "cid": "Qmf5tkJpx5vVAXv6Deo9VKFjiLQr6SAk8itmFv9Ut34HPm", + "size": 160231 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_256r1_sha1": { - "hash": "0x1b71c5a6523ef710ac849c1c18a8398c0d862cafa48a68ca167a2acf2e4b75f3", - "cid": "QmTVkeRFsYnRYKhdLbuKCSdwpFYBUwVLmNJsRRqhmz8QeH", - "size": 168044 + "hash": "0x0b74a5e184a82edb67da311835d9b734daff69d694127adfadc9276ab50707b7", + "cid": "QmS4fitjmswVfrXfZZqtXwo6PV41NfQNjyhJYC4XCMGErT", + "size": 168042 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_256r1_sha256": { - "hash": "0x2b35fcbb7afd816e7093d781a2493b7ce208361b61fb05bf410d35f3703754f3", - "cid": "QmWpKM8AzSkz87efxsN2z8AU9FX6UPMVghL6U5NHvqoU8f", - "size": 130352 + "hash": "0x060979333b108271735ca4b4ffb6c4f4f6ca2373da071993156664bc0bbc4c62", + "cid": "QmUV9hrojx7SgiowYAhRNM5TdJpCtKDkpTpikMquuRp6wH", + "size": 130350 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_256r1_sha384": { - "hash": "0x0ec4764e45e30c270df18c5850f06742a76a429f358559bd17361a6c60be7561", - "cid": "QmdzPKmjmM2JGTcH8Xima1MNqKBS33X1ftvsm9nJmCfcik", - "size": 198899 + "hash": "0x132730676c7042ed6888348dc5dc80ddd61d799a8824ceba6f35b0fcde7359fb", + "cid": "QmQWF8PEMVK9ikV8ZUT5BkLdrEew8rmP48SfPiJYrSiTkT", + "size": 198897 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_256r1_sha512": { - "hash": "0x22c6bdadbf5b20daa6386963163c55d4579b70c62190688ee2102477247ad9a6", - "cid": "QmfT119wYbhE7Yu1gUHKyMG7SQ9Fm8abix2cPbj1H4CWvH", - "size": 198899 + "hash": "0x04a99c258c1c9f1a1524ab7db8da786e0ae9489041b673a1b4cf339fc4df70a5", + "cid": "Qmbw1dpFRST9LjvAVBJyt2nBhHGiC9BWbAH9hbkYMFUZpK", + "size": 198897 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_384r1_sha1": { - "hash": "0x14d2ac93f72f1eabcf7704b14ce1c0e42d8914e264934a3adf334aeceb43379b", - "cid": "QmZWxUutq7W6wxEVXuNLkPK23H9tc3HWz7QoswfSdfCVui", - "size": 280223 + "hash": "0x2b7f5300bd4d67ffa565ce83553a567b318ec6ced1c187331c37a9411cc5938f", + "cid": "QmYbe3FQBp8hwvJ44zijWqkojeqRWamL1c148eYjmCTgDY", + "size": 280221 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_384r1_sha256": { - "hash": "0x2eba186da8fc1b2ad3e21fa803696961700321890ccf0edf93c361d3dfb9400f", - "cid": "QmPd51yRv95YkxNxQC8tTxa5P3U3eAnan7N4ohvaxsaqc5", - "size": 242536 + "hash": "0x0c8e5b120be7d5ee22c8e073041801926677319c5f1afd0509737437df410861", + "cid": "QmQiykx3dsSw3iktKGtAeW44zMBVvBTqwFXyyS9G2SWvZZ", + "size": 242534 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_384r1_sha384": { - "hash": "0x21e2f4c8af76480fbe54289cb30b5ed7960b231cbca0d834049cde14d86eaea9", - "cid": "Qmbh1UNKv4hWvsRdWRUmE6ateTc3FDyShe5JVUcjDcs4Bx", - "size": 311092 + "hash": "0x12a2dea6aa7daed07dce4b1fc866dab0429c3d2596144632641549ed0cb40990", + "cid": "QmRsYFc4tcFcZEohi2MRutPT54tkWXoRe6iAqDSJeRDWbw", + "size": 311090 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_384r1_sha512": { - "hash": "0x18fcd143834afffbc92fda6a10f4d0e0f5254d9e71b52eb2a17afec82ebff395", - "cid": "QmU1K8drvr87LLJ9W1oCpyx86Qgh1D7RfAihiPWGxMjzRb", - "size": 311092 + "hash": "0x1ee3a5115a649f635ca07df63fcd51c817159a885242b1771820ed286c4449e5", + "cid": "QmYPnaDRngumtjvg6wALExWiyssZm6JUH2XDF6Cy7oA92A", + "size": 311090 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_512r1_sha1": { - "hash": "0x211bf55234144e8f39b8a318e5853c0c6b74ecf7383dfaacf29a3b1d414a9f0d", - "cid": "QmV8Vwq86TfYm7QtN7dJLB4FN2Cc42W3PdSEsonoupnX4t", - "size": 440381 + "hash": "0x07eeab0c46caf0516bd79844d3d71a6b42006ffc3dcce3fa7ed5a5fcc9251832", + "cid": "QmWKXejC1ewgxkySwTUCKu63uULjGKv6q7DRiyeHZqXfAj", + "size": 440379 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_512r1_sha256": { - "hash": "0x25677d9f0d5ed748a648008a1d988aca91a960d7a7cee44854eef7422c73cf9a", - "cid": "QmPxZjwk7YVeUheCKGromvAfSDKWbqYNh3oSETLpTGzG5X", - "size": 402693 + "hash": "0x11d5612fc8ce76d1809ddd20cfe62039a30eedb021d913ce68fff6043c6a2730", + "cid": "QmX4DaRoac3XNbPdVZYr1mBLbEt9rg4aSsG8EJnmeSH3Mm", + "size": 402691 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_512r1_sha384": { - "hash": "0x252f71fb372d24fa2aee0f24546e7b979221e0014807570d6e02d794c9f0b03e", - "cid": "QmSCVhEztwY188GmWcE51Lvu7Mt5pmYedxXj3NSXFrXCmx", - "size": 471258 + "hash": "0x18df059101b8b610af7b307ebe8dc5d86cb3ceeff4054297b1df65172460444c", + "cid": "QmPuNa6y6QLaT3KGRx5uvFqabFYedHg31V2PG3KZWNvEjP", + "size": 471256 }, "sig_check_id_data_tbs_700_ecdsa_brainpool_512r1_sha512": { - "hash": "0x2d4460e9c9cfbcb9af30c1c0e0cef4632580c8e2ea11caa6acaf08d783e945cf", - "cid": "QmR83thyWfaa783yEorXpmjJWBAdbzA8avJAGr5wmA3UTv", - "size": 471268 + "hash": "0x136cfe7e12a0dbe201a9a6aa3442493a3f7acde956dfed3e6d775fe65d908721", + "cid": "QmNp8KoAkPqbA6SGpGoE7mhN6JqS4Nm9qKDzXhUUaTH8HT", + "size": 471266 }, "sig_check_id_data_tbs_700_ecdsa_nist_p192_sha1": { - "hash": "0x0b40a15d846388861b5b85d04d908c05cf6bb52e67718e665fc968d20a13529a", - "cid": "QmdaGXEViBoyi2abTdHBYAsH3L8RdFc9h2ZxdHBwQtQxS1", - "size": 118364 + "hash": "0x1b344a18c64bb546c1ed3fad57c7367ea52fcf4e433e4da6d22a241c2f48215a", + "cid": "QmTBs48mJS2XReJYbFjx2kEwrsiSxq1H2W7LuV9P3a4Dep", + "size": 118362 }, "sig_check_id_data_tbs_700_ecdsa_nist_p192_sha256": { - "hash": "0x1e9f604629eaf3c860a1a28878214032d62791573dcf87997f05c815a5d35b70", - "cid": "QmNuEvScGmb6x7ddYT4wcd3T1kCJddwKwtgVZmyw1jT9Mw", - "size": 80665 + "hash": "0x19ba217500b2f55ed95275cad20576b07a3213a0aed6961d940be02084a45c58", + "cid": "QmcjLhU8GZCpiP8epPwfAZX6eGqdHicHn5jB7psF8rng1f", + "size": 80663 }, "sig_check_id_data_tbs_700_ecdsa_nist_p192_sha384": { - "hash": "0x1c57a4daecb95409254981232308bbedbcce0d33cc6bae7658287cdba75249a5", - "cid": "QmZGeaNkzhSvaufvsbXg739T4jE4QRTGkhvV2AHccmN9Vm", - "size": 149212 + "hash": "0x0ac488f15612c94f64a6bd395924392a250aa8a8b9e4729dd21199031c36652b", + "cid": "QmR6BA7VHXNBsgg7spkwkJWgeUpjr1MkF1EvCKC3dewHh3", + "size": 149210 }, "sig_check_id_data_tbs_700_ecdsa_nist_p192_sha512": { - "hash": "0x186f308587f934c00f5b54c0154bd314f3a103c59a3d5b2416101a682c071845", - "cid": "QmcUJnXJgcHY14TgLgwv8bBSFuh7UgSDjdVHppKcbDoanF", - "size": 149212 + "hash": "0x18b96a93f57b378d7fd399ccccd72cb4a1b424f8a78e64a555b43c0f05f67150", + "cid": "QmapbdWyeCFQ92D7MNZR2kFJPrpLcwHji7SMhmnhQqQrgt", + "size": 149210 }, "sig_check_id_data_tbs_700_ecdsa_nist_p224_sha1": { - "hash": "0x25b6a6f646c17a53d5025c31cc5dd3ccca53b1af786f280fe2d32b16dd7e9e65", - "cid": "QmTaaqoA9ty4ADPUtGuswnHcXviLWQDdb82eZbFvQ2mQ3b", - "size": 128680 + "hash": "0x2085b56a3e083b124f736137ff02d2e7fd41a221b1735cf35efb322fe0fc4c78", + "cid": "QmcqjRVyzASv9QJ81YG5ice6254xdpZaZ2GGyWiTaKBDTn", + "size": 128678 }, "sig_check_id_data_tbs_700_ecdsa_nist_p224_sha224": { - "hash": "0x1d27db33db4771fedb029b42d98d9abaab30cfa9b81a2dbce49c49950cdca3a0", - "cid": "QmakqPcAEqgtJerSoGLGgJbrjpFKZQCKTWtwhd7ZycmFxb", - "size": 90981 + "hash": "0x143e94ae511e787f27009009ec56571e3abe45e764de880483286d3e80d5487d", + "cid": "QmRwGo21PJVDbf84ALRPm8CwGYeb3BLfjoVpWzzDBnxcJy", + "size": 90979 }, "sig_check_id_data_tbs_700_ecdsa_nist_p224_sha256": { - "hash": "0x1a98793e8fdcb07eb6591c670bdae5fe90775d44596f5b66dfec2d045a87471a", - "cid": "QmSBMHmAJyQz2L1iXZDnyZcp9gXBHCGBi5ub5xA92hJqbj", - "size": 90981 + "hash": "0x196a762b177e76f77595731ce978f42078facb0f1c6e8bc8ad374ba2205ce5f0", + "cid": "QmPm4V21tzdSoHU7WMKDqx2khvEBiPYKn2znEUyHVNDnkJ", + "size": 90979 }, "sig_check_id_data_tbs_700_ecdsa_nist_p224_sha384": { - "hash": "0x230f3e8e100404e68eab27b0ef6405d8fb26e6179134a1258e7349f99e23d9b4", - "cid": "QmajoACkXxXH8yaQTvNFoAwmPxKLzjSw36fEr9t21cU9EN", - "size": 160233 + "hash": "0x0e19f6ad020c6075f73bdb6b274b6931f971c091d6152f544f74f156518df936", + "cid": "Qma3tnc2nbnapH3i3HxCk3ChNH6ccDQ7Gi8MBAAFxFnTtn", + "size": 160231 }, "sig_check_id_data_tbs_700_ecdsa_nist_p224_sha512": { - "hash": "0x16f4294631b9903c08faeb82e54162b51918905682ce63db8a045aa68fd8f8fe", - "cid": "QmXkDauuRp7oCLJe8K31Xdy9g7SbvWHVdLMLuSvLWAaGop", - "size": 160233 + "hash": "0x2e4ced9b093d327164ed5c3301515a45a9a5fc7e611e23f45d2d97aa82690c12", + "cid": "QmS3JVumVQnVTAmyetTJXrAGpBcCLnrhKi7M6fecCtFpVR", + "size": 160231 }, "sig_check_id_data_tbs_700_ecdsa_nist_p256_sha1": { - "hash": "0x27141400a4d246690b7c833d8ec03c4f19849c06117676e72eae89ab96177aae", - "cid": "QmWKoL7oimgFgQm3nZBQQLrC9DHcdrWuH5NLfgi74JVTfc", - "size": 168044 + "hash": "0x1ac982e1940691e392519789668a7cccfbd419540ed9a200154de1d27a141b8c", + "cid": "QmVniKCbbz37Ab9YRUwHB5gyjnDh69oM4GxRHH16UWcduc", + "size": 168042 }, "sig_check_id_data_tbs_700_ecdsa_nist_p256_sha256": { - "hash": "0x10b433ee0400e296dae8f749f3c02d90ac5dda46ccb40bb7ff675a10a4adda8b", - "cid": "QmXf9AEZfsGLn4VCwoSC2yKUDAD3KwQ52qMncPRM3yqhX9", - "size": 130352 + "hash": "0x1edb6141638521de2611a11a0b2bb0aa9816dd464734c5907f5dd63e955c7565", + "cid": "QmTB5toJU9YpnngRCGQZoPVPvrQJED54kB2UsW5MWPQiVV", + "size": 130350 }, "sig_check_id_data_tbs_700_ecdsa_nist_p256_sha384": { - "hash": "0x14092f38b820b94a886d2a4a474d66e27ae262b1b6f96367c99ae7969b910ad5", - "cid": "Qma7yvD33eJsvgHfQYzyfsG554zJr2GM2AwZ66CWfqBHA3", - "size": 198899 + "hash": "0x17a5cc54be20f70c7f27ae73927dd5441b8a3505834ecef6e9811e48bd9e6c47", + "cid": "QmVPesDyuGR2VBYVeNh39giiPCQgSLv3Zsj6R55tPb8nHM", + "size": 198897 }, "sig_check_id_data_tbs_700_ecdsa_nist_p256_sha512": { - "hash": "0x220f719354eb32268997b84d0bcd6d7bb54b54f5375a35a97bd9d1cc37071a99", - "cid": "QmTg3MMdnnC4Dm8GBSDCwm5ZQEedsc22BEMLm63E7yRyX9", - "size": 198899 + "hash": "0x0bd0278e94ed15458b17b38edf2ba293a66e863a8d7f7d69180880febecc0ef4", + "cid": "QmbATXbLZGNHok1VFQc7n7XLaYVE8pm7Q2cs2R8MBZdBEZ", + "size": 198897 }, "sig_check_id_data_tbs_700_ecdsa_nist_p384_sha1": { - "hash": "0x094a6e183de93bf783ee26f8ddb3627c1b1242dd73f713b3476268adbd45d752", - "cid": "QmWSeVYGjsLJBbXCZgtLP7cyC73C3qcKKoMGuN7TggFLTs", - "size": 280223 + "hash": "0x2d2c177248c4563b13c14594cc3b638cc63fa9441a1b501d05052d994e1153ef", + "cid": "QmUNZAK9mgBCvKfBANpunT38soxPnB8ipbdk5HY22dQfnN", + "size": 280221 }, "sig_check_id_data_tbs_700_ecdsa_nist_p384_sha256": { - "hash": "0x1e75d1ddad4755e94c563d1443ac0dae067be36e2020b6f68968211b3e55d0cd", - "cid": "QmRWZc7QA47HjfAtC8RXMUnvc1Q4exJZiqKrHJvVpZTTpy", - "size": 242536 + "hash": "0x179d0c75942288b260edcb702a74fd28773df96d74351f189a666f81d3e2190f", + "cid": "QmbvbqADu4xWnLdEm7X7NhyyMHGS79bs3bsZEccTLdXuhk", + "size": 242534 }, "sig_check_id_data_tbs_700_ecdsa_nist_p384_sha384": { - "hash": "0x2b39df8c586ad55c6db6cf07bd6db5dea700d2deebddf9bfeedb41bf95ba0319", - "cid": "QmbDJm2q3wJibdCjYTmE3xbByq77duN84Bxz6zCuKZdDPu", - "size": 311092 + "hash": "0x0a4e0f4482b1634a4f51d156373f0b352b49f342b02b1ee2b0a37ca95094d9b8", + "cid": "QmdDyTLnTc1o9R2n753L2zBRYBAUF7TEM9Sa9GCs8qm4qZ", + "size": 311090 }, "sig_check_id_data_tbs_700_ecdsa_nist_p384_sha512": { - "hash": "0x23563b65733dffc0664f9ad31c910930da1d3f5a4f3ea00736729ab719b4675e", - "cid": "QmWgcWtEAVnroK2Ms9V4CqdbQ87cu62kzmTDNue4QsRa5R", - "size": 311092 + "hash": "0x292d6b0b6c85893097235b8724a89cc233e0361b4c03da8de22d45d3ae2548b1", + "cid": "QmbUeMSbRzytMkGijyY9md6tprxY2Ha2AUvJ6Qa9qtnNdN", + "size": 311090 }, "sig_check_id_data_tbs_700_ecdsa_nist_p521_sha1": { - "hash": "0x269e6ed38b0f1faa51e9708323a5877dc07840edc619e970103cfe6fb2f33ff9", - "cid": "QmayzP1HBYqDnxbRZ57pBQNfgTp5pDLT8X5nU12qNLsPH4", - "size": 448581 + "hash": "0x004e2d30df54b512e94d4f7edcb29f8c770fe235a12d7bba69a736a5cbe026fe", + "cid": "QmcHU7Nn9CmTaa1Qvi9PA7KBVHyubDrGNgfqxUxFVfAuNX", + "size": 448579 }, "sig_check_id_data_tbs_700_ecdsa_nist_p521_sha256": { - "hash": "0x18b71e74ea1836b50f64cd87921353793e7078ebaf88dfd207399e1f51678b7c", - "cid": "QmWaoepayEf7wHei6LLht3b2in65s9yQoNzALPAcz5s1Zg", - "size": 412271 + "hash": "0x2de894f099cbb7c0a100c9a8dbb59b87880960d7640e5dcd79e4c63a497ba679", + "cid": "QmZ4pRYxTaauobNzMT3RGeNkMdBj41uka7Y6CtAw6ve1wL", + "size": 412269 }, "sig_check_id_data_tbs_700_ecdsa_nist_p521_sha384": { - "hash": "0x253336d5f22233d6b2471be4e993638068fea9e6bd104c5d42897a1ed69e7325", - "cid": "QmRKJAyL25GR5wVriqyVmVFyKL1ZJqEuJRqSedUF2jTKEr", - "size": 480836 + "hash": "0x2e308a1c25cbd05c0bc6f4b0857ad3cfd093e3b11cd82774fd1ec5e3226721c7", + "cid": "QmW9bpr8N4Qe4n4rssk5Jd13QFPsGervuvGkqtfBXhHYPH", + "size": 480834 }, "sig_check_id_data_tbs_700_ecdsa_nist_p521_sha512": { - "hash": "0x09941a72360a1ae870c21d9a8869ebe9b812840544445b5f2f069f6aca5a5505", - "cid": "QmbMcSzaxAAorErr9cHTJPqyXKucpqKCUihBDcsfcvKxhP", - "size": 480846 + "hash": "0x0f7719535949975b29c2579997bd5931879096ec388b5cfa999e0e6b0ac108ed", + "cid": "QmNikLDi4q8GDAd1DaVD8MWX4LYt32rmwt2HZqDCKVgyDx", + "size": 480844 }, "sig_check_id_data_tbs_700_rsa_pkcs_1024_sha1": { - "hash": "0x01e8a4c9b6876a34089b5a4ed07c5af15920974ca9fcf7d529eaafe701733402", - "cid": "QmWvRudPUhvpRXMax41TGPztTcEc44FcFuNtcB9eSXGyiw", - "size": 99157 + "hash": "0x0b307cc0625d1da70be61a8782af92755198fe9e5962ce84049b48a8eeba6c5c", + "cid": "QmQnBWZiFgcbnRXg7rGW1YEJiRxctPcQgDbYnp4h5FV1Fr", + "size": 102796 }, "sig_check_id_data_tbs_700_rsa_pkcs_1024_sha256": { - "hash": "0x04a97dab8ad748d273b39211f708b7d0616225cf169f49928b306e6387e25516", - "cid": "QmPby5ZHQzcZMrTSBDHKE2m42p8YXubXQ5cKUwHWmybvyf", - "size": 61472 + "hash": "0x02119960907063ce7dc718bfe03727d179685f2af6b6d8ab32b7c9b5c1d6302a", + "cid": "QmRfFUDZBzss2SeX1rkco1LmkRqckit21RQZug6ewYvjHT", + "size": 65111 }, "sig_check_id_data_tbs_700_rsa_pkcs_1024_sha384": { - "hash": "0x14449ea1aada0bdbf27bf1f327fabc4aac1e0d780f7f4075f444c5330574b7e6", - "cid": "QmVLYdZauBwic4L6msmhKY3aj3x1G2jhQL8cUnUSVyWWB3", - "size": 130046 + "hash": "0x1541d5d1b58233fb5777cf975b58236964eb9bb6cb7dfbcdafb86a3df6ea6a91", + "cid": "QmY1xwHuavoMz46V57gUhpRTg1xVUueU5W4BZNeBve7kvg", + "size": 133685 }, "sig_check_id_data_tbs_700_rsa_pkcs_2048_sha1": { - "hash": "0x030e00a1185c0c3383252f954536fce5240bd1e6854b3af65559e21ede803686", - "cid": "QmUgVF2wcVH7FH537d9ciXWsYri5hk3gz4i3YSKM67taTV", - "size": 132257 + "hash": "0x2b03554657e27ba3a92337e9d2170a55ca84d500537c13f379fe9e0483aaaee5", + "cid": "QmRoAner1x5pdjwf1Gokeq2gJoikcYm9htNbHcaRfEqRbJ", + "size": 145103 }, "sig_check_id_data_tbs_700_rsa_pkcs_2048_sha256": { - "hash": "0x1c66c5a51238c0e2a082f58ba31836a2a6942bd956e346575dad5fca78ba3131", - "cid": "QmdEB1ZFKjHsVKYmatxcCcJ2HVRaWjdL5NXMhuQMfHyEds", - "size": 94571 + "hash": "0x0337d0e3453027e1992a67568eee57acb24c28b106c519d61fce4f0c465efccb", + "cid": "QmR5gJAwpZgz9CspPdWyAksyihQ4M1RUjvy2rmVimkhn3U", + "size": 107417 }, "sig_check_id_data_tbs_700_rsa_pkcs_2048_sha384": { - "hash": "0x195dc22343487e11cabc2cafd3fe389f6ffea64e962d0e243493c1e37e1553f6", - "cid": "QmeyUhhoG8W1DwB4dp2U43fcPKztfZrdihEDUmZHP62TuV", - "size": 163145 + "hash": "0x2e4adee14c5425be63e5ab47bedb2a19e2c093218c88a61cbfa9d398ccd99790", + "cid": "QmdcXW7E2TcAQ6F2cFUCBXwXyEmwkDpZxcgSyVjugfS7Zu", + "size": 175991 }, "sig_check_id_data_tbs_700_rsa_pkcs_2048_sha512": { - "hash": "0x2a3531510a5bc388b511b27afbfce352dd09c719b0d9a17e301625aefe49549c", - "cid": "QmQt3tfYYKioRkSUX6x9qcw5Zuk7oUSLStLLpHcDrN8UPG", - "size": 163165 + "hash": "0x19a419d734ae5570a4e738142cbc1a1975cf54fbcdcdc037fd061837ad2d131b", + "cid": "QmbCPB3qCdpbMJczZoCiGQyWMYszdmVECqCVqp7v6vcY4U", + "size": 176011 }, "sig_check_id_data_tbs_700_rsa_pkcs_3072_sha1": { - "hash": "0x29a086a8b9198a9f8a17e3ff0595b3a79d5f5a7591fceac4aee8b5db29ecc256", - "cid": "QmZwttQ4epeGyTo8pYqqHqyEsztA5TCB7dmZw8VapkxNsY", - "size": 170408 + "hash": "0x0f5d6142a8ce274cf0dfe6ec695b194adf3cda71014a71e338088d6649335f22", + "cid": "QmP64T9NWrJCW5fctCfjCLun4WQHPK6hgHjs2eC9fWV61m", + "size": 195926 }, "sig_check_id_data_tbs_700_rsa_pkcs_3072_sha256": { - "hash": "0x1837a6479713dabbc252af45254fb87b1e02b50053b2735251aae0c871b48e80", - "cid": "QmQgmUPguLfX6cJDmR2wiqUz5DrBJoZ55KWi6SmJPMrtgm", - "size": 132722 + "hash": "0x0e8dac1eb65dbeb828b7071253212b024c4109e97afaf87b03af008fd17e4423", + "cid": "QmU4wcC9Go4zQCSz3NX9EQUnjSdLdnNDBVGAW1QXgKMRrD", + "size": 158240 }, "sig_check_id_data_tbs_700_rsa_pkcs_3072_sha384": { - "hash": "0x201b84d12cedea0695652e1fdd76a738ce0f66178df45e26e0560474b9a3258b", - "cid": "QmYaAkxqmmEtwnLxpxDtEZppejH9WvLMLBidde8NiW6NzK", - "size": 201296 + "hash": "0x11a701c9c25833cb38b6a8d1c47c739e27f1d84153c5c0e22c8bff55e9f4ddf2", + "cid": "Qmas1642ATPcNprPu3LtTLdXNZrFbD4wX31i9stZt7ge97", + "size": 226814 }, "sig_check_id_data_tbs_700_rsa_pkcs_3072_sha512": { - "hash": "0x27f0888a24038d574be7a0d4cc25044230249277de4762cc036e6b8f27bec1e6", - "cid": "QmTsdNGDRSKDcJQmsrZJ8kZ6EyiH9HYNFZZ7rkB8Li1gjR", - "size": 201316 + "hash": "0x19842de770240f3b067695467c94b1f068b8c898fe8d237fb5332ead2fafc254", + "cid": "QmSvRnvMy68ZPQxbnAewUSU1THMXw3rB9nkvjgXXzYnSE5", + "size": 226834 }, "sig_check_id_data_tbs_700_rsa_pkcs_4096_sha1": { - "hash": "0x17052d14975d8a5e5c562fdb15cddeca750d529479bb8abbc8b95a5f17b686ff", - "cid": "QmWHQ9BwoceMYpAsE8kLBLmUBtZSWyUw3YcV436w9mhcQE", - "size": 221356 + "hash": "0x0e3642461123eca0f2f71e9d09f795bc3579b2e03dc8d9f20c40ea149653a4bb", + "cid": "Qmbb1hBgcQLFrq7fEcLUaGdPWr29DgdZiPwrLY4z5g7twS", + "size": 266179 }, "sig_check_id_data_tbs_700_rsa_pkcs_4096_sha256": { - "hash": "0x0e33ece49e70be8698f86973f7458036fd0870ee07693a81852de76234b11762", - "cid": "QmTYcdHjSaqCL9KRsfkRLvq84mp5Pss2NPN4cNvUSa3yLi", - "size": 183671 + "hash": "0x06bf95ad2d9951499828ab133c2c1f34a7eba55b5d2cd326859b4dd41cfcfc1c", + "cid": "QmNSePvqewov7YzA35JZeFzxnCpTMU4eJBwVqRdRdtqLbn", + "size": 228494 }, "sig_check_id_data_tbs_700_rsa_pkcs_4096_sha384": { - "hash": "0x29b380d68bf0c626a5eca943b822f9a136b0148b32cc52984e64a728cf5808a4", - "cid": "QmPM6XLYSLJf5hf32PdmH5zvLiaUDP98wYVRe3dZc7aSdR", - "size": 252245 + "hash": "0x06c94739758659ba43fd96d4b1fc4ec01a591dcba1a9d00e46d0d1cd4c33a5cd", + "cid": "QmQ1PejW4knvnq7uTs3KMiCftxWDCqkktCdyEFrZqNaMVo", + "size": 297068 }, "sig_check_id_data_tbs_700_rsa_pkcs_4096_sha512": { - "hash": "0x142de8300169418ded39a6e2480b36163689c9818f51205aad3c29f040c0bd38", - "cid": "QmQWdMvqrpVmXi3gAAZ6J8RXazUcybmN5g5eyRuq3fwm3K", - "size": 252265 + "hash": "0x2e1ca0ac5588a62bd62c569b6cce3157ba4d167b659def17e5e5d768b43379b9", + "cid": "QmYTvqocA2FS6VoKWhVqCBH3Y1hBjo7AqypUDvH4dPqSL7", + "size": 297088 }, "sig_check_id_data_tbs_700_rsa_pss_1024_sha1": { - "hash": "0x222dcca7146e0670456ddf78e845c86672a80dbe2afe359fcbbb3cbd50770417", - "cid": "QmYxVtEw8AG5gc3gcr2HcG58JnfFUdEdmNE9JyF9G47DDR", - "size": 174380 + "hash": "0x1936022f9b8be3d291d7b44dcdcb7a0264655d89b89057ae9ccb4fdbf3646837", + "cid": "QmZh4meeaCxcuwa7Tjugqr2VVxshujmXRY94sG3tTFRXMD", + "size": 177901 }, "sig_check_id_data_tbs_700_rsa_pss_1024_sha256": { - "hash": "0x1300e98f4194f8dfc9114f5470404b3e6fa5b467fa9255fe994cb6ab29746024", - "cid": "QmVMhN87Rd4SQjdNQi7tbUZJos3tQrs8Q9KMGsxDhZtKYF", - "size": 89083 + "hash": "0x185ddbbfa07248c111170e5a3a252a32ef5c0a50b9e2d53af0f2c4eaddc9f1e1", + "cid": "QmRzSGyfjoz6yNGjtQh2SSAWRznqQGzJP54hLYfrKAAwVo", + "size": 92486 }, "sig_check_id_data_tbs_700_rsa_pss_1024_sha384": { - "hash": "0x2fa3eb8a71411648190cf832ef8cd252406df5d8f12f543e4b35851ba2585bf2", - "cid": "Qmcnv9eiv1fSKDFKfg8rBXT7e5DBckYg6cYm5B2NmjJRhS", - "size": 211686 + "hash": "0x1dac8b2bbd794aef12fb8c0427b332b38633df6958cfeaa90e450d1f8741c8ac", + "cid": "QmYvLHqhsqHXK9emqUjdEYGptQQqacmwF9NYHgB4aL3W6K", + "size": 214744 }, "sig_check_id_data_tbs_700_rsa_pss_2048_sha1": { - "hash": "0x2e91d560ed7d8b7f158ba65561a3e3aa7a8b02286ae753ebfc2e25a358bd6549", - "cid": "QmdpSjNdBEuTDQoawGov6kfwMhGA4byaJbWRco1VctECYH", - "size": 259962 + "hash": "0x0d082d16527fbe023534c54e697b1ba810def8b0dd35d47190d187dff900e71f", + "cid": "QmTT4FWAemVr5eTTupvaZFy3y9aBRngaTA4hbqzh9KgYUh", + "size": 272370 }, "sig_check_id_data_tbs_700_rsa_pss_2048_sha256": { - "hash": "0x09eeaa2862a14695c46f628d222ecc162cb1821ff29b99cbfad26b6d2e96e863", - "cid": "QmVh8ShciecsxBcpYuyNzQCQJ3v8mFuXsPRgwQKkJFXPdQ", - "size": 140287 + "hash": "0x2fd87ca63950727e046c3f6b3f3615f093491914a5b4ec1d3d09c10b77304790", + "cid": "QmS2YBGaRe6tv9baKwt6Fv5poiqBvSFxkHdDt43KphXhpX", + "size": 152577 }, "sig_check_id_data_tbs_700_rsa_pss_2048_sha384": { - "hash": "0x25a09d53fd4207d6727fa12d33f63417995cfc004de807a79bfc0ffd6ed1cb03", - "cid": "QmZpRnsSr8RtmtLJf2DJkGJbhLuLjZwRMXv7ZyUvg52nMK", - "size": 318722 + "hash": "0x0787d09201802341a751994293733e0e0beab696a18ade521c32f5a1b222609c", + "cid": "QmamaN8Wx5ZrRgMPCHuC9MbpcTV6CyEtZbtg33fqm1KTrd", + "size": 330647 }, "sig_check_id_data_tbs_700_rsa_pss_2048_sha512": { - "hash": "0x1065de3ed6a07730ebc2d05de006742414a50d1c0385f27802e73cf96e5748fe", - "cid": "QmdxuMKJJ9PuRXUfffPGo5LtC7pm9R5nPqEvSLrhUHpaAP", - "size": 298079 + "hash": "0x14d7f74af97c00ccc7c724fd7290cab0e7b0dba94f3748396be02b9f7477d6fc", + "cid": "QmVsvbwZyJN9aY6K279CHa7PAy2Hj5uvCwwKjk3TyGM4Nn", + "size": 309876 }, "sig_check_id_data_tbs_700_rsa_pss_3072_sha1": { - "hash": "0x27359e796bb1e47bbf7835819b427c7fcc876f56c04a0459403ba08a35c8d196", - "cid": "QmQJgZKVCRrRdg2gaezeHHsHS2DcQfBcJeSrK7CeTBYa2c", - "size": 359015 + "hash": "0x1ac9302e1e3fbbd6bcb12ab1c896a1ff38b5b06bdf5192fd49c79fb4b81733f5", + "cid": "QmR7os4XGYS9TKWkSP2k8GLH3GsPxybPoYG9FP6Lah153X", + "size": 383775 }, "sig_check_id_data_tbs_700_rsa_pss_3072_sha256": { - "hash": "0x047b86ce06afd947745c2f0fc91aeec938689357e8501fa5a62f4e0654f883bb", - "cid": "QmaUkU8KTGB2foHecqACQL47YDAmspGFT9f37a9tsaAxzP", - "size": 196542 + "hash": "0x25b50e81959bead5a273be7030ee7939fa3ff16cdd99d59d0c03b8d23e5c5294", + "cid": "Qmcv2jmmefn1Wyus71R5SZvWXgA5dBWr4TViSV4YGdGWw8", + "size": 221184 }, "sig_check_id_data_tbs_700_rsa_pss_3072_sha384": { - "hash": "0x0a1527fe639a813fc37e201aeea6eba12c77b12d0fc768878bf59b85145a05fc", - "cid": "QmR68Nv3wcuwFVZ5aSu76a6bLMPt8SkRNoJpoK7gTePJxm", - "size": 406809 + "hash": "0x24a3110e07c127df7a35f0de81293601ae893a8a3af945dea3fe4b7f037f1a71", + "cid": "Qmcmye4R7NcuJBJSKWY8v7ktvbdeTJyLRTzk6dh1ke3DuF", + "size": 431087 }, "sig_check_id_data_tbs_700_rsa_pss_3072_sha512": { - "hash": "0x2d8267e06c6d1209c3fd0426d541d8dd50f49e03c36cebef757c5dabe4ee06a8", - "cid": "QmfQHkctsLLeikWvq5tqE1k3zWG2TeoSozTaVbP4D6VHzU", - "size": 384762 + "hash": "0x2daf527f309874277ede447069034bc2b4b9c941040b89d31806ae240c1c3f0f", + "cid": "QmZpCx8yC9uBiXuMRXHVS41XFkvBcuHdWk3mjUChQMyK9P", + "size": 408906 }, "sig_check_id_data_tbs_700_rsa_pss_4096_sha1": { - "hash": "0x1252dd5a8725990607e5057e2fb9136cc5f004ff4ea636a41370bb9b1b9a991b", - "cid": "QmZTwmdDX6635g18C2kGH6g3tnNGkxYTQ76L7A96Wfurxr", - "size": 462448 + "hash": "0x1769d622fc69acb80d5b965d6992455ce80f56ac31c7eb84af7908df7478a5b8", + "cid": "QmXfj1SGCzmWvDLbt2m7YnZfkLECxLoW8RxV4coCxV9kEj", + "size": 506193 }, "sig_check_id_data_tbs_700_rsa_pss_4096_sha256": { - "hash": "0x02267d8c46c0c3466d33fac8b1e65aa4f91c284257420177e15bdf59219f8980", - "cid": "QmR5LMidLyGbpYqrdW4Yu46QQ8n5wX8dQWeqfDKx9kQaTf", - "size": 265597 + "hash": "0x0b21e707dff54407bf74e6a1e61df4e8e49658a8e0d158e3d2cc26d83b234aed", + "cid": "QmY5SqX1dkSghqUf4m5MmvtWbLbSZ1Bky9JMreKWtyMVB8", + "size": 309224 }, "sig_check_id_data_tbs_700_rsa_pss_4096_sha384": { - "hash": "0x00c97435bdca3f087be954513dd779a189ec13551a27d9f388b38f3e008d26a8", - "cid": "QmUT4FKLygS8DMoDPSdPjn43eC9JXkHsPs9LxFo5QfBMaD", - "size": 531672 + "hash": "0x2fdc34c8f965470fcb4bd7546734dbe6c08fde898a0924002a32a4338bb5e545", + "cid": "QmUsT7UK2aqm16n7Sv8JGycYox8vdZ8WyXqRgq5v2jCuq9", + "size": 574935 }, "sig_check_id_data_tbs_700_rsa_pss_4096_sha512": { - "hash": "0x0985a5de6df90a82bd4dbb5684b1fc422e42e7c30e42f7e69dbb27bc9cf944ca", - "cid": "QmSFfHg8RHNM1mBAGihJ6seyriSw6BLPnwoJJMMdVstNZE", - "size": 484239 + "hash": "0x0499e768cf4020a518089b1ce8678763c58e5d08b917179729bf4c05950fd350", + "cid": "QmbjfUqzD1gLmwkuAfajz3Cnush1TssoqH6s2T12y3ADpG", + "size": 527367 } } } \ No newline at end of file diff --git a/src/ts/tests/outer.test.ts b/src/ts/tests/outer.test.ts index 4c4451430..90b010e40 100644 --- a/src/ts/tests/outer.test.ts +++ b/src/ts/tests/outer.test.ts @@ -40,6 +40,7 @@ import { getFacematchCircuitInputs, packLeBytesAndHashPoseidon2, getFacematchEvmParameterCommitment, + getOprfPkHashFromOuterProof, } from "@zkpassport/utils" import * as path from "path" import * as fs from "fs" @@ -310,6 +311,8 @@ describe("outer proof", () => { expect(nullifier).toEqual( 2650684516642119190462868389024749567829027632273482260700375874186000116367n, ) + const oprfPkHash = getOprfPkHashFromOuterProof(proof) + expect(oprfPkHash).toEqual(0n) const certificateRegistryRootFromProof = getCertificateRegistryRootFromOuterProof(proof) expect(certificateRegistryRoot).toEqual(certificateRegistryRootFromProof) const paramCommitmentsFromProof = getParamCommitmentsFromOuterProof(proof)