Merge pull request #177 from zk-passport/new-ux-refactor-circuits

refactor repo · new ux · prove circuits · new sdk
This commit is contained in:
turnoffthiscomputer
2024-08-29 11:52:59 +02:00
committed by GitHub
291 changed files with 5152208 additions and 7426 deletions

View File

@@ -4,12 +4,19 @@ on:
branches:
- dev
- main
paths:
- 'circuits/**'
- 'common/**'
pull_request:
branches:
- dev
- main
paths:
- 'circuits/**'
- 'common/**'
jobs:
run_circuit_tests:
if: github.event.pull_request.draft == false
runs-on: ubuntu-latest
environment: development
steps:

View File

@@ -1,7 +1,8 @@
module.exports = {
arrowParens: 'avoid',
bracketSameLine: true,
bracketSameLine: false,
bracketSpacing: false,
singleQuote: true,
trailingComma: 'all',
bracketSpacing: true,
};

View File

@@ -25,18 +25,17 @@ function App(): JSX.Element {
useEffect(() => {
setToast(toast);
}, [toast, setToast]);
useEffect(() => {
setSelectedTab('splash');
}, [setSelectedTab]);
useEffect(() => {
if (AMPLITUDE_KEY) {
amplitude.init(AMPLITUDE_KEY);
}
//initUserStore();
}, []);
// TODO: when passportData already stored, retrieve and jump to main screen
return (
<YStack f={1} bc={bgWhite} h="100%" w="100%">
<YStack h="100%" w="100%">

View File

@@ -10,15 +10,29 @@ link_directories(lib)
add_library(rapidsnark SHARED IMPORTED)
set_target_properties(rapidsnark PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/librapidsnark.so)
# add_library(register_sha256WithRSAEncryption_65537 SHARED IMPORTED)
# set_target_properties(register_sha256WithRSAEncryption_65537 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_register_sha256WithRSAEncryption_65537.so)
add_library(register_sha256WithRSAEncryption_65537 SHARED IMPORTED)
set_target_properties(register_sha256WithRSAEncryption_65537 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_register_sha256WithRSAEncryption_65537.so)
# add_library(disclose SHARED IMPORTED)
# set_target_properties(disclose PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_disclose.so)
add_library(disclose SHARED IMPORTED)
set_target_properties(disclose PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_disclose.so)
add_library(prove_rsa_65537_sha256 SHARED IMPORTED)
set_target_properties(prove_rsa_65537_sha256 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_prove_rsa_65537_sha256.so)
add_library(prove_rsa_65537_sha1 SHARED IMPORTED)
set_target_properties(prove_rsa_65537_sha1 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_prove_rsa_65537_sha1.so)
add_library(prove_rsapss_65537_sha256 SHARED IMPORTED)
set_target_properties(prove_rsapss_65537_sha256 PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libwitnesscalc_prove_rsapss_65537_sha256.so)
add_library(${CMAKE_PROJECT_NAME} SHARED
proofofpassportapp.cpp)
target_link_libraries(${CMAKE_PROJECT_NAME}
rapidsnark register_sha256WithRSAEncryption_65537 disclose)
rapidsnark
# register_sha256WithRSAEncryption_65537
# disclose
prove_rsa_65537_sha256
prove_rsa_65537_sha1
prove_rsapss_65537_sha256
)

View File

@@ -0,0 +1,39 @@
#ifndef WITNESSCALC_prove_rsa_65537_sha1_H
#define WITNESSCALC_prove_rsa_65537_sha1_H
#ifdef __cplusplus
extern "C" {
#endif
#define WITNESSCALC_OK 0x0
#define WITNESSCALC_ERROR 0x1
#define WITNESSCALC_ERROR_SHORT_BUFFER 0x2
/**
*
* @return error code:
* WITNESSCALC_OK - in case of success.
* WITNESSCALC_ERROR - in case of an error.
*
* On success wtns_buffer is filled with witness data and
* wtns_size contains the number bytes copied to wtns_buffer.
*
* If wtns_buffer is too small then the function returns WITNESSCALC_ERROR_SHORT_BUFFER
* and the minimum size for wtns_buffer in wtns_size.
*
*/
int
witnesscalc_prove_rsa_65537_sha1(
const char *circuit_buffer, unsigned long circuit_size,
const char *json_buffer, unsigned long json_size,
char *wtns_buffer, unsigned long *wtns_size,
char *error_msg, unsigned long error_msg_maxsize);
#ifdef __cplusplus
}
#endif
#endif // WITNESSCALC_prove_rsa_65537_sha1_H

View File

@@ -0,0 +1,39 @@
#ifndef WITNESSCALC_prove_rsa_65537_sha256_H
#define WITNESSCALC_prove_rsa_65537_sha256_H
#ifdef __cplusplus
extern "C" {
#endif
#define WITNESSCALC_OK 0x0
#define WITNESSCALC_ERROR 0x1
#define WITNESSCALC_ERROR_SHORT_BUFFER 0x2
/**
*
* @return error code:
* WITNESSCALC_OK - in case of success.
* WITNESSCALC_ERROR - in case of an error.
*
* On success wtns_buffer is filled with witness data and
* wtns_size contains the number bytes copied to wtns_buffer.
*
* If wtns_buffer is too small then the function returns WITNESSCALC_ERROR_SHORT_BUFFER
* and the minimum size for wtns_buffer in wtns_size.
*
*/
int
witnesscalc_prove_rsa_65537_sha256(
const char *circuit_buffer, unsigned long circuit_size,
const char *json_buffer, unsigned long json_size,
char *wtns_buffer, unsigned long *wtns_size,
char *error_msg, unsigned long error_msg_maxsize);
#ifdef __cplusplus
}
#endif
#endif // WITNESSCALC_prove_rsa_65537_sha256_H

View File

@@ -0,0 +1,39 @@
#ifndef WITNESSCALC_prove_rsapss_65537_sha256_H
#define WITNESSCALC_prove_rsapss_65537_sha256_H
#ifdef __cplusplus
extern "C" {
#endif
#define WITNESSCALC_OK 0x0
#define WITNESSCALC_ERROR 0x1
#define WITNESSCALC_ERROR_SHORT_BUFFER 0x2
/**
*
* @return error code:
* WITNESSCALC_OK - in case of success.
* WITNESSCALC_ERROR - in case of an error.
*
* On success wtns_buffer is filled with witness data and
* wtns_size contains the number bytes copied to wtns_buffer.
*
* If wtns_buffer is too small then the function returns WITNESSCALC_ERROR_SHORT_BUFFER
* and the minimum size for wtns_buffer in wtns_size.
*
*/
int
witnesscalc_prove_rsapss_65537_sha256(
const char *circuit_buffer, unsigned long circuit_size,
const char *json_buffer, unsigned long json_size,
char *wtns_buffer, unsigned long *wtns_size,
char *error_msg, unsigned long error_msg_maxsize);
#ifdef __cplusplus
}
#endif
#endif // WITNESSCALC_prove_rsapss_65537_sha256_H

View File

@@ -1,6 +1,9 @@
#include "include/prover.h"
#include "include/witnesscalc_register_sha256WithRSAEncryption_65537.h"
#include "include/witnesscalc_disclose.h"
// #include "include/witnesscalc_register_sha256WithRSAEncryption_65537.h"
// #include "include/witnesscalc_disclose.h"
#include "include/witnesscalc_prove_rsa_65537_sha256.h"
#include "include/witnesscalc_prove_rsa_65537_sha1.h"
#include "include/witnesscalc_prove_rsapss_65537_sha256.h"
#include <jni.h>
#include <iostream>
@@ -47,9 +50,83 @@ Java_com_proofofpassportapp_prover_ZKPTools_groth16_1prover(JNIEnv *env, jobject
return result;
}
// extern "C"
// JNIEXPORT jint JNICALL
// Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1register_1sha256WithRSAEncryption_165537(JNIEnv *env, jobject thiz,
// jbyteArray circuit_buffer,
// jlong circuit_size, jbyteArray json_buffer,
// jlong json_size, jbyteArray wtns_buffer,
// jlongArray wtns_size, jbyteArray error_msg,
// jlong error_msg_max_size) {
// const char *circuitBuffer = reinterpret_cast<const char *>(env->GetByteArrayElements(
// circuit_buffer, nullptr));
// const char *jsonBuffer = reinterpret_cast<const char *>(env->GetByteArrayElements(json_buffer,
// nullptr));
// char *wtnsBuffer = reinterpret_cast<char *>(env->GetByteArrayElements(wtns_buffer, nullptr));
// char *errorMsg = reinterpret_cast<char *>(env->GetByteArrayElements(error_msg, nullptr));
// unsigned long wtnsSize = env->GetLongArrayElements(wtns_size, nullptr)[0];
// int result = witnesscalc_register_sha256WithRSAEncryption_65537(
// circuitBuffer, static_cast<unsigned long>(circuit_size),
// jsonBuffer, static_cast<unsigned long>(json_size),
// wtnsBuffer, &wtnsSize,
// errorMsg, static_cast<unsigned long>(error_msg_max_size));
// // Set the result and release the resources
// env->SetLongArrayRegion(wtns_size, 0, 1, reinterpret_cast<jlong *>(&wtnsSize));
// env->ReleaseByteArrayElements(circuit_buffer,
// reinterpret_cast<jbyte *>(const_cast<char *>(circuitBuffer)), 0);
// env->ReleaseByteArrayElements(json_buffer,
// reinterpret_cast<jbyte *>(const_cast<char *>(jsonBuffer)), 0);
// env->ReleaseByteArrayElements(wtns_buffer, reinterpret_cast<jbyte *>(wtnsBuffer), 0);
// env->ReleaseByteArrayElements(error_msg, reinterpret_cast<jbyte *>(errorMsg), 0);
// return result;
// }
// extern "C"
// JNIEXPORT jint JNICALL
// Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1disclose(JNIEnv *env, jobject thiz,
// jbyteArray circuit_buffer,
// jlong circuit_size, jbyteArray json_buffer,
// jlong json_size, jbyteArray wtns_buffer,
// jlongArray wtns_size, jbyteArray error_msg,
// jlong error_msg_max_size) {
// const char *circuitBuffer = reinterpret_cast<const char *>(env->GetByteArrayElements(
// circuit_buffer, nullptr));
// const char *jsonBuffer = reinterpret_cast<const char *>(env->GetByteArrayElements(json_buffer,
// nullptr));
// char *wtnsBuffer = reinterpret_cast<char *>(env->GetByteArrayElements(wtns_buffer, nullptr));
// char *errorMsg = reinterpret_cast<char *>(env->GetByteArrayElements(error_msg, nullptr));
// unsigned long wtnsSize = env->GetLongArrayElements(wtns_size, nullptr)[0];
// int result = witnesscalc_disclose(
// circuitBuffer, static_cast<unsigned long>(circuit_size),
// jsonBuffer, static_cast<unsigned long>(json_size),
// wtnsBuffer, &wtnsSize,
// errorMsg, static_cast<unsigned long>(error_msg_max_size));
// // Set the result and release the resources
// env->SetLongArrayRegion(wtns_size, 0, 1, reinterpret_cast<jlong *>(&wtnsSize));
// env->ReleaseByteArrayElements(circuit_buffer,
// reinterpret_cast<jbyte *>(const_cast<char *>(circuitBuffer)), 0);
// env->ReleaseByteArrayElements(json_buffer,
// reinterpret_cast<jbyte *>(const_cast<char *>(jsonBuffer)), 0);
// env->ReleaseByteArrayElements(wtns_buffer, reinterpret_cast<jbyte *>(wtnsBuffer), 0);
// env->ReleaseByteArrayElements(error_msg, reinterpret_cast<jbyte *>(errorMsg), 0);
// return result;
// }
extern "C"
JNIEXPORT jint JNICALL
Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1register_1sha256WithRSAEncryption_165537(JNIEnv *env, jobject thiz,
Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1prove_1rsa_165537_1sha256(JNIEnv *env, jobject thiz,
jbyteArray circuit_buffer,
jlong circuit_size, jbyteArray json_buffer,
jlong json_size, jbyteArray wtns_buffer,
@@ -65,7 +142,7 @@ Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1register_1sha256WithRSA
unsigned long wtnsSize = env->GetLongArrayElements(wtns_size, nullptr)[0];
int result = witnesscalc_register_sha256WithRSAEncryption_65537(
int result = witnesscalc_prove_rsa_65537_sha256(
circuitBuffer, static_cast<unsigned long>(circuit_size),
jsonBuffer, static_cast<unsigned long>(json_size),
wtnsBuffer, &wtnsSize,
@@ -86,7 +163,7 @@ Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1register_1sha256WithRSA
extern "C"
JNIEXPORT jint JNICALL
Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1disclose(JNIEnv *env, jobject thiz,
Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1prove_1rsa_165537_1sha1(JNIEnv *env, jobject thiz,
jbyteArray circuit_buffer,
jlong circuit_size, jbyteArray json_buffer,
jlong json_size, jbyteArray wtns_buffer,
@@ -102,7 +179,44 @@ Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1disclose(JNIEnv *env, j
unsigned long wtnsSize = env->GetLongArrayElements(wtns_size, nullptr)[0];
int result = witnesscalc_disclose(
int result = witnesscalc_prove_rsa_65537_sha1(
circuitBuffer, static_cast<unsigned long>(circuit_size),
jsonBuffer, static_cast<unsigned long>(json_size),
wtnsBuffer, &wtnsSize,
errorMsg, static_cast<unsigned long>(error_msg_max_size));
// Set the result and release the resources
env->SetLongArrayRegion(wtns_size, 0, 1, reinterpret_cast<jlong *>(&wtnsSize));
env->ReleaseByteArrayElements(circuit_buffer,
reinterpret_cast<jbyte *>(const_cast<char *>(circuitBuffer)), 0);
env->ReleaseByteArrayElements(json_buffer,
reinterpret_cast<jbyte *>(const_cast<char *>(jsonBuffer)), 0);
env->ReleaseByteArrayElements(wtns_buffer, reinterpret_cast<jbyte *>(wtnsBuffer), 0);
env->ReleaseByteArrayElements(error_msg, reinterpret_cast<jbyte *>(errorMsg), 0);
return result;
}
extern "C"
JNIEXPORT jint JNICALL
Java_com_proofofpassportapp_prover_ZKPTools_witnesscalc_1prove_1rsapss_165537_1sha256(JNIEnv *env, jobject thiz,
jbyteArray circuit_buffer,
jlong circuit_size, jbyteArray json_buffer,
jlong json_size, jbyteArray wtns_buffer,
jlongArray wtns_size, jbyteArray error_msg,
jlong error_msg_max_size) {
const char *circuitBuffer = reinterpret_cast<const char *>(env->GetByteArrayElements(
circuit_buffer, nullptr));
const char *jsonBuffer = reinterpret_cast<const char *>(env->GetByteArrayElements(json_buffer,
nullptr));
char *wtnsBuffer = reinterpret_cast<char *>(env->GetByteArrayElements(wtns_buffer, nullptr));
char *errorMsg = reinterpret_cast<char *>(env->GetByteArrayElements(error_msg, nullptr));
unsigned long wtnsSize = env->GetLongArrayElements(wtns_size, nullptr)[0];
int result = witnesscalc_prove_rsapss_65537_sha256(
circuitBuffer, static_cast<unsigned long>(circuit_size),
jsonBuffer, static_cast<unsigned long>(json_size),
wtnsBuffer, &wtnsSize,

View File

@@ -67,8 +67,11 @@ class ProverModule(reactContext: ReactApplicationContext) : ReactContextBaseJava
val zkpTools = ZKPTools(reactApplicationContext)
val witnessCalcFunction = when (witness_calculator) {
"register_sha256WithRSAEncryption_65537" -> zkpTools::witnesscalc_register_sha256WithRSAEncryption_65537
"disclose" -> zkpTools::witnesscalc_disclose
// "register_sha256WithRSAEncryption_65537" -> zkpTools::witnesscalc_register_sha256WithRSAEncryption_65537
// "disclose" -> zkpTools::witnesscalc_disclose
"prove_rsa_65537_sha256" -> zkpTools::witnesscalc_prove_rsa_65537_sha256
"prove_rsa_65537_sha1" -> zkpTools::witnesscalc_prove_rsa_65537_sha1
"prove_rsapss_65537_sha256" -> zkpTools::witnesscalc_prove_rsapss_65537_sha256
else -> throw IllegalArgumentException("Invalid witness calculator name")
}
@@ -119,7 +122,23 @@ data class ZkProof(
)
class ZKPTools(val context: Context) {
external fun witnesscalc_register_sha256WithRSAEncryption_65537(circuitBuffer: ByteArray,
// external fun witnesscalc_register_sha256WithRSAEncryption_65537(circuitBuffer: ByteArray,
// circuitSize: Long,
// jsonBuffer: ByteArray,
// jsonSize: Long,
// wtnsBuffer: ByteArray,
// wtnsSize: LongArray,
// errorMsg: ByteArray,
// errorMsgMaxSize: Long): Int
// external fun witnesscalc_disclose(circuitBuffer: ByteArray,
// circuitSize: Long,
// jsonBuffer: ByteArray,
// jsonSize: Long,
// wtnsBuffer: ByteArray,
// wtnsSize: LongArray,
// errorMsg: ByteArray,
// errorMsgMaxSize: Long): Int
external fun witnesscalc_prove_rsa_65537_sha256(circuitBuffer: ByteArray,
circuitSize: Long,
jsonBuffer: ByteArray,
jsonSize: Long,
@@ -127,7 +146,7 @@ class ZKPTools(val context: Context) {
wtnsSize: LongArray,
errorMsg: ByteArray,
errorMsgMaxSize: Long): Int
external fun witnesscalc_disclose(circuitBuffer: ByteArray,
external fun witnesscalc_prove_rsa_65537_sha1(circuitBuffer: ByteArray,
circuitSize: Long,
jsonBuffer: ByteArray,
jsonSize: Long,
@@ -135,6 +154,15 @@ class ZKPTools(val context: Context) {
wtnsSize: LongArray,
errorMsg: ByteArray,
errorMsgMaxSize: Long): Int
external fun witnesscalc_prove_rsapss_65537_sha256(circuitBuffer: ByteArray,
circuitSize: Long,
jsonBuffer: ByteArray,
jsonSize: Long,
wtnsBuffer: ByteArray,
wtnsSize: LongArray,
errorMsg: ByteArray,
errorMsgMaxSize: Long): Int
external fun groth16_prover(
zkeyBuffer: ByteArray, zkeySize: Long,
wtnsBuffer: ByteArray, wtnsSize: Long,

28
app/index.clip.js Normal file
View File

@@ -0,0 +1,28 @@
/**
* @format
*/
import { AppRegistry, LogBox } from 'react-native';
import App from './App';
import { name as appName } from './app.json';
import { TamaguiProvider, createTamagui } from 'tamagui';
import { config } from '@tamagui/config/v2-native'
import { ToastProvider } from '@tamagui/toast';
const tamaguiConfig = createTamagui(config)
LogBox.ignoreLogs([
/bad setState/,
'Warning, duplicate ID for input',
/Warning, duplicate ID for input/
])
const Root = () => (
<TamaguiProvider config={tamaguiConfig}>
<ToastProvider swipeDirection="up">
<App />
</ToastProvider>
</TamaguiProvider>
);
AppRegistry.registerComponent(appName, () => Root);

View File

@@ -0,0 +1,22 @@
//
// AppDelegate.h
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@property (nonatomic, strong) UIWindow *window;
@property (readonly, strong) NSPersistentContainer *persistentContainer;
- (void)saveContext;
@end

View File

@@ -0,0 +1,85 @@
//
// AppDelegate.m
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import "AppDelegate.h"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
return YES;
}
#pragma mark - UISceneSession lifecycle
- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
// Called when a new scene session is being created.
// Use this method to select a configuration to create the new scene with.
return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
}
- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet<UISceneSession *> *)sceneSessions {
// Called when the user discards a scene session.
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
}
#pragma mark - Core Data stack
@synthesize persistentContainer = _persistentContainer;
- (NSPersistentContainer *)persistentContainer {
// The persistent container for the application. This implementation creates and returns a container, having loaded the store for the application to it.
@synchronized (self) {
if (_persistentContainer == nil) {
_persistentContainer = [[NSPersistentContainer alloc] initWithName:@"OpenPassport_App_Clip"];
[_persistentContainer loadPersistentStoresWithCompletionHandler:^(NSPersistentStoreDescription *storeDescription, NSError *error) {
if (error != nil) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
/*
Typical reasons for an error here include:
* The parent directory does not exist, cannot be created, or disallows writing.
* The persistent store is not accessible, due to permissions or data protection when the device is locked.
* The device is out of space.
* The store could not be migrated to the current model version.
Check the error message to determine what the actual problem was.
*/
NSLog(@"Unresolved error %@, %@", error, error.userInfo);
abort();
}
}];
}
}
return _persistentContainer;
}
#pragma mark - Core Data Saving support
- (void)saveContext {
NSManagedObjectContext *context = self.persistentContainer.viewContext;
NSError *error = nil;
if ([context hasChanges] && ![context save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, error.userInfo);
abort();
}
}
@end

View File

@@ -0,0 +1,11 @@
{
"colors" : [
{
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"images" : [
{
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "disclose.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "prove_rsa_65537_sha1.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "prove_rsa_65537_sha256.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "prove_rsapss_65537_sha256.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "register_sha256WithRSAEncryption_65537.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="53" y="375"/>
</scene>
</scenes>
</document>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13122.16" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="BYZ-38-t0r">
<dependencies>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="13104.12"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="tne-QT-ifu">
<objects>
<viewController id="BYZ-38-t0r" customClass="ViewController" customModuleProvider="" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<color key="backgroundColor" xcode11CocoaTouchSystemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
<viewLayoutGuide key="safeArea" id="6Tk-OE-BBY"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
</objects>
</scene>
</scenes>
</document>

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 422 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 582 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1007 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -0,0 +1,204 @@
{
"images": [
{
"size": "60x60",
"expected-size": "180",
"filename": "180.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "3x"
},
{
"size": "40x40",
"expected-size": "80",
"filename": "80.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "2x"
},
{
"size": "40x40",
"expected-size": "120",
"filename": "120.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "3x"
},
{
"size": "60x60",
"expected-size": "120",
"filename": "120.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "2x"
},
{
"size": "57x57",
"expected-size": "57",
"filename": "57.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "1x"
},
{
"size": "29x29",
"expected-size": "58",
"filename": "58.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "2x"
},
{
"size": "29x29",
"expected-size": "29",
"filename": "29.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "1x"
},
{
"size": "29x29",
"expected-size": "87",
"filename": "87.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "3x"
},
{
"size": "57x57",
"expected-size": "114",
"filename": "114.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "2x"
},
{
"size": "20x20",
"expected-size": "40",
"filename": "40.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "2x"
},
{
"size": "20x20",
"expected-size": "60",
"filename": "60.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "iphone",
"scale": "3x"
},
{
"size": "1024x1024",
"filename": "1024.png",
"expected-size": "1024",
"idiom": "ios-marketing",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"scale": "1x"
},
{
"size": "40x40",
"expected-size": "80",
"filename": "80.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
},
{
"size": "72x72",
"expected-size": "72",
"filename": "72.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "1x"
},
{
"size": "76x76",
"expected-size": "152",
"filename": "152.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
},
{
"size": "50x50",
"expected-size": "100",
"filename": "100.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
},
{
"size": "29x29",
"expected-size": "58",
"filename": "58.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
},
{
"size": "76x76",
"expected-size": "76",
"filename": "76.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "1x"
},
{
"size": "29x29",
"expected-size": "29",
"filename": "29.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "1x"
},
{
"size": "50x50",
"expected-size": "50",
"filename": "50.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "1x"
},
{
"size": "72x72",
"expected-size": "144",
"filename": "144.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
},
{
"size": "40x40",
"expected-size": "40",
"filename": "40.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "1x"
},
{
"size": "83.5x83.5",
"expected-size": "167",
"filename": "167.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
},
{
"size": "20x20",
"expected-size": "20",
"filename": "20.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "1x"
},
{
"size": "20x20",
"expected-size": "40",
"filename": "40.png",
"folder": "Assets.xcassets/AppIcon.appiconset/",
"idiom": "ipad",
"scale": "2x"
}
]
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"version" : 1,
"author" : "xcode"
}
}

View File

@@ -0,0 +1,123 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDisplayName</key>
<string>OpenPassport</string>
<key>CFBundleIconName</key>
<string>AppIcon</string>
<key>NSAppClip</key>
<dict>
<key>NSAppClipRequestEphemeralUserNotification</key>
<false/>
<key>NSAppClipRequestLocationConfirmation</key>
<false/>
</dict>
<key>UIApplicationSceneManifest</key>
<dict>
<key>UIApplicationSupportsMultipleScenes</key>
<false/>
<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>SceneDelegate</string>
<key>UISceneStoryboardFile</key>
<string>Main</string>
</dict>
</array>
</dict>
</dict>
<key>NFCReaderUsageDescription</key>
<string>Need NFC to read Passport</string>
<key>NSFaceIDUsageDescription</key>
<string>Needed to secure the secret</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library to allow you to choose passport photos or save generated QR codes.</string>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<false/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
<key>openpassport.app</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSIncludesSubdomains</key>
<true/>
</dict>
</dict>
</dict>
<key>NSCameraUsageDescription</key>
<string>Needed to scan the passport MRZ.</string>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</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>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIRequiredDeviceCapabilities</key>
<array>
<string>armv7</string>
</array>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A0000002471001</string>
<string>A0000002472001</string>
<string>00000000000000</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.device.camera</key>
<true/>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>TAG</string>
</array>
<key>com.apple.developer.parent-application-identifiers</key>
<array>
<string>$(AppIdentifierPrefix)com.warroom.proofofpassport</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>_XCCurrentVersionName</key>
<string>OpenPassport_App_Clip.xcdatamodel</string>
</dict>
</plist>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<model type="com.apple.IDECoreDataModeler.DataModel" documentVersion="1.0" lastSavedToolsVersion="1" systemVersion="11A491" minimumToolsVersion="Automatic" sourceLanguage="Objective-C" usedWithCloudKit="false" userDefinedModelVersionIdentifier="">
<elements/>
</model>

View File

@@ -0,0 +1,15 @@
//
// SceneDelegate.h
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import <UIKit/UIKit.h>
@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
@property (strong, nonatomic) UIWindow * window;
@end

View File

@@ -0,0 +1,61 @@
//
// SceneDelegate.m
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import "SceneDelegate.h"
#import "AppDelegate.h"
@interface SceneDelegate ()
@end
@implementation SceneDelegate
- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
// Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
// If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
// This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
}
- (void)sceneDidDisconnect:(UIScene *)scene {
// Called as the scene is being released by the system.
// This occurs shortly after the scene enters the background, or when its session is discarded.
// Release any resources associated with this scene that can be re-created the next time the scene connects.
// The scene may re-connect later, as its session was not necessarily discarded (see `application:didDiscardSceneSessions` instead).
}
- (void)sceneDidBecomeActive:(UIScene *)scene {
// Called when the scene has moved from an inactive state to an active state.
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
}
- (void)sceneWillResignActive:(UIScene *)scene {
// Called when the scene will move from an active state to an inactive state.
// This may occur due to temporary interruptions (ex. an incoming phone call).
}
- (void)sceneWillEnterForeground:(UIScene *)scene {
// Called as the scene transitions from the background to the foreground.
// Use this method to undo the changes made on entering the background.
}
- (void)sceneDidEnterBackground:(UIScene *)scene {
// Called as the scene transitions from the foreground to the background.
// Use this method to save data, release shared resources, and store enough scene-specific state information
// to restore the scene back to its current state.
// Save changes in the application's managed object context when the application transitions to the background.
[(AppDelegate *)UIApplication.sharedApplication.delegate saveContext];
}
@end

View File

@@ -0,0 +1,14 @@
//
// ViewController.h
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
@end

View File

@@ -0,0 +1,42 @@
//
// ViewController.m
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import "ViewController.h"
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)loadView {
#if DEBUG
// For DEBUG configuration, javascript will be loaded from index file
NSURL *jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.clip"];
#else
// For RELEASE configuration, js code is bundled and main.jsbundle file is created
NSURL *jsCodeLocation = [[NSBundle mainBundle]
URLForResource:@"main" withExtension:@"jsbundle"];
#endif
// Value of moduleName should be equal to appName value set in index file
RCTRootView *rootView = [[RCTRootView alloc]
initWithBundleURL:jsCodeLocation moduleName:@"OpenPassport"
initialProperties:nil launchOptions:nil];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f
green:1.0f blue:1.0f alpha:1];
self.view = rootView;
}
- (void)viewDidLoad {
[super viewDidLoad];
}
@end

View File

@@ -0,0 +1,18 @@
//
// main.m
// OpenPassport App Clip
//
// Created by turboblitz on 17/08/2024.
//
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
NSString * appDelegateClassName;
@autoreleasepool {
// Setup code that might create autoreleased objects goes here.
appDelegateClassName = NSStringFromClass([AppDelegate class]);
}
return UIApplicationMain(argc, argv, nil, appDelegateClassName);
}

View File

@@ -2,6 +2,9 @@
// Use this file to import your target's public headers that you would like to expose to Swift.
//
#include "witnesscalc_register_sha256WithRSAEncryption_65537.h"
#include "witnesscalc_disclose.h"
// #include "witnesscalc_register_sha256WithRSAEncryption_65537.h"
// #include "witnesscalc_disclose.h"
#include "witnesscalc_prove_rsa_65537_sha256.h"
#include "witnesscalc_prove_rsa_65537_sha1.h"
#include "witnesscalc_prove_rsapss_65537_sha256.h"
#include "groth16_prover.h"

View File

@@ -7,10 +7,46 @@
objects = {
/* Begin PBXBuildFile section */
054340B82C71B2960014B445 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 054340B72C71B2960014B445 /* AppDelegate.m */; };
054340BB2C71B2960014B445 /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 054340BA2C71B2960014B445 /* SceneDelegate.m */; };
054340BE2C71B2960014B445 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 054340BD2C71B2960014B445 /* ViewController.m */; };
054340C12C71B2960014B445 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 054340BF2C71B2960014B445 /* Main.storyboard */; };
054340C42C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 054340C22C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodeld */; };
054340C62C71B2980014B445 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 054340C52C71B2980014B445 /* Assets.xcassets */; };
054340C92C71B2980014B445 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 054340C72C71B2980014B445 /* LaunchScreen.storyboard */; };
054340CC2C71B2980014B445 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 054340CB2C71B2980014B445 /* main.m */; };
054340D02C71B2980014B445 /* OpenPassport App Clip.app in Embed App Clips */ = {isa = PBXBuildFile; fileRef = 054340B42C71B2960014B445 /* OpenPassport App Clip.app */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
05527D5C2C7743010077C942 /* libwitnesscalc_prove_rsa_65537_sha1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0573C4F12C7545F6006C7386 /* libwitnesscalc_prove_rsa_65537_sha1.a */; };
05527D5D2C7743010077C942 /* libwitnesscalc_prove_rsa_65537_sha256.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0573C4F32C7545F7006C7386 /* libwitnesscalc_prove_rsa_65537_sha256.a */; };
05527D5E2C7743010077C942 /* libwitnesscalc_prove_rsapss_65537_sha256.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0573C4F22C7545F7006C7386 /* libwitnesscalc_prove_rsapss_65537_sha256.a */; };
0569F35B2BBC9015006670BD /* librapidsnark.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0569F35A2BBC900D006670BD /* librapidsnark.a */; };
0569F35F2BBC98D5006670BD /* libfq.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0569F35E2BBC98C9006670BD /* libfq.a */; };
0573C4D72C72E6D0006C7386 /* PassportReader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4CA2C72E6D0006C7386 /* PassportReader.swift */; };
0573C4D82C72E6D0006C7386 /* PassportReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4CC2C72E6D0006C7386 /* PassportReader.m */; };
0573C4D92C72E6D0006C7386 /* QKMRZScannerViewRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4CD2C72E6D0006C7386 /* QKMRZScannerViewRepresentable.swift */; };
0573C4DA2C72E6D0006C7386 /* QRScannerBridge.m in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4CE2C72E6D0006C7386 /* QRScannerBridge.m */; };
0573C4DB2C72E6D0006C7386 /* Prover.m in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4CF2C72E6D0006C7386 /* Prover.m */; };
0573C4DC2C72E6D0006C7386 /* MRZScannerModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D02C72E6D0006C7386 /* MRZScannerModule.swift */; };
0573C4DD2C72E6D0006C7386 /* QRScannerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D12C72E6D0006C7386 /* QRScannerViewController.swift */; };
0573C4DE2C72E6D0006C7386 /* MRZScannerModule.m in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D22C72E6D0006C7386 /* MRZScannerModule.m */; };
0573C4DF2C72E6D0006C7386 /* LottieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D32C72E6D0006C7386 /* LottieView.swift */; };
0573C4E02C72E6D0006C7386 /* ScannerHostingController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D42C72E6D0006C7386 /* ScannerHostingController.swift */; };
0573C4E12C72E6D0006C7386 /* Prover.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D52C72E6D0006C7386 /* Prover.swift */; };
0573C4E22C72E6D0006C7386 /* QRScannerBridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0573C4D62C72E6D0006C7386 /* QRScannerBridge.swift */; };
0573C4E42C72E7F6006C7386 /* libfq.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0569F35E2BBC98C9006670BD /* libfq.a */; };
0573C4E52C72E7F6006C7386 /* libfr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05D985F32BB331AB00F58EEA /* libfr.a */; };
0573C4E62C72E7F6006C7386 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05D985F22BB331AB00F58EEA /* libgmp.a */; };
0573C4E72C72E7F6006C7386 /* librapidsnark.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0569F35A2BBC900D006670BD /* librapidsnark.a */; };
0573C4E82C72E7F6006C7386 /* libwitnesscalc_disclose.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 058516D32BF49B91006A14DA /* libwitnesscalc_disclose.a */; };
0573C4E92C72E7F6006C7386 /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 058516D22BF49B91006A14DA /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a */; };
0573C4EE2C72E857006C7386 /* passport.json in Resources */ = {isa = PBXBuildFile; fileRef = 0573C4ED2C72E857006C7386 /* passport.json */; };
0573C4F02C742FA6006C7386 /* masterList.pem in Resources */ = {isa = PBXBuildFile; fileRef = 0573C4EF2C742FA6006C7386 /* masterList.pem */; };
0573C4F42C754600006C7386 /* libwitnesscalc_prove_rsa_65537_sha1.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0573C4F12C7545F6006C7386 /* libwitnesscalc_prove_rsa_65537_sha1.a */; };
0573C4F52C754600006C7386 /* libwitnesscalc_prove_rsa_65537_sha256.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0573C4F32C7545F7006C7386 /* libwitnesscalc_prove_rsa_65537_sha256.a */; };
0573C4F62C754600006C7386 /* libwitnesscalc_prove_rsapss_65537_sha256.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0573C4F22C7545F7006C7386 /* libwitnesscalc_prove_rsapss_65537_sha256.a */; };
058516D42BF49B98006A14DA /* libwitnesscalc_disclose.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 058516D32BF49B91006A14DA /* libwitnesscalc_disclose.a */; };
058516D52BF49B98006A14DA /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 058516D22BF49B91006A14DA /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a */; };
05B4DDF72C7850A90067519E /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05B4DDF62C7850A80067519E /* Images.xcassets */; };
05D985F52BB331AB00F58EEA /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05D985F22BB331AB00F58EEA /* libgmp.a */; };
05D985F62BB331AB00F58EEA /* libfr.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 05D985F32BB331AB00F58EEA /* libfr.a */; };
05D985FB2BB3344600F58EEA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 05D985FA2BB3344600F58EEA /* Assets.xcassets */; };
@@ -46,6 +82,7 @@
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 */; };
926E45294BCCFD19D5CD4AEF /* Pods_OpenPassport_OpenPassport_App_Clip.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F28D0EC9A537B138EDEDC422 /* Pods_OpenPassport_OpenPassport_App_Clip.framework */; };
9713779CBED04A308A0B2DF2 /* Inter-LightItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = 38DEC0D33CBA43429A48B8E3 /* Inter-LightItalic.otf */; };
98D6CE33FC02453794D8DB08 /* slkscr.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 110D16BAD3FA4513BEA89A3A /* slkscr.ttf */; };
B7C1F08B40CC4C1985152F72 /* Inter-SemiBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = C03CCA67A92F47D59CDA16E5 /* Inter-SemiBoldItalic.otf */; };
@@ -69,14 +106,70 @@
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = OpenPassport;
};
054340CE2C71B2980014B445 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 054340B32C71B2960014B445;
remoteInfo = "OpenPassport App Clip";
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
054340D12C71B2980014B445 /* Embed App Clips */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "$(CONTENTS_FOLDER_PATH)/AppClips";
dstSubfolderSpec = 16;
files = (
054340D02C71B2980014B445 /* OpenPassport App Clip.app in Embed App Clips */,
);
name = "Embed App Clips";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
00E356EE1AD99517003FC87E /* OpenPassportTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = OpenPassportTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
03D7F2F0EF44EF6300A9E4CD /* Pods-OpenPassport-OpenPassport App Clip.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport-OpenPassport App Clip.release.xcconfig"; path = "Target Support Files/Pods-OpenPassport-OpenPassport App Clip/Pods-OpenPassport-OpenPassport App Clip.release.xcconfig"; sourceTree = "<group>"; };
054340B42C71B2960014B445 /* OpenPassport App Clip.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "OpenPassport App Clip.app"; sourceTree = BUILT_PRODUCTS_DIR; };
054340B62C71B2960014B445 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
054340B72C71B2960014B445 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
054340B92C71B2960014B445 /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = "<group>"; };
054340BA2C71B2960014B445 /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = "<group>"; };
054340BC2C71B2960014B445 /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; };
054340BD2C71B2960014B445 /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; };
054340C02C71B2960014B445 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
054340C32C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = OpenPassport_App_Clip.xcdatamodel; sourceTree = "<group>"; };
054340C52C71B2980014B445 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
054340C82C71B2980014B445 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
054340CA2C71B2980014B445 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
054340CB2C71B2980014B445 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
054340CD2C71B2980014B445 /* OpenPassport_App_Clip.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = OpenPassport_App_Clip.entitlements; sourceTree = "<group>"; };
0569F35A2BBC900D006670BD /* librapidsnark.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = librapidsnark.a; sourceTree = "<group>"; };
0569F35E2BBC98C9006670BD /* libfq.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libfq.a; sourceTree = "<group>"; };
0573C4CA2C72E6D0006C7386 /* PassportReader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PassportReader.swift; sourceTree = SOURCE_ROOT; };
0573C4CB2C72E6D0006C7386 /* OpenPassport-Bridging-Header.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "OpenPassport-Bridging-Header.h"; sourceTree = SOURCE_ROOT; };
0573C4CC2C72E6D0006C7386 /* PassportReader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PassportReader.m; sourceTree = SOURCE_ROOT; };
0573C4CD2C72E6D0006C7386 /* QKMRZScannerViewRepresentable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QKMRZScannerViewRepresentable.swift; sourceTree = SOURCE_ROOT; };
0573C4CE2C72E6D0006C7386 /* QRScannerBridge.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = QRScannerBridge.m; sourceTree = SOURCE_ROOT; };
0573C4CF2C72E6D0006C7386 /* Prover.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Prover.m; sourceTree = SOURCE_ROOT; };
0573C4D02C72E6D0006C7386 /* MRZScannerModule.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MRZScannerModule.swift; sourceTree = SOURCE_ROOT; };
0573C4D12C72E6D0006C7386 /* QRScannerViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRScannerViewController.swift; sourceTree = SOURCE_ROOT; };
0573C4D22C72E6D0006C7386 /* MRZScannerModule.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MRZScannerModule.m; sourceTree = SOURCE_ROOT; };
0573C4D32C72E6D0006C7386 /* LottieView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LottieView.swift; sourceTree = SOURCE_ROOT; };
0573C4D42C72E6D0006C7386 /* ScannerHostingController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ScannerHostingController.swift; sourceTree = SOURCE_ROOT; };
0573C4D52C72E6D0006C7386 /* Prover.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Prover.swift; sourceTree = SOURCE_ROOT; };
0573C4D62C72E6D0006C7386 /* QRScannerBridge.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = QRScannerBridge.swift; sourceTree = SOURCE_ROOT; };
0573C4EA2C72E7F6006C7386 /* groth16_prover.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = groth16_prover.h; sourceTree = "<group>"; };
0573C4ED2C72E857006C7386 /* passport.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = passport.json; sourceTree = SOURCE_ROOT; };
0573C4EF2C742FA6006C7386 /* masterList.pem */ = {isa = PBXFileReference; lastKnownFileType = text; name = masterList.pem; path = OpenPassport/masterList.pem; sourceTree = SOURCE_ROOT; };
0573C4F12C7545F6006C7386 /* libwitnesscalc_prove_rsa_65537_sha1.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwitnesscalc_prove_rsa_65537_sha1.a; sourceTree = "<group>"; };
0573C4F22C7545F7006C7386 /* libwitnesscalc_prove_rsapss_65537_sha256.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwitnesscalc_prove_rsapss_65537_sha256.a; sourceTree = "<group>"; };
0573C4F32C7545F7006C7386 /* libwitnesscalc_prove_rsa_65537_sha256.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwitnesscalc_prove_rsa_65537_sha256.a; sourceTree = "<group>"; };
058516D22BF49B91006A14DA /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwitnesscalc_register_sha256WithRSAEncryption_65537.a; sourceTree = "<group>"; };
058516D32BF49B91006A14DA /* libwitnesscalc_disclose.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libwitnesscalc_disclose.a; sourceTree = "<group>"; };
05B4DDF62C7850A80067519E /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "OpenPassport App Clip/Images.xcassets"; sourceTree = "<group>"; };
05D985F22BB331AB00F58EEA /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
05D985F32BB331AB00F58EEA /* libfr.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libfr.a; sourceTree = "<group>"; };
05D985FA2BB3344600F58EEA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = OpenPassport/Assets.xcassets; sourceTree = "<group>"; };
@@ -84,6 +177,7 @@
05EDEDC52B52D25D00AA51AD /* Prover.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Prover.swift; sourceTree = "<group>"; };
066DD67BD55B4E90941F2B97 /* Inter-Black.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Black.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Black.otf"; sourceTree = "<group>"; };
0AD24C885D29461481982641 /* slkscrb.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = slkscrb.ttf; path = "../node_modules/@tamagui/font-silkscreen/files/slkscrb.ttf"; sourceTree = "<group>"; };
0B18C6F4404CC83576C2F36A /* Pods-OpenPassport-OpenPassport App Clip.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport-OpenPassport App Clip.debug.xcconfig"; path = "Target Support Files/Pods-OpenPassport-OpenPassport App Clip/Pods-OpenPassport-OpenPassport App Clip.debug.xcconfig"; sourceTree = "<group>"; };
0C76A5D3C00C4D19B7624F46 /* Inter-BlackItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-BlackItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-BlackItalic.otf"; sourceTree = "<group>"; };
110D16BAD3FA4513BEA89A3A /* slkscr.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = slkscr.ttf; path = "../node_modules/@tamagui/font-silkscreen/files/slkscr.ttf"; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* OpenPassport.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = OpenPassport.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -105,6 +199,7 @@
38DEC0D33CBA43429A48B8E3 /* Inter-LightItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-LightItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-LightItalic.otf"; sourceTree = "<group>"; };
449D98322BFA406CBB9E2648 /* Inter-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Bold.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Bold.otf"; sourceTree = "<group>"; };
453D60E43CC0F08D884424E7 /* Pods-OpenPassport.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport.debug.xcconfig"; path = "Target Support Files/Pods-OpenPassport/Pods-OpenPassport.debug.xcconfig"; sourceTree = "<group>"; };
4B084D2A6DF9460DCA9EE4BE /* Pods-OpenPassport App Clip.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport App Clip.debug.xcconfig"; path = "Target Support Files/Pods-OpenPassport App Clip/Pods-OpenPassport App Clip.debug.xcconfig"; sourceTree = "<group>"; };
53AEBBB143534D68B7792C46 /* Inter-Medium.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Medium.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Medium.otf"; sourceTree = "<group>"; };
568162F4DC4B4CDC8B341853 /* Inter-ExtraLight.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-ExtraLight.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraLight.otf"; sourceTree = "<group>"; };
5686BD657D224A089EAFB825 /* Inter-ExtraBoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-ExtraBoldItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraBoldItalic.otf"; sourceTree = "<group>"; };
@@ -128,12 +223,14 @@
AC752CDC19F5CA03C154E950 /* Pods_OpenPassport_OpenPassportTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OpenPassport_OpenPassportTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
B3521C927F0DD22505739205 /* Pods_OpenPassport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OpenPassport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
B68457923C3F444388AB85F2 /* Inter-Thin.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Thin.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Thin.otf"; sourceTree = "<group>"; };
BAD0889E49DD94940404B318 /* Pods-OpenPassport App Clip.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport App Clip.release.xcconfig"; path = "Target Support Files/Pods-OpenPassport App Clip/Pods-OpenPassport App Clip.release.xcconfig"; sourceTree = "<group>"; };
C03CCA67A92F47D59CDA16E5 /* Inter-SemiBoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-SemiBoldItalic.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-SemiBoldItalic.otf"; sourceTree = "<group>"; };
D20EA8C94F544E14AB58E6EB /* Inter-ExtraBold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-ExtraBold.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-ExtraBold.otf"; sourceTree = "<group>"; };
DC9D466C01604E7CE1392D92 /* Pods-OpenPassport.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport.release.xcconfig"; path = "Target Support Files/Pods-OpenPassport/Pods-OpenPassport.release.xcconfig"; sourceTree = "<group>"; };
DEBCA1D9B9B7ED1BF998F4A1 /* Pods-OpenPassport-OpenPassportTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-OpenPassport-OpenPassportTests.debug.xcconfig"; path = "Target Support Files/Pods-OpenPassport-OpenPassportTests/Pods-OpenPassport-OpenPassportTests.debug.xcconfig"; sourceTree = "<group>"; };
DF4EC58B331A46F098343757 /* Inter-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Regular.otf"; path = "../node_modules/@tamagui/font-inter/otf/Inter-Regular.otf"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
F28D0EC9A537B138EDEDC422 /* Pods_OpenPassport_OpenPassport_App_Clip.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_OpenPassport_OpenPassport_App_Clip.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F59F295E9CC54539B2C48953 /* Luciole-Bold-Italic.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Luciole-Bold-Italic.ttf"; path = "../assets/fonts/Luciole-Bold-Italic.ttf"; sourceTree = "<group>"; };
/* End PBXFileReference section */
@@ -146,23 +243,78 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
054340B12C71B2960014B445 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
05527D5C2C7743010077C942 /* libwitnesscalc_prove_rsa_65537_sha1.a in Frameworks */,
0573C4E92C72E7F6006C7386 /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a in Frameworks */,
0573C4E52C72E7F6006C7386 /* libfr.a in Frameworks */,
0573C4E42C72E7F6006C7386 /* libfq.a in Frameworks */,
0573C4E62C72E7F6006C7386 /* libgmp.a in Frameworks */,
05527D5E2C7743010077C942 /* libwitnesscalc_prove_rsapss_65537_sha256.a in Frameworks */,
0573C4E72C72E7F6006C7386 /* librapidsnark.a in Frameworks */,
0573C4E82C72E7F6006C7386 /* libwitnesscalc_disclose.a in Frameworks */,
926E45294BCCFD19D5CD4AEF /* Pods_OpenPassport_OpenPassport_App_Clip.framework in Frameworks */,
05527D5D2C7743010077C942 /* libwitnesscalc_prove_rsa_65537_sha256.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
0573C4F42C754600006C7386 /* libwitnesscalc_prove_rsa_65537_sha1.a in Frameworks */,
058516D52BF49B98006A14DA /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a in Frameworks */,
05D985F52BB331AB00F58EEA /* libgmp.a in Frameworks */,
0569F35F2BBC98D5006670BD /* libfq.a in Frameworks */,
0569F35B2BBC9015006670BD /* librapidsnark.a in Frameworks */,
0573C4F62C754600006C7386 /* libwitnesscalc_prove_rsapss_65537_sha256.a in Frameworks */,
058516D42BF49B98006A14DA /* libwitnesscalc_disclose.a in Frameworks */,
05D985F62BB331AB00F58EEA /* libfr.a in Frameworks */,
CA9CD86025E82C8AE5193959 /* Pods_OpenPassport.framework in Frameworks */,
0573C4F52C754600006C7386 /* libwitnesscalc_prove_rsa_65537_sha256.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
054340B52C71B2960014B445 /* OpenPassport App Clip */ = {
isa = PBXGroup;
children = (
054340B62C71B2960014B445 /* AppDelegate.h */,
0573C4ED2C72E857006C7386 /* passport.json */,
054340B72C71B2960014B445 /* AppDelegate.m */,
0573C4D32C72E6D0006C7386 /* LottieView.swift */,
0573C4D22C72E6D0006C7386 /* MRZScannerModule.m */,
0573C4D02C72E6D0006C7386 /* MRZScannerModule.swift */,
0573C4CB2C72E6D0006C7386 /* OpenPassport-Bridging-Header.h */,
0573C4CC2C72E6D0006C7386 /* PassportReader.m */,
0573C4CA2C72E6D0006C7386 /* PassportReader.swift */,
0573C4CF2C72E6D0006C7386 /* Prover.m */,
0573C4EF2C742FA6006C7386 /* masterList.pem */,
0573C4D52C72E6D0006C7386 /* Prover.swift */,
0573C4CD2C72E6D0006C7386 /* QKMRZScannerViewRepresentable.swift */,
0573C4CE2C72E6D0006C7386 /* QRScannerBridge.m */,
0573C4D62C72E6D0006C7386 /* QRScannerBridge.swift */,
0573C4D12C72E6D0006C7386 /* QRScannerViewController.swift */,
0573C4D42C72E6D0006C7386 /* ScannerHostingController.swift */,
054340B92C71B2960014B445 /* SceneDelegate.h */,
054340BA2C71B2960014B445 /* SceneDelegate.m */,
054340BC2C71B2960014B445 /* ViewController.h */,
054340BD2C71B2960014B445 /* ViewController.m */,
054340BF2C71B2960014B445 /* Main.storyboard */,
054340C52C71B2980014B445 /* Assets.xcassets */,
054340C72C71B2980014B445 /* LaunchScreen.storyboard */,
054340CA2C71B2980014B445 /* Info.plist */,
054340CB2C71B2980014B445 /* main.m */,
054340CD2C71B2980014B445 /* OpenPassport_App_Clip.entitlements */,
054340C22C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodeld */,
);
path = "OpenPassport App Clip";
sourceTree = "<group>";
};
13B07FAE1A68108700A75B9A /* OpenPassport */ = {
isa = PBXGroup;
children = (
@@ -198,6 +350,10 @@
2D16E6871FA4F8E400B85C8A /* Frameworks */ = {
isa = PBXGroup;
children = (
0573C4EA2C72E7F6006C7386 /* groth16_prover.h */,
0573C4F12C7545F6006C7386 /* libwitnesscalc_prove_rsa_65537_sha1.a */,
0573C4F32C7545F7006C7386 /* libwitnesscalc_prove_rsa_65537_sha256.a */,
0573C4F22C7545F7006C7386 /* libwitnesscalc_prove_rsapss_65537_sha256.a */,
058516D32BF49B91006A14DA /* libwitnesscalc_disclose.a */,
058516D22BF49B91006A14DA /* libwitnesscalc_register_sha256WithRSAEncryption_65537.a */,
0569F35E2BBC98C9006670BD /* libfq.a */,
@@ -205,6 +361,7 @@
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
B3521C927F0DD22505739205 /* Pods_OpenPassport.framework */,
AC752CDC19F5CA03C154E950 /* Pods_OpenPassport_OpenPassportTests.framework */,
F28D0EC9A537B138EDEDC422 /* Pods_OpenPassport_OpenPassport_App_Clip.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -251,8 +408,10 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
05B4DDF62C7850A80067519E /* Images.xcassets */,
13B07FAE1A68108700A75B9A /* OpenPassport */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
054340B52C71B2960014B445 /* OpenPassport App Clip */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
BBD78D7AC51CEA395F1C20DB /* Pods */,
@@ -268,6 +427,7 @@
children = (
13B07F961A680F5B00A75B9A /* OpenPassport.app */,
00E356EE1AD99517003FC87E /* OpenPassportTests.xctest */,
054340B42C71B2960014B445 /* OpenPassport App Clip.app */,
);
name = Products;
sourceTree = "<group>";
@@ -279,6 +439,10 @@
DC9D466C01604E7CE1392D92 /* Pods-OpenPassport.release.xcconfig */,
DEBCA1D9B9B7ED1BF998F4A1 /* Pods-OpenPassport-OpenPassportTests.debug.xcconfig */,
8A94FF2ACC255C722460867D /* Pods-OpenPassport-OpenPassportTests.release.xcconfig */,
4B084D2A6DF9460DCA9EE4BE /* Pods-OpenPassport App Clip.debug.xcconfig */,
BAD0889E49DD94940404B318 /* Pods-OpenPassport App Clip.release.xcconfig */,
0B18C6F4404CC83576C2F36A /* Pods-OpenPassport-OpenPassport App Clip.debug.xcconfig */,
03D7F2F0EF44EF6300A9E4CD /* Pods-OpenPassport-OpenPassport App Clip.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -306,6 +470,27 @@
productReference = 00E356EE1AD99517003FC87E /* OpenPassportTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
054340B32C71B2960014B445 /* OpenPassport App Clip */ = {
isa = PBXNativeTarget;
buildConfigurationList = 054340D42C71B2980014B445 /* Build configuration list for PBXNativeTarget "OpenPassport App Clip" */;
buildPhases = (
C58A18F469AD91A0B2CC5615 /* [CP] Check Pods Manifest.lock */,
054340B02C71B2960014B445 /* Sources */,
054340B12C71B2960014B445 /* Frameworks */,
054340B22C71B2960014B445 /* Resources */,
054340D52C72904B0014B445 /* Start Packager */,
054340D62C7290C50014B445 /* Bundle React Native code and images */,
BD911A31EA0C67D2934076B6 /* [CP] Embed Pods Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = "OpenPassport App Clip";
productName = "OpenPassport App Clip";
productReference = 054340B42C71B2960014B445 /* OpenPassport App Clip.app */;
productType = "com.apple.product-type.application.on-demand-install-capable";
};
13B07F861A680F5B00A75B9A /* OpenPassport */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "OpenPassport" */;
@@ -317,10 +502,12 @@
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
DF7986E9DBA454E2407E80A3 /* [CP] Embed Pods Frameworks */,
054340D12C71B2980014B445 /* Embed App Clips */,
);
buildRules = (
);
dependencies = (
054340CF2C71B2980014B445 /* PBXTargetDependency */,
);
name = OpenPassport;
productName = OpenPassport;
@@ -339,6 +526,10 @@
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
054340B32C71B2960014B445 = {
CreatedOnToolsVersion = 15.2;
LastSwiftMigration = 1520;
};
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1430;
};
@@ -359,6 +550,7 @@
targets = (
13B07F861A680F5B00A75B9A /* OpenPassport */,
00E356ED1AD99517003FC87E /* OpenPassportTests */,
054340B32C71B2960014B445 /* OpenPassport App Clip */,
);
};
/* End PBXProject section */
@@ -371,6 +563,19 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
054340B22C71B2960014B445 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
054340C92C71B2980014B445 /* LaunchScreen.storyboard in Resources */,
0573C4F02C742FA6006C7386 /* masterList.pem in Resources */,
0573C4EE2C72E857006C7386 /* passport.json in Resources */,
054340C62C71B2980014B445 /* Assets.xcassets in Resources */,
05B4DDF72C7850A90067519E /* Images.xcassets in Resources */,
054340C12C71B2960014B445 /* Main.storyboard in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -427,6 +632,44 @@
shellPath = /bin/sh;
shellScript = "set -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE\"\n";
};
054340D52C72904B0014B445 /* Start Packager */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Start Packager";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nexport RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n echo \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\"\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
};
054340D62C7290C50014B445 /* Bundle React Native code and images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"$(SRCROOT)/.xcode.env.local",
"$(SRCROOT)/.xcode.env",
);
name = "Bundle React Native code and images";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "# Type a script or drag a script file from your workspace to insert its path.\nset -e\n\nWITH_ENVIRONMENT=\"../node_modules/react-native/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"../node_modules/react-native/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"$WITH_ENVIRONMENT $REACT_NATIVE_XCODE index.clip.js\"\n";
};
095376EF00B07A916686CBD0 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -471,6 +714,45 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
BD911A31EA0C67D2934076B6 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-OpenPassport-OpenPassport App Clip/Pods-OpenPassport-OpenPassport App Clip-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-OpenPassport-OpenPassport App Clip/Pods-OpenPassport-OpenPassport App Clip-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-OpenPassport-OpenPassport App Clip/Pods-OpenPassport-OpenPassport App Clip-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
C58A18F469AD91A0B2CC5615 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-OpenPassport-OpenPassport App Clip-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
DF7986E9DBA454E2407E80A3 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -534,6 +816,30 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
054340B02C71B2960014B445 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
054340CC2C71B2980014B445 /* main.m in Sources */,
054340BE2C71B2960014B445 /* ViewController.m in Sources */,
0573C4DE2C72E6D0006C7386 /* MRZScannerModule.m in Sources */,
0573C4D72C72E6D0006C7386 /* PassportReader.swift in Sources */,
0573C4D82C72E6D0006C7386 /* PassportReader.m in Sources */,
0573C4E12C72E6D0006C7386 /* Prover.swift in Sources */,
0573C4DA2C72E6D0006C7386 /* QRScannerBridge.m in Sources */,
0573C4D92C72E6D0006C7386 /* QKMRZScannerViewRepresentable.swift in Sources */,
054340B82C71B2960014B445 /* AppDelegate.m in Sources */,
054340BB2C71B2960014B445 /* SceneDelegate.m in Sources */,
0573C4DD2C72E6D0006C7386 /* QRScannerViewController.swift in Sources */,
054340C42C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodeld in Sources */,
0573C4DF2C72E6D0006C7386 /* LottieView.swift in Sources */,
0573C4E02C72E6D0006C7386 /* ScannerHostingController.swift in Sources */,
0573C4E22C72E6D0006C7386 /* QRScannerBridge.swift in Sources */,
0573C4DB2C72E6D0006C7386 /* Prover.m in Sources */,
0573C4DC2C72E6D0006C7386 /* MRZScannerModule.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -563,8 +869,32 @@
target = 13B07F861A680F5B00A75B9A /* OpenPassport */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
054340CF2C71B2980014B445 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 054340B32C71B2960014B445 /* OpenPassport App Clip */;
targetProxy = 054340CE2C71B2980014B445 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
054340BF2C71B2960014B445 /* Main.storyboard */ = {
isa = PBXVariantGroup;
children = (
054340C02C71B2960014B445 /* Base */,
);
name = Main.storyboard;
sourceTree = "<group>";
};
054340C72C71B2980014B445 /* LaunchScreen.storyboard */ = {
isa = PBXVariantGroup;
children = (
054340C82C71B2980014B445 /* Base */,
);
name = LaunchScreen.storyboard;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
@@ -619,16 +949,127 @@
};
name = Release;
};
054340D22C71B2980014B445 /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 0B18C6F4404CC83576C2F36A /* Pods-OpenPassport-OpenPassport App Clip.debug.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "OpenPassport App Clip/OpenPassport_App_Clip.entitlements";
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 54;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = 5B29R5LYHQ;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "OpenPassport App Clip/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = OpenPassport;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UIMainStoryboardFile = Main;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 17.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(SDKROOT)/usr/lib/swift",
"$(inherited)",
"$(PROJECT_DIR)",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.6;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.warroom.proofofpassport.Clip;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/OpenPassport-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Debug;
};
054340D32C71B2980014B445 /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 03D7F2F0EF44EF6300A9E4CD /* Pods-OpenPassport-OpenPassport App Clip.release.xcconfig */;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_MODULES = YES;
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_ENTITLEMENTS = "OpenPassport App Clip/OpenPassport_App_Clip.entitlements";
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 54;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = 5B29R5LYHQ;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
GCC_C_LANGUAGE_STANDARD = gnu17;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = "OpenPassport App Clip/Info.plist";
INFOPLIST_KEY_CFBundleDisplayName = OpenPassport;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchStoryboardName = LaunchScreen;
INFOPLIST_KEY_UIMainStoryboardFile = Main;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
IPHONEOS_DEPLOYMENT_TARGET = 17.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
LIBRARY_SEARCH_PATHS = (
"$(SDKROOT)/usr/lib/swift",
"$(inherited)",
"$(PROJECT_DIR)",
);
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
MARKETING_VERSION = 1.6;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = com.warroom.proofofpassport.Clip;
PRODUCT_NAME = "$(TARGET_NAME)";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = NO;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OBJC_BRIDGING_HEADER = "$(PROJECT_DIR)/OpenPassport-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 453D60E43CC0F08D884424E7 /* Pods-OpenPassport.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = OpenPassport/OpenPassport.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 53;
CURRENT_PROJECT_VERSION = 54;
DEVELOPMENT_TEAM = 5B29R5LYHQ;
ENABLE_BITCODE = NO;
FRAMEWORK_SEARCH_PATHS = (
@@ -728,8 +1169,9 @@
"$(PROJECT_DIR)",
);
INFOPLIST_FILE = OpenPassport/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = OpenPassport;
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Needed only if you want to upload QRcodes";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
IPHONEOS_DEPLOYMENT_TARGET = 17.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -741,7 +1183,7 @@
"$(PROJECT_DIR)",
"$(PROJECT_DIR)/MoproKit/Libs",
);
MARKETING_VERSION = 1.5;
MARKETING_VERSION = 1.6;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -761,10 +1203,11 @@
isa = XCBuildConfiguration;
baseConfigurationReference = DC9D466C01604E7CE1392D92 /* Pods-OpenPassport.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = OpenPassport/OpenPassport.entitlements;
CURRENT_PROJECT_VERSION = 53;
CURRENT_PROJECT_VERSION = 54;
DEVELOPMENT_TEAM = 5B29R5LYHQ;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
@@ -863,9 +1306,10 @@
"$(PROJECT_DIR)",
);
INFOPLIST_FILE = OpenPassport/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = OpenPassport;
INFOPLIST_KEY_NSDocumentsFolderUsageDescription = "";
INFOPLIST_KEY_NSPhotoLibraryUsageDescription = "Needed only if you want to upload QRcodes";
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
IPHONEOS_DEPLOYMENT_TARGET = 17.2;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -876,7 +1320,7 @@
"$(PROJECT_DIR)",
"$(PROJECT_DIR)/MoproKit/Libs",
);
MARKETING_VERSION = 1.5;
MARKETING_VERSION = 1.6;
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
@@ -1059,6 +1503,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
054340D42C71B2980014B445 /* Build configuration list for PBXNativeTarget "OpenPassport App Clip" */ = {
isa = XCConfigurationList;
buildConfigurations = (
054340D22C71B2980014B445 /* Debug */,
054340D32C71B2980014B445 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "OpenPassport" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -1078,6 +1531,19 @@
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
/* Begin XCVersionGroup section */
054340C22C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodeld */ = {
isa = XCVersionGroup;
children = (
054340C32C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodel */,
);
currentVersion = 054340C32C71B2960014B445 /* OpenPassport_App_Clip.xcdatamodel */;
path = OpenPassport_App_Clip.xcdatamodeld;
sourceTree = "<group>";
versionGroupType = wrapper.xcdatamodel;
};
/* End XCVersionGroup section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "prove_rsa_65537_sha1.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "prove_rsa_65537_sha256.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,13 @@
{
"data" : [
{
"filename" : "prove_rsapss_65537_sha256.dat",
"idiom" : "universal",
"universal-type-identifier" : "dyn.ah62d4rv4ge80k2py"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -8,5 +8,9 @@
<array>
<string>TAG</string>
</array>
<key>com.apple.developer.associated-appclip-app-identifiers</key>
<array>
<string>5B29R5LYHQ.com.warroom.proofofpassport.Clip</string>
</array>
</dict>
</plist>

View File

@@ -7,7 +7,7 @@ require Pod::Executable.execute_command('node', ['-p',
{paths: [process.argv[1]]},
)', __dir__]).strip
project 'OpenPassport.xcodeproj'
platform :ios, '13.0'
prepare_react_native_project!
@@ -63,6 +63,11 @@ target 'OpenPassport' do
# Pods for testing
end
target 'OpenPassport App Clip' do
inherit! :search_paths
inherit! :complete
end
post_install do |installer|
installer.generated_projects.each do |project|
project.targets.each do |target|

View File

@@ -669,6 +669,6 @@ SPEC CHECKSUMS:
SwiftyTesseract: 1f3d96668ae92dc2208d9842c8a59bea9fad2cbb
Yoga: 8796b55dba14d7004f980b54bcc9833ee45b28ce
PODFILE CHECKSUM: 0b4a2364bb270ea925376c675c6c8b3aa019d655
PODFILE CHECKSUM: 7b509982ef9137a67eabe590749f46e630e5c88f
COCOAPODS: 1.15.2

View File

@@ -9,12 +9,24 @@ import Foundation
import React
import Security
#if canImport(witnesscalc_register_sha256WithRSAEncryption_65537)
import witnesscalc_register_sha256WithRSAEncryption_65537
// #if canImport(witnesscalc_register_sha256WithRSAEncryption_65537)
// import witnesscalc_register_sha256WithRSAEncryption_65537
// #endif
// #if canImport(witnesscalc_disclose)
// import witnesscalc_disclose
// #endif
#if canImport(witnesscalc_prove_rsa_65537_sha256)
import witnesscalc_prove_rsa_65537_sha256
#endif
#if canImport(witnesscalc_disclose)
import witnesscalc_disclose
#if canImport(witnesscalc_prove_rsa_65537_sha1)
import witnesscalc_prove_rsa_65537_sha1
#endif
#if canImport(witnesscalc_prove_rsapss_65537_sha256)
import witnesscalc_prove_rsapss_65537_sha256
#endif
#if canImport(groth16_prover)
@@ -95,15 +107,37 @@ private func _calcWtns(witness_calculator: String, dat: Data, jsonData: Data) th
let result: Int32
if witness_calculator == "register_sha256WithRSAEncryption_65537" {
result = witnesscalc_register_sha256WithRSAEncryption_65537(
// if witness_calculator == "register_sha256WithRSAEncryption_65537" {
// result = witnesscalc_register_sha256WithRSAEncryption_65537(
// (dat as NSData).bytes, datSize,
// (jsonData as NSData).bytes, jsonDataSize,
// wtnsBuffer, wtnsSize,
// errorBuffer, errorSize
// )
// } else if witness_calculator == "disclose" {
// result = witnesscalc_disclose(
// (dat as NSData).bytes, datSize,
// (jsonData as NSData).bytes, jsonDataSize,
// wtnsBuffer, wtnsSize,
// errorBuffer, errorSize
// )
// } else
if witness_calculator == "prove_rsa_65537_sha256" {
result = witnesscalc_prove_rsa_65537_sha256(
(dat as NSData).bytes, datSize,
(jsonData as NSData).bytes, jsonDataSize,
wtnsBuffer, wtnsSize,
errorBuffer, errorSize
)
} else if witness_calculator == "disclose" {
result = witnesscalc_disclose(
} else if witness_calculator == "prove_rsa_65537_sha1" {
result = witnesscalc_prove_rsa_65537_sha1(
(dat as NSData).bytes, datSize,
(jsonData as NSData).bytes, jsonDataSize,
wtnsBuffer, wtnsSize,
errorBuffer, errorSize
)
} else if witness_calculator == "prove_rsapss_65537_sha256" {
result = witnesscalc_prove_rsapss_65537_sha256(
(dat as NSData).bytes, datSize,
(jsonData as NSData).bytes, jsonDataSize,
wtnsBuffer, wtnsSize,

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,39 @@
#ifndef WITNESSCALC_prove_rsa_65537_sha1_H
#define WITNESSCALC_prove_rsa_65537_sha1_H
#ifdef __cplusplus
extern "C" {
#endif
#define WITNESSCALC_OK 0x0
#define WITNESSCALC_ERROR 0x1
#define WITNESSCALC_ERROR_SHORT_BUFFER 0x2
/**
*
* @return error code:
* WITNESSCALC_OK - in case of success.
* WITNESSCALC_ERROR - in case of an error.
*
* On success wtns_buffer is filled with witness data and
* wtns_size contains the number bytes copied to wtns_buffer.
*
* If wtns_buffer is too small then the function returns WITNESSCALC_ERROR_SHORT_BUFFER
* and the minimum size for wtns_buffer in wtns_size.
*
*/
int
witnesscalc_prove_rsa_65537_sha1(
const char *circuit_buffer, unsigned long circuit_size,
const char *json_buffer, unsigned long json_size,
char *wtns_buffer, unsigned long *wtns_size,
char *error_msg, unsigned long error_msg_maxsize);
#ifdef __cplusplus
}
#endif
#endif // WITNESSCALC_prove_rsa_65537_sha1_H

View File

@@ -0,0 +1,39 @@
#ifndef WITNESSCALC_prove_rsa_65537_sha256_H
#define WITNESSCALC_prove_rsa_65537_sha256_H
#ifdef __cplusplus
extern "C" {
#endif
#define WITNESSCALC_OK 0x0
#define WITNESSCALC_ERROR 0x1
#define WITNESSCALC_ERROR_SHORT_BUFFER 0x2
/**
*
* @return error code:
* WITNESSCALC_OK - in case of success.
* WITNESSCALC_ERROR - in case of an error.
*
* On success wtns_buffer is filled with witness data and
* wtns_size contains the number bytes copied to wtns_buffer.
*
* If wtns_buffer is too small then the function returns WITNESSCALC_ERROR_SHORT_BUFFER
* and the minimum size for wtns_buffer in wtns_size.
*
*/
int
witnesscalc_prove_rsa_65537_sha256(
const char *circuit_buffer, unsigned long circuit_size,
const char *json_buffer, unsigned long json_size,
char *wtns_buffer, unsigned long *wtns_size,
char *error_msg, unsigned long error_msg_maxsize);
#ifdef __cplusplus
}
#endif
#endif // WITNESSCALC_prove_rsa_65537_sha256_H

View File

@@ -0,0 +1,39 @@
#ifndef WITNESSCALC_prove_rsapss_65537_sha256_H
#define WITNESSCALC_prove_rsapss_65537_sha256_H
#ifdef __cplusplus
extern "C" {
#endif
#define WITNESSCALC_OK 0x0
#define WITNESSCALC_ERROR 0x1
#define WITNESSCALC_ERROR_SHORT_BUFFER 0x2
/**
*
* @return error code:
* WITNESSCALC_OK - in case of success.
* WITNESSCALC_ERROR - in case of an error.
*
* On success wtns_buffer is filled with witness data and
* wtns_size contains the number bytes copied to wtns_buffer.
*
* If wtns_buffer is too small then the function returns WITNESSCALC_ERROR_SHORT_BUFFER
* and the minimum size for wtns_buffer in wtns_size.
*
*/
int
witnesscalc_prove_rsapss_65537_sha256(
const char *circuit_buffer, unsigned long circuit_size,
const char *json_buffer, unsigned long json_size,
char *wtns_buffer, unsigned long *wtns_size,
char *error_msg, unsigned long error_msg_maxsize);
#ifdef __cplusplus
}
#endif
#endif // WITNESSCALC_prove_rsapss_65537_sha256_H

View File

@@ -29,6 +29,8 @@
"body-parser": "^1.20.2",
"buffer": "^6.0.3",
"burnt": "^0.12.2",
"country-emoji": "^1.5.6",
"country-iso-3-to-2": "^1.1.1",
"crypto-js": "^4.1.1",
"ethers": "^6.11.0",
"expo-modules-core": "^1.11.12",

View File

@@ -25,8 +25,12 @@ cd ../..
# Copy artifacts for each circuit
for circuit in "${CIRCUITS[@]}"; do
cp witnesscalc/build_witnesscalc_ios/src/Release-iphoneos/libwitnesscalc_${circuit}.a ios
mkdir -p ios/OpenPassport/Assets.xcassets/${circuit}.dat.dataset
mkdir -p ios/OpenPassport App Clip/Assets.xcassets/${circuit}.dat.dataset
cp witnesscalc/src/${circuit}.dat ios/OpenPassport/Assets.xcassets/${circuit}.dat.dataset/${circuit}.dat
cp witnesscalc/src/${circuit}.dat ios/OpenPassport App Clip/Assets.xcassets/${circuit}.dat.dataset/${circuit}.dat
cp witnesscalc/src/witnesscalc_${circuit}.h ios
done

View File

@@ -24,7 +24,7 @@ namespace CIRCUIT_NAME {" ${file}.cpp
}
# Array of circuit files
declare -a CIRCUITS=("register_sha256WithRSAEncryption_65537" "disclose")
declare -a CIRCUITS=("prove_rsa_65537_sha256" "prove_rsa_65537_sha1" "prove_rsapss_65537_sha256")
# Main execution
for circuit in "${CIRCUITS[@]}"; do

View File

@@ -1,7 +0,0 @@
# How do I add my own app?
- Copy the file of an existing app such as `sbt.tsx`
- Adapt the UI fields and the `handleProve` and `handleSendProof` functions
- On your server, import the sdk in `/sdk`
- For onchain usage, let the app mint an SBT and choose `onchain` in the sdk
- For offchain usage, send the proof to your server using an api call, choose `offchain` in the sdk and let it verify the proof directly!

View File

@@ -1,30 +0,0 @@
import { AppType } from "../../../common/src/utils/appType";
import { Text, YStack } from 'tamagui';
import { Coins } from '@tamagui/lucide-icons';
import GITCOIN from '../images/gitcoin.png';
const comingSoon = () => (
<YStack ml="$2" p="$2" px="$3" bc="#282828" borderRadius="$10">
<Text color="#a0a0a0" fontWeight="bold">coming soon</Text>
</YStack>
);
export const gitcoinApp: AppType = {
id: 'gitcoin',
title: 'Gitcoin passport',
description: 'Add to Gitcoin passport and donate to your favorite projects',
background: GITCOIN,
colorOfTheText: 'white',
selectable: false,
icon: Coins,
tags: [comingSoon()],
name: 'Gitcoin',
disclosureOptions: {
date_of_expiry: "required"
},
sendButtonText: 'Add to Gitcoin passport',
}
export default gitcoinApp;

View File

@@ -1,277 +0,0 @@
import { AppType } from "../../../common/src/utils/appType";
import { Flame } from '@tamagui/lucide-icons';
import { Text, XStack, YStack } from 'tamagui';
import { generateProof } from "../utils/prover";
import useUserStore from "../stores/userStore";
import { generateCircuitInputsDisclose } from "../../../common/src/utils/generateInputs";
import EnterAddress from "../components/EnterAddress";
import { revealBitmapFromMapping } from "../../../common/src/utils/revealBitmap";
import useSbtStore from "../stores/sbtStore";
import useNavigationStore from "../stores/navigationStore";
import { Steps } from "../utils/utils";
import { mintSBT } from "../utils/transactions";
import { ethers } from "ethers";
import * as amplitude from '@amplitude/analytics-react-native';
import Clipboard from "@react-native-community/clipboard";
import { shortenTxHash } from "../../utils/utils";
import { textColor1 } from "../utils/colors";
import { Pressable } from "react-native";
import { COMMITMENT_TREE_TRACKER_URL, PASSPORT_ATTESTATION_ID, RPC_URL } from "../../../common/src/constants/constants";
import { poseidon2 } from "poseidon-lite";
import axios from 'axios';
import { LeanIMT } from "@zk-kit/imt";
const sepolia = () => (
<YStack ml="$2" p="$2" px="$3" bc="#0d1e18" borderRadius="$10">
<Text color="#3bb178" fow="bold">Sepolia</Text>
</YStack>
);
export const sbtApp: AppType = {
id: 'soulbound',
// AppScreen UI
title: 'Soulbound Token',
description: 'Mint a Soulbound Token and prove you\'re a human',
colorOfTheText: 'black',
selectable: true,
icon: Flame,
tags: [sepolia()],
// ProveScreen UI
name: 'Soulbound token',
disclosureOptions: {
nationality: "optional",
expiry_date: "optional",
older_than: "optional"
},
// SendProofScreen UI before sending proof
beforeSendText1: "You can now use this proof to mint a Soulbound token.",
beforeSendText2: "Disclosed information will be displayed on SBT.",
sendButtonText: 'Mint Soulbound token',
sendingButtonText: 'Minting...',
// SendProofScreen UI after sending proof
successTitle: 'You just have minted a Soulbound token 🎉',
successText: 'You can now share this proof with the selected app.',
successComponent: () => {
const txHash = useSbtStore.getState().txHash;
const toast = useNavigationStore.getState().toast;
return (
<Pressable onPress={() => {
Clipboard.setString(txHash);
toast.show('🖨️', {
message: "Tx copied to clipboard",
customData: {
type: "success",
},
})
}}
>
<XStack jc='space-between' h="$2" ai="center">
<Text color={textColor1} fontWeight="bold" fontSize="$5">
Tx: {shortenTxHash(txHash)}
</Text>
</XStack>
</Pressable>
)
},
finalButtonAction: () => {
const txHash = useSbtStore.getState().txHash;
const toast = useNavigationStore.getState().toast;
Clipboard.setString(txHash);
toast.show('🖨️', {
message: "Tx copied to clipboard",
customData: {
type: "success",
},
})
},
finalButtonText: 'Copy to clipboard',
scope: '1',
circuit: "disclose",
// fields the user can fill
fields: [
EnterAddress
],
handleProve: async () => {
const {
update,
disclosure,
address,
majority,
} = useSbtStore.getState();
const {
toast,
setStep,
} = useNavigationStore.getState();
const {
secret,
passportData
} = useUserStore.getState();
setStep(Steps.GENERATING_PROOF);
const reveal_bitmap = revealBitmapFromMapping(disclosure);
const response = await axios.get(COMMITMENT_TREE_TRACKER_URL)
// const serializedCommitmentTree = "[[\"9366833337168993085050982292715343583458999801189875133285760454940954329736\",\"17067815450997614268337156469331439256078702232208444991806942459610897177755\",\"6218618977460894587557092460164616095207478656436068295742870309857616419830\",\"1009498555512750055176786258919772755314598234878788682229429740456064488924\",\"2317777252282411584898482846587421326341858131145081778162865818517424463113\",\"14350861400343175672772758664935358862843556622155842278173685659399974430673\"],[\"5757843324860707578753413472099376283217223062835733089254074659436006978958\",\"9384382887555344903988763589988369409408141218078864334664000402547342440893\",\"20714514634358291855499138323356766695315870633431415798546884765927810445680\"],[\"6444500081923737565029349850782686417529434309028817508928891238372057960879\",\"20714514634358291855499138323356766695315870633431415798546884765927810445680\"],[\"13949165376611379310020797746578693825960496340786495286952352659551479278661\"]]"
console.log('response.data:', response.data);
const imt = new LeanIMT(
(a: bigint, b: bigint) => poseidon2([a, b]),
[]
);
imt.import(response.data);
try {
const inputs = generateCircuitInputsDisclose(
secret,
PASSPORT_ATTESTATION_ID,
passportData,
imt as any,
majority.toString().split(""),
reveal_bitmap,
sbtApp.scope,
address,
);
console.log('inputs:', inputs);
const start = Date.now();
const proof = await generateProof(
sbtApp.circuit,
inputs,
);
const end = Date.now();
console.log('Total proof time from frontend:', end - start);
//amplitude.track('Proof generation successful, took ' + ((end - start) / 1000) + ' seconds');
update({
proof: proof,
proofTime: end - start,
});
setStep(Steps.PROOF_GENERATED);
} catch (error: any) {
console.error(error);
toast.show('Error', {
message: error.message,
customData: {
type: "error",
},
})
setStep(Steps.NEXT_SCREEN);
//amplitude.track(error.message);
}
},
handleSendProof: async () => {
const {
update,
proof
} = useSbtStore.getState();
const {
toast,
setStep
} = useNavigationStore.getState();
if (!proof) {
console.error('Proof is not generated');
return;
}
setStep(Steps.PROOF_SENDING);
toast.show('🚀', {
message: "Transaction sent...",
customData: {
type: "info",
},
})
const provider = new ethers.JsonRpcProvider(RPC_URL);
try {
const serverResponse = await mintSBT(proof)
const txHash = serverResponse?.data.hash;
setStep(Steps.PROOF_SENT);
update({
txHash: txHash,
proofSentText: `SBT minting... Network: Sepolia. Transaction hash: ${txHash}`
});
const receipt = await provider.waitForTransaction(txHash);
console.log('receipt status:', receipt?.status);
if (receipt?.status === 1) {
toast.show('🎊', {
message: "SBT minted",
customData: {
type: "success",
},
})
update({
proofSentText: `SBT minted. Network: Sepolia. Transaction hash: ${txHash}`
});
} else {
toast.show('Error', {
message: "SBT mint failed",
customData: {
type: "error",
},
})
update({
proofSentText: `Error minting SBT. Network: Sepolia. Transaction hash: ${txHash}`
});
setStep(Steps.PROOF_GENERATED);
}
} catch (error: any) {
setStep(Steps.PROOF_GENERATED);
update({
proofSentText: `Error minting SBT. Network: Sepolia.`
});
if (error.isAxiosError && error.response) {
const errorMessage = error.response.data.error;
console.log('Server error message:', errorMessage);
// parse blockchain error and show it
const match = errorMessage.match(/execution reverted: "([^"]*)"/);
if (match && match[1]) {
console.log('Parsed blockchain error:', match[1]);
toast.show('Error', {
message: `Error: ${match[1]}`,
customData: {
type: "error",
},
})
} else {
toast.show('Error', {
message: `Error: mint failed`,
customData: {
type: "error",
},
})
console.log('Failed to parse blockchain error');
}
}
//amplitude.track(error.message);
}
}
}
export default sbtApp;

View File

@@ -1,30 +0,0 @@
import { AppType } from "../../../common/src/utils/appType";
import { Text, YStack } from 'tamagui';
import { Ticket } from '@tamagui/lucide-icons';
import ZUPASS from '../images/zupass.png';
const comingSoon = () => (
<YStack ml="$2" p="$2" px="$3" bc="#282828" borderRadius="$10">
<Text color="#a0a0a0" fontWeight="bold">coming soon</Text>
</YStack>
);
export const zupassApp: AppType = {
id: 'zuzalu',
title: 'Zupass',
description: 'Connect to prove your identity at in person events',
background: ZUPASS,
colorOfTheText: 'white',
selectable: false,
icon: Ticket,
tags: [comingSoon()],
name: 'Zupass',
disclosureOptions: {
date_of_expiry: "required"
},
sendButtonText: 'Add to Zupass',
}
export default zupassApp;

View File

@@ -1,89 +0,0 @@
import React from 'react';
import { Text, YStack, XStack, H4, Button } from 'tamagui';
import { ChevronRight } from '@tamagui/lucide-icons';
import { useToastController } from '@tamagui/toast';
import { borderColor, componentBgColor, textColor1, textColor2 } from '../utils/colors';
interface AppCardProps {
title: string;
description: string;
id: string | number;
onTouchStart?: () => void;
selected?: boolean;
selectable?: boolean;
icon: any;
tags: any;
}
const AppCard: React.FC<AppCardProps> = ({
title,
description,
id,
onTouchStart,
selected,
selectable,
icon,
tags
}) => {
const toast = useToastController();
const showtoast = () => {
toast.show('🚧 Coming soon', {
message: 'This feature is under development.',
customData: {
type: 'info',
},
});
}
return (
<YStack
overflow="hidden"
borderRadius="$7"
borderWidth={1.2}
borderColor={borderColor}
key={id}
bg={componentBgColor}
>
<YStack p="$2.5">
<XStack gap="$3" ai="center">
<XStack h="$3" w="$3" p="$1" ai="center" jc="center" bc="#232323" borderWidth={1.2} borderColor="#343434" borderRadius="$3">
{React.createElement(icon, { color: textColor1 })}
</XStack>
<YStack width={250}>
<H4 color={textColor1} selectable={false} >{title}</H4>
</YStack>
<XStack flex={1} />
</XStack>
</YStack>
<YStack p="$2" bc="#232323" borderWidth={1.2} borderLeftWidth={0} borderRightWidth={0} borderColor="#343434">
<XStack ai="center">
<YStack gap="$1" >
<Text color={textColor2} mt="$1" theme="alt2" selectable={false}>{description}.</Text>
<Text color={textColor2} mt="$1" theme="alt2" selectable={false}>No other data than the ones selected in the next step will be shared with the app.</Text>
</YStack>
<XStack flex={1} />
</XStack>
</YStack>
<YStack p="$2">
<XStack gap="$4" ai="center">
<XStack gap="$1">
{tags.map((Tag: any, index: any) => <React.Fragment key={index}>{Tag}</React.Fragment>)}
</XStack>
<XStack f={1} />
<Button h="$3" p="$2" pl="$3" borderRadius="$4" borderWidth={1} backgroundColor="#282828" borderColor="#343434" onPress={selectable ? onTouchStart : showtoast}>
<XStack gap="$0">
<Text color="#ededed" fontSize="$5" >Select</Text>
<ChevronRight size="$1" color="#ededed" />
</XStack>
</Button>
</XStack>
</YStack>
</YStack>
);
}
export default AppCard;

View File

@@ -1,6 +1,6 @@
import React, { useState } from 'react'
import { AnimatePresence } from '@tamagui/animate-presence'
import { ArrowLeft, ArrowRight, Nfc, ShieldCheck } from '@tamagui/lucide-icons'
import { ArrowLeft, Nfc } from '@tamagui/lucide-icons'
import { Button, Image, XStack, YStack, styled, Text } from 'tamagui'
import { bgBlue, bgGreen, borderColor, textBlack, textColor1, textColor2 } from '../utils/colors'
import CustomButton from './CustomButton'
@@ -36,18 +36,16 @@ const wrap = (min: number, max: number, v: number) => {
interface CarouselProps {
images: string[];
height?: number;
onSlideChange?: (index: number) => void;
handleNfcScan?: () => void;
}
export function Carousel({ images, height = 300, onSlideChange, handleNfcScan }: CarouselProps) {
export function Carousel({ images, height = 300, handleNfcScan }: CarouselProps) {
const [[page, going], setPage] = useState([0, 0])
const imageIndex = wrap(0, images.length, page)
const paginate = (going: number) => {
const newPage = page + going
setPage([newPage, going])
onSlideChange?.(newPage)
}
const isLastImage = imageIndex === images.length - 1
@@ -99,10 +97,6 @@ export function Carousel({ images, height = 300, onSlideChange, handleNfcScan }:
<Text color={textBlack} fontSize="$5" mt="$2" textAlign='center' style={{ opacity: 0.7 }} fontStyle='italic'>{currentSlide.subtitle}</Text>
</YStack>
<XStack justifyContent='center' alignItems='center' gap="$1.5" position="absolute" style={{ bottom: 120, left: 0, right: 0 }}>
<ShieldCheck color={textBlack} size={14} />
<Text color={textBlack} fontSize="$4" >private and secured</Text>
</XStack>
<XStack f={1} />
<CustomButton

View File

@@ -1,7 +1,6 @@
import React from 'react';
import { Button, Text } from 'tamagui';
import { bgBlue, bgGreen, textBlack } from '../utils/colors';
import useNavigationStore from '../stores/navigationStore';
interface CustomButtonProps {
text: string;
@@ -15,9 +14,6 @@ interface CustomButtonProps {
}
const CustomButton: React.FC<CustomButtonProps> = ({ text, onPress, Icon, bgColor, h, isDisabled, disabledOnPress, blueVariant }) => {
const {
toast,
} = useNavigationStore();
return (
<Button bg={bgColor ? bgColor : blueVariant ? bgBlue : bgGreen} h={blueVariant ? "$8" : "$4.5"} borderRadius="$10" mx="$3" onPress={isDisabled ? disabledOnPress : onPress}>
{Icon && <Button.Icon>{Icon}</Button.Icon>}

View File

@@ -1,117 +0,0 @@
import React, { useState, useEffect } from 'react';
import { YStack, XStack, Text, Checkbox, Input, Button, Spinner, Image, useWindowDimensions, ScrollView } from 'tamagui';
import { borderColor, componentBgColor, componentBgColor2, textColor1, textColor2 } from '../utils/colors';
import ENS from "../images/ens_mark_dao.png"
import { useToastController } from '@tamagui/toast'
import { ethers } from 'ethers';
import useSbtStore from '../stores/sbtStore';
const EnterAddress: React.FC = () => {
const [inputValue, setInputValue] = useState('');
const {
address,
ens,
update
} = useSbtStore();
const provider = new ethers.JsonRpcProvider(`https://eth-mainnet.g.alchemy.com/v2/lpOn3k6Fezetn1e5QF-iEsn-J0C6oGE0`);
const toast = useToastController()
useEffect(() => {
if (ens != '' && inputValue == '') {
setInputValue(ens);
}
else if (address != ethers.ZeroAddress && inputValue == '') {
setInputValue(address);
}
}, [])
useEffect(() => {
const resolveENS = async () => {
if (inputValue != ens) {
if (inputValue.endsWith('.eth')) {
try {
toast.show('🔭 Looking onchain', {
message: 'Looking for ' + inputValue,
customData: {
type: "info",
},
})
const resolvedAddress = await provider.resolveName(inputValue);
if (resolvedAddress) {
console.log("new address settled:" + resolvedAddress);
update({
address: resolvedAddress,
ens: inputValue
});
toast.show('✨ Welcome ✨', {
message: 'Nice to meet you ' + inputValue,
customData: {
type: "success",
},
})
} else {
toast.show('Error', {
message: inputValue + ' not found ',
customData: {
type: "error",
},
})
}
} catch (error) {
toast.show('Error', {
message: 'Check input format or RPC provider or internet connection',
customData: {
type: "error",
},
})
}
}
else if (inputValue.length === 42 && inputValue.startsWith('0x')) {
update({
address: inputValue,
});
}
};
};
resolveENS();
}, [inputValue]);
return (
<YStack bc={componentBgColor} borderRadius="$6" borderWidth={1.5} borderColor={borderColor}>
<YStack p="$3">
<XStack gap="$4" ai="center">
<XStack p="$2" bc="#232323" borderWidth={1.2} borderColor="#343434" borderRadius="$3">
<Image
source={{ uri: ENS }}
w="$1"
h="$1" />
</XStack>
<YStack gap="$1">
<Text fontSize={16} fow="bold" color="#ededed">Address or ENS</Text>
</YStack>
</XStack>
</YStack>
<YStack bc={componentBgColor2} borderTopWidth={1.5} borderColor={borderColor} borderBottomLeftRadius="$6" borderBottomRightRadius="$6">
<Input
bg="transparent"
color={textColor1}
fontSize={13}
placeholder="anon.eth or 0x023…"
value={inputValue}
onChangeText={setInputValue}
autoCorrect={false}
autoCapitalize='none'
borderColor="transparent"
borderWidth={0}
/>
</YStack>
</YStack>
);
};
export default EnterAddress;

View File

@@ -1,26 +1,40 @@
import { Toast, useToastState } from '@tamagui/toast'
import { YStack } from '@tamagui/stacks'
import { greenColorDark, greenColorLight, redColorDark, redColorLight, blueColorDark, blueColorLight, textColor1 } from '../utils/colors'
import { Toast, useToastState } from '@tamagui/toast';
import { YStack } from '@tamagui/stacks';
import {
greenColorLight,
redColorLight,
blueColorLight,
textColor1,
} from '../utils/colors';
export const ToastMessage = () => {
const toast = useToastState();
if (!toast || toast.isHandledNatively) return null;
return (
<Toast
bg={toast.customData?.type === "success" ? greenColorDark : toast.customData?.type === "error" ? redColorDark : blueColorDark}
animation="100ms"
enterStyle={{ y: -20, opacity: 0 }}
exitStyle={{ y: -20, opacity: 0 }}
opacity={1}
x={0}
key={toast?.id}
duration={toast?.duration}
const toast = useToastState();
>
<YStack ai="center" jc="center">
<Toast.Title fow="bold" color={toast.customData?.type === "success" ? greenColorLight : toast.customData?.type === "error" ? redColorLight : blueColorLight}>{toast?.title}</Toast.Title>
<Toast.Description color={textColor1}>{toast.message}</Toast.Description>
</YStack>
</Toast>
);
};
if (!toast || toast.isHandledNatively) return null;
return (
<Toast
bg={
toast.customData?.type === 'success'
? greenColorLight
: toast.customData?.type === 'error'
? redColorLight
: blueColorLight
}
animation="100ms"
enterStyle={{ y: -20, opacity: 0 }}
exitStyle={{ y: -20, opacity: 0 }}
opacity={1}
x={0}
key={toast?.id}
duration={3000}
>
<YStack ai="center" jc="center">
<Toast.Title fow="bold" color={'white'}>{toast?.title}</Toast.Title>
<Toast.Description color={textColor1}>
{toast.message}
</Toast.Description>
</YStack>
</Toast>
);
};

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

View File

Before

Width:  |  Height:  |  Size: 221 KiB

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

View File

@@ -1,55 +0,0 @@
import React from 'react';
import { ScrollView, YStack } from 'tamagui';
import AppCard from '../components/AppCard';
import { Steps } from '../utils/utils';
import useNavigationStore from '../stores/navigationStore';
import { AppType } from '../../../common/src/utils/appType';
import sbtApp from '../apps/sbt';
import zupassApp from '../apps/zupass';
import gitcoinApp from '../apps/gitcoin';
const AppScreen: React.FC = () => {
const {
selectedApp,
update
} = useNavigationStore();
const handleCardSelect = (app: AppType) => {
update({
selectedTab: "prove",
selectedApp: app,
step: Steps.APP_SELECTED,
})
};
// add new apps here
const cardsData = [
sbtApp,
zupassApp,
gitcoinApp
];
return (
<ScrollView f={1}>
<YStack my="$8" gap="$5" px="$5" jc="center" alignItems='center'>
{
cardsData.map(app => (
<AppCard
key={app.id}
title={app.title}
description={app.description}
id={app.id}
onTouchStart={() => handleCardSelect(app)}
selected={selectedApp && selectedApp.id === app.id ? true : false}
selectable={app.selectable}
icon={app.icon}
tags={app.tags}
/>
))
}
</YStack>
</ScrollView>
);
}
export default AppScreen;

Some files were not shown because too many files have changed in this diff Show More