From 8571a5160985a4e0f31cc2b5af86ff7cb361b811 Mon Sep 17 00:00:00 2001 From: 0xturboblitz Date: Sat, 23 Mar 2024 12:25:40 -0700 Subject: [PATCH] adapt passport_majority.test.ts to new input generation --- circuits/test/inputs.json | 723 ------------------------ circuits/test/passport.test.ts | 1 - circuits/test/passport_majority.test.ts | 67 +-- 3 files changed, 28 insertions(+), 763 deletions(-) delete mode 100644 circuits/test/inputs.json diff --git a/circuits/test/inputs.json b/circuits/test/inputs.json deleted file mode 100644 index 4b2facb7e..000000000 --- a/circuits/test/inputs.json +++ /dev/null @@ -1,723 +0,0 @@ -{ - "mrz": [ - "97", - "91", - "95", - "31", - "88", - "80", - "60", - "70", - "82", - "65", - "84", - "65", - "86", - "69", - "82", - "78", - "73", - "69", - "82", - "60", - "60", - "70", - "76", - "79", - "82", - "69", - "78", - "84", - "60", - "72", - "85", - "71", - "85", - "69", - "83", - "60", - "74", - "69", - "65", - "78", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "49", - "57", - "72", - "65", - "51", - "52", - "56", - "50", - "56", - "52", - "70", - "82", - "65", - "48", - "48", - "48", - "55", - "49", - "57", - "49", - "77", - "50", - "57", - "49", - "50", - "48", - "57", - "53", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "60", - "48", - "50" - ], - "reveal_bitmap": [ - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0" - ], - "dataHashes": [ - "48", - "130", - "1", - "37", - "2", - "1", - "0", - "48", - "11", - "6", - "9", - "96", - "134", - "72", - "1", - "101", - "3", - "4", - "2", - "1", - "48", - "130", - "1", - "17", - "48", - "37", - "2", - "1", - "1", - "4", - "32", - "99", - "19", - "179", - "205", - "55", - "104", - "45", - "214", - "133", - "101", - "233", - "177", - "130", - "1", - "37", - "89", - "125", - "229", - "139", - "34", - "132", - "146", - "28", - "116", - "248", - "186", - "63", - "195", - "96", - "151", - "26", - "215", - "48", - "37", - "2", - "1", - "2", - "4", - "32", - "63", - "234", - "106", - "78", - "31", - "16", - "114", - "137", - "237", - "17", - "92", - "71", - "134", - "47", - "62", - "78", - "189", - "233", - "201", - "213", - "53", - "4", - "47", - "189", - "201", - "133", - "6", - "121", - "34", - "131", - "64", - "142", - "48", - "37", - "2", - "1", - "3", - "4", - "32", - "136", - "155", - "87", - "144", - "121", - "15", - "152", - "127", - "85", - "25", - "154", - "80", - "20", - "58", - "51", - "75", - "193", - "116", - "234", - "0", - "60", - "30", - "29", - "30", - "183", - "141", - "72", - "247", - "255", - "203", - "100", - "124", - "48", - "37", - "2", - "1", - "11", - "4", - "32", - "0", - "194", - "104", - "108", - "237", - "246", - "97", - "230", - "116", - "198", - "69", - "110", - "26", - "87", - "17", - "89", - "110", - "199", - "108", - "250", - "36", - "21", - "39", - "87", - "110", - "102", - "250", - "213", - "174", - "131", - "171", - "174", - "48", - "37", - "2", - "1", - "12", - "4", - "32", - "190", - "82", - "180", - "235", - "222", - "33", - "79", - "50", - "152", - "136", - "142", - "35", - "116", - "224", - "6", - "242", - "156", - "141", - "128", - "247", - "10", - "61", - "98", - "86", - "248", - "45", - "207", - "210", - "90", - "232", - "175", - "38", - "48", - "37", - "2", - "1", - "13", - "4", - "32", - "91", - "222", - "210", - "193", - "63", - "222", - "104", - "82", - "36", - "41", - "138", - "253", - "70", - "15", - "148", - "208", - "156", - "45", - "105", - "171", - "241", - "195", - "185", - "43", - "217", - "162", - "146", - "201", - "222", - "89", - "238", - "38", - "48", - "37", - "2", - "1", - "14", - "4", - "32", - "76", - "123", - "216", - "13", - "52", - "227", - "72", - "245", - "59", - "193", - "238", - "166", - "103", - "49", - "24", - "164", - "171", - "188", - "194", - "197", - "156", - "187", - "249", - "28", - "198", - "95", - "69", - "15", - "182", - "56", - "54", - "38", - "128", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "0", - "9", - "72" - ], - "datahashes_padded_length": "320", - "eContentBytes": [ - "49", - "102", - "48", - "21", - "6", - "9", - "42", - "134", - "72", - "134", - "247", - "13", - "1", - "9", - "3", - "49", - "8", - "6", - "6", - "103", - "129", - "8", - "1", - "1", - "1", - "48", - "28", - "6", - "9", - "42", - "134", - "72", - "134", - "247", - "13", - "1", - "9", - "5", - "49", - "15", - "23", - "13", - "49", - "57", - "49", - "50", - "49", - "54", - "49", - "55", - "50", - "50", - "51", - "56", - "90", - "48", - "47", - "6", - "9", - "42", - "134", - "72", - "134", - "247", - "13", - "1", - "9", - "4", - "49", - "34", - "4", - "32", - "176", - "96", - "59", - "213", - "131", - "82", - "89", - "248", - "105", - "125", - "37", - "177", - "158", - "162", - "137", - "43", - "13", - "39", - "115", - "6", - "59", - "229", - "81", - "110", - "49", - "75", - "255", - "184", - "155", - "73", - "116", - "86" - ], - "signature": [ - "1004979219314799894", - "6361443755252600907", - "6439012883494616023", - "9400879716815088139", - "17551897985575934811", - "11779273958797828281", - "2536315921873401485", - "3748173260178203981", - "12475215309213288577", - "6281117468118442715", - "1336292932993922350", - "14238156234566069988", - "11985045093510507012", - "3585865343992378960", - "16170829868787473084", - "17039645001628184779", - "486540501180074772", - "5061439412388381188", - "12478821212163933993", - "7430448406248319432", - "746345521572597865", - "5002454658692185142", - "3715069341922830389", - "11010599232161942094", - "1577500614971981868", - "13656226284809645063", - "3918261659477120323", - "5578832687955645075", - "3416933977282345392", - "15829829506526117610", - "17465616637242519010", - "6519177967447716150" - ], - "signatureAlgorithm": "1", - "pubkey": [ - "9539992759301679521", - "1652651398804391575", - "7756096264856639170", - "15028348881266521487", - "13451582891670014060", - "11697656644529425980", - "14590137142310897374", - "1172377360308996086", - "6389592621616098288", - "6767780215543232436", - "11347756978427069433", - "2593119277386338350", - "18385617576997885505", - "14960211320702750252", - "8706817324429498800", - "15168543370367053559", - "8708916123725550363", - "18006178692029805686", - "6398208271038376723", - "15000821494077560096", - "17674982305626887153", - "2867958270953137726", - "9287774520059158342", - "9813100051910281130", - "13494313215150203208", - "7792741716144106392", - "6553490305289731807", - "32268224696386820", - "15737886769048580611", - "669518601007982974", - "11424760966478363403", - "16073833083611347461" - ], - "pathIndices": [ - "0", - "1", - "1", - "1", - "1", - "1", - "1", - "0", - "1", - "1", - "0", - "0", - "1", - "1", - "0", - "0" - ], - "siblings": [ - "20516282398390866580647417962347415258712802604212003365416596890852644939364", - "20547289806543281108128197867250295423223489766069952889766689677695750842294", - "17092860852967512812593771487649838995106203215624858397482169733546970246117", - "19141872343555753276227561835732941623954902346285308564941039231845690663515", - "2888260764701592030713638283446165050628606750519377550369633789586724212406", - "17037943129534065359096662792322618985598809624384219749636863003643326502177", - "21260541151470016589788332273091943678373855676584683193443363340566713593750", - "9681119423869145671286918102040570804786474221694907866875171055859965502010", - "3999714159260652982057321310481110903729446356195536109316994934664982988519", - "14359042263488593594514913785064471775842285148703143594475594381078274944550", - "10696856845043652409316424831381338144209147199074363427177722046972515079299", - "2796323689030312622891330190155708704921773618732461037692992858528069077360", - "1379184643939692456020535864077563679018059205165852146212742699309755722087", - "17834317267514482863629341626611816587254867008433493508231639322166589549456", - "1473918712602583605383280948484316645101117513102582419100942131704211814519", - "15819538789928229930262697811477882737253464456578333862691129291651619515538" - ], - "root": "4080578225172475068086778061870548445929343471785864518431540330127324371840", - "address": "0x70997970c51812dc3a010c7d01b50e0d17dc79c8" -} diff --git a/circuits/test/passport.test.ts b/circuits/test/passport.test.ts index e6567d4fa..b3c3f6514 100644 --- a/circuits/test/passport.test.ts +++ b/circuits/test/passport.test.ts @@ -32,7 +32,6 @@ describe('Circuit tests', function () { // This adds the pubkey of the passportData to the registry even if it's not there for testing purposes. // Comment when testing with real passport data - tree.insert(getLeaf({ signatureAlgorithm: passportData.signatureAlgorithm, issuer: 'C = TS, O = Government of Syldavia, OU = Ministry of tests, CN = CSCA-TEST', diff --git a/circuits/test/passport_majority.test.ts b/circuits/test/passport_majority.test.ts index 59a7fe7d6..a56b63bd8 100644 --- a/circuits/test/passport_majority.test.ts +++ b/circuits/test/passport_majority.test.ts @@ -2,10 +2,12 @@ import chai, { assert, expect } from 'chai' import path from "path"; import { getPassportData } from "../../common/src/utils/passportData"; -import { hash, toUnsignedByte, arraysAreEqual, bytesToBigDecimal, formatMrz, splitToWords } from '../../common/src/utils/utils' -import { MAX_DATAHASHES_LEN, attributeToPosition } from '../../common/src/constants/constants' -import { getCurrentDateYYMMDD } from '../../common/src/utils/utils'; -import { sha256Pad } from '@zk-email/helpers'; // Ensure this import is added +import { TREE_DEPTH } from '../../common/src/constants/constants' +import { generateCircuitInputs } from '../../common/src/utils/generateInputs'; +import { getLeaf } from '../../common/src/utils/pubkeyTree'; +import { IMT } from '@zk-kit/imt'; +import { poseidon2 } from 'poseidon-lite'; +import fs from 'fs'; const wasm_tester = require("circom_tester").wasm; describe.only("start testing of proof_of_passport_majority.circom", function () { @@ -13,7 +15,6 @@ describe.only("start testing of proof_of_passport_majority.circom", function () let inputs: any; let circuit: any; let w: any; - let current_date: any; let majority: any = [49, 56]; before(async () => { @@ -23,41 +24,29 @@ describe.only("start testing of proof_of_passport_majority.circom", function () ); const passportData = getPassportData(); - const formattedMrz = formatMrz(passportData.mrz); - - const concatenatedDataHashesHashDigest = hash(passportData.dataGroupHashes); - assert( - arraysAreEqual(passportData.eContent.slice(72, 72 + 33), concatenatedDataHashesHashDigest), - 'concatenatedDataHashesHashDigest is at the right place in passportData.eContent' - ) - + const serializedTree = JSON.parse(fs.readFileSync("../common/pubkeys/serialized_tree.json") as unknown as string) + const tree = new IMT(poseidon2, TREE_DEPTH, 0, 2) + tree.setNodes(serializedTree) + + // This adds the pubkey of the passportData to the registry even if it's not there for testing purposes. + // Comment when testing with real passport data + tree.insert(getLeaf({ + signatureAlgorithm: passportData.signatureAlgorithm, + issuer: 'C = TS, O = Government of Syldavia, OU = Ministry of tests, CN = CSCA-TEST', + modulus: passportData.pubKey.modulus, + exponent: passportData.pubKey.exponent + }).toString()) + const reveal_bitmap = Array(90).fill('1'); - const [messagePadded, messagePaddedLen] = sha256Pad( - new Uint8Array(passportData.dataGroupHashes), - MAX_DATAHASHES_LEN + const address = "0x70997970c51812dc3a010c7d01b50e0d17dc79c8"; + + inputs = generateCircuitInputs( + passportData, + tree, + reveal_bitmap, + address ); - - current_date = getCurrentDateYYMMDD(); - inputs = { - mrz: formattedMrz.map(byte => String(byte)), - reveal_bitmap: reveal_bitmap.map(byte => String(byte)), - dataHashes: Array.from(messagePadded).map((x) => x.toString()), // Use the padded data hashes - datahashes_padded_length: messagePaddedLen.toString(), // Include the padded length if needed - eContentBytes: passportData.eContent.map(toUnsignedByte).map(byte => String(byte)), - pubkey: splitToWords( - BigInt(passportData.pubKey.modulus), - BigInt(64), - BigInt(32) - ), - signature: splitToWords( - BigInt(bytesToBigDecimal(passportData.encryptedDigest)), - BigInt(64), - BigInt(32) - ), - address: "0x70997970c51812dc3a010c7d01b50e0d17dc79c8", // sample address - current_date: current_date, - majority: majority.map(byte => String(byte)) - } + w = await circuit.calculateWitness(inputs); }); @@ -70,7 +59,7 @@ describe.only("start testing of proof_of_passport_majority.circom", function () await circuit.checkConstraints(w); }); - it("verify reveal_packed outputs for major", async function () { + it("verify reveal_packed outputs for majority", async function () { const outputs = await circuit.getOutput(w, ["reveal_packed[3]"]); const unpackedReveals = unpackRevealPacked(outputs); const expectedReveals = generateExpectedReveals(inputs, majority);