merkle tree circuit proving in app

- factor out generateCircuitInputs
- new proof working on iOS
- new zkey on aws and contract deployment
- not working on android because of mysterious bug
This commit is contained in:
0xturboblitz
2024-02-23 16:34:13 -07:00
parent b8c9b92315
commit ad076dd29b
14 changed files with 269 additions and 130 deletions

View File

@@ -14,22 +14,17 @@ import {
DEFAULT_DOE
} from '@env';
import { PassportData } from '../common/src/utils/types';
import { AWS_ENDPOINT, MAX_DATAHASHES_LEN } from '../common/src/constants/constants';
import { revealBitmapFromMapping } from '../common/src/utils/revealBitmap';
import { jmrtdToStandardName } from '../common/src/utils/formatNames';
import { generateCircuitInputs } from '../common/src/utils/generateInputs';
import { AWS_ENDPOINT } from '../common/src/constants/constants';
import {
hash,
toUnsignedByte,
bytesToBigDecimal,
formatMrz,
splitToWords,
hexStringToSignedIntArray,
formatProofIOS,
formatInputsIOS
} from '../common/src/utils/utils';
import { samplePassportData } from '../common/src/utils/passportDataStatic';
import { sha256Pad } from '../common/src/utils/sha256Pad';
import "@ethersproject/shims"
import { ethers, ZeroAddress } from "ethers";
import { ethers } from "ethers";
import axios from 'axios';
import groth16ExportSolidityCallData from './utils/snarkjs';
import contractAddresses from "./deployments/addresses.json"
@@ -40,19 +35,10 @@ import forge from 'node-forge';
import { Buffer } from 'buffer';
import { YStack } from 'tamagui';
global.Buffer = Buffer;
import pubkeys from '../common/pubkeys/publicKeysParsed.json';
console.log('DEFAULT_PNUMBER', DEFAULT_PNUMBER);
const attributeToPosition = {
issuing_state: [2, 5],
name: [5, 44],
passport_number: [44, 52],
nationality: [54, 57],
date_of_birth: [57, 63],
gender: [64, 65],
expiry_date: [65, 71],
}
function App(): JSX.Element {
const [passportNumber, setPassportNumber] = useState(DEFAULT_PNUMBER ?? "");
const [dateOfBirth, setDateOfBirth] = useState(DEFAULT_DOB ?? '');
@@ -148,7 +134,6 @@ function App(): JSX.Element {
const cert = forge.pki.certificateFromPem(pem);
const publicKey = cert.publicKey;
console.log('publicKey', publicKey)
const modulus = (publicKey as any).n.toString(10);
@@ -175,9 +160,9 @@ function App(): JSX.Element {
console.log('mrz', passportData.mrz);
console.log('signatureAlgorithm', passportData.signatureAlgorithm);
console.log('pubKey', passportData.pubKey);
console.log('dataGroupHashes', passportData.dataGroupHashes);
console.log('eContent', passportData.eContent);
console.log('encryptedDigest', passportData.encryptedDigest);
console.log('dataGroupHashes', [...passportData.dataGroupHashes.slice(0, 10), '...']);
console.log('eContent', [...passportData.eContent.slice(0, 10), '...']);
console.log('encryptedDigest', [...passportData.encryptedDigest.slice(0, 10), '...']);
console.log("photoBase64", passportData.photoBase64.substring(0, 100) + '...')
setPassportData(passportData);
@@ -204,7 +189,7 @@ function App(): JSX.Element {
const passportData: PassportData = {
mrz: mrz.replace(/\n/g, ''),
signatureAlgorithm: signatureAlgorithm,
signatureAlgorithm: jmrtdToStandardName(signatureAlgorithm),
pubKey: {
modulus: modulus,
curveName: curveName,
@@ -293,69 +278,38 @@ function App(): JSX.Element {
}
const handleProve = async (path: string) => {
setStep(Steps.GENERATING_PROOF);
if (passportData === null) {
console.log('passport data is null');
return;
}
setStep(Steps.GENERATING_PROOF);
setGeneratingProof(true)
await new Promise(resolve => setTimeout(resolve, 10));
// 1. TODO check signature to make sure the proof will work
// TODO check circuit to make sure the proof will work
// 2. Format all the data as inputs for the circuit
const formattedMrz = formatMrz(passportData.mrz);
const reveal_bitmap = revealBitmapFromMapping(disclosure);
const reveal_bitmap = Array.from({ length: 88 }, (_) => '0');
for (const attribute in disclosure) {
if (disclosure[attribute as keyof typeof disclosure]) {
const [start, end] = attributeToPosition[attribute as keyof typeof attributeToPosition];
for (let i = start; i <= end; i++) {
reveal_bitmap[i] = '1';
}
}
}
// if (!["SHA256withRSA", "sha256WithRSAEncryption"].includes(passportData.signatureAlgorithm)) {
// if (!["sha256WithRSAEncryption"].includes(passportData.signatureAlgorithm)) {
// console.log(`${passportData.signatureAlgorithm} not supported for proof right now.`);
// setError(`${passportData.signatureAlgorithm} not supported for proof right now.`);
// return;
// }
console.log('passportData.dataGroupHashes', passportData.dataGroupHashes);
const dataGroupHashesUint8Array = new Uint8Array(passportData.dataGroupHashes);
console.log('dataGroupHashesUint8Array', dataGroupHashesUint8Array);
const [messagePadded, messagePaddedLen] = sha256Pad(
dataGroupHashesUint8Array,
MAX_DATAHASHES_LEN
const inputs = generateCircuitInputs(
passportData,
pubkeys as string[],
reveal_bitmap,
address
);
console.log('messagePadded', messagePadded);
const inputs = {
mrz: Array.from(formattedMrz).map(byte => String(byte)),
reveal_bitmap: reveal_bitmap.map(byte => String(byte)),
dataHashes: Array.from(messagePadded).map((x) => (x as number).toString()),
datahashes_padded_length: messagePaddedLen.toString(),
eContentBytes: Array.from(passportData.eContent.map(toUnsignedByte)).map(byte => String(byte)),
signature: splitToWords(
BigInt(bytesToBigDecimal(passportData.encryptedDigest)),
BigInt(64),
BigInt(32)
),
pubkey: splitToWords(
BigInt(passportData.pubKey.modulus as string),
BigInt(64),
BigInt(32)
),
address,
}
console.log('inputs', inputs)
Object.keys(inputs).forEach((key) => {
if (Array.isArray(inputs[key as keyof typeof inputs])) {
console.log(key, inputs[key as keyof typeof inputs].slice(0, 10), '...');
} else {
console.log(key, inputs[key as keyof typeof inputs]);
}
});
const start = Date.now();
if (Platform.OS === 'android') {
@@ -410,7 +364,9 @@ function App(): JSX.Element {
const response = await NativeModules.Prover.runProveAction({
...inputs,
datahashes_padded_length: [inputs.datahashes_padded_length.toString()], // wrap everything in arrays for bindings
address: [BigInt(address).toString()]
signatureAlgorithm: [inputs.signatureAlgorithm],
root: [inputs.root],
address: [BigInt(address).toString()],
})
console.log('proof response:', response)
const parsedResponse = JSON.parse(response)

View File

@@ -639,7 +639,11 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
datahashes_padded_length: String,
eContentBytes: List<String>,
signature: List<String>,
signature_algorithm: String,
pubkey: List<String>,
path_indices: List<String>,
siblings: List<String>,
root: String,
address: String,
zkeypath: String
): String
@@ -654,7 +658,11 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
val datahashes_padded_length = inputs.getString("datahashes_padded_length") ?: ""
val e_content_bytes = inputs.getArray("eContentBytes")?.toArrayList()?.map { it as String } ?: listOf()
val signature = inputs.getArray("signature")?.toArrayList()?.map { it as String } ?: listOf()
val signature_algorithm = inputs.getString("signatureAlgorithm") ?: ""
val pubkey = inputs.getArray("pubkey")?.toArrayList()?.map { it as String } ?: listOf()
val path_indices = inputs.getArray("pathIndices")?.toArrayList()?.map { it as String } ?: listOf()
val siblings = inputs.getArray("siblings")?.toArrayList()?.map { it as String } ?: listOf()
val root = inputs.getString("root") ?: ""
val address = inputs.getString("address") ?: ""
val resultFromProof = provePassport(
@@ -664,7 +672,11 @@ class RNPassportReaderModule(private val reactContext: ReactApplicationContext)
datahashes_padded_length,
e_content_bytes,
signature,
signature_algorithm,
pubkey,
path_indices,
siblings,
root,
address,
zkeypath
)

View File

@@ -104,7 +104,11 @@ pub extern "C" fn Java_io_tradle_nfc_RNPassportReaderModule_provePassport(
datahashes_padded_length: JString,
e_content_bytes: JObject,
signature: JObject,
signature_algorithm: JString,
pubkey: JObject,
path_indices: JObject,
siblings: JObject,
root: JString,
address: JString,
zkeypath: JString,
) -> jstring {
@@ -117,7 +121,11 @@ pub extern "C" fn Java_io_tradle_nfc_RNPassportReaderModule_provePassport(
datahashes_padded_length: JString,
e_content_bytes: JObject,
signature: JObject,
signature_algorithm: JString,
pubkey: JObject,
path_indices: JObject,
siblings: JObject,
root: JString,
address: JString,
zkeypath: JString,
env: JNIEnv
@@ -137,6 +145,11 @@ pub extern "C" fn Java_io_tradle_nfc_RNPassportReaderModule_provePassport(
let e_content_bytes_vec: Vec<String> = java_arraylist_to_rust_vec(&env, e_content_bytes)?;
let signature_vec: Vec<String> = java_arraylist_to_rust_vec(&env, signature)?;
let pubkey_vec: Vec<String> = java_arraylist_to_rust_vec(&env, pubkey)?;
let path_indices_vec: Vec<String> = java_arraylist_to_rust_vec(&env, path_indices)?;
let siblings_vec: Vec<String> = java_arraylist_to_rust_vec(&env, siblings)?;
let signature_algorithm_str: String = env.get_string(signature_algorithm)?.into();
let root_str: String = env.get_string(root)?.into();
let address_str: String = env.get_string(address)?.into();
let datahashes_padded_length_str: String = env.get_string(datahashes_padded_length)?.into();
@@ -145,7 +158,11 @@ pub extern "C" fn Java_io_tradle_nfc_RNPassportReaderModule_provePassport(
log::error!("PROOF OF PASSPORT ---- data_hashes_vec {:?}", data_hashes_vec);
log::error!("PROOF OF PASSPORT ---- e_content_bytes_vec {:?}", e_content_bytes_vec);
log::error!("PROOF OF PASSPORT ---- signature_vec {:?}", signature_vec);
log::error!("PROOF OF PASSPORT ---- signature_algorithm_str {:?}", signature_algorithm_str);
log::error!("PROOF OF PASSPORT ---- pubkey_vec {:?}", pubkey_vec);
log::error!("PROOF OF PASSPORT ---- path_indices_vec {:?}", path_indices_vec);
log::error!("PROOF OF PASSPORT ---- siblings_vec {:?}", siblings_vec);
log::error!("PROOF OF PASSPORT ---- root_str {:?}", root_str);
log::error!("PROOF OF PASSPORT ---- address_str {:?}", address_str);
log::error!("PROOF OF PASSPORT ---- datahashes_padded_length_str {:?}", datahashes_padded_length_str);
@@ -162,13 +179,22 @@ pub extern "C" fn Java_io_tradle_nfc_RNPassportReaderModule_provePassport(
parse_and_insert(&mut inputs, "eContentBytes", e_content_bytes_vec.iter().map(AsRef::as_ref).collect());
parse_and_insert(&mut inputs, "signature", signature_vec.iter().map(AsRef::as_ref).collect());
parse_and_insert(&mut inputs, "pubkey", pubkey_vec.iter().map(AsRef::as_ref).collect());
parse_and_insert(&mut inputs, "pathIndices", path_indices_vec.iter().map(AsRef::as_ref).collect());
parse_and_insert(&mut inputs, "siblings", siblings_vec.iter().map(AsRef::as_ref).collect());
let address_bigint = BigInt::from_bytes_be(Sign::Plus, &decode(&address_str[2..])?);
inputs.insert("address".to_string(), vec![address_bigint]);
let datahashes_padded_length_i32 = datahashes_padded_length_str.parse::<i32>().expect("Failed to parse datahashes_padded_length to i32");
let datahashes_padded_length_bigint = BigInt::from(datahashes_padded_length_i32);
inputs.insert("datahashes_padded_length".to_string(), vec![datahashes_padded_length_bigint]);
let signature_algorithm_i32 = signature_algorithm_str.parse::<i32>().expect("Failed to parse signature_algorithm_str to i32");
let signature_algorithm_bigint = BigInt::from(signature_algorithm_i32);
inputs.insert("signature_algorithm".to_string(), vec![signature_algorithm_bigint]);
let root_bigint = BigInt::parse_bytes(root_str.as_bytes(), 10).unwrap();
inputs.insert("root".to_string(), vec![root_bigint]);
println!("generating witness...");
let now = Instant::now();
let full_assignment = witness_calculator()
@@ -269,7 +295,11 @@ pub extern "C" fn Java_io_tradle_nfc_RNPassportReaderModule_provePassport(
datahashes_padded_length,
e_content_bytes,
signature,
signature_algorithm,
pubkey,
path_indices,
siblings,
root,
address,
zkeypath,
env

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
{"ProofOfPassport":"0x7AB5B112b09816617048482230C6Ea9629AF2349","Groth16Verifier":"0x764f40848eBD343da6595b0624c9480cfBA0668e"}
{"ProofOfPassport":"0x24c919Dc3E5BA89c0898778D71435D566B05B4c5","Groth16Verifier":"0x6b3c6CF3e7bf2663E5EA30F2566433261fe64554"}

View File

@@ -555,13 +555,13 @@ SPEC CHECKSUMS:
React-Core: 8293312ad137ea82fd2c29deb163dbc24aa4e00e
React-CoreModules: 32fab1d62416849a3b6dac6feff9d54e5ddc2d1e
React-cxxreact: 55d0f7cb6b4cc09ba9190797f1da87182d1a2fb6
React-debug: 878f0c4026b30a6240f7a15f8612efcf5d8c3df9
React-debug: 7e61555c8158126c6cd98c3154381ad3821aaaca
React-jsc: 0db8e8cc2074d979c37ffa7b8d7c914833960497
React-jsi: 58677ff4848ceb6aeb9118fe03448a843ea5e16a
React-jsiexecutor: 2c15ba1bace70177492368d5180b564f165870fd
React-jsinspector: b511447170f561157547bc0bef3f169663860be7
React-logger: c5b527272d5f22eaa09bb3c3a690fee8f237ae95
React-NativeModulesApple: 3a49a4bc38b979b804525816b781eb6612dba5fa
React-NativeModulesApple: 0438665fc7473be6edc496e823e6ea0b0537b46c
React-perflogger: 6bd153e776e6beed54c56b0847e1220a3ff92ba5
React-RCTActionSheet: c0b62af44e610e69d9a2049a682f5dba4e9dff17
React-RCTAnimation: fe7005136b58f58871cab2f70732343b6e330d30
@@ -575,13 +575,13 @@ SPEC CHECKSUMS:
React-RCTVibration: ea3a68a49873a54ced927c90923fc6932baf344a
React-rncore: 9672a017af4a7da7495d911f0b690cbcae9dd18d
React-runtimeexecutor: 369ae9bb3f83b65201c0c8f7d50b72280b5a1dbc
React-runtimescheduler: 116fb55732ddfd96298350528cf13ceaf94759c8
React-utils: a8681f0d721ff080373ae9e4afb1f380707b55f9
ReactCommon: df6a7f5665621529ee01b89fb0c3c93eb014f276
React-runtimescheduler: ec1066a4f2d1152eb1bc3fb61d69376b3bc0dde0
React-utils: d55ba834beb39f01b0b470ae43478c0a3a024abe
ReactCommon: 68e3a815fbb69af3bb4196e04c6ae7abb306e7a8
RNSVG: 07dbd870b0dcdecc99b3a202fa37c8ca163caec2
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
Yoga: 8796b55dba14d7004f980b54bcc9833ee45b28ce
PODFILE CHECKSUM: 7568291077da8ee6387464cd1a7e01559a46ab1f
COCOAPODS: 1.15.0
COCOAPODS: 1.14.3

View File

@@ -22,6 +22,31 @@
905B70052A72767900AFA232 /* PassportReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 905B70042A72767900AFA232 /* PassportReader.swift */; };
905B70072A72774000AFA232 /* PassportReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 905B70062A72774000AFA232 /* PassportReader.m */; };
905B700B2A72A5E900AFA232 /* masterList.pem in Resources */ = {isa = PBXBuildFile; fileRef = 905B700A2A72A5E900AFA232 /* masterList.pem */; };
2FA7C90AFAF5417DAA7BCB1E /* Inter-Black.otf in Resources */ = {isa = PBXBuildFile; fileRef = 066DD67BD55B4E90941F2B97 /* Inter-Black.otf */; };
C9B733B168F84BBA818C6CB8 /* Inter-BlackItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 0C76A5D3C00C4D19B7624F46 /* Inter-BlackItalic.otf */; };
15AAF7651FCF40EB993543A3 /* Inter-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 6F5E37006DF4462994FA8164 /* Inter-BoldItalic.otf */; };
1D2A11340C7041909B820A90 /* Inter-ExtraBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = D20EA8C94F544E14AB58E6EB /* Inter-ExtraBold.otf */; };
E4BC7CC193684992A11E3135 /* Inter-ExtraBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 5686BD657D224A089EAFB825 /* Inter-ExtraBoldItalic.otf */; };
1BA25F26C91C45F697D55099 /* Inter-ExtraLight.otf in Resources */ = {isa = PBXBuildFile; fileRef = 568162F4DC4B4CDC8B341853 /* Inter-ExtraLight.otf */; };
625D35EA2F1643E89F9887CE /* Inter-ExtraLightItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 67F811D831354006A0A6FE2A /* Inter-ExtraLightItalic.otf */; };
EEC491DF41A44001A577E8C5 /* Inter-Italic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 8716F728A49C438396CB79D3 /* Inter-Italic.otf */; };
0A6918EB0654476189741475 /* Inter-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = 780F6F2600AE4EC1B21B6F44 /* Inter-Light.otf */; };
9713779CBED04A308A0B2DF2 /* Inter-LightItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 38DEC0D33CBA43429A48B8E3 /* Inter-LightItalic.otf */; };
B9E3D3D20C9F4863A67B66D3 /* Inter-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 53AEBBB143534D68B7792C46 /* Inter-Medium.otf */; };
8362BCF2197E445C9CAFFD53 /* Inter-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 60F5BB028A4E49588D71E6CE /* Inter-MediumItalic.otf */; };
2CD45EA0A0A94063935CE7D3 /* Inter-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = DF4EC58B331A46F098343757 /* Inter-Regular.otf */; };
6FA6BA98BE3F485982F5E962 /* Inter-SemiBold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 666078AFC2DC4894ABC19DA5 /* Inter-SemiBold.otf */; };
B7C1F08B40CC4C1985152F72 /* Inter-SemiBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = C03CCA67A92F47D59CDA16E5 /* Inter-SemiBoldItalic.otf */; };
F78FB2FC94E1443A8EE8EEC3 /* Inter-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = B68457923C3F444388AB85F2 /* Inter-Thin.otf */; };
37AF1D1302824FFC83B6D1D2 /* Inter-ThinItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1CA9D245CD5A439D88F01D4F /* Inter-ThinItalic.otf */; };
CC99B59A281C4B6497C14141 /* Luciole-Bold-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F59F295E9CC54539B2C48953 /* Luciole-Bold-Italic.ttf */; };
05E2174E2E7E48EB80B9C8D8 /* Luciole-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = ABB740B68A8141229E6118AC /* Luciole-Bold.ttf */; };
6959CC40713D4D42AA56850D /* Luciole-Regular-Italic.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 8720D4D8B8BC41B79088D43C /* Luciole-Regular-Italic.ttf */; };
E4E0715B819049EFACAF2AEE /* Luciole-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 714371FB26B944FFBE7F0B29 /* Luciole-Regular.ttf */; };
98D6CE33FC02453794D8DB08 /* slkscr.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 110D16BAD3FA4513BEA89A3A /* slkscr.ttf */; };
FA58D9C915314CF086BD7FFB /* slkscrb.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0AD24C885D29461481982641 /* slkscrb.ttf */; };
749862C5A266413FBE508618 /* slkscr.woff in Resources */ = {isa = PBXBuildFile; fileRef = 98413C61772F41BD96F279F5 /* slkscr.woff */; };
5A0E2800F0C34012B292255B /* Inter-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 449D98322BFA406CBB9E2648 /* Inter-Bold.otf */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -63,6 +88,31 @@
CE0B085EC65BAFEB61DD9C49 /* Pods-ProofOfPassport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ProofOfPassport.debug.xcconfig"; path = "Target Support Files/Pods-ProofOfPassport/Pods-ProofOfPassport.debug.xcconfig"; sourceTree = "<group>"; };
CFAE0EE7E1942128592D0CC4 /* Pods_ProofOfPassport_ProofOfPassportTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ProofOfPassport_ProofOfPassportTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
066DD67BD55B4E90941F2B97 /* Inter-Black.otf */ = {isa = PBXFileReference; name = "Inter-Black.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Black.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
0C76A5D3C00C4D19B7624F46 /* Inter-BlackItalic.otf */ = {isa = PBXFileReference; name = "Inter-BlackItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-BlackItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
6F5E37006DF4462994FA8164 /* Inter-BoldItalic.otf */ = {isa = PBXFileReference; name = "Inter-BoldItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-BoldItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
D20EA8C94F544E14AB58E6EB /* Inter-ExtraBold.otf */ = {isa = PBXFileReference; name = "Inter-ExtraBold.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraBold.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
5686BD657D224A089EAFB825 /* Inter-ExtraBoldItalic.otf */ = {isa = PBXFileReference; name = "Inter-ExtraBoldItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraBoldItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
568162F4DC4B4CDC8B341853 /* Inter-ExtraLight.otf */ = {isa = PBXFileReference; name = "Inter-ExtraLight.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraLight.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
67F811D831354006A0A6FE2A /* Inter-ExtraLightItalic.otf */ = {isa = PBXFileReference; name = "Inter-ExtraLightItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraLightItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
8716F728A49C438396CB79D3 /* Inter-Italic.otf */ = {isa = PBXFileReference; name = "Inter-Italic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Italic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
780F6F2600AE4EC1B21B6F44 /* Inter-Light.otf */ = {isa = PBXFileReference; name = "Inter-Light.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Light.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
38DEC0D33CBA43429A48B8E3 /* Inter-LightItalic.otf */ = {isa = PBXFileReference; name = "Inter-LightItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-LightItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
53AEBBB143534D68B7792C46 /* Inter-Medium.otf */ = {isa = PBXFileReference; name = "Inter-Medium.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Medium.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
60F5BB028A4E49588D71E6CE /* Inter-MediumItalic.otf */ = {isa = PBXFileReference; name = "Inter-MediumItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-MediumItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
DF4EC58B331A46F098343757 /* Inter-Regular.otf */ = {isa = PBXFileReference; name = "Inter-Regular.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Regular.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
666078AFC2DC4894ABC19DA5 /* Inter-SemiBold.otf */ = {isa = PBXFileReference; name = "Inter-SemiBold.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-SemiBold.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
C03CCA67A92F47D59CDA16E5 /* Inter-SemiBoldItalic.otf */ = {isa = PBXFileReference; name = "Inter-SemiBoldItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-SemiBoldItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
B68457923C3F444388AB85F2 /* Inter-Thin.otf */ = {isa = PBXFileReference; name = "Inter-Thin.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Thin.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
1CA9D245CD5A439D88F01D4F /* Inter-ThinItalic.otf */ = {isa = PBXFileReference; name = "Inter-ThinItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ThinItalic.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
F59F295E9CC54539B2C48953 /* Luciole-Bold-Italic.ttf */ = {isa = PBXFileReference; name = "Luciole-Bold-Italic.ttf"; path = "../assets/fonts/Luciole-Bold-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
ABB740B68A8141229E6118AC /* Luciole-Bold.ttf */ = {isa = PBXFileReference; name = "Luciole-Bold.ttf"; path = "../assets/fonts/Luciole-Bold.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
8720D4D8B8BC41B79088D43C /* Luciole-Regular-Italic.ttf */ = {isa = PBXFileReference; name = "Luciole-Regular-Italic.ttf"; path = "../assets/fonts/Luciole-Regular-Italic.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
714371FB26B944FFBE7F0B29 /* Luciole-Regular.ttf */ = {isa = PBXFileReference; name = "Luciole-Regular.ttf"; path = "../assets/fonts/Luciole-Regular.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
110D16BAD3FA4513BEA89A3A /* slkscr.ttf */ = {isa = PBXFileReference; name = "slkscr.ttf"; path = "../node_modules/@tamagui/font-silkscreen/files/slkscr.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
0AD24C885D29461481982641 /* slkscrb.ttf */ = {isa = PBXFileReference; name = "slkscrb.ttf"; path = "../node_modules/@tamagui/font-silkscreen/files/slkscrb.ttf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
98413C61772F41BD96F279F5 /* slkscr.woff */ = {isa = PBXFileReference; name = "slkscr.woff"; path = "../node_modules/@tamagui/font-silkscreen/files/slkscr.woff"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
449D98322BFA406CBB9E2648 /* Inter-Bold.otf */ = {isa = PBXFileReference; name = "Inter-Bold.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Bold.otf"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = unknown; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -154,6 +204,7 @@
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
48CFD94B265341A283033375 /* Resources */,
);
indentWidth = 2;
sourceTree = "<group>";
@@ -180,6 +231,39 @@
path = Pods;
sourceTree = "<group>";
};
48CFD94B265341A283033375 /* Resources */ = {
isa = "PBXGroup";
children = (
066DD67BD55B4E90941F2B97 /* Inter-Black.otf */,
0C76A5D3C00C4D19B7624F46 /* Inter-BlackItalic.otf */,
6F5E37006DF4462994FA8164 /* Inter-BoldItalic.otf */,
D20EA8C94F544E14AB58E6EB /* Inter-ExtraBold.otf */,
5686BD657D224A089EAFB825 /* Inter-ExtraBoldItalic.otf */,
568162F4DC4B4CDC8B341853 /* Inter-ExtraLight.otf */,
67F811D831354006A0A6FE2A /* Inter-ExtraLightItalic.otf */,
8716F728A49C438396CB79D3 /* Inter-Italic.otf */,
780F6F2600AE4EC1B21B6F44 /* Inter-Light.otf */,
38DEC0D33CBA43429A48B8E3 /* Inter-LightItalic.otf */,
53AEBBB143534D68B7792C46 /* Inter-Medium.otf */,
60F5BB028A4E49588D71E6CE /* Inter-MediumItalic.otf */,
DF4EC58B331A46F098343757 /* Inter-Regular.otf */,
666078AFC2DC4894ABC19DA5 /* Inter-SemiBold.otf */,
C03CCA67A92F47D59CDA16E5 /* Inter-SemiBoldItalic.otf */,
B68457923C3F444388AB85F2 /* Inter-Thin.otf */,
1CA9D245CD5A439D88F01D4F /* Inter-ThinItalic.otf */,
F59F295E9CC54539B2C48953 /* Luciole-Bold-Italic.ttf */,
ABB740B68A8141229E6118AC /* Luciole-Bold.ttf */,
8720D4D8B8BC41B79088D43C /* Luciole-Regular-Italic.ttf */,
714371FB26B944FFBE7F0B29 /* Luciole-Regular.ttf */,
110D16BAD3FA4513BEA89A3A /* slkscr.ttf */,
0AD24C885D29461481982641 /* slkscrb.ttf */,
98413C61772F41BD96F279F5 /* slkscr.woff */,
449D98322BFA406CBB9E2648 /* Inter-Bold.otf */,
);
name = Resources;
sourceTree = "<group>";
path = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -276,6 +360,31 @@
05BD9DCC2B548AA900823023 /* MoproKit in Resources */,
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */,
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */,
2FA7C90AFAF5417DAA7BCB1E /* Inter-Black.otf in Resources */,
C9B733B168F84BBA818C6CB8 /* Inter-BlackItalic.otf in Resources */,
15AAF7651FCF40EB993543A3 /* Inter-BoldItalic.otf in Resources */,
1D2A11340C7041909B820A90 /* Inter-ExtraBold.otf in Resources */,
E4BC7CC193684992A11E3135 /* Inter-ExtraBoldItalic.otf in Resources */,
1BA25F26C91C45F697D55099 /* Inter-ExtraLight.otf in Resources */,
625D35EA2F1643E89F9887CE /* Inter-ExtraLightItalic.otf in Resources */,
EEC491DF41A44001A577E8C5 /* Inter-Italic.otf in Resources */,
0A6918EB0654476189741475 /* Inter-Light.otf in Resources */,
9713779CBED04A308A0B2DF2 /* Inter-LightItalic.otf in Resources */,
B9E3D3D20C9F4863A67B66D3 /* Inter-Medium.otf in Resources */,
8362BCF2197E445C9CAFFD53 /* Inter-MediumItalic.otf in Resources */,
2CD45EA0A0A94063935CE7D3 /* Inter-Regular.otf in Resources */,
6FA6BA98BE3F485982F5E962 /* Inter-SemiBold.otf in Resources */,
B7C1F08B40CC4C1985152F72 /* Inter-SemiBoldItalic.otf in Resources */,
F78FB2FC94E1443A8EE8EEC3 /* Inter-Thin.otf in Resources */,
37AF1D1302824FFC83B6D1D2 /* Inter-ThinItalic.otf in Resources */,
CC99B59A281C4B6497C14141 /* Luciole-Bold-Italic.ttf in Resources */,
05E2174E2E7E48EB80B9C8D8 /* Luciole-Bold.ttf in Resources */,
6959CC40713D4D42AA56850D /* Luciole-Regular-Italic.ttf in Resources */,
E4E0715B819049EFACAF2AEE /* Luciole-Regular.ttf in Resources */,
98D6CE33FC02453794D8DB08 /* slkscr.ttf in Resources */,
FA58D9C915314CF086BD7FFB /* slkscrb.ttf in Resources */,
749862C5A266413FBE508618 /* slkscr.woff in Resources */,
5A0E2800F0C34012B292255B /* Inter-Bold.otf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@@ -23,7 +23,7 @@
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>LSApplicationCategoryType</key>
<string></string>
<string/>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NFCReaderUsageDescription</key>
@@ -31,7 +31,7 @@
<key>NSAppTransportSecurity</key>
<dict/>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<string/>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
@@ -52,5 +52,32 @@
<string>A0000002472001</string>
<string>00000000000000</string>
</array>
<key>UIAppFonts</key>
<array>
<string>Inter-Black.otf</string>
<string>Inter-BlackItalic.otf</string>
<string>Inter-BoldItalic.otf</string>
<string>Inter-ExtraBold.otf</string>
<string>Inter-ExtraBoldItalic.otf</string>
<string>Inter-ExtraLight.otf</string>
<string>Inter-ExtraLightItalic.otf</string>
<string>Inter-Italic.otf</string>
<string>Inter-Light.otf</string>
<string>Inter-LightItalic.otf</string>
<string>Inter-Medium.otf</string>
<string>Inter-MediumItalic.otf</string>
<string>Inter-Regular.otf</string>
<string>Inter-SemiBold.otf</string>
<string>Inter-SemiBoldItalic.otf</string>
<string>Inter-Thin.otf</string>
<string>Inter-ThinItalic.otf</string>
<string>Luciole-Bold-Italic.ttf</string>
<string>Luciole-Bold.ttf</string>
<string>Luciole-Regular-Italic.ttf</string>
<string>Luciole-Regular.ttf</string>
<string>slkscr.ttf</string>
<string>slkscrb.ttf</string>
<string>Inter-Bold.otf</string>
</array>
</dict>
</plist>

View File

@@ -5,6 +5,5 @@ if [ -f "proof_of_passport_final.zkey" ]; then
rm "proof_of_passport_final.zkey"
fi
echo "downloading proof_of_passport_final.zkey to /circuits/build/"
wget https://current-pop-zkey.s3.eu-north-1.amazonaws.com/proof_of_passport_final_dynamic_dg_support.arkzkey # ios
mv proof_of_passport_final_dynamic_dg_support.arkzkey proof_of_passport_final.zkey
cd ../../app
wget https://current-pop-zkey.s3.eu-north-1.amazonaws.com/proof_of_passport_final_merkle_proof.arkzkey # ios
mv proof_of_passport_final_merkle_proof.arkzkey proof_of_passport_final.zkey

View File

@@ -60,7 +60,7 @@ const ProveScreen: React.FC<ProveScreenProps> = ({
try {
console.log('Downloading file...')
const result = await NativeModules.RNPassportReader.downloadFile(
'https://current-pop-zkey.s3.eu-north-1.amazonaws.com/proof_of_passport_final_dynamic_dg_support.arkzkey',
'https://current-pop-zkey.s3.eu-north-1.amazonaws.com/proof_of_passport_final_merkle_proof.arkzkey',
fileName
);
console.log("Download successful");