mirror of
https://github.com/selfxyz/self.git
synced 2026-04-05 03:00:53 -04:00
input generation, almost died debugging names
This commit is contained in:
1
common/.gitignore
vendored
1
common/.gitignore
vendored
@@ -1,2 +1 @@
|
||||
inputs
|
||||
node_modules/
|
||||
@@ -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",
|
||||
|
||||
@@ -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()],
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user