input generation, almost died debugging names

This commit is contained in:
ashpect
2024-07-23 00:49:17 +05:30
parent 14c743f1d0
commit c6543b6c5b
5 changed files with 36 additions and 19 deletions

1
common/.gitignore vendored
View File

@@ -1,2 +1 @@
inputs
node_modules/

View File

@@ -4,7 +4,6 @@
"@babel/runtime": "^7.23.4",
"@zk-kit/imt": "https://gitpkg.now.sh/0xturboblitz/zk-kit/packages/imt?6d417675",
"@zk-kit/lean-imt": "^2.0.1",
"@zk-kit/smt": "^1.0.0",
"js-sha1": "^0.7.0",
"js-sha256": "^0.10.1",
"js-sha512": "^0.9.0",

View File

@@ -10,7 +10,7 @@ import {
import { LeanIMT } from "@zk-kit/lean-imt";
import { IMT } from "@zk-kit/imt";
import { getLeaf } from "./pubkeyTree";
import { getPassportNumberleaf } from "./ofacTree";
import { getNameLeaf, getNameDobLeaf, getPassportNumberLeaf } from "./ofacTree";
import serializedTree from "../../pubkeys/serialized_tree.json";
import { poseidon2, poseidon6 } from "poseidon-lite";
import { packBytes } from "../utils/utils";
@@ -163,16 +163,40 @@ export function generateCircuitInputsDisclose(
}
export function generateCircuitInputsOfac(
secret: string,
attestation_id: string,
passportData: PassportData,
merkletree: SMT,
merkletree: LeanIMT,
majority: string[],
bitmap: string[],
scope: string,
user_identifier: string,
sparsemerkletree: SMT,
proofLevel : number,
) {
const mrz_bytes = formatMrz(passportData.mrz);
const passport_leaf = getPassportNumberleaf(mrz_bytes.slice(49,58))
const {root, depth, closestleaf, indices, exSiblings, membership} = generateSMTProof(merkletree, passport_leaf);
let exists = membership ? 1 : 0;
const result = generateCircuitInputsDisclose(secret,attestation_id,passportData,merkletree,majority,bitmap,scope,user_identifier);
const { majority: _, scope: __, bitmap: ___, user_identifier: ____, ...finalResult } = result;
const mrz_bytes = formatMrz(passportData.mrz);
const passport_leaf = getPassportNumberLeaf(mrz_bytes.slice(49,58))
const namedob_leaf = getNameDobLeaf(mrz_bytes.slice(10,49), mrz_bytes.slice(62, 68)) // [57-62] + 5 shift
const name_leaf = getNameLeaf(mrz_bytes.slice(10,49)) // [6-44] + 5 shift
let root, depth, closestleaf, indices, exSiblings, membership;
if(proofLevel == 3){
({root, depth, closestleaf, indices, exSiblings, membership} = generateSMTProof(sparsemerkletree, passport_leaf));
} else if(proofLevel == 2){
({root, depth, closestleaf, indices, exSiblings, membership} = generateSMTProof(sparsemerkletree, namedob_leaf));
} else if (proofLevel == 1){
({root, depth, closestleaf, indices, exSiblings, membership} = generateSMTProof(sparsemerkletree, name_leaf));
} else {
throw new Error("Invalid proof level")
}
const exists = membership ? 1 : 0;
return {
...finalResult,
leaf_value: [BigInt(closestleaf).toString()],
smt_root: [root.toString()],
smt_size: [BigInt(depth).toString()],

View File

@@ -54,7 +54,7 @@ function processPassport(passno : string, index: number): bigint {
}
}
const leaf = getPassportNumberleaf(stringToAsciiBigIntArray(passno))
const leaf = getPassportNumberLeaf(stringToAsciiBigIntArray(passno))
if (!leaf) {
console.log('Error creating leaf value', index, passno)
return BigInt(0)
@@ -79,7 +79,7 @@ function processNameDob(entry: any, i: number): bigint {
}
function processName(firstName:string, lastName:string, i: number ): bigint {
// LASTNAME<<FIRSTNAME<MIDDLENAME<<<... (6-39)
// LASTNAME<<FIRSTNAME<MIDDLENAME<<<... (6-44)
firstName = firstName.replace(/'/g, '');
firstName = firstName.replace(/\./g, '');
firstName = firstName.replace(/[- ]/g, '<');
@@ -93,9 +93,9 @@ function processName(firstName:string, lastName:string, i: number ): bigint {
let arr = lastName + '<<' + firstName
if (arr.length > 39) {
arr = arr.substring(0, 44)
arr = arr.substring(0, 39)
} else {
while (arr.length < 44) {
while (arr.length < 39) {
arr += '<'
}
}
@@ -127,7 +127,7 @@ function processDob(day: string, month: string, year: string, i : number): bigin
return getDobLeaf(arr,i)
}
export function getPassportNumberleaf(passport: (bigint|number)[], i?: number): bigint {
export function getPassportNumberLeaf(passport: (bigint|number)[], i?: number): bigint {
if (passport.length !== 9) {
console.log('parsed passport length is not 9:', i, passport)
return
@@ -140,7 +140,7 @@ export function getPassportNumberleaf(passport: (bigint|number)[], i?: number):
}
export function getNameDobLeaf(nameMrz : (bigint|number)[], dobMrz : (bigint|number)[], i? : number): bigint {
return poseidon2([getNameLeaf(nameMrz), getDobLeaf(dobMrz)])
return poseidon2([getDobLeaf(dobMrz), getNameLeaf(nameMrz)])
}
export function getNameLeaf(nameMrz : (bigint|number)[] , i? : number ) : bigint {

View File

@@ -38,11 +38,6 @@
dependencies:
"@zk-kit/utils" "1.0.0"
"@zk-kit/smt@^1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@zk-kit/smt/-/smt-1.0.0.tgz#a587d2a4bedb66e163cda0d5818edaeef4220ec4"
integrity sha512-ggAbytY98jx4vXNL0FshW3x90e4/CJJYNnNOV4GwJZbNVAr7xbkemeA4vq6PbAHS+H5yikz1j3emKTcMKbPoPA==
"@zk-kit/utils@1.0.0":
version "1.0.0"
resolved "https://registry.yarnpkg.com/@zk-kit/utils/-/utils-1.0.0.tgz#db1af01a4e60f5290734a26c2fd9e863bff049e3"