mirror of
https://github.com/selfxyz/self.git
synced 2026-01-15 01:28:18 -05:00
clean and fix sdk
This commit is contained in:
@@ -1,2 +0,0 @@
|
||||
import { QRCodeGenerator } from "./QRCodeGenerator";
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,48 +0,0 @@
|
||||
import { DEFAULT_RPC_URL, PASSPORT_ATTESTATION_ID, SBT_ABI, SBT_CONTRACT_ADDRESS } from '../common/src/constants/constants';
|
||||
import { ethers } from 'ethers';
|
||||
import { attributeToGetter } from './utils';
|
||||
import { OpenPassportVerifierReport } from './OpenPassportVerifierReport';
|
||||
|
||||
export class OpenPassportWeb3Verifier {
|
||||
scope: string;
|
||||
attestationId: string;
|
||||
requirements: Array<[string, number | string]>;
|
||||
rpcUrl: string;
|
||||
report: OpenPassportVerifierReport;
|
||||
|
||||
constructor(options: { scope: string, attestationId?: string, requirements?: Array<[string, number | string]>, rpcUrl?: string }) {
|
||||
this.scope = options.scope;
|
||||
this.attestationId = options.attestationId || PASSPORT_ATTESTATION_ID;
|
||||
this.requirements = options.requirements || [];
|
||||
this.rpcUrl = options.rpcUrl || DEFAULT_RPC_URL;
|
||||
this.report = new OpenPassportVerifierReport();
|
||||
}
|
||||
|
||||
async verify(address: string, tokenID: number): Promise<OpenPassportVerifierReport> {
|
||||
const provider = new ethers.JsonRpcProvider(this.rpcUrl);
|
||||
const contract = new ethers.Contract(SBT_CONTRACT_ADDRESS, SBT_ABI, provider);
|
||||
|
||||
//1. Verify the user owns a soulbond token
|
||||
const ownerOfToken = await contract.ownerOf(tokenID);
|
||||
if (ownerOfToken !== address) {
|
||||
this.report.exposeAttribute('owner_of');
|
||||
}
|
||||
|
||||
//2. Verify attributes of the soublond token
|
||||
for (const requirement of this.requirements) {
|
||||
const attribute = requirement[0];
|
||||
const value = requirement[1];
|
||||
const getterName = attributeToGetter[attribute];
|
||||
if (typeof contract[getterName] !== 'function') {
|
||||
console.error(`No such function ${getterName} on contract`);
|
||||
continue;
|
||||
}
|
||||
const SBTAttribute = await contract[getterName](tokenID);
|
||||
if (SBTAttribute !== value) {
|
||||
this.report.exposeAttribute(attribute as keyof OpenPassportVerifierReport);
|
||||
}
|
||||
}
|
||||
return this.report;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,38 +1,25 @@
|
||||
# SDK
|
||||
|
||||
## Installation
|
||||
# Installation
|
||||
|
||||
```bash
|
||||
yarn add @openpassport/sdk
|
||||
```
|
||||
|
||||
## Development
|
||||
# How to use
|
||||
|
||||
```bash
|
||||
yarn install-sdk
|
||||
```
|
||||
## Tests
|
||||
## 1 Step flow
|
||||
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
## How to use
|
||||
|
||||
### Web2 applications
|
||||
|
||||
To use the `OpenPassportWeb2Verifier` in Web2 applications, import and initialize it as follows:
|
||||
To use the `OpenPassport1StepVerifier`, import and initialize it as follows:
|
||||
|
||||
|
||||
```typescript
|
||||
import { OpenPassportWeb2Verifier } from '@openpassport/sdk';
|
||||
const verifier = new OpenPassportWeb2Verifier({
|
||||
import { OpenPassport1StepVerifier } from '@openpassport/sdk';
|
||||
const verifier = new OpenPassport1StepVerifier({
|
||||
scope: "yourScope",
|
||||
requirements: [["older_than", "18"], ["nationality", "France"]]
|
||||
});
|
||||
```
|
||||
|
||||
#### parameters for `OpenPassportWeb2Verifier`
|
||||
### parameters for `OpenPassport1StepVerifier`
|
||||
|
||||
| Parameter | Optional | Description |
|
||||
|---------------|----------|-------------|
|
||||
@@ -48,43 +35,27 @@ The function fired from the OpenPassport app will send a `OpenPassportWeb2Inputs
|
||||
|
||||
const result = await verifier.verify(openPassportWeb2Inputs); // OpenPassportWeb2Inputs : OpenPassportWeb2Inputs
|
||||
```
|
||||
## 2 Steps flow
|
||||
### 🚧 Work in progress 🚧
|
||||
|
||||
### Web3 application
|
||||
For Web3 applications, use the `OpenPassportWeb3Verifier` as follows:
|
||||
# Development
|
||||
|
||||
```typescript
|
||||
import { OpenPassportWeb3Verifier } from '@openpassport/sdk';
|
||||
const verifier = new OpenPassportWeb3Verifier({
|
||||
scope: "yourScope",
|
||||
rpcUrl: "https://custom.rpc.url"
|
||||
});
|
||||
```bash
|
||||
yarn install-sdk
|
||||
```
|
||||
#### Parameters for `OpenPassportWeb3Verifier`
|
||||
## Tests
|
||||
To run the tests, you need to download the circuits and the zkey files from the AWS s3 bucket.
|
||||
|
||||
| Parameter | Optional | Description |
|
||||
|---------------|----------|-------------|
|
||||
| `scope` | No | The scope of the verification. |
|
||||
| `attestationId` | Yes | The ID of the attestation, defaults to `PASSPORT_ATTESTATION_ID`. |
|
||||
| `requirements` | Yes | An array of requirements, each an array with an attribute and its expected value. |
|
||||
| `rpcUrl` | Yes | The RPC URL to connect to the blockchain, defaults to `DEFAULT_RPC_URL`. |
|
||||
|
||||
#### Verify the user owns a sbt which satisfies the requirements:
|
||||
|
||||
```typescript
|
||||
const result = await verifier.verify(address, tokenId);
|
||||
```bash
|
||||
yarn download-circuits
|
||||
```
|
||||
|
||||
### Handle the report
|
||||
Finally compile the circuits with the following command:
|
||||
```bash
|
||||
yarn compile-circuits
|
||||
```
|
||||
Then run the tests with the following command:
|
||||
```bash
|
||||
yarn test
|
||||
```
|
||||
|
||||
Each verification will returns a OpenPassportVerifierReport object which contains all the informations about the verification of each requirement.
|
||||
|
||||
If a requirement is not satisfied, the corresponding field will be set to `true`.
|
||||
The `valid` field will be `false` if there is at least one requirement that is not satisfied.
|
||||
|
||||
`nullifier` and `user_identifier` are also accessible as report fields.
|
||||
|
||||
```typescript
|
||||
const report = await verifier.verify(publicSignals, proof);
|
||||
const nullifier = report.nullifier;
|
||||
const userIdentifier = report.user_identifier;
|
||||
```
|
||||
@@ -1,368 +0,0 @@
|
||||
export const pem1 = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
j/sfUhyHHc9GFJPteLrV
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
export const pem2 = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
24YnLM+7w0NVPvwClrpt
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
export const pem3 = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
export const pem4 = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
|
||||
export const mock_csca = `-----BEGIN CERTIFICATE-----
|
||||
MIIFpzCCA4+gAwIBAgIUVGoAk38qsh7YYIE2eANMIeZkr+IwDQYJKoZIhvcNAQEL
|
||||
BQAwYzELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCU1vY2tTdGF0ZTERMA8GA1UEBwwI
|
||||
TW9ja0NpdHkxGTAXBgNVBAoMEE1vY2tPcmdhbml6YXRpb24xEjAQBgNVBAMMCW1v
|
||||
Y2tfY3NjYTAeFw0yNDA2MTgxOTA4MzJaFw0yNTA2MTgxOTA4MzJaMGMxCzAJBgNV
|
||||
BAYTAlhYMRIwEAYDVQQIDAlNb2NrU3RhdGUxETAPBgNVBAcMCE1vY2tDaXR5MRkw
|
||||
FwYDVQQKDBBNb2NrT3JnYW5pemF0aW9uMRIwEAYDVQQDDAltb2NrX2NzY2EwggIi
|
||||
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDE0JWh/kOzueMgFHwqLHYabpx4
|
||||
T0OV58DPuJObuMIKugw8/5l1VLg/Zq2II8/FoATn0Is3JYOidHnFskgkKjW89gxv
|
||||
RYRlYFPcvRfAxy+3+AO2f3xCnavkNTUI3Jl9q3jBz05SqHgM1cHiYr61ZX5sA980
|
||||
OveugRWBbT1mEUNhXTnegfPI9K3b+6YL0QXUePXGpRD9f5lTiCoE/mW8wGkieBYx
|
||||
QEEskwVpV3cvqwoLCkbdZkRZmIsYE6u7HeAPw2p/yAK6DhqY/vH3svj3LpWvdzBi
|
||||
Av1wBuuZ6IDgoB0tbgCPOUuc+btezBKhmZXDau0UZc9Y3ND+bMCQEWieXSwCWFYg
|
||||
y41/onaCaLdT+kcvwdOENNVNvHpaYVDnZGWdt8A95w/dl4Dl19wcL3KkqxoFGB8e
|
||||
wG+/SDnYTuuGWY3zaROJQ3KYlCqNi3+OuzZTBiJTujaL3Eb/+7Smhy/qtdd6bVUg
|
||||
mpf3fdBHw+jjl2st+n1rfIYY8rYY7HGrJdome9jXS8pCNfnptp+J8urzgXfEXGFM
|
||||
qHwMKu/vtfiBt4a1+GC/i2ssaXRcGABiI4xG4BQYXT+4U3p0pAA7cDNH5jN0Wny7
|
||||
J5DuEyXzcrRQVFD9hiFmDJfAsc35UwHKpayu9F7JJC4EfWVdahgA9VLhxVIE+eTi
|
||||
HPRHFyMaVaeqmjrBLQIDAQABo1MwUTAdBgNVHQ4EFgQUVGhgTF0HCJvSxKtE0BvV
|
||||
tQNMt0cwHwYDVR0jBBgwFoAUVGhgTF0HCJvSxKtE0BvVtQNMt0cwDwYDVR0TAQH/
|
||||
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAtyt8sirr9jc8i5xEnpV3YM6m0poY
|
||||
bl2S5hDu+xmMRnl8r3lv3v1KE2XrZD0cldV8plYz6oXfWBkCj3j6RUbsNx8w1q27
|
||||
Qsb2NC1KZljYG+kHavIIdJty9FOknhgYSYW+UKixSHPuAS+iJxEmGBN8GxhMPpzM
|
||||
KRzWbpQuPZuBgyKRSeR5ytGqyZrEje9zhkdSg/aFYn3EzLw93CfzrDLrKmXc/dra
|
||||
vEDyP34ts0Cy7UadCGkJN/SPuZpvF9Fy5f7l8ymHE319ipNZHIMhw50h0l/Puzjd
|
||||
vn3iHWtwpFw5r+nJTr5zO+3yL4dPcp8XfX3Daa5nDfCJ7dd1wSOf+/1cvBLB5aKc
|
||||
kyZ/ppvTc3oJAmFHAD2NXf15CUWE18Te/Vy9X2qI8LkFtea6GDF4VBewT2PATg12
|
||||
r03xZWa6KFVbgTIq3GUvtZ8UHm+cluTFKX90rFtbzFo658mxQGw5RnE2zp340NzP
|
||||
v9tNSlP4Tyzr2b1VoQcgmpQ987afINJG39lq2OsSrlK87p9bB4yoFSZwOfqok0nM
|
||||
IICRxBuTUHLqP3Nhvo+tAl+iK848LDJVf87ZVQHl72JX4lkVvOo5LCXnOQPyowaP
|
||||
D++J2c6tUj6gs9HAKVX7fH06m/2T5fJHae/OYx36O242yBXPQdHx6qloF/DNvGyM
|
||||
EHC3NCCjLG5m6G0=
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
|
||||
export const fr1pem = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
3sTE6mYNoV8bK4+Y
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
|
||||
export const fr2pem = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
|
||||
|
||||
export const fr3pem = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
iksuh3S4gaW0c9jK
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
|
||||
export const fr4pem = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
export const mockpem = `-----BEGIN CERTIFICATE-----
|
||||
MIIFpzCCA4+gAwIBAgIUVGoAk38qsh7YYIE2eANMIeZkr+IwDQYJKoZIhvcNAQEL
|
||||
BQAwYzELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCU1vY2tTdGF0ZTERMA8GA1UEBwwI
|
||||
TW9ja0NpdHkxGTAXBgNVBAoMEE1vY2tPcmdhbml6YXRpb24xEjAQBgNVBAMMCW1v
|
||||
Y2tfY3NjYTAeFw0yNDA2MTgxOTA4MzJaFw0yNTA2MTgxOTA4MzJaMGMxCzAJBgNV
|
||||
BAYTAlhYMRIwEAYDVQQIDAlNb2NrU3RhdGUxETAPBgNVBAcMCE1vY2tDaXR5MRkw
|
||||
FwYDVQQKDBBNb2NrT3JnYW5pemF0aW9uMRIwEAYDVQQDDAltb2NrX2NzY2EwggIi
|
||||
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDE0JWh/kOzueMgFHwqLHYabpx4
|
||||
T0OV58DPuJObuMIKugw8/5l1VLg/Zq2II8/FoATn0Is3JYOidHnFskgkKjW89gxv
|
||||
RYRlYFPcvRfAxy+3+AO2f3xCnavkNTUI3Jl9q3jBz05SqHgM1cHiYr61ZX5sA980
|
||||
OveugRWBbT1mEUNhXTnegfPI9K3b+6YL0QXUePXGpRD9f5lTiCoE/mW8wGkieBYx
|
||||
QEEskwVpV3cvqwoLCkbdZkRZmIsYE6u7HeAPw2p/yAK6DhqY/vH3svj3LpWvdzBi
|
||||
Av1wBuuZ6IDgoB0tbgCPOUuc+btezBKhmZXDau0UZc9Y3ND+bMCQEWieXSwCWFYg
|
||||
y41/onaCaLdT+kcvwdOENNVNvHpaYVDnZGWdt8A95w/dl4Dl19wcL3KkqxoFGB8e
|
||||
wG+/SDnYTuuGWY3zaROJQ3KYlCqNi3+OuzZTBiJTujaL3Eb/+7Smhy/qtdd6bVUg
|
||||
mpf3fdBHw+jjl2st+n1rfIYY8rYY7HGrJdome9jXS8pCNfnptp+J8urzgXfEXGFM
|
||||
qHwMKu/vtfiBt4a1+GC/i2ssaXRcGABiI4xG4BQYXT+4U3p0pAA7cDNH5jN0Wny7
|
||||
J5DuEyXzcrRQVFD9hiFmDJfAsc35UwHKpayu9F7JJC4EfWVdahgA9VLhxVIE+eTi
|
||||
HPRHFyMaVaeqmjrBLQIDAQABo1MwUTAdBgNVHQ4EFgQUVGhgTF0HCJvSxKtE0BvV
|
||||
tQNMt0cwHwYDVR0jBBgwFoAUVGhgTF0HCJvSxKtE0BvVtQNMt0cwDwYDVR0TAQH/
|
||||
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAtyt8sirr9jc8i5xEnpV3YM6m0poY
|
||||
bl2S5hDu+xmMRnl8r3lv3v1KE2XrZD0cldV8plYz6oXfWBkCj3j6RUbsNx8w1q27
|
||||
Qsb2NC1KZljYG+kHavIIdJty9FOknhgYSYW+UKixSHPuAS+iJxEmGBN8GxhMPpzM
|
||||
KRzWbpQuPZuBgyKRSeR5ytGqyZrEje9zhkdSg/aFYn3EzLw93CfzrDLrKmXc/dra
|
||||
vEDyP34ts0Cy7UadCGkJN/SPuZpvF9Fy5f7l8ymHE319ipNZHIMhw50h0l/Puzjd
|
||||
vn3iHWtwpFw5r+nJTr5zO+3yL4dPcp8XfX3Daa5nDfCJ7dd1wSOf+/1cvBLB5aKc
|
||||
kyZ/ppvTc3oJAmFHAD2NXf15CUWE18Te/Vy9X2qI8LkFtea6GDF4VBewT2PATg12
|
||||
r03xZWa6KFVbgTIq3GUvtZ8UHm+cluTFKX90rFtbzFo658mxQGw5RnE2zp340NzP
|
||||
v9tNSlP4Tyzr2b1VoQcgmpQ987afINJG39lq2OsSrlK87p9bB4yoFSZwOfqok0nM
|
||||
IICRxBuTUHLqP3Nhvo+tAl+iK848LDJVf87ZVQHl72JX4lkVvOo5LCXnOQPyowaP
|
||||
D++J2c6tUj6gs9HAKVX7fH06m/2T5fJHae/OYx36O242yBXPQdHx6qloF/DNvGyM
|
||||
EHC3NCCjLG5m6G0=
|
||||
-----END CERTIFICATE-----
|
||||
`
|
||||
@@ -1,159 +0,0 @@
|
||||
{
|
||||
"protocol": "groth16",
|
||||
"curve": "bn128",
|
||||
"nPublic": 14,
|
||||
"vk_alpha_1": [
|
||||
"20491192805390485299153009773594534940189261866228447918068658471970481763042",
|
||||
"9383485363053290200918347156157836566562967994039712273449902621266178545958",
|
||||
"1"
|
||||
],
|
||||
"vk_beta_2": [
|
||||
[
|
||||
"6375614351688725206403948262868962793625744043794305715222011528459656738731",
|
||||
"4252822878758300859123897981450591353533073413197771768651442665752259397132"
|
||||
],
|
||||
[
|
||||
"10505242626370262277552901082094356697409835680220590971873171140371331206856",
|
||||
"21847035105528745403288232691147584728191162732299865338377159692350059136679"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"vk_gamma_2": [
|
||||
[
|
||||
"10857046999023057135944570762232829481370756359578518086990519993285655852781",
|
||||
"11559732032986387107991004021392285783925812861821192530917403151452391805634"
|
||||
],
|
||||
[
|
||||
"8495653923123431417604973247489272438418190587263600148770280649306958101930",
|
||||
"4082367875863433681332203403145435568316851327593401208105741076214120093531"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"vk_delta_2": [
|
||||
[
|
||||
"6942436740229168666595536581519256291593117600832247164924519038970269461046",
|
||||
"17557865657217054151399710026819127874171362865266657132072043760282335721027"
|
||||
],
|
||||
[
|
||||
"15629082942757783052734933529055204330846116501031658743204188522840567440030",
|
||||
"866803245463331646327183913175583329159450203348438102150009828684148559895"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"vk_alphabeta_12": [
|
||||
[
|
||||
[
|
||||
"2029413683389138792403550203267699914886160938906632433982220835551125967885",
|
||||
"21072700047562757817161031222997517981543347628379360635925549008442030252106"
|
||||
],
|
||||
[
|
||||
"5940354580057074848093997050200682056184807770593307860589430076672439820312",
|
||||
"12156638873931618554171829126792193045421052652279363021382169897324752428276"
|
||||
],
|
||||
[
|
||||
"7898200236362823042373859371574133993780991612861777490112507062703164551277",
|
||||
"7074218545237549455313236346927434013100842096812539264420499035217050630853"
|
||||
]
|
||||
],
|
||||
[
|
||||
[
|
||||
"7077479683546002997211712695946002074877511277312570035766170199895071832130",
|
||||
"10093483419865920389913245021038182291233451549023025229112148274109565435465"
|
||||
],
|
||||
[
|
||||
"4595479056700221319381530156280926371456704509942304414423590385166031118820",
|
||||
"19831328484489333784475432780421641293929726139240675179672856274388269393268"
|
||||
],
|
||||
[
|
||||
"11934129596455521040620786944827826205713621633706285934057045369193958244500",
|
||||
"8037395052364110730298837004334506829870972346962140206007064471173334027475"
|
||||
]
|
||||
]
|
||||
],
|
||||
"IC": [
|
||||
[
|
||||
"10998553002727424987884583305349753345629818748955483305954960876370686844925",
|
||||
"18369020735737057562107768810182682586161750799521907185011795199521493953276",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"3870156317905136354369536369223776179854927352937539086581682263147147725326",
|
||||
"947908099816727525943796981035826395896386995128918341433720280874486019589",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"9619614659642762666110070745787072277198407288262286655564043642023793950605",
|
||||
"1444870940646607538213811271690623291794427513321591343855928143309974143815",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"10290556281387838061211784545032614883237381276187632418810139452226710406378",
|
||||
"12820288689147023950592422696432066467590193138126598372596214785570201388663",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"10044189939644279332588298610988772483187101321076758071894028734198440253205",
|
||||
"15016612240779620571490237444430121691511928826472608688773111463692886510804",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"6158786594227478832634691320618082224218218524296943509099128649963428556955",
|
||||
"2818896662082406397657145229256654653904841140122301210666395782176903475916",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"200295911748915977788397688942615122670319721182540082686195028815964792730",
|
||||
"16374098866162622474777608838325780437892472095191094825634065695603492498672",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"1001933084599581827076405562561115761770358156189382784432273793509010836288",
|
||||
"13618159500648302749264797924828312592779374840705268445533823753672345860949",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"12152127135355257668073159516593687751413730484411437719952408933610175077761",
|
||||
"15590965974244077225547659000022179448961631917634079092877797469009672737373",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"14643873766083688335082369233094018379987105460165787549629338089338629672719",
|
||||
"18976194036990056092890684065171543382286602242265347684324001010669281606450",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"4974359282562923295097396773583362835614429754286473873410152881834388935350",
|
||||
"2615967425575591157936435871031665935046196308487298765704452331348089292330",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"16489750714044704248135942822786071904168862423655325973193848507501139487825",
|
||||
"4644993658884496411511912365771411317040070112230395754480725062427812526601",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"11801682757910657983396995619983996921870874978799260563404809167285348391422",
|
||||
"19228652101325919244735412842681375925619382430642205708320466729501949572254",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"4495248066509783309072792039672520701419947625749866524660708846549914823847",
|
||||
"4585216314173588273427806971446529726371555267351812069737927114283850919560",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"18719866673490039760627957665040843673978402675108669037278157044178865894074",
|
||||
"11183065716352601580915387671262116390467334689778841393328736869598818253587",
|
||||
"1"
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -1,99 +0,0 @@
|
||||
{
|
||||
"protocol": "groth16",
|
||||
"curve": "bn128",
|
||||
"nPublic": 2,
|
||||
"vk_alpha_1": [
|
||||
"20491192805390485299153009773594534940189261866228447918068658471970481763042",
|
||||
"9383485363053290200918347156157836566562967994039712273449902621266178545958",
|
||||
"1"
|
||||
],
|
||||
"vk_beta_2": [
|
||||
[
|
||||
"6375614351688725206403948262868962793625744043794305715222011528459656738731",
|
||||
"4252822878758300859123897981450591353533073413197771768651442665752259397132"
|
||||
],
|
||||
[
|
||||
"10505242626370262277552901082094356697409835680220590971873171140371331206856",
|
||||
"21847035105528745403288232691147584728191162732299865338377159692350059136679"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"vk_gamma_2": [
|
||||
[
|
||||
"10857046999023057135944570762232829481370756359578518086990519993285655852781",
|
||||
"11559732032986387107991004021392285783925812861821192530917403151452391805634"
|
||||
],
|
||||
[
|
||||
"8495653923123431417604973247489272438418190587263600148770280649306958101930",
|
||||
"4082367875863433681332203403145435568316851327593401208105741076214120093531"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"vk_delta_2": [
|
||||
[
|
||||
"5689878758968408864570330769586116386424915777760869435924001045372426387042",
|
||||
"14835593574773248144471339475507473753186624066904877663229402603601341881110"
|
||||
],
|
||||
[
|
||||
"2051149603231436076479384106975809917151570357124249160820058911298166997663",
|
||||
"628452860859295088428620228489450512026200467380394004198146223506590955249"
|
||||
],
|
||||
[
|
||||
"1",
|
||||
"0"
|
||||
]
|
||||
],
|
||||
"vk_alphabeta_12": [
|
||||
[
|
||||
[
|
||||
"2029413683389138792403550203267699914886160938906632433982220835551125967885",
|
||||
"21072700047562757817161031222997517981543347628379360635925549008442030252106"
|
||||
],
|
||||
[
|
||||
"5940354580057074848093997050200682056184807770593307860589430076672439820312",
|
||||
"12156638873931618554171829126792193045421052652279363021382169897324752428276"
|
||||
],
|
||||
[
|
||||
"7898200236362823042373859371574133993780991612861777490112507062703164551277",
|
||||
"7074218545237549455313236346927434013100842096812539264420499035217050630853"
|
||||
]
|
||||
],
|
||||
[
|
||||
[
|
||||
"7077479683546002997211712695946002074877511277312570035766170199895071832130",
|
||||
"10093483419865920389913245021038182291233451549023025229112148274109565435465"
|
||||
],
|
||||
[
|
||||
"4595479056700221319381530156280926371456704509942304414423590385166031118820",
|
||||
"19831328484489333784475432780421641293929726139240675179672856274388269393268"
|
||||
],
|
||||
[
|
||||
"11934129596455521040620786944827826205713621633706285934057045369193958244500",
|
||||
"8037395052364110730298837004334506829870972346962140206007064471173334027475"
|
||||
]
|
||||
]
|
||||
],
|
||||
"IC": [
|
||||
[
|
||||
"14532585603301627491293557600415273871129994972736322653869196794622673732921",
|
||||
"18882397311658692526609112965864523608034856647654838257030831022893270548325",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"4186298633367159062520988354552715829159959996352603762446141935317873102425",
|
||||
"3924212783150620566854971503130830169563464952561919541343311327675656189646",
|
||||
"1"
|
||||
],
|
||||
[
|
||||
"4437362653636713552232717650847448346211317604147264938993567382296904710753",
|
||||
"2938386579388053271692442071404949636853984120968379123259292205410760857324",
|
||||
"1"
|
||||
]
|
||||
]
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
21
sdk/index.ts
21
sdk/index.ts
@@ -1,21 +0,0 @@
|
||||
import { OpenPassportWeb2Verifier } from './OpenPassportWeb2Verifier';
|
||||
import { OpenPassportWeb2Inputs } from './OpenPassportWeb2Verifier';
|
||||
import { OpenPassportVerifierReport } from './OpenPassportVerifierReport';
|
||||
// import { OpenPassportWeb3Verifier } from './OpenPassportWeb3Verifier';
|
||||
import { countryCodes } from '../common/src/constants/constants';
|
||||
import { QRCodeGenerator } from './QRCodeGenerator';
|
||||
import { AppType } from '../common/src/utils/appType';
|
||||
import { OpenPassportProverVerifier, OpenPassportProverInputs } from './OpenPassportProverVerifier';
|
||||
|
||||
export {
|
||||
OpenPassportWeb2Verifier,
|
||||
// OpenPassportWeb3Verifier,
|
||||
|
||||
OpenPassportWeb2Inputs,
|
||||
OpenPassportVerifierReport,
|
||||
QRCodeGenerator,
|
||||
AppType,
|
||||
countryCodes,
|
||||
OpenPassportProverVerifier,
|
||||
OpenPassportProverInputs
|
||||
}
|
||||
2540
sdk/package-lock.json
generated
2540
sdk/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "@proofofpassport/sdk",
|
||||
"version": "1.6.3",
|
||||
"main": "dist/sdk/index.js",
|
||||
"types": "dist/sdk/index.d.ts",
|
||||
"main": "dist/sdk/src/index.js",
|
||||
"types": "dist/sdk/src/index.d.ts",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,26 +1,28 @@
|
||||
import { groth16 } from 'snarkjs';
|
||||
import { attributeToPosition, countryCodes, DEFAULT_RPC_URL, PASSPORT_ATTESTATION_ID } from '../common/src/constants/constants';
|
||||
import { checkMerkleRoot, getCurrentDateFormatted, parsePublicSignals, parsePublicSignalsProve, unpackReveal, verifyDSCValidity } from './utils';
|
||||
import { attributeToPosition, countryCodes, DEFAULT_RPC_URL, PASSPORT_ATTESTATION_ID } from '../../common/src/constants/constants';
|
||||
import { getCurrentDateFormatted, verifyDSCValidity } from '../utils/utils';
|
||||
import { unpackReveal } from '../../common/src/utils/revealBitmap';
|
||||
import { OpenPassportVerifierReport } from './OpenPassportVerifierReport';
|
||||
import { vkey_prove_rsa_65537_sha1, vkey_prove_rsa_65537_sha256, vkey_prove_rsapss_65537_sha256 } from '../common/src/constants/vkey';
|
||||
import { vkey_prove_rsa_65537_sha1, vkey_prove_rsa_65537_sha256, vkey_prove_rsapss_65537_sha256 } from '../../common/src/constants/vkey';
|
||||
import forge from 'node-forge'
|
||||
import { splitToWords } from '../common/src/utils/utils';
|
||||
import { getSignatureAlgorithm } from '../common/src/utils/handleCertificate';
|
||||
import { splitToWords } from '../../common/src/utils/utils';
|
||||
import { getSignatureAlgorithm } from '../../common/src/utils/handleCertificate';
|
||||
|
||||
|
||||
export class OpenPassportProverVerifier {
|
||||
export class OpenPassport1StepVerifier {
|
||||
scope: string;
|
||||
attestationId: string;
|
||||
requirements: string[][];
|
||||
rpcUrl: string;
|
||||
report: OpenPassportVerifierReport;
|
||||
dev_mode: boolean;
|
||||
|
||||
constructor(options: { scope: string, attestationId?: string, requirements?: string[][], rpcUrl?: string }) {
|
||||
constructor(options: { scope: string, attestationId?: string, requirements?: string[][], rpcUrl?: string, dev_mode?: boolean }) {
|
||||
this.scope = options.scope;
|
||||
this.attestationId = options.attestationId || PASSPORT_ATTESTATION_ID;
|
||||
this.requirements = options.requirements || [];
|
||||
this.rpcUrl = options.rpcUrl || DEFAULT_RPC_URL;
|
||||
this.report = new OpenPassportVerifierReport();
|
||||
this.dev_mode = options.dev_mode || false;
|
||||
}
|
||||
|
||||
getVkey(signatureAlgorithm: string, hashFunction: string) {
|
||||
@@ -36,12 +38,12 @@ export class OpenPassportProverVerifier {
|
||||
}
|
||||
}
|
||||
|
||||
async verify(openPassportProverInputs: OpenPassportProverInputs): Promise<OpenPassportVerifierReport> {
|
||||
const { signatureAlgorithm, hashFunction } = getSignatureAlgorithm(openPassportProverInputs.dsc);
|
||||
async verify(openPassport1StepInputs: OpenPassport1StepInputs): Promise<OpenPassportVerifierReport> {
|
||||
const { signatureAlgorithm, hashFunction } = getSignatureAlgorithm(openPassport1StepInputs.dsc);
|
||||
console.log("signatureAlgorithm", signatureAlgorithm);
|
||||
console.log("hashFunction", hashFunction);
|
||||
const vkey = this.getVkey(signatureAlgorithm, hashFunction);
|
||||
const parsedPublicSignals = parsePublicSignalsProve(openPassportProverInputs.publicSignals);
|
||||
const parsedPublicSignals = parsePublicSignals1Step(openPassport1StepInputs.publicSignals);
|
||||
//1. Verify the scope
|
||||
if (parsedPublicSignals.scope !== this.scope) {
|
||||
this.report.exposeAttribute('scope', parsedPublicSignals.scope, this.scope);
|
||||
@@ -65,9 +67,6 @@ export class OpenPassportProverVerifier {
|
||||
attributeValue += unpackedReveal[i];
|
||||
}
|
||||
if (requirement[0] === "nationality" || requirement[0] === "issuing_state") {
|
||||
console.log("attributeValue", attributeValue);
|
||||
console.log("value", value);
|
||||
console.log("countryCodes[attributeValue]", countryCodes[attributeValue]);
|
||||
if (!countryCodes[attributeValue] || countryCodes[attributeValue] !== value) {
|
||||
this.report.exposeAttribute(attribute as keyof OpenPassportVerifierReport);
|
||||
}
|
||||
@@ -85,8 +84,8 @@ export class OpenPassportProverVerifier {
|
||||
|
||||
const verified_prove = await groth16.verify(
|
||||
vkey,
|
||||
openPassportProverInputs.publicSignals,
|
||||
openPassportProverInputs.proof as any
|
||||
openPassport1StepInputs.publicSignals,
|
||||
openPassport1StepInputs.proof as any
|
||||
)
|
||||
if (!verified_prove) {
|
||||
this.report.exposeAttribute('proof');
|
||||
@@ -96,14 +95,11 @@ export class OpenPassportProverVerifier {
|
||||
this.report.nullifier = parsedPublicSignals.nullifier;
|
||||
this.report.user_identifier = parsedPublicSignals.user_identifier;
|
||||
|
||||
|
||||
|
||||
//7 Verify the dsc
|
||||
const dscCertificate = forge.pki.certificateFromPem(openPassportProverInputs.dsc);
|
||||
const verified_certificate = verifyDSCValidity(dscCertificate, true);
|
||||
const dscCertificate = forge.pki.certificateFromPem(openPassport1StepInputs.dsc);
|
||||
const verified_certificate = verifyDSCValidity(dscCertificate, this.dev_mode);
|
||||
console.log("certificate verified:" + verified_certificate);
|
||||
|
||||
|
||||
// @ts-ignore
|
||||
const dsc_modulus = BigInt(dscCertificate.publicKey.n);
|
||||
const dsc_modulus_words = splitToWords(dsc_modulus, BigInt(64), BigInt(32));
|
||||
@@ -115,14 +111,11 @@ export class OpenPassportProverVerifier {
|
||||
|
||||
const verified_modulus = areArraysEqual(dsc_modulus_words, modulus_from_proof);
|
||||
console.log("modulus verified:" + verified_modulus);
|
||||
|
||||
return this.report;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
export class OpenPassportProverInputs {
|
||||
export class OpenPassport1StepInputs {
|
||||
publicSignals: string[];
|
||||
proof: string[];
|
||||
dsc: string;
|
||||
@@ -134,4 +127,14 @@ export class OpenPassportProverInputs {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function parsePublicSignals1Step(publicSignals) {
|
||||
return {
|
||||
signature_algorithm: publicSignals[0],
|
||||
revealedData_packed: [publicSignals[1], publicSignals[2], publicSignals[3]],
|
||||
nullifier: publicSignals[4],
|
||||
pubKey: publicSignals.slice(5, 37),
|
||||
scope: publicSignals[37],
|
||||
current_date: publicSignals.slice(38, 44),
|
||||
user_identifier: publicSignals[44],
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,19 @@
|
||||
import { groth16 } from 'snarkjs';
|
||||
import { attributeToPosition, countryCodes, DEFAULT_RPC_URL, PASSPORT_ATTESTATION_ID } from '../common/src/constants/constants';
|
||||
import { checkMerkleRoot, getCurrentDateFormatted, parsePublicSignals, unpackReveal } from './utils';
|
||||
import { attributeToPosition, countryCodes, DEFAULT_RPC_URL, PASSPORT_ATTESTATION_ID } from '../../common/src/constants/constants';
|
||||
import { getCurrentDateFormatted } from '../utils/utils';
|
||||
import { unpackReveal } from '../../common/src/utils/revealBitmap';
|
||||
import { OpenPassportVerifierReport } from './OpenPassportVerifierReport';
|
||||
import { vkey_disclose } from '../common/src/constants/vkey';
|
||||
import { vkey_disclose } from '../../common/src/constants/vkey';
|
||||
|
||||
const MOCK_MERKLE_ROOT_CHECK = false;
|
||||
|
||||
export class OpenPassportWeb2Verifier {
|
||||
export class OpenPassport2StepVerifier {
|
||||
scope: string;
|
||||
attestationId: string;
|
||||
requirements: string[][];
|
||||
rpcUrl: string;
|
||||
report: OpenPassportVerifierReport;
|
||||
verifyMerkleRootCall: (merkleRoot: string) => Promise<boolean>;
|
||||
|
||||
constructor(options: { scope: string, attestationId?: string, requirements?: string[][], rpcUrl?: string }) {
|
||||
constructor(options: { scope: string, attestationId?: string, requirements?: string[][], rpcUrl?: string, verifyMerkleRootCall: (merkleRoot: string) => Promise<boolean> }) {
|
||||
this.scope = options.scope;
|
||||
this.attestationId = options.attestationId || PASSPORT_ATTESTATION_ID;
|
||||
this.requirements = options.requirements || [];
|
||||
@@ -21,8 +21,8 @@ export class OpenPassportWeb2Verifier {
|
||||
this.report = new OpenPassportVerifierReport();
|
||||
}
|
||||
|
||||
async verify(proofOfPassportWeb2Inputs: OpenPassportWeb2Inputs): Promise<OpenPassportVerifierReport> {
|
||||
const parsedPublicSignals = parsePublicSignals(proofOfPassportWeb2Inputs.publicSignals);
|
||||
async verify(proofOfPassport2StepInputs: OpenPassport2StepInputs): Promise<OpenPassportVerifierReport> {
|
||||
const parsedPublicSignals = parsePublicSignals2Step(proofOfPassport2StepInputs.publicSignals);
|
||||
//1. Verify the scope
|
||||
if (parsedPublicSignals.scope !== this.scope) {
|
||||
this.report.exposeAttribute('scope', parsedPublicSignals.scope, this.scope);
|
||||
@@ -30,8 +30,8 @@ export class OpenPassportWeb2Verifier {
|
||||
console.log('\x1b[32m%s\x1b[0m', `- scope verified`);
|
||||
|
||||
//2. Verify the merkle_root
|
||||
const merkleRootIsValid = await checkMerkleRoot(this.rpcUrl, parsedPublicSignals.merkle_root);
|
||||
if (!(merkleRootIsValid || MOCK_MERKLE_ROOT_CHECK)) {
|
||||
const merkleRootIsValid = await this.verifyMerkleRootCall(parsedPublicSignals.merkle_root);
|
||||
if (!merkleRootIsValid) {
|
||||
this.report.exposeAttribute('merkle_root');
|
||||
}
|
||||
console.log('\x1b[32m%s\x1b[0m', `- merkle_root verified`);
|
||||
@@ -73,14 +73,10 @@ export class OpenPassportWeb2Verifier {
|
||||
}
|
||||
|
||||
//6. Verify the proof
|
||||
|
||||
console.log(vkey_disclose);
|
||||
console.log("publicSignals", proofOfPassportWeb2Inputs.publicSignals);
|
||||
console.log("proof", proofOfPassportWeb2Inputs.proof);
|
||||
const verified_disclose = await groth16.verify(
|
||||
vkey_disclose,
|
||||
proofOfPassportWeb2Inputs.publicSignals,
|
||||
proofOfPassportWeb2Inputs.proof as any
|
||||
proofOfPassport2StepInputs.publicSignals,
|
||||
proofOfPassport2StepInputs.proof as any
|
||||
)
|
||||
if (!verified_disclose) {
|
||||
this.report.exposeAttribute('proof');
|
||||
@@ -94,7 +90,7 @@ export class OpenPassportWeb2Verifier {
|
||||
}
|
||||
}
|
||||
|
||||
export class OpenPassportWeb2Inputs {
|
||||
export class OpenPassport2StepInputs {
|
||||
publicSignals: string[];
|
||||
proof: string[];
|
||||
|
||||
@@ -103,3 +99,15 @@ export class OpenPassportWeb2Inputs {
|
||||
this.proof = proof;
|
||||
}
|
||||
}
|
||||
|
||||
export function parsePublicSignals2Step(publicSignals) {
|
||||
return {
|
||||
nullifier: publicSignals[0],
|
||||
revealedData_packed: [publicSignals[1], publicSignals[2], publicSignals[3]],
|
||||
attestation_id: publicSignals[4],
|
||||
merkle_root: publicSignals[5],
|
||||
scope: publicSignals[6],
|
||||
current_date: [publicSignals[7], publicSignals[8], publicSignals[9], publicSignals[10], publicSignals[11], publicSignals[12]],
|
||||
user_identifier: publicSignals[13],
|
||||
}
|
||||
}
|
||||
@@ -22,7 +22,7 @@ export class OpenPassportVerifierReport {
|
||||
constructor() { }
|
||||
|
||||
exposeAttribute(attribute: keyof OpenPassportVerifierReport, value: any = "", expectedValue: any = "") {
|
||||
console.log('exposeAttribute', attribute, "value:", value, "expectedValue:", expectedValue);
|
||||
console.error('%c attributes don\'t match', 'color: red', attribute, "value:", value, "expectedValue:", expectedValue);
|
||||
(this[attribute] as boolean) = false;
|
||||
this.valid = false;
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
import QRCode from 'easyqrcodejs';
|
||||
import { AppType } from "../common/src/utils/appType";
|
||||
import { AppType } from "../../common/src/utils/appType";
|
||||
|
||||
export class QRCodeGenerator {
|
||||
static async generateQRCode(appData: AppType, size: number = 256): Promise<HTMLElement> {
|
||||
18
sdk/src/index.ts
Normal file
18
sdk/src/index.ts
Normal file
@@ -0,0 +1,18 @@
|
||||
import { OpenPassport2StepVerifier } from './OpenPassport2Step';
|
||||
import { OpenPassport2StepInputs } from './OpenPassport2Step';
|
||||
import { OpenPassportVerifierReport } from './OpenPassportVerifierReport';
|
||||
import { countryCodes } from '../../common/src/constants/constants';
|
||||
import { QRCodeGenerator } from './QRCodeGenerator';
|
||||
import { AppType } from '../../common/src/utils/appType';
|
||||
import { OpenPassport1StepVerifier, OpenPassport1StepInputs } from './OpenPassport1Step';
|
||||
|
||||
export {
|
||||
OpenPassport2StepVerifier,
|
||||
OpenPassport2StepInputs,
|
||||
OpenPassportVerifierReport,
|
||||
QRCodeGenerator,
|
||||
AppType,
|
||||
countryCodes,
|
||||
OpenPassport1StepVerifier,
|
||||
OpenPassport1StepInputs
|
||||
}
|
||||
45
sdk/tests/openPassport1Step.test.ts
Normal file
45
sdk/tests/openPassport1Step.test.ts
Normal file
@@ -0,0 +1,45 @@
|
||||
import { assert, expect } from 'chai'
|
||||
import { describe, it } from 'mocha';
|
||||
import { groth16 } from 'snarkjs';
|
||||
import { generateCircuitInputsProve } from '../../common/src/utils/generateInputs';
|
||||
import { OpenPassport1StepVerifier, OpenPassport1StepInputs } from '../src/OpenPassport1Step';
|
||||
import { genMockPassportData } from '../../common/src/utils/genMockPassportData';
|
||||
describe('Circuit Proving Tests', function () {
|
||||
this.timeout(0);
|
||||
|
||||
it('OpenPassport1Step - should verify', async function () {
|
||||
const path_prove_wasm = "../circuits/build/fromAWS/prove_rsa_65537_sha256.wasm";
|
||||
const path_prove_zkey = "../circuits/build/fromAWS/prove_rsa_65537_sha256.zkey";
|
||||
const passportData = genMockPassportData('rsa sha256', 'FRA', '000101', '300101');
|
||||
const bitmap = Array(90).fill("1");
|
||||
const scope = BigInt(1).toString();
|
||||
const majority = "18";
|
||||
const user_identifier = '0xE6E4b6a802F2e0aeE5676f6010e0AF5C9CDd0a50';
|
||||
const n_dsc = 64;
|
||||
const k_dsc = 32;
|
||||
const inputs = generateCircuitInputsProve(
|
||||
passportData,
|
||||
n_dsc,
|
||||
k_dsc,
|
||||
scope,
|
||||
bitmap,
|
||||
majority,
|
||||
user_identifier
|
||||
);
|
||||
const { proof, publicSignals } = await groth16.fullProve(
|
||||
inputs,
|
||||
path_prove_wasm,
|
||||
path_prove_zkey
|
||||
);
|
||||
const openPassportProveVerifier = new OpenPassport1StepVerifier({
|
||||
scope: scope,
|
||||
requirements: [["older_than", "18"], ["nationality", "France"]],
|
||||
dev_mode: true
|
||||
});
|
||||
const openPassportProverInputs = new OpenPassport1StepInputs(publicSignals, proof as any, passportData.dsc as string);
|
||||
const result = await openPassportProveVerifier.verify(openPassportProverInputs);
|
||||
console.log(result);
|
||||
expect(result.valid).to.be.true;
|
||||
});
|
||||
|
||||
});
|
||||
@@ -1,121 +0,0 @@
|
||||
import { groth16 } from "snarkjs"
|
||||
import {
|
||||
generateCircuitInputsRegister
|
||||
} from "../../common/src/utils/generateInputs"
|
||||
import { getCSCAInputs } from "../../common/src/utils/csca"
|
||||
import { describe } from 'mocha'
|
||||
import fs from "fs";
|
||||
import forge from "node-forge";
|
||||
import { MODAL_SERVER_ADDRESS, PASSPORT_ATTESTATION_ID } from "../../common/src/constants/constants";
|
||||
import { castCSCAProof } from "../../common/src/utils/types";
|
||||
const n_dsc = 121;
|
||||
const k_dsc = 17;
|
||||
const n_csca = 121;
|
||||
const k_csca = 34;
|
||||
const max_cert_bytes = 1664;
|
||||
const dsc = fs.readFileSync('../common/src/mock_certificates/sha256_rsa_4096/mock_dsc.pem', 'utf8');
|
||||
const csca = fs.readFileSync('../common/src/mock_certificates/sha256_rsa_4096/mock_csca.pem', 'utf8');
|
||||
const dscCert = forge.pki.certificateFromPem(dsc);
|
||||
const cscaCert = forge.pki.certificateFromPem(csca);
|
||||
//const inputs_csca = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
|
||||
import { mockPassportData_sha256WithRSAEncryption_65537 } from "../../common/src/utils/mockPassportData";
|
||||
async function requestCSCAProof(inputs) {
|
||||
try {
|
||||
console.log("inputs_csca before requesting modal server - cscaRequest.ts");
|
||||
const response = await fetch(MODAL_SERVER_ADDRESS, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify(inputs)
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
throw new Error(`HTTP error! status: ${response.status}`);
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
const cscaProof = castCSCAProof(data);
|
||||
console.log('Response from server:', data);
|
||||
return cscaProof;
|
||||
} catch (error) {
|
||||
console.error('Error during request:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
let circuit: any;
|
||||
let inputs: any;
|
||||
import path from "path";
|
||||
import { poseidon1 } from "poseidon-lite";
|
||||
import { getDSCModulus, getNullifier, getSIV, verifyProofs } from "../OpenPassportRegister";
|
||||
let proof: any;
|
||||
let publicSignals: any;
|
||||
let cscaProof: any;
|
||||
const mock_dsc_path = "../common/src/mock_certificates/sha256_rsa_4096/mock_dsc.pem";
|
||||
|
||||
describe("Testing the register flow", function () {
|
||||
this.timeout(0);
|
||||
before(async () => {
|
||||
const sha256WithRSAEncryption_65537 = {
|
||||
wasm: "../circuits/build/register_sha256WithRSAEncryption_65537_js/register_sha256WithRSAEncryption_65537.wasm",
|
||||
zkey: "../circuits/build/register_sha256WithRSAEncryption_65537_final.zkey",
|
||||
vkey: "../circuits/build/register_sha256WithRSAEncryption_65537_vkey.json"
|
||||
}
|
||||
const secret = BigInt(0).toString();
|
||||
console.log("secret", secret);
|
||||
|
||||
inputs = generateCircuitInputsRegister(
|
||||
secret,
|
||||
BigInt(0).toString(),
|
||||
PASSPORT_ATTESTATION_ID,
|
||||
mockPassportData_sha256WithRSAEncryption_65537,
|
||||
"heyXYZ019aA",
|
||||
n_dsc,
|
||||
k_dsc,
|
||||
[mockPassportData_sha256WithRSAEncryption_65537]
|
||||
);
|
||||
console.log('\x1b[32m%s\x1b[0m', `Generating proof register `);
|
||||
({ proof, publicSignals } = await groth16.fullProve(
|
||||
inputs,
|
||||
sha256WithRSAEncryption_65537.wasm,
|
||||
sha256WithRSAEncryption_65537.zkey
|
||||
))
|
||||
});
|
||||
|
||||
|
||||
it('should successfully request and receive a CSCA proof', async () => {
|
||||
try {
|
||||
console.log('Not requesting CSCA proof...');
|
||||
//cscaProof = await requestCSCAProof(inputs_csca);
|
||||
// Add assertions here to verify the proof structure
|
||||
// For example:
|
||||
// assert.ok(cscaProof.proof, 'Proof should exist');
|
||||
// assert.ok(cscaProof.publicSignals, 'Public signals should exist');
|
||||
} catch (error) {
|
||||
console.error('Error in CSCA proof request:', error);
|
||||
throw error;
|
||||
}
|
||||
});
|
||||
|
||||
it('should successfully verify the proof to register', async () => {
|
||||
const proof_register = {
|
||||
proof: proof,
|
||||
publicSignals: publicSignals
|
||||
}
|
||||
console.log(JSON.stringify(proof_register, null, 2));
|
||||
|
||||
// Read the mock DSC certificate as a PEM string
|
||||
const mock_dsc_pem = fs.readFileSync(mock_dsc_path, 'utf8');
|
||||
console.log(mock_dsc_pem)
|
||||
|
||||
// Pass the PEM string directly to verifyProofs
|
||||
const result = await verifyProofs(proof_register, mock_dsc_pem, true);
|
||||
console.log('Verification result:', result);
|
||||
const dsc_modulus = await getDSCModulus(proof_register);
|
||||
console.log('dsc_modulus:', dsc_modulus);
|
||||
const nullifier = await getNullifier(proof_register);
|
||||
console.log('nullifier:', nullifier);
|
||||
const SIV = await getSIV(proof_register);
|
||||
console.log('SIV:', SIV);
|
||||
});
|
||||
});
|
||||
@@ -1,142 +0,0 @@
|
||||
import { assert, expect } from 'chai'
|
||||
import { describe, it } from 'mocha';
|
||||
import { groth16 } from 'snarkjs';
|
||||
import { generateCircuitInputsDisclose, generateCircuitInputsProve } from '../../common/src/utils/generateInputs';
|
||||
import { mockPassportData_sha256_rsa_65537 } from '../../common/src/constants/mockPassportData';
|
||||
import { LeanIMT } from "@zk-kit/lean-imt";
|
||||
import { poseidon2, poseidon6 } from "poseidon-lite";
|
||||
import { PASSPORT_ATTESTATION_ID } from "../../common/src/constants/constants";
|
||||
import { formatMrz, packBytes } from '../../common/src/utils/utils';
|
||||
import { getLeaf } from '../../common/src/utils/pubkeyTree';
|
||||
import { OpenPassportWeb2Inputs, OpenPassportWeb2Verifier } from '../index';
|
||||
import { OpenPassportProverInputs, OpenPassportProverVerifier } from '../OpenPassportProverVerifier';
|
||||
import { mock_dsc_sha1_rsa_4096, mock_dsc_sha256_rsa_4096 } from '../../common/src/constants/mockCertificates';
|
||||
import { vkey_prove_rsa_65537_sha256 } from '../../common/src/constants/vkey';
|
||||
// import dotenv from 'dotenv';
|
||||
// dotenv.config();
|
||||
|
||||
|
||||
|
||||
describe('Circuit Proving Tests', function () {
|
||||
this.timeout(0);
|
||||
// it('proofOfPassportWeb2Verifier - should verify', async function () {
|
||||
// /// Generate circuit inputs
|
||||
// const passportData = mockPassportData_sha256_rsa_65537;
|
||||
// const imt = new LeanIMT((a: bigint, b: bigint) => poseidon2([a, b]), []);
|
||||
// const bitmap = Array(90).fill("1");
|
||||
// const scope = BigInt(1).toString();
|
||||
// const majority = ["18"];
|
||||
// const secret = BigInt(0).toString();
|
||||
// const mrz_bytes = packBytes(formatMrz(passportData.mrz));
|
||||
// const pubkey_leaf = getLeaf({
|
||||
// signatureAlgorithm: passportData.signatureAlgorithm,
|
||||
// modulus: passportData.pubKey.modulus,
|
||||
// exponent: passportData.pubKey.exponent,
|
||||
// }).toString();
|
||||
// const commitment = poseidon6([
|
||||
// secret,
|
||||
// PASSPORT_ATTESTATION_ID,
|
||||
// pubkey_leaf,
|
||||
// mrz_bytes[0],
|
||||
// mrz_bytes[1],
|
||||
// mrz_bytes[2]
|
||||
// ])
|
||||
// imt.insert(commitment);
|
||||
// const inputs = generateCircuitInputsDisclose(
|
||||
// secret,
|
||||
// PASSPORT_ATTESTATION_ID,
|
||||
// passportData,
|
||||
// imt as any,
|
||||
// majority,
|
||||
// bitmap,
|
||||
// scope,
|
||||
// BigInt(5).toString()
|
||||
// );
|
||||
// // Generate proof and public signals
|
||||
// const { x, publicSignals } = await groth16.fullProve(
|
||||
// inputs,
|
||||
// path_disclose_wasm,
|
||||
// path_disclose_zkey
|
||||
// );
|
||||
|
||||
// /// Verify using web2 verifier
|
||||
// const proofOfPassportWeb2Verifier = new OpenPassportWeb2Verifier({
|
||||
// scope: scope,
|
||||
// requirements: [["older_than", "18"], ["nationality", "France"]]
|
||||
// });
|
||||
// const proofOfPassportWeb2Inputs = new OpenPassportWeb2Inputs(publicSignals, proof as any);
|
||||
// const result = await proofOfPassportWeb2Verifier.verify(proofOfPassportWeb2Inputs);
|
||||
|
||||
|
||||
// console.log(result.toJson());
|
||||
// expect(result.valid).to.be.true;
|
||||
// });
|
||||
|
||||
it('proofofpassportProveVerifier - should verify', async function () {
|
||||
const path_prove_wasm = "../circuits/build/prove_rsa_65537_sha256_js/prove_rsa_65537_sha256.wasm";
|
||||
const path_prove_zkey = "../circuits/build/prove_rsa_65537_sha256_final.zkey";
|
||||
/// Generate circuit inputs
|
||||
const passportData = mockPassportData_sha256_rsa_65537;
|
||||
const bitmap = Array(90).fill("1");
|
||||
const scope = BigInt(1).toString();
|
||||
const majority = "18";
|
||||
const user_identifier = '0xE6E4b6a802F2e0aeE5676f6010e0AF5C9CDd0a50';
|
||||
const n_dsc = 64;
|
||||
const k_dsc = 32;
|
||||
const inputs = generateCircuitInputsProve(
|
||||
passportData,
|
||||
n_dsc,
|
||||
k_dsc,
|
||||
scope,
|
||||
bitmap,
|
||||
majority,
|
||||
user_identifier
|
||||
);
|
||||
// Generate proof and publicxw <wsignals
|
||||
const { proof, publicSignals } = await groth16.fullProve(
|
||||
inputs,
|
||||
path_prove_wasm,
|
||||
path_prove_zkey
|
||||
);
|
||||
const verified_prove = await groth16.verify(
|
||||
vkey_prove_rsa_65537_sha256,
|
||||
publicSignals,
|
||||
proof
|
||||
)
|
||||
// console.log(publicSignals);
|
||||
// console.log(proof);
|
||||
const openPassportProveVerifier = new OpenPassportProverVerifier({
|
||||
scope: scope,
|
||||
requirements: [["older_than", "18"], ["nationality", "France"]]
|
||||
});
|
||||
const openPassportProverInputs = new OpenPassportProverInputs(publicSignals, proof as any, mock_dsc_sha256_rsa_4096);
|
||||
const result = await openPassportProveVerifier.verify(openPassportProverInputs);
|
||||
console.log(result);
|
||||
|
||||
console.log(result.toJson());
|
||||
expect(result.valid).to.be.true;
|
||||
});
|
||||
|
||||
|
||||
// it('proofOfPassportWeb3Verifier - should succeed', async () => {
|
||||
// const scope = BigInt(1).toString();
|
||||
// /// Verify using web3 verifier
|
||||
// const proofOfPassportWeb3Verifier = new OpenPassportWeb3Verifier({
|
||||
// scope: scope
|
||||
// });
|
||||
// const result = await proofOfPassportWeb3Verifier.verify(process.env.TEST_ADDRESS, Number(process.env.TOKEN_ID));
|
||||
// expect(result.valid).to.be.true;
|
||||
// });
|
||||
|
||||
// it('proofOfPassportWeb3Verifier - should fail', async () => {
|
||||
// const scope = BigInt(1).toString();
|
||||
// /// Verify using web3 verifier
|
||||
// const proofOfPassportWeb3Verifier = new OpenPassportWeb3Verifier({
|
||||
// scope: scope,
|
||||
// requirements: [["older_than", "18"]]
|
||||
// });
|
||||
// const result = await proofOfPassportWeb3Verifier.verify(process.env.TEST_ADDRESS, Number(process.env.TOKEN_ID));
|
||||
// expect(result.older_than).to.be.true;
|
||||
// expect(result.valid).to.be.false;
|
||||
// });
|
||||
});
|
||||
@@ -11,11 +11,12 @@
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"include": [
|
||||
"index.ts",
|
||||
"src/index.ts",
|
||||
"src/**/*",
|
||||
"common/**/*",
|
||||
"circuits/**/*",
|
||||
"circuits/**/*.json"
|
||||
"circuits/**/*.json",
|
||||
"utils/utils.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules",
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
j/sfUhyHHc9GFJPteLrV
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,35 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIGCzCCA/OgAwIBAgIEQZ5lIzANBgkqhkiG9w0BAQsFADCBozELMAkGA1UEBhMC
|
||||
VVMxGDAWBgNVBAoMD1UuUy4gR292ZXJubWVudDEcMBoGA1UECwwTRGVwYXJ0bWVu
|
||||
dCBvZiBTdGF0ZTENMAsGA1UECwwETVJURDEiMCAGA1UECwwZQ2VydGlmaWNhdGlv
|
||||
biBBdXRob3JpdGllczEpMCcGA1UECwwgVS5TLiBEZXBhcnRtZW50IG9mIFN0YXRl
|
||||
IE1SVEQgQ0EwHhcNMDQxMTE5MjA1NzA1WhcNMjUwNjE5MjEyNzA1WjCBozELMAkG
|
||||
A1UEBhMCVVMxGDAWBgNVBAoMD1UuUy4gR292ZXJubWVudDEcMBoGA1UECwwTRGVw
|
||||
YXJ0bWVudCBvZiBTdGF0ZTENMAsGA1UECwwETVJURDEiMCAGA1UECwwZQ2VydGlm
|
||||
aWNhdGlvbiBBdXRob3JpdGllczEpMCcGA1UECwwgVS5TLiBEZXBhcnRtZW50IG9m
|
||||
IFN0YXRlIE1SVEQgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDD
|
||||
0+b68sy4T+HTTkQrLo1VeEj5p9H2JpRGfoQ1U6sDL5AE2+iXi81EIKoRwfCtzbV7
|
||||
wqZGgWqg3trX9iJ2hkoiwEb/weSK0Wo9fvoW51VxjWemrNEUyW/7eR/lgA2uFvMK
|
||||
pWWjVQIZc59EnBlQqAlD1Zv744xIybNInCBdA/1vFFREdGUaXzfcIK52t0dqMp8Q
|
||||
XR/9/lY3Hj+zb8Nt8Fpb4Ur0sB5ciqMWRLzEMa/UtrvzmCiGkgMCTp1soyFVZZPt
|
||||
jA+bdPmjHYTn0gg3rmonOYp4op2Fpl2vtnOvGFhXFWNx7ooVOVys3V+q0CcCN4RM
|
||||
QQSd8iDDi2VXzbs+bVL10RmcfOTFaa6xGjVQ15DDul07+wC7Lfi5VED0IGF0RPFO
|
||||
9EykGufMzUbmYHsfuW2xLRPYanxCJHFpdH0KekkAjcGKXqUkn98onBXLOvvFH1zb
|
||||
CzgMgn+6HQmDLzCR5U6J7Rq9rooQjs8LPQ3YY3PQl3awBdQEOx+z+c0rDsraTkcs
|
||||
n/lsnP3R3xPCgTqPnFoHY5s6ELAEXJNvQKwutadoi79nImvQ/82pZhpleG/igh6i
|
||||
6xQcSXiqm+fsr2FU0pPVzuoAofdkRssSfFXkNiHmqxHAia3gz0HksmwWiMnbxOo4
|
||||
TUMH7gOqD2aFD4JpfWzVSvDs+o6oDy7966TRjEPzqQIDAQABo0UwQzAOBgNVHQ8B
|
||||
Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuqa2LxN7EzHJ
|
||||
yIExnlUhhj17jzowDQYJKoZIhvcNAQELBQADggIBAFglD2TyHBf+yhW+c+HB2z4a
|
||||
lsqDP9Ta49KBXJt6Ca+DjHcm1J4PSgInNqFogr+26Oi1dBZb341OseUkCKd/aHqJ
|
||||
K41uYbkVLIrMCI6faExI6WPVaFkrq7Xdo7+GXmSXKUmiCfRyjUuxyAL+U14wP+Xx
|
||||
jLfdkinuvQ3Xa4vp6BdW+OjNiA1EKN/x/RQFqCG0MPYKZGOmNTumPEfxghWAAH6N
|
||||
zcYkmK3xUaKJWUe4vBAB1vFt3dJ/03Odc5DcV1U4hdy1b9fZOX31IVw06T9g19rz
|
||||
1XjZwwqebr6GzbiqNSf2yP5U2k4IsPgUGiioI7hEaxR2VJYWsb12Y5PvleH6eSpb
|
||||
rhUBCPrA6wNW+Ey94QC2o+95rmilWtmtV8YNYMXEAbw2dHcbj0NCTf7bp6cfZBW7
|
||||
doXaODpXN8sRZ/y+b7w5kiujRyBuBZlsKChX+BF3rsJNfbdnm68Rg7ySxSY9zVDd
|
||||
7BeQDKWRSJGeGQOL4BOCIwq1CdXr5OY7ph2CBSfLN2+WTG1ubCW76IcXqRw4zGG3
|
||||
ZJK2geGtwTvnjc1JFg2FjfTr/DxOjud0+BbMb9PcgP8i7Sg2t+L/FgNd+zUHhMzK
|
||||
jcVjNDcDxHrF7Jwk2psv35GWjrglITD7zqyUwasS+2pdoVTXhly0mw/VhlFfrfIy
|
||||
24YnLM+7w0NVPvwClrpt
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,36 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,40 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIHFDCCBPygAwIBAgIETjLQBjANBgkqhkiG9w0BAQsFADCBozELMAkGA1UEBhMC
|
||||
VVMxGDAWBgNVBAoMD1UuUy4gR292ZXJubWVudDEcMBoGA1UECwwTRGVwYXJ0bWVu
|
||||
dCBvZiBTdGF0ZTENMAsGA1UECwwETVJURDEiMCAGA1UECwwZQ2VydGlmaWNhdGlv
|
||||
biBBdXRob3JpdGllczEpMCcGA1UECwwgVS5TLiBEZXBhcnRtZW50IG9mIFN0YXRl
|
||||
IE1SVEQgQ0EwHhcNMTkxMTE0MTYzNzEyWhcNNDAwNTE0MTcwNzEyWjCBozELMAkG
|
||||
A1UEBhMCVVMxGDAWBgNVBAoMD1UuUy4gR292ZXJubWVudDEcMBoGA1UECwwTRGVw
|
||||
YXJ0bWVudCBvZiBTdGF0ZTENMAsGA1UECwwETVJURDEiMCAGA1UECwwZQ2VydGlm
|
||||
aWNhdGlvbiBBdXRob3JpdGllczEpMCcGA1UECwwgVS5TLiBEZXBhcnRtZW50IG9m
|
||||
IFN0YXRlIE1SVEQgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCj
|
||||
Mg42Fipd4tZOLauEOb5fZlfU4xSv+PsNmBzrNdntXOxhUH7oBGIhuiTvtLE+2T1l
|
||||
5Qiq6ONbn0nJv4RSIjqCIhk673NjsED41B+Fl7LDOvVcpeF9E53maZSK/c3Pm6Qw
|
||||
EXAGgJo4dRyGirCaXfmUKT5fsrc05L74dZufG9FAWo4i2xNxoyDaOn0EX6+YevSd
|
||||
u5yyLjMDcHNQpaytu9xXTkzgf/KjKu7/m6rwmS1LFvELMreIpdXKLpLBGQ6Il6Rv
|
||||
O1Uqi4QtCVWGWEZpxQ5Dy5v49NriBFYpUe2HrxiZhbmTXb/YHnYKvMCd3EIZ7B83
|
||||
kq8PLnChAQNcdwn472zneWJiNkU1Tlx4v5HjyNShctU+4KZcVAqqjU3+376VZHqJ
|
||||
xbLy2WUdkayvUYNVfT4Rj7SAlRQtH5I/OwCq3kiAKrQGVD+LPiItRLx8CgezjoBT
|
||||
e7/Ic1FqkG7dc6orAKZAfYc1S59RnIPnpxVogHMTQgtYrBjsdoRw/bzLQP/746mo
|
||||
/PjhzxiHAtxJ2ghgkg5vcXMFWyr7UHbdV6pNnwjGkOQjjC6YEvAlL54nXfpcFR6A
|
||||
vWFBC/kFGtw39eAn3DILjdA353wt8FZRlCh3LuQpcLQq2tq2AfDBrMJ3GXw9HenR
|
||||
p5du95QFsmbJFBLbuMPKSdythSvOQbxZFaGtbS1RHQIDAQABo4IBTDCCAUgwHAYD
|
||||
VR0SBBUwE4ERbXJ0ZG9wc0BzdGF0ZS5nb3YwHAYDVR0RBBUwE4ERbXJ0ZG9wc0Bz
|
||||
dGF0ZS5nb3YwDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwgZkG
|
||||
A1UdHwSBkTCBjjCBi6CBiKCBhYYqaHR0cHM6Ly9wa2Rkb3dubG9hZDEuaWNhby5p
|
||||
bnQvQ1JMcy9VU0EuY3JshipodHRwczovL3BrZGRvd25sb2FkMi5pY2FvLmludC9D
|
||||
UkxzL1VTQS5jcmyGK2h0dHA6Ly9jcmxzLnBraS5zdGF0ZS5nb3YvY3Jscy9VU01S
|
||||
VERDQS5jcmwwKwYDVR0QBCQwIoAPMjAxOTExMTQxNjM3MTJagQ8yMDI1MDUxNTEw
|
||||
MDkwOVowHQYDVR0OBBYEFPGKi/tqRKNGgzTS1ZIVgViCSkz7MA0GCSqGSIb3DQEB
|
||||
CwUAA4ICAQARoYLCR1di+iUGqrcBi/ABSFx4oHm2cJzMAT7cs6cUAbzeGhFELYEC
|
||||
Jzjbwb93lQgg8IpFl8mcBPT4yoMlZDZKKzDiztI9hTwLJw054n5oRk6YJm/45g3Q
|
||||
1HUb+0wv6HzXfRlCx1fjPsPQFOpcKIKgdNc1QarEaxnUSHG29ie9E2WR3dD8yCFW
|
||||
kbdGvmlf4FO+P1O+gfUwSbfLuuUg5RDif9bU+D7VBzuC+6QxueKRo6y99ZZcmHTJ
|
||||
6dsaw/oKABOB+FfSad2RGLvpIynpKjpPNpoFw8H8FcSpOiwpdtSp5tdgLAKVwR/6
|
||||
hVMGhuwsSxmxknbLopaKSBC1shp4uZNOlSNjh/d2ssYfGPLrWuTARb/dD9H9SQjg
|
||||
eqWZV8CJ8cNASsgenIwbygmH70J2p3+qlmA4WLq86qpOzrCUOZaUHYuVSjTEb8fy
|
||||
CGUjAparnyVnPEUwqeVWOC9tbZtscV9WE4A9c0u8gr1DPVVWIdXrhdpXeOZQwJDm
|
||||
sKLyTo/yp7GYLMBvNZcMz+orcsyTXoznGk/Xu/7piTpKQZ+EPT8yBp3zb2zNs0Cp
|
||||
iNTD+szdm/UZE4Wl0kfzCPAz0fSKprZa7ifoiaZZzOwzkpnkpU2SuYcKQqyTw0E+
|
||||
Up7Z2qhj2NjkxaikFjTjm4d03dwnU+ojALwufJG1LIj9VShAVQG0ZQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,33 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIFpzCCA4+gAwIBAgIUVGoAk38qsh7YYIE2eANMIeZkr+IwDQYJKoZIhvcNAQEL
|
||||
BQAwYzELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCU1vY2tTdGF0ZTERMA8GA1UEBwwI
|
||||
TW9ja0NpdHkxGTAXBgNVBAoMEE1vY2tPcmdhbml6YXRpb24xEjAQBgNVBAMMCW1v
|
||||
Y2tfY3NjYTAeFw0yNDA2MTgxOTA4MzJaFw0yNTA2MTgxOTA4MzJaMGMxCzAJBgNV
|
||||
BAYTAlhYMRIwEAYDVQQIDAlNb2NrU3RhdGUxETAPBgNVBAcMCE1vY2tDaXR5MRkw
|
||||
FwYDVQQKDBBNb2NrT3JnYW5pemF0aW9uMRIwEAYDVQQDDAltb2NrX2NzY2EwggIi
|
||||
MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDE0JWh/kOzueMgFHwqLHYabpx4
|
||||
T0OV58DPuJObuMIKugw8/5l1VLg/Zq2II8/FoATn0Is3JYOidHnFskgkKjW89gxv
|
||||
RYRlYFPcvRfAxy+3+AO2f3xCnavkNTUI3Jl9q3jBz05SqHgM1cHiYr61ZX5sA980
|
||||
OveugRWBbT1mEUNhXTnegfPI9K3b+6YL0QXUePXGpRD9f5lTiCoE/mW8wGkieBYx
|
||||
QEEskwVpV3cvqwoLCkbdZkRZmIsYE6u7HeAPw2p/yAK6DhqY/vH3svj3LpWvdzBi
|
||||
Av1wBuuZ6IDgoB0tbgCPOUuc+btezBKhmZXDau0UZc9Y3ND+bMCQEWieXSwCWFYg
|
||||
y41/onaCaLdT+kcvwdOENNVNvHpaYVDnZGWdt8A95w/dl4Dl19wcL3KkqxoFGB8e
|
||||
wG+/SDnYTuuGWY3zaROJQ3KYlCqNi3+OuzZTBiJTujaL3Eb/+7Smhy/qtdd6bVUg
|
||||
mpf3fdBHw+jjl2st+n1rfIYY8rYY7HGrJdome9jXS8pCNfnptp+J8urzgXfEXGFM
|
||||
qHwMKu/vtfiBt4a1+GC/i2ssaXRcGABiI4xG4BQYXT+4U3p0pAA7cDNH5jN0Wny7
|
||||
J5DuEyXzcrRQVFD9hiFmDJfAsc35UwHKpayu9F7JJC4EfWVdahgA9VLhxVIE+eTi
|
||||
HPRHFyMaVaeqmjrBLQIDAQABo1MwUTAdBgNVHQ4EFgQUVGhgTF0HCJvSxKtE0BvV
|
||||
tQNMt0cwHwYDVR0jBBgwFoAUVGhgTF0HCJvSxKtE0BvVtQNMt0cwDwYDVR0TAQH/
|
||||
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAtyt8sirr9jc8i5xEnpV3YM6m0poY
|
||||
bl2S5hDu+xmMRnl8r3lv3v1KE2XrZD0cldV8plYz6oXfWBkCj3j6RUbsNx8w1q27
|
||||
Qsb2NC1KZljYG+kHavIIdJty9FOknhgYSYW+UKixSHPuAS+iJxEmGBN8GxhMPpzM
|
||||
KRzWbpQuPZuBgyKRSeR5ytGqyZrEje9zhkdSg/aFYn3EzLw93CfzrDLrKmXc/dra
|
||||
vEDyP34ts0Cy7UadCGkJN/SPuZpvF9Fy5f7l8ymHE319ipNZHIMhw50h0l/Puzjd
|
||||
vn3iHWtwpFw5r+nJTr5zO+3yL4dPcp8XfX3Daa5nDfCJ7dd1wSOf+/1cvBLB5aKc
|
||||
kyZ/ppvTc3oJAmFHAD2NXf15CUWE18Te/Vy9X2qI8LkFtea6GDF4VBewT2PATg12
|
||||
r03xZWa6KFVbgTIq3GUvtZ8UHm+cluTFKX90rFtbzFo658mxQGw5RnE2zp340NzP
|
||||
v9tNSlP4Tyzr2b1VoQcgmpQ987afINJG39lq2OsSrlK87p9bB4yoFSZwOfqok0nM
|
||||
IICRxBuTUHLqP3Nhvo+tAl+iK848LDJVf87ZVQHl72JX4lkVvOo5LCXnOQPyowaP
|
||||
D++J2c6tUj6gs9HAKVX7fH06m/2T5fJHae/OYx36O242yBXPQdHx6qloF/DNvGyM
|
||||
EHC3NCCjLG5m6G0=
|
||||
-----END CERTIFICATE-----
|
||||
159
sdk/utils.ts
159
sdk/utils.ts
@@ -1,159 +0,0 @@
|
||||
import { ethers } from "ethers";
|
||||
import { getCurrentDateYYMMDD } from "../common/src/utils/utils";
|
||||
import { REGISTER_ABI, REGISTER_CONTRACT_ADDRESS } from "../common/src/constants/constants";
|
||||
import { derToBytes } from '../common/src/utils/csca';
|
||||
import forge from 'node-forge'
|
||||
import { pem1, pem2, pem3, pem4, mock_csca } from './certificates';
|
||||
import { fr1pem, fr2pem, fr3pem, fr4pem, mockpem } from './certificates';
|
||||
import { SKI_PEM, SKI_PEM_DEV } from './skiPem';
|
||||
export const attributeToGetter = {
|
||||
"nationality": "getNationalityOf",
|
||||
"expiry_date": "getExpiryDateOf",
|
||||
"older_than": "getOlderThanOf"
|
||||
}
|
||||
|
||||
export function getCurrentDateFormatted() {
|
||||
return getCurrentDateYYMMDD().map(datePart => BigInt(datePart).toString());
|
||||
}
|
||||
|
||||
export async function checkMerkleRoot(rpcUrl: string, merkleRoot: number) {
|
||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
||||
const contract = new ethers.Contract(REGISTER_CONTRACT_ADDRESS, REGISTER_ABI, provider);
|
||||
return await contract.checkRoot(merkleRoot);
|
||||
}
|
||||
|
||||
export function parsePublicSignals(publicSignals) {
|
||||
return {
|
||||
nullifier: publicSignals[0],
|
||||
revealedData_packed: [publicSignals[1], publicSignals[2], publicSignals[3]],
|
||||
attestation_id: publicSignals[4],
|
||||
merkle_root: publicSignals[5],
|
||||
scope: publicSignals[6],
|
||||
current_date: [publicSignals[7], publicSignals[8], publicSignals[9], publicSignals[10], publicSignals[11], publicSignals[12]],
|
||||
user_identifier: publicSignals[13],
|
||||
}
|
||||
}
|
||||
|
||||
export function parsePublicSignalsProve(publicSignals) {
|
||||
return {
|
||||
signature_algorithm: publicSignals[0],
|
||||
revealedData_packed: [publicSignals[1], publicSignals[2], publicSignals[3]],
|
||||
nullifier: publicSignals[4],
|
||||
pubKey: publicSignals.slice(5, 37),
|
||||
scope: publicSignals[37],
|
||||
current_date: publicSignals.slice(38, 44),
|
||||
user_identifier: publicSignals[44],
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export function unpackReveal(revealedData_packed: string[]): string[] {
|
||||
|
||||
const bytesCount = [31, 31, 28]; // nb of bytes in each of the first three field elements
|
||||
const bytesArray = revealedData_packed.flatMap((element: string, index: number) => {
|
||||
const bytes = bytesCount[index];
|
||||
const elementBigInt = BigInt(element);
|
||||
const byteMask = BigInt(255); // 0xFF
|
||||
const bytesOfElement = [...Array(bytes)].map((_, byteIndex) => {
|
||||
return (elementBigInt >> (BigInt(byteIndex) * BigInt(8))) & byteMask;
|
||||
});
|
||||
return bytesOfElement;
|
||||
});
|
||||
|
||||
return bytesArray.map((byte: bigint) => String.fromCharCode(Number(byte)));
|
||||
}
|
||||
|
||||
export function verifyDSCValidity(dscCertificate: any, dev_mode: boolean = false) {
|
||||
const authorityKeyIdentifierExt = dscCertificate.extensions.find(
|
||||
(ext) => ext.name === 'authorityKeyIdentifier'
|
||||
);
|
||||
const value = authorityKeyIdentifierExt.value;
|
||||
const byteArray = derToBytes(value);
|
||||
const formattedValue = byteArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
|
||||
console.log("formattedValue:", formattedValue);
|
||||
const formattedValueAdjusted = formattedValue.substring(8); // Remove the first '3016' from the formatted string
|
||||
console.log("formattedValueAdjusted:", formattedValueAdjusted);
|
||||
// const formattedValue = byteArray.map(byte => byte.toString(16).padStart(2, '0').toUpperCase()).join(':');
|
||||
// const formattedValueAdjusted = formattedValue.substring(12); // Remove the first '30:16:80:14:' from the formatted string
|
||||
|
||||
const csca_pem = getCSCAPem2(formattedValueAdjusted, dev_mode);
|
||||
console.log("CSCA PEM used:", csca_pem.substring(0, 50) + "..."); // Log the first 50 characters of the PEM
|
||||
|
||||
const csca_certificate = forge.pki.certificateFromPem(csca_pem);
|
||||
try {
|
||||
// Create a CAStore containing the CSCA certificate
|
||||
const caStore = forge.pki.createCaStore([csca_certificate]);
|
||||
|
||||
// Verify the DSC certificate's signature using the CSCA certificate
|
||||
const verified = forge.pki.verifyCertificateChain(caStore, [dscCertificate]);
|
||||
|
||||
if (!verified) {
|
||||
throw new Error('DSC certificate verification failed');
|
||||
}
|
||||
|
||||
// Check if the DSC certificate is within its validity period
|
||||
const currentDate = new Date();
|
||||
if (currentDate < dscCertificate.validity.notBefore || currentDate > dscCertificate.validity.notAfter) {
|
||||
throw new Error('DSC certificate is not within its validity period');
|
||||
}
|
||||
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DSC certificate validation error:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function getCscaPem(formattedValueAdjusted: string, dev_mode: boolean): string {
|
||||
const pemMap = dev_mode ? AKI_PEM_DEV : AKI_PEM_PROD;
|
||||
const pemKey = pemMap[formattedValueAdjusted as keyof typeof AKI_PEM_PROD];
|
||||
|
||||
switch (pemKey) {
|
||||
case "fr1pem": return fr1pem;
|
||||
case "fr2pem": return fr2pem;
|
||||
case "fr3pem": return fr3pem;
|
||||
case "fr4pem": return fr4pem;
|
||||
case "pem1": return pem1;
|
||||
case "pem2": return pem2;
|
||||
case "pem3": return pem3;
|
||||
case "pem4": return pem4;
|
||||
case "mock_csca.pem": return mock_csca;
|
||||
case "mock": return mockpem;
|
||||
default:
|
||||
throw new Error(`No matching PEM found for key: ${formattedValueAdjusted}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function getCSCAPem2(formattedValueAdjusted: string, dev_mode: boolean): string {
|
||||
const skiPem = dev_mode ? { ...SKI_PEM, ...SKI_PEM_DEV } : SKI_PEM;
|
||||
const pem = skiPem[formattedValueAdjusted];
|
||||
return pem;
|
||||
}
|
||||
|
||||
export const AKI_PEM_DEV = {
|
||||
"22:F3:83:20:A5:73:42:2C:AF:46:AB:8C:3D:EE:76:4D:BB:E5:C5:02": "fr2pem",
|
||||
"0F:CC:32:51:E4:E9:2A:50:65:8C:AF:6A:68:71:BC:9E:8F:C8:6D:59": "fr3pem",
|
||||
"BE:8A:2E:D6:C9:F9:20:4E:3A:27:03:08:97:4D:EC:FD:D9:7D:C5:E6": "fr1pem",
|
||||
"66:36:B0:9B:26:D2:F2:80:54:5E:DA:C7:66:C8:F0:12:4D:B5:3B:B4": "fr4pem",
|
||||
"F1:8A:8B:FB:6A:44:A3:46:83:34:D2:D5:92:15:81:58:82:4A:4C:FB": "pem4",
|
||||
"E6:2D:65:16:F6:15:A8:6A:E7:89:EE:81:3C:BF:3E:1D:C2:A0:80:F4": "pem3",
|
||||
"BA:A6:B6:2F:13:7B:13:31:C9:C8:81:31:9E:55:21:86:3D:7B:8F:3A": "pem2",
|
||||
"B1:1A:1D:F8:23:A2:96:94:8E:E7:EA:49:A8:CC:87:72:C6:FA:DE:9A": "pem1",
|
||||
"54:68:60:4C:5D:07:08:9B:D2:C4:AB:44:D0:1B:D5:B5:03:4C:B7:47": "mock"
|
||||
}
|
||||
export const AKI_PEM_PROD = {
|
||||
"F1:8A:8B:FB:6A:44:A3:46:83:34:D2:D5:92:15:81:58:82:4A:4C:FB": "pem4",
|
||||
"E6:2D:65:16:F6:15:A8:6A:E7:89:EE:81:3C:BF:3E:1D:C2:A0:80:F4": "pem3",
|
||||
"BA:A6:B6:2F:13:7B:13:31:C9:C8:81:31:9E:55:21:86:3D:7B:8F:3A": "pem2",
|
||||
"B1:1A:1D:F8:23:A2:96:94:8E:E7:EA:49:A8:CC:87:72:C6:FA:DE:9A": "pem1"
|
||||
}
|
||||
|
||||
|
||||
|
||||
export const AKI_MODULUS = {
|
||||
"F1:8A:8B:FB:6A:44:A3:46:83:34:D2:D5:92:15:81:58:82:4A:4C:FB": "00:a3:32:0e:36:16:2a:5d:e2:d6:4e:2d:ab:84:39:be:5f:66:57:d4:e3:14:af:f8:fb:0d:98:1c:eb:35:d9:ed:5c:ec:61:50:7e:e8:04:62:21:ba:24:ef:b4:b1:3e:d9:3d:65:e5:08:aa:e8:e3:5b:9f:49:c9:bf:84:52:22:3a:82:22:19:3a:ef:73:63:b0:40:f8:d4:1f:85:97:b2:c3:3a:f5:5c:a5:e1:7d:13:9d:e6:69:94:8a:fd:cd:cf:9b:a4:30:11:70:06:80:9a:38:75:1c:86:8a:b0:9a:5d:f9:94:29:3e:5f:b2:b7:34:e4:be:f8:75:9b:9f:1b:d1:40:5a:8e:22:db:13:71:a3:20:da:3a:7d:04:5f:af:98:7a:f4:9d:bb:9c:b2:2e:33:03:70:73:50:a5:ac:ad:bb:dc:57:4e:4c:e0:7f:f2:a3:2a:ee:ff:9b:aa:f0:99:2d:4b:16:f1:0b:32:b7:88:a5:d5:ca:2e:92:c1:19:0e:88:97:a4:6f:3b:55:2a:8b:84:2d:09:55:86:58:46:69:c5:0e:43:cb:9b:f8:f4:da:e2:04:56:29:51:ed:87:af:18:99:85:b9:93:5d:bf:d8:1e:76:0a:bc:c0:9d:dc:42:19:ec:1f:37:92:af:0f:2e:70:a1:01:03:5c:77:09:f8:ef:6c:e7:79:62:62:36:45:35:4e:5c:78:bf:91:e3:c8:d4:a1:72:d5:3e:e0:a6:5c:54:0a:aa:8d:4d:fe:df:be:95:64:7a:89:c5:b2:f2:d9:65:1d:91:ac:af:51:83:55:7d:3e:11:8f:b4:80:95:14:2d:1f:92:3f:3b:00:aa:de:48:80:2a:b4:06:54:3f:8b:3e:22:2d:44:bc:7c:0a:07:b3:8e:80:53:7b:bf:c8:73:51:6a:90:6e:dd:73:aa:2b:00:a6:40:7d:87:35:4b:9f:51:9c:83:e7:a7:15:68:80:73:13:42:0b:58:ac:18:ec:76:84:70:fd:bc:cb:40:ff:fb:e3:a9:a8:fc:f8:e1:cf:18:87:02:dc:49:da:08:60:92:0e:6f:71:73:05:5b:2a:fb:50:76:dd:57:aa:4d:9f:08:c6:90:e4:23:8c:2e:98:12:f0:25:2f:9e:27:5d:fa:5c:15:1e:80:bd:61:41:0b:f9:05:1a:dc:37:f5:e0:27:dc:32:0b:8d:d0:37:e7:7c:2d:f0:56:51:94:28:77:2e:e4:29:70:b4:2a:da:da:b6:01:f0:c1:ac:c2:77:19:7c:3d:1d:e9:d1:a7:97:6e:f7:94:05:b2:66:c9:14:12:db:b8:c3:ca:49:dc:ad:85:2b:ce:41:bc:59:15:a1:ad:6d:2d:51:1d",
|
||||
"E6:2D:65:16:F6:15:A8:6A:E7:89:EE:81:3C:BF:3E:1D:C2:A0:80:F4": "00:c3:85:46:1e:7a:f7:8e:c2:3f:fd:bb:f8:7c:a0:66:19:82:dc:ad:d7:00:06:44:0d:99:5a:fc:c6:49:a5:4b:bc:71:90:31:10:0a:88:67:cc:a4:a4:f2:fd:13:f8:bd:32:a7:78:7e:59:cb:4e:d5:9c:2c:68:97:d4:d0:70:dd:32:88:03:98:4b:f7:49:ea:0d:22:63:ae:aa:2a:1f:ce:40:cb:74:7e:bf:21:60:3f:25:f1:30:05:80:f3:fb:57:27:ef:fa:db:1e:e1:42:c2:8f:dd:90:f3:49:91:e1:3b:3a:b2:c6:77:d8:3a:b6:c8:fc:62:26:cc:66:b0:7c:37:b9:c8:56:01:1a:f5:03:84:8a:a5:e6:51:45:78:28:d2:8a:45:92:4b:bb:f4:5a:5b:36:46:36:af:89:aa:55:e0:00:d2:af:4b:02:96:55:6f:9a:20:d6:fc:e1:47:e4:04:87:5b:3d:f2:24:12:ae:89:31:da:24:f9:82:10:c8:77:a6:10:fe:a7:c6:71:c0:55:0c:0e:61:19:20:1e:27:70:f5:81:d7:65:99:07:82:1e:f9:79:f8:b1:32:80:32:dc:b4:31:be:89:27:10:2a:e5:a5:98:31:a8:8a:5d:ba:9f:80:c2:c1:16:f2:1a:09:65:ba:5d:dc:3c:5e:6f:6e:c0:00:5d:d1:97:d2:c1:18:f8:b5:b6:17:75:03:84:1b:fc:08:d5:0e:d2:32:41:a5:3a:d9:c1:e8:ed:f1:06:71:6e:64:56:0f:c1:2c:68:4a:1f:e4:49:28:ea:84:66:81:bc:6f:cd:17:d2:3b:ff:67:65:4d:36:d0:d4:ff:c7:e5:70:a1:bd:0e:40:fe:77:e9:20:8c:c4:00:c8:f0:8e:8c:2d:9a:72:10:dc:2b:96:5c:d5:0f:3f:b6:ad:13:db:9c:7a:1a:84:63:6f:16:9d:a9:1e:8c:2a:b0:18:68:ff:0a:38:b0:ab:2f:43:09:b2:3b:dc:7c:3d:cc:fa:17:72:25:72:4f:37:fe:d3:78:2c:8a:6c:af:9d:06:f5:42:93:d0:5e:3e:2e:a5:04:a9:a9:ea:51:07:8f:2c:b2:76:03:41:07:36:4f:ad:33:5f:e6:5e:b4:3a:1f:5e:5a:96:88:a1:31:dc:99:3a:12:eb:32:95:7d:f1:5b:fd:d5:a7:90:24:c5:d4:10:6e:cb:55:60:24:d7:88:b2:99:fc:9f:53:e1:63:94:36:de:ab:d5:f2:af:90:d5:36:b5:5f:74:c5:1a:4b:c0:6f:54:97:1a:23:d0:5b:81:dd:d8:9a:c5:24:40:68:f0:08:7c:9e:7f:2b:40:a5:fd:f7:d3:cb:23:e0:27:d5:a7",
|
||||
"BA:A6:B6:2F:13:7B:13:31:C9:C8:81:31:9E:55:21:86:3D:7B:8F:3A": "00:c3:d3:e6:fa:f2:cc:b8:4f:e1:d3:4e:44:2b:2e:8d:55:78:48:f9:a7:d1:f6:26:94:46:7e:84:35:53:ab:03:2f:90:04:db:e8:97:8b:cd:44:20:aa:11:c1:f0:ad:cd:b5:7b:c2:a6:46:81:6a:a0:de:da:d7:f6:22:76:86:4a:22:c0:46:ff:c1:e4:8a:d1:6a:3d:7e:fa:16:e7:55:71:8d:67:a6:ac:d1:14:c9:6f:fb:79:1f:e5:80:0d:ae:16:f3:0a:a5:65:a3:55:02:19:73:9f:44:9c:19:50:a8:09:43:d5:9b:fb:e3:8c:48:c9:b3:48:9c:20:5d:03:fd:6f:14:54:44:74:65:1a:5f:37:dc:20:ae:76:b7:47:6a:32:9f:10:5d:1f:fd:fe:56:37:1e:3f:b3:6f:c3:6d:f0:5a:5b:e1:4a:f4:b0:1e:5c:8a:a3:16:44:bc:c4:31:af:d4:b6:bb:f3:98:28:86:92:03:02:4e:9d:6c:a3:21:55:65:93:ed:8c:0f:9b:74:f9:a3:1d:84:e7:d2:08:37:ae:6a:27:39:8a:78:a2:9d:85:a6:5d:af:b6:73:af:18:58:57:15:63:71:ee:8a:15:39:5c:ac:dd:5f:aa:d0:27:02:37:84:4c:41:04:9d:f2:20:c3:8b:65:57:cd:bb:3e:6d:52:f5:d1:19:9c:7c:e4:c5:69:ae:b1:1a:35:50:d7:90:c3:ba:5d:3b:fb:00:bb:2d:f8:b9:54:40:f4:20:61:74:44:f1:4e:f4:4c:a4:1a:e7:cc:cd:46:e6:60:7b:1f:b9:6d:b1:2d:13:d8:6a:7c:42:24:71:69:74:7d:0a:7a:49:00:8d:c1:8a:5e:a5:24:9f:df:28:9c:15:cb:3a:fb:c5:1f:5c:db:0b:38:0c:82:7f:ba:1d:09:83:2f:30:91:e5:4e:89:ed:1a:bd:ae:8a:10:8e:cf:0b:3d:0d:d8:63:73:d0:97:76:b0:05:d4:04:3b:1f:b3:f9:cd:2b:0e:ca:da:4e:47:2c:9f:f9:6c:9c:fd:d1:df:13:c2:81:3a:8f:9c:5a:07:63:9b:3a:10:b0:04:5c:93:6f:40:ac:2e:b5:a7:68:8b:bf:67:22:6b:d0:ff:cd:a9:66:1a:65:78:6f:e2:82:1e:a2:eb:14:1c:49:78:aa:9b:e7:ec:af:61:54:d2:93:d5:ce:ea:00:a1:f7:64:46:cb:12:7c:55:e4:36:21:e6:ab:11:c0:89:ad:e0:cf:41:e4:b2:6c:16:88:c9:db:c4:ea:38:4d:43:07:ee:03:aa:0f:66:85:0f:82:69:7d:6c:d5:4a:f0:ec:fa:8e:a8:0f:2e:fd:eb:a4:d1:8c:43:f3:a9",
|
||||
"B1:1A:1D:F8:23:A2:96:94:8E:E7:EA:49:A8:CC:87:72:C6:FA:DE:9A": "00:bd:bc:15:fb:39:7f:bc:1c:cb:58:06:9d:ae:d4:d2:a4:2f:65:ff:33:8e:cc:04:0a:6f:08:55:5c:21:8f:28:ad:12:7c:e8:e2:a8:82:52:55:f6:e8:43:e4:ef:cf:ae:c5:83:16:fc:2c:38:54:27:3a:14:4b:11:e3:87:b3:ef:3b:c3:58:c0:65:cc:85:0a:f0:d0:9c:c0:01:18:cf:a9:b1:94:49:3d:ea:5c:ef:c3:7c:4c:00:8a:51:4a:c7:53:6f:9a:5a:f1:66:00:12:eb:88:88:a9:48:e5:ec:81:b0:60:0a:40:2c:4d:4e:93:98:e4:12:f6:03:4c:4d:7a:b8:27:b9:45:0c:f4:be:ea:9a:29:c8:22:ae:b8:70:21:6e:82:e2:bd:b0:c7:d1:b5:c6:be:ff:a6:22:08:ed:fa:3d:ec:3e:e1:e7:2d:36:d3:a3:b0:b2:10:a5:1c:09:90:d2:9e:0b:48:af:8d:c5:ec:69:ea:c5:9a:0e:c6:ff:13:b8:ca:8c:b7:31:91:c2:89:2e:c6:b2:18:5e:7c:79:d5:b8:7e:72:3d:d8:1b:88:de:90:21:3d:22:69:32:60:88:99:d3:7c:2e:f1:77:da:8d:23:9d:89:98:3e:c4:45:94:bb:23:db:e5:04:02:71:f5:dd:bb:35:a9:2d:3b:be:f4:67:c7:70:97:98:f6:13:1a:5e:9a:9a:56:e6:78:f6:8c:0e:05:78:a9:63:3c:7b:bd:5d:75:58:23:d6:3c:99:00:d8:33:c7:87:c3:4f:d0:7c:d8:0f:3e:23:0d:77:64:ea:54:fe:b0:56:f4:e6:77:46:4d:9a:48:e9:85:0b:af:55:ab:5d:9c:6d:8a:df:5e:86:dc:dc:65:f2:43:f8:5b:e3:23:22:de:d7:cd:4b:69:ea:79:eb:1b:d9:ae:7f:1a:bc:4a:87:03:88:88:da:c9:70:29:67:cd:39:6a:ad:d7:23:10:77:59:60:25:d3:e2:44:7a:c2:96:c6:01:03:6b:b9:ec:3f:05:62:2e:5a:b1:ae:81:73:c1:f1:a8:7c:7f:cb:6d:2d:eb:46:3b:9e:64:31:a3:c3:6e:4f:99:5d:8e:83:94:38:c3:2f:39:ee:ac:5d:1b:13:36:62:35:c4:66:51:0f:29:da:ba:53:a1:1a:a6:1f:f5:e7:b4:4d:0e:81:ab:06:cc:19:9c:25:7e:68:30:d0:be:ef:3b:c4:2c:12:5c:73:d6:33:30:88:17:5f:b4:79:56:52:39:fc:6b:e7:9e:7e:31:ea:59:a2:8a:8e:45:59:bd:e4:b0:c7:35:31:66:13:37:66:e6:93:9b:72:c8:ac:6f:43:a6:78:ad:97:71:fb:55"
|
||||
}
|
||||
51
sdk/utils/utils.ts
Normal file
51
sdk/utils/utils.ts
Normal file
@@ -0,0 +1,51 @@
|
||||
import { ethers } from "ethers";
|
||||
import { getCurrentDateYYMMDD } from "../../common/src/utils/utils";
|
||||
import { REGISTER_ABI, REGISTER_CONTRACT_ADDRESS } from "../../common/src/constants/constants";
|
||||
import { derToBytes } from '../../common/src/utils/csca';
|
||||
import forge from 'node-forge'
|
||||
import { SKI_PEM, SKI_PEM_DEV } from './skiPem';
|
||||
|
||||
export function getCurrentDateFormatted() {
|
||||
return getCurrentDateYYMMDD().map(datePart => BigInt(datePart).toString());
|
||||
}
|
||||
|
||||
// OpenPassport2Step
|
||||
export async function checkMerkleRoot(rpcUrl: string, merkleRoot: number) {
|
||||
const provider = new ethers.JsonRpcProvider(rpcUrl);
|
||||
const contract = new ethers.Contract(REGISTER_CONTRACT_ADDRESS, REGISTER_ABI, provider);
|
||||
return await contract.checkRoot(merkleRoot);
|
||||
}
|
||||
|
||||
// OpenPassport1Step
|
||||
function getCSCAPem(formattedValueAdjusted: string, dev_mode: boolean): string {
|
||||
const skiPem = dev_mode ? { ...SKI_PEM, ...SKI_PEM_DEV } : SKI_PEM;
|
||||
const pem = skiPem[formattedValueAdjusted];
|
||||
return pem;
|
||||
}
|
||||
|
||||
export function verifyDSCValidity(dscCertificate: forge.pki.Certificate, dev_mode: boolean) {
|
||||
const authorityKeyIdentifierExt = dscCertificate.extensions.find(
|
||||
(ext) => ext.name === 'authorityKeyIdentifier'
|
||||
);
|
||||
const value = authorityKeyIdentifierExt.value;
|
||||
const byteArray = derToBytes(value);
|
||||
const formattedValue = byteArray.map(byte => byte.toString(16).padStart(2, '0')).join('');
|
||||
const formattedValueAdjusted = formattedValue.substring(8); // Remove the first '3016' from the formatted string
|
||||
const csca_pem = getCSCAPem(formattedValueAdjusted, dev_mode);
|
||||
const csca_certificate = forge.pki.certificateFromPem(csca_pem);
|
||||
try {
|
||||
const caStore = forge.pki.createCaStore([csca_certificate]);
|
||||
const verified = forge.pki.verifyCertificateChain(caStore, [dscCertificate]);
|
||||
if (!verified) {
|
||||
throw new Error('DSC certificate verification failed');
|
||||
}
|
||||
const currentDate = new Date();
|
||||
if (currentDate < dscCertificate.validity.notBefore || currentDate > dscCertificate.validity.notAfter) {
|
||||
throw new Error('DSC certificate is not within its validity period');
|
||||
}
|
||||
return true;
|
||||
} catch (error) {
|
||||
console.error('DSC certificate validation error:', error);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user