Merge pull request #147 from zk-passport/csca-sha1-rsapss

This commit is contained in:
turnoffthiscomputer
2024-07-14 18:59:49 +02:00
committed by GitHub
72 changed files with 3643 additions and 1738 deletions

52
.github/workflows/action.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
name: Proof of Passport CI/CD
on:
push:
branches:
- dev
- main
pull_request:
branches:
- dev
- main
jobs:
run_circuit_tests:
runs-on: ubuntu-latest
environment: development
steps:
- uses: actions/checkout@v3
# Circom installation from https://github.com/erhant/circomkit/blob/main/.github/workflows/tests.yml
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install --yes \
build-essential \
libgmp-dev \
libsodium-dev \
nasm \
nlohmann-json3-dev
- name: Set Node.js 18.x
uses: actions/setup-node@v3
with:
node-version: 18
- name: Setup Rust
uses: dtolnay/rust-toolchain@stable
- name: Download Circom Binary v2.1.8
run: |
wget -qO /home/runner/work/circom https://github.com/iden3/circom/releases/download/v2.1.8/circom-linux-amd64
chmod +x /home/runner/work/circom
sudo mv /home/runner/work/circom /bin/circom
- name: Print Circom version
run: circom --version
- name: Install Yarn dependencies
working-directory: ./circuits
run: yarn install-circuits --immutable
- name: Run Tests
working-directory: ./circuits
run: yarn test

View File

@@ -2,8 +2,8 @@ pragma circom 2.1.5;
include "circomlib/circuits/poseidon.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "./utils/isOlderThan.circom";
include "./utils/isValid.circom";
include "../utils/isOlderThan.circom";
include "../utils/isValid.circom";
include "binary-merkle-root.circom";
template Disclose(nLevels) {

View File

@@ -0,0 +1,75 @@
pragma circom 2.1.5;
include "circomlib/circuits/bitify.circom";
include "circomlib/circuits/poseidon.circom";
include "circomlib/circuits/comparators.circom";
include "binary-merkle-root.circom";
include "../utils/splitBytesToWords.circom";
include "../utils/splitSignalsToWords.circom";
include "../utils/Sha1Bytes.circom";
include "../utils/leafHasher.circom";
include "../utils/rsaPkcs1.circom";
template DSC_SHA1_RSA(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels ) {
signal input raw_dsc_cert[max_cert_bytes];
signal input raw_dsc_cert_padded_bytes;
signal input csca_modulus[k_csca];
signal input dsc_signature[k_csca];
signal input dsc_modulus[k_dsc];
signal input start_index;
signal input secret;
signal input merkle_root;
signal input path[nLevels];
signal input siblings[nLevels];
signal output blinded_dsc_commitment;
//verify the leaf
component leafHasher = LeafHasher(n_csca,k_csca);
leafHasher.in <== csca_modulus;
signal leaf <== leafHasher.out;
signal computed_merkle_root <== BinaryMerkleRoot(nLevels)(leaf, nLevels, path, siblings);
merkle_root === computed_merkle_root;
// variables verification
assert(max_cert_bytes % 64 == 0);
assert(n_csca * k_csca > max_cert_bytes);
assert(n_csca <= (255 \ 2));
// hash raw TBS certificate
signal sha[160] <== Sha1Bytes(max_cert_bytes)(raw_dsc_cert, raw_dsc_cert_padded_bytes);
component sstw_1 = SplitSignalsToWords(1,160, n_csca, k_csca);
for (var i = 0; i < 160; i++) {
sstw_1.in[i] <== sha[159 - i];
}
//verify RSA dsc_signature
component rsa = RSAVerify65537(n_csca, k_csca);
for (var i = 0; i < k_csca; i++) {
rsa.base_message[i] <== sstw_1.out[i];
rsa.modulus[i] <== csca_modulus[i];
rsa.signature[i] <== dsc_signature[i];
}
// verify DSC csca_modulus
component shiftLeft = VarShiftLeft(max_cert_bytes, dsc_mod_len);
shiftLeft.in <== raw_dsc_cert;
shiftLeft.shift <== start_index;
component spbt_1 = SplitBytesToWords(dsc_mod_len, n_dsc, k_dsc);
spbt_1.in <== shiftLeft.out;
for (var i = 0; i < k_dsc; i++) {
dsc_modulus[i] === spbt_1.out[i];
}
// generate blinded commitment
component sstw_2 = SplitSignalsToWords(n_dsc,k_dsc, 230, 9);
sstw_2.in <== dsc_modulus;
component poseidon = Poseidon(10);
poseidon.inputs[0] <== secret;
for (var i = 0; i < 9; i++) {
poseidon.inputs[i+1] <== sstw_2.out[i];
}
blinded_dsc_commitment <== poseidon.out;
}

View File

@@ -6,12 +6,12 @@ include "circomlib/circuits/comparators.circom";
include "@zk-email/circuits/lib/sha.circom";
include "@zk-email/circuits/lib/rsa.circom";
include "binary-merkle-root.circom";
include "./utils/splitBytesToWords.circom";
include "./utils/splitSignalsToWords.circom";
include "./utils/leafHasher.circom";
include "./utils/leafHasher2.circom";
include "../utils/splitBytesToWords.circom";
include "../utils/splitSignalsToWords.circom";
include "../utils/leafHasher.circom";
include "../utils/leafHasher.circom";
template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels ) {
template DSC_SHA256_RSA(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels ) {
signal input raw_dsc_cert[max_cert_bytes];
signal input raw_dsc_cert_padded_bytes;
signal input csca_modulus[k_csca];
@@ -26,13 +26,9 @@ template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels
signal output blinded_dsc_commitment;
// verify the leaf
// component leafHasher = LeafHasher(k_csca);
// leafHasher.in <== csca_modulus;
// signal leaf <== leafHasher.out;
component leafHasher2 = LeafHasher2(n_csca,k_csca);
leafHasher2.in <== csca_modulus;
signal leaf <== leafHasher2.out;
component leafHasher = LeafHasher(n_csca,k_csca);
leafHasher.in <== csca_modulus;
signal leaf <== leafHasher.out;
signal computed_merkle_root <== BinaryMerkleRoot(nLevels)(leaf, nLevels, path, siblings);
@@ -45,31 +41,16 @@ template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels
// hash raw TBS certificate
signal sha[256] <== Sha256Bytes(max_cert_bytes)(raw_dsc_cert, raw_dsc_cert_padded_bytes);
var msg_len = (256+n_csca)\n_csca;
component base_msg[msg_len];
for (var i = 0; i < msg_len; i++) {
base_msg[i] = Bits2Num(n_csca);
}
component sstw_1 = SplitSignalsToWords(1,256, n_csca, k_csca);
for (var i = 0; i < 256; i++) {
base_msg[i\n_csca].in[i%n_csca] <== sha[255 - i];
}
for (var i = 256; i < n_csca*msg_len; i++) {
base_msg[i\n_csca].in[i%n_csca] <== 0;
sstw_1.in[i] <== sha[255 - i];
}
// verify RSA dsc_signature
component rsa = RSAVerifier65537(n_csca, k_csca);
for (var i = 0; i < msg_len; i++) {
rsa.message[i] <== base_msg[i].out;
}
for (var i = msg_len; i < k_csca; i++) {
rsa.message[i] <== 0;
}
for (var i = 0; i < k_csca; i++) {
rsa.message[i] <== sstw_1.out[i];
rsa.modulus[i] <== csca_modulus[i];
}
for (var i = 0; i < k_csca; i++) {
rsa.signature[i] <== dsc_signature[i];
}
@@ -83,12 +64,12 @@ template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels
dsc_modulus[i] === spbt_1.out[i];
}
// generate blinded commitment
component spbt_2 = SplitSignalsToWords(n_dsc,k_dsc, 230, 9);
spbt_2.in <== dsc_modulus;
component sstw_2 = SplitSignalsToWords(n_dsc,k_dsc, 230, 9);
sstw_2.in <== dsc_modulus;
component poseidon = Poseidon(10);
poseidon.inputs[0] <== secret;
for (var i = 0; i < 9; i++) {
poseidon.inputs[i+1] <== spbt_2.out[i];
poseidon.inputs[i+1] <== sstw_2.out[i];
}
blinded_dsc_commitment <== poseidon.out;
}

View File

@@ -4,12 +4,14 @@ include "circomlib/circuits/bitify.circom";
include "circomlib/circuits/poseidon.circom";
include "circomlib/circuits/comparators.circom";
include "@zk-email/circuits/lib/sha.circom";
include "./utils/RSASSAPSS_padded.circom";
include "binary-merkle-root.circom";
include "./utils/splitBytesToWords.circom";
include "./utils/splitSignalsToWords.circom";
include "../utils/splitBytesToWords.circom";
include "../utils/splitSignalsToWords.circom";
include "../utils/RSASSAPSS_padded.circom";
include "../utils/leafHasher.circom";
template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels ) {
template DSC_SHA256_RSAPSS(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels ) {
signal input raw_dsc_cert[max_cert_bytes];
signal input raw_dsc_cert_padded_bytes;
signal input csca_modulus[k_csca];
@@ -25,33 +27,19 @@ template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels
signal output blinded_dsc_commitment;
// verify the leaf
component leafHasher = LeafHasher(n_csca,k_csca);
leafHasher.in <== csca_modulus;
signal leaf <== leafHasher.out;
// component poseidon16first = Poseidon(16);
// component poseidon16next = Poseidon(16);
// component poseidon2last = Poseidon(2);
// component poseidonfinal = Poseidon(3);
// for (var i = 0; i < 16; i++) {
// poseidon16first.inputs[i] <== csca_modulus[i];
// poseidon16next.inputs[i] <== csca_modulus[i+16];
// }
// poseidon2last.inputs[0] <== csca_modulus[32];
// poseidon2last.inputs[1] <== csca_modulus[33];
// poseidonfinal.inputs[0] <== poseidon16first.out;
// poseidonfinal.inputs[1] <== poseidon16next.out;
// poseidonfinal.inputs[2] <== poseidon2last.out;
// signal leaf <== poseidonfinal.out;
// signal computed_merkle_root <== BinaryMerkleRoot(nLevels)(leaf, nLevels, path, siblings);
// merkle_root === computed_merkle_root;
signal computed_merkle_root <== BinaryMerkleRoot(nLevels)(leaf, nLevels, path, siblings);
merkle_root === computed_merkle_root;
// variables verification
assert(max_cert_bytes % 64 == 0);
assert(n_csca * k_csca > max_cert_bytes);
assert(n_csca <= (255 \ 2));
// decode signature to get encoded message
// decode signature to get encoded message
component rsaDecode = RSASSAPSS_Decode(n_csca, k_csca);
rsaDecode.signature <== dsc_signature;
rsaDecode.modulus <== csca_modulus;
@@ -73,12 +61,12 @@ template DSC(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels
dsc_modulus[i] === spbt_1.out[i];
}
// generate blinded commitment
component spbt_2 = SplitSignalsToWords(n_dsc,k_dsc, 230, 9);
spbt_2.in <== dsc_modulus;
component sstw_1 = SplitSignalsToWords(n_dsc,k_dsc, 230, 9);
sstw_1.in <== dsc_modulus;
component poseidon = Poseidon(10);
poseidon.inputs[0] <== secret;
for (var i = 0; i < 9; i++) {
poseidon.inputs[i+1] <== spbt_2.out[i];
poseidon.inputs[i+1] <== sstw_1.out[i];
}
blinded_dsc_commitment <== poseidon.out;
}

View File

@@ -1,112 +0,0 @@
pragma circom 2.1.5;
include "circomlib/circuits/bitify.circom";
include "circomlib/circuits/poseidon.circom";
include "circomlib/circuits/comparators.circom";
include "@zk-email/circuits/lib/rsa.circom";
include "binary-merkle-root.circom";
include "./utils/splitBytesToWords.circom";
include "./utils/splitSignalsToWords.circom";
include "./utils/Sha1Bytes.circom";
template DSC_sha1WithRSAEncryption(max_cert_bytes, n_dsc, k_dsc, n_csca, k_csca, dsc_mod_len, nLevels ) {
signal input raw_dsc_cert[max_cert_bytes];
signal input raw_dsc_cert_padded_bytes;
signal input csca_modulus[k_csca];
signal input dsc_signature[k_csca];
signal input dsc_modulus[k_dsc];
signal input start_index;
signal input secret;
signal input merkle_root;
signal input path[nLevels];
signal input siblings[nLevels];
signal output blinded_dsc_commitment;
verify the leaf
component poseidon16first = Poseidon(16);
component poseidon16next = Poseidon(16);
component poseidon2last = Poseidon(2);
component poseidonfinal = Poseidon(3);
for (var i = 0; i < 16; i++) {
poseidon16first.inputs[i] <== csca_modulus[i];
poseidon16next.inputs[i] <== csca_modulus[i+16];
}
poseidon2last.inputs[0] <== csca_modulus[32];
poseidon2last.inputs[1] <== csca_modulus[33];
poseidonfinal.inputs[0] <== poseidon16first.out;
poseidonfinal.inputs[1] <== poseidon16next.out;
poseidonfinal.inputs[2] <== poseidon2last.out;
signal leaf <== poseidonfinal.out;
signal computed_merkle_root <== BinaryMerkleRoot(nLevels)(leaf, nLevels, path, siblings);
merkle_root === computed_merkle_root;
// variables verification
assert(max_cert_bytes % 64 == 0);
assert(n_csca * k_csca > max_cert_bytes);
assert(n_csca <= (255 \ 2));
// hash raw TBS certificate
signal sha[160] <== Sha1Bytes(max_cert_bytes)(raw_dsc_cert, raw_dsc_cert_padded_bytes);
component b2n = Bits2Num(160);
for (var i = 0; i < 160; i++) {
b2n.in[i] <== sha[159-i];
}
signal sha_bigint <== b2n.out;
log("sha_bigint", sha_bigint);
var msg_len = (160 + n_csca)\n_csca;
log("msg_len", msg_len);
component base_msg[msg_len];
for (var i = 0; i < msg_len; i++) {
base_msg[i] = Bits2Num(n_csca);
}
for (var i = 0; i < 160; i++) {
base_msg[i\n_csca].in[i%n_csca] <== sha[160 - 1 - i];
}
for (var i = 160; i < n_csca*msg_len; i++) {
base_msg[i\n_csca].in[i%n_csca] <== 0;
}
//verify RSA dsc_signature
component rsa = RSAVerifier65537(n_csca, k_csca);
for (var i = 0; i < msg_len; i++) {
rsa.message[i] <== base_msg[i].out;
}
for (var i = msg_len; i < k_csca; i++) {
rsa.message[i] <== 0;
}
for (var i = 0; i < k_csca; i++) {
rsa.modulus[i] <== csca_modulus[i];
}
for (var i = 0; i < k_csca; i++) {
rsa.signature[i] <== dsc_signature[i];
}
// verify DSC csca_modulus
component shiftLeft = VarShiftLeft(max_cert_bytes, dsc_mod_len);
shiftLeft.in <== raw_dsc_cert;
shiftLeft.shift <== start_index;
component spbt_1 = SplitBytesToWords(dsc_mod_len, n_dsc, k_dsc);
spbt_1.in <== shiftLeft.out;
for (var i = 0; i < k_dsc; i++) {
dsc_modulus[i] === spbt_1.out[i];
}
// generate blinded commitment
component spbt_2 = SplitSignalsToWords(n_dsc,k_dsc, 230, 9);
spbt_2.in <== dsc_modulus;
component poseidon = Poseidon(10);
poseidon.inputs[0] <== secret;
for (var i = 0; i < 9; i++) {
poseidon.inputs[i+1] <== spbt_2.out[i];
}
blinded_dsc_commitment <== poseidon.out;
}

View File

@@ -2,9 +2,9 @@ pragma circom 2.1.5;
include "circomlib/circuits/poseidon.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "./passport_verifier_sha1WithRSAEncryption_65537.circom";
include "./verifier/passport_verifier_sha1WithRSAEncryption_65537.circom";
include "binary-merkle-root.circom";
include "./utils/splitSignalsToWords.circom";
include "../utils/splitSignalsToWords.circom";
template Register_sha1WithRSAEncryption_65537(n, k, max_datahashes_bytes, nLevels, signatureAlgorithm) {
signal input secret;

View File

@@ -2,9 +2,9 @@ pragma circom 2.1.5;
include "circomlib/circuits/poseidon.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "./passport_verifier_sha256WithRSAEncryption_65537.circom";
include "./verifier/passport_verifier_sha256WithRSAEncryption_65537.circom";
include "binary-merkle-root.circom";
include "./utils/splitSignalsToWords.circom";
include "../utils/splitSignalsToWords.circom";
template Register_sha256WithRSAEncryption_65537(n, k, max_datahashes_bytes, nLevels, signatureAlgorithm) {
signal input secret;

View File

@@ -2,9 +2,9 @@ pragma circom 2.1.5;
include "circomlib/circuits/poseidon.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "./passport_verifier_sha256WithRSASSAPSS_65537.circom";
include "./verifier/passport_verifier_sha256WithRSASSAPSS_65537.circom";
include "binary-merkle-root.circom";
include "./utils/splitSignalsToWords.circom";
include "../utils/splitSignalsToWords.circom";
template register_sha256WithRSASSAPSS_65537(n, k, max_datahashes_bytes, nLevels, signatureAlgorithm) {
signal input secret;

View File

@@ -2,9 +2,9 @@ pragma circom 2.1.5;
include "circomlib/circuits/poseidon.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "./passport_verifier_sha256WithRSASSAPSS_65537.circom";
include "./utils/chunk_data.circom";
include "./utils/compute_pubkey_leaf.circom";
include "./verifier/passport_verifier_sha256WithRSASSAPSS_65537.circom";
include "../utils/chunk_data.circom";
include "../utils/compute_pubkey_leaf.circom";
include "binary-merkle-root.circom";
template register_sha256WithRSASSAPSS_65537(n, k, max_datahashes_bytes, nLevels, signatureAlgorithm) {

View File

@@ -1,9 +1,9 @@
pragma circom 2.1.5;
include "./utils/rsaPkcs1.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "./utils/Sha1BytesStatic.circom";
include "./utils/Sha1Bytes.circom";
include "../../utils/Sha1BytesStatic.circom";
include "../../utils/Sha1Bytes.circom";
include "../../utils/rsaPkcs1.circom";
include "dmpierre/sha1-circom/circuits/sha1.circom";
template PassportVerifier_sha1WithRSAEncryption_65537(n, k, max_datahashes_bytes) {

View File

@@ -4,7 +4,7 @@ include "@zk-email/circuits/lib/rsa.circom";
include "@zk-email/circuits/utils/bytes.circom";
include "@zk-email/circuits/lib/sha.circom";
include "@zk-email/circuits/utils/array.circom";
include "./utils/Sha256BytesStatic.circom";
include "../../utils/Sha256BytesStatic.circom";
template PassportVerifier_sha256WithRSAEncryption_65537(n, k, max_datahashes_bytes) {
var hashLen = 32;

View File

@@ -4,8 +4,8 @@ pragma circom 2.1.5;
include "@zk-email/circuits/utils/bytes.circom";
include "@zk-email/circuits/lib/sha.circom";
include "@zk-email/circuits/utils/array.circom";
include "./utils/Sha256BytesStatic.circom";
include "./utils/RSASSAPSS.circom";
include "../../utils/Sha256BytesStatic.circom";
include "../../utils/RSASSAPSS.circom";
include "@zk-email/circuits/lib/fp.circom";
template PassportVerifier_sha256WithRSASSAPSS_65537(n, k, max_datahashes_bytes) {

View File

@@ -1,5 +0,0 @@
pragma circom 2.1.6;
include "../../dsc_sha1WithRSAEncryption.circom";
component main { public [ merkle_root ] } = DSC_sha1WithRSAEncryption(1664,121 ,17 ,121, 17, 256, 12);

View File

@@ -1,5 +0,0 @@
pragma circom 2.1.6;
include "../../dsc.circom";
component main { public [ merkle_root ] } = DSC(1664,64 ,32 ,64, 32, 256, 12);

View File

@@ -1,5 +0,0 @@
pragma circom 2.1.6;
include "../../dsc_sha256WithRSASSAPSS.circom";
component main { public [ merkle_root ] } = DSC(1664,64 ,32 ,64, 32, 256, 12);

View File

@@ -0,0 +1,5 @@
pragma circom 2.1.6;
include "../../dsc/dsc_sha1_rsa.circom";
component main { public [ merkle_root ] } = DSC_SHA1_RSA(960,121 ,17 ,121, 17, 256, 12);

View File

@@ -0,0 +1,5 @@
pragma circom 2.1.6;
include "../../dsc/dsc_sha256_rsa.circom";
component main { public [ merkle_root ] } = DSC_SHA256_RSA(960,121 ,17 ,121, 17, 256, 12);

View File

@@ -0,0 +1,5 @@
pragma circom 2.1.6;
include "../../dsc/dsc_sha256_rsapss.circom";
component main { public [ merkle_root ] } = DSC_SHA256_RSAPSS(960,64 ,32 ,64, 32, 256, 12);

View File

@@ -1,6 +1,6 @@
pragma circom 2.1.6;
include "../utils/isOlderThan.circom";
include "../../utils/isOlderThan.circom";
template isOlderThan_tester() {

View File

@@ -1,6 +1,6 @@
pragma circom 2.1.6;
include "../utils/IsValid.circom";
include "../../utils/isValid.circom";
template IsValid_tester() {

View File

@@ -1,5 +1,5 @@
pragma circom 2.1.6;
include "../utils/leafHasher.circom";
include "../../utils/leafHasher.circom";
component main = LeafHasher(32);

View File

@@ -0,0 +1,3 @@
include "@zk-email/circuits/lib/rsa.circom";
component main = RSAVerifier65537(64, 32);

View File

@@ -2,25 +2,23 @@ pragma circom 2.1.6;
include "circomlib/circuits/poseidon.circom";
template LeafHasher (k) {
template LeafHasher (n,k) {
signal input in[k];
signal output out;
component splitSignalsToWords = SplitSignalsToWords(n,k,64,64);
splitSignalsToWords.in <== in;
component hash[4];
for (var i = 0; i < 4 ; i ++){
hash[i] = Poseidon(16);
}
for (var i = 0; i < 64 ; i ++){
if (i < k ){
hash[ i % 4 ].inputs[ i \ 4 ] <== in[i];
}
else{
hash[ i % 4 ].inputs[ i \ 4 ] <== 0;
}
hash[ i % 4 ].inputs[ i \ 4 ] <== splitSignalsToWords.out[i];
}
component finalHash = Poseidon(4);
for (var i = 0 ; i < 4 ; i++){
finalHash.inputs[i] <== hash[i].out;
}
log(finalHash.out);
out <== finalHash.out;
}

View File

@@ -2,24 +2,20 @@ pragma circom 2.1.6;
include "circomlib/circuits/poseidon.circom";
template LeafHasher2 (n,k) {
template LeafHasher (k) {
signal input in[k];
signal output out;
component splitSignalsToWords = SplitSignalsToWords(n,k,64,64);
splitSignalsToWords.in <== in;
component hash[4];
for (var i = 0; i < 4 ; i ++){
hash[i] = Poseidon(16);
}
for (var i = 0; i < 64 ; i ++){
// if (i < k ){
hash[ i % 4 ].inputs[ i \ 4 ] <== splitSignalsToWords.out[i];
// }
// else{
// hash[ i % 4 ].inputs[ i \ 4 ] <== 0;
// }
if (i < k ){
hash[ i % 4 ].inputs[ i \ 4 ] <== in[i];
}
else{
hash[ i % 4 ].inputs[ i \ 4 ] <== 0;
}
}
component finalHash = Poseidon(4);
for (var i = 0 ; i < 4 ; i++){

View File

@@ -4,7 +4,7 @@
"author": "",
"license": "MIT",
"scripts": {
"test": "yarn ts-mocha test/**/*.test.ts --exit",
"test": "yarn ts-mocha tests/**/*.test.ts --exit",
"install-circuits": "cd ../common && yarn && cd ../circuits && yarn"
},
"dependencies": {
@@ -18,6 +18,8 @@
"@zk-kit/circuits": "^1.0.0-beta",
"@zk-kit/imt": "https://gitpkg.now.sh/0xturboblitz/zk-kit/packages/imt?6d417675",
"@zk-kit/lean-imt": "^2.0.1",
"asn1": "^0.2.6",
"asn1js": "^3.0.5",
"chai-as-promised": "^7.1.1",
"circom_tester": "github:Atomic-Buy/circom_tester#main",
"circomlib": "^2.0.5",
@@ -26,7 +28,8 @@
"elliptic": "^6.5.5",
"js-sha256": "^0.10.1",
"jsrsasign": "^11.1.0",
"node-forge": "^1.3.1",
"modpow": "^1.0.0",
"node-forge": "https://github.com/remicolin/forge",
"poseidon-lite": "^0.2.0",
"snarkjs": "^0.7.1",
"typescript": "^5.3.3"
@@ -40,4 +43,4 @@
"ts-mocha": "^10.0.0",
"ts-node": "^10.9.2"
}
}
}

View File

@@ -4,10 +4,11 @@ source "scripts/download_ptau.sh"
build_circuit() {
local CIRCUIT_NAME=$1
local CIRCUIT_TYPE=$2
local START_TIME=$(date +%s)
echo "compiling circuit: $CIRCUIT_NAME"
circom circuits/${CIRCUIT_NAME}.circom -l node_modules -l ./node_modules/@zk-kit/binary-merkle-root.circom/src -l ./node_modules/circomlib/circuits --r1cs --O1 --wasm -c --output build
circom circuits/${CIRCUIT_TYPE}/${CIRCUIT_NAME}.circom -l node_modules -l ./node_modules/@zk-kit/binary-merkle-root.circom/src -l ./node_modules/circomlib/circuits --r1cs --O1 --wasm -c --output build
echo "building zkey"
yarn snarkjs groth16 setup build/${CIRCUIT_NAME}.r1cs build/powersOfTau28_hez_final_20.ptau build/${CIRCUIT_NAME}.zkey
@@ -27,11 +28,23 @@ build_circuit() {
echo "Size of ${CIRCUIT_NAME}_final.zkey: $(wc -c <build/${CIRCUIT_NAME}_final.zkey) bytes"
}
#declare -a CIRCUITS=("register_sha256WithRSAEncryption_65537" "register_sha1WithRSAEncryption_65537" "register_sha256WithRSAEncryption_65537" "disclose")
declare -a CIRCUITS=("register_sha256WithRSAEncryption_65537")
# Define circuits and their types
# name:folder:build_flag
# set build_flag to false if you want to skip the build
CIRCUITS=(
"register_sha256WithRSAEncryption_65537:register:true"
"register_sha1WithRSAEncryption_65537:register:true"
"disclose:disclose:true"
)
TOTAL_START_TIME=$(date +%s)
for CIRCUIT_NAME in "${CIRCUITS[@]}"; do
build_circuit "$CIRCUIT_NAME"
for circuit in "${CIRCUITS[@]}"; do
IFS=':' read -r CIRCUIT_NAME CIRCUIT_TYPE BUILD_FLAG <<< "$circuit"
if [ "$BUILD_FLAG" = "true" ]; then
echo "Debug: Building circuit $CIRCUIT_NAME of type $CIRCUIT_TYPE"
build_circuit "$CIRCUIT_NAME" "$CIRCUIT_TYPE"
else
echo "Skipping build for $CIRCUIT_NAME"
fi
done
echo "Total completed in $(($(date +%s) - TOTAL_START_TIME)) seconds"

View File

@@ -1,49 +0,0 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { splitToWords } from '../../common/src/utils/utils';
import { sha256Pad } from '../../common/src/utils/shaPad';
import { findStartIndex, getCSCAInputs } from '../../common/src/utils/csca';
describe('DSC chain certificate', function () {
this.timeout(0); // Disable timeout
let circuit;
const n_dsc = 121;
const k_dsc = 17;
const n_csca = 121;
const k_csca = 17;
const max_cert_bytes = 1664;
const dsc = fs.readFileSync('../common/src/mock_certificates/sha1_rsa_2048/mock_dsc.crt', 'utf8');
const csca = fs.readFileSync('../common/src/mock_certificates/sha1_rsa_2048/mock_csca.crt', 'utf8');
const dscCert = forge.pki.certificateFromPem(dsc);
const cscaCert = forge.pki.certificateFromPem(csca);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
console.log("inputs:", inputs);
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/certificates/dsc_sha1_rsa_2048.circom'),
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
console.log("Inputs:", inputs);
const witness = await circuit.calculateWitness(inputs, true);
console.log(witness);
})
})

View File

@@ -1,95 +0,0 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { splitToWords } from '../../common/src/utils/utils';
import { sha256Pad } from '../../common/src/utils/shaPad';
import { computeLeafFromModulus, findStartIndex, getCSCAInputs } from '../../common/src/utils/cscasha1';
describe('DSC chain certificate', function () {
this.timeout(0); // Disable timeout
let circuit;
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/sha1_rsa_4096/mock_dsc.crt', 'utf8');
const csca = fs.readFileSync('../common/src/mock_certificates/sha1_rsa_4096/mock_csca.crt', 'utf8');
const dscCert = forge.pki.certificateFromPem(dsc);
const cscaCert = forge.pki.certificateFromPem(csca);
console.log('DSC Issuer:', dscCert.issuer.getField('CN').value);
console.log('CSCA Subject:', cscaCert.subject.getField('CN').value);
console.log('TBS Certificate length:', forge.asn1.toDer(dscCert.tbsCertificate).getBytes().length);
console.log('DSC Signature length:', dscCert.signature.length);
console.log('CSCA Public Key length:', cscaCert.publicKey.n.toString(16).length * 4);
describe('DSC chain certificate', () => {
describe('DSC chain certificate', () => {
it('should verify that the DSC is signed by the CSCA', () => {
// Method 1: Using verifyCertificateChain
const caStore = forge.pki.createCaStore([cscaCert]);
try {
const verified = forge.pki.verifyCertificateChain(caStore, [dscCert]);
console.log('Certificate chain verified:', verified);
expect(verified).to.be.true;
} catch (error) {
console.error('Certificate chain verification failed:', error);
throw error;
}
// Method 2: Manual verification
const tbsCertificate = forge.asn1.toDer(dscCert.tbsCertificate).getBytes();
const signature = dscCert.signature;
const md = forge.md.sha1.create();
md.update(tbsCertificate, 'raw');
const publicKey = cscaCert.publicKey;
const digestBytes = md.digest().getBytes();
const digestBigInt = BigInt('0x' + Buffer.from(digestBytes, 'binary').toString('hex'));
console.log('Digest as BigInt:', digestBigInt);
try {
const verified = publicKey.verify(md.digest().getBytes(), signature);
console.log('Manual signature verification:', verified);
expect(verified).to.be.true;
} catch (error) {
console.error('Manual signature verification failed:', error);
throw error;
}
});
});
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
//console.log("inputs:", JSON.stringify(inputs, null, 2));
fs.writeFileSync('inputs.json', JSON.stringify(inputs, null, 2));
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/certificates/dsc_sha1_rsa_4096.circom'),
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
//console.log("Inputs:", inputs);
const witness = await circuit.calculateWitness(inputs, true);
const blinded_dsc_commitment = (await circuit.getOutput(witness, ["blinded_dsc_commitment"])).blinded_dsc_commitment;
console.log("blinded_dsc_commitment", blinded_dsc_commitment)
})
});
});

View File

@@ -1,63 +0,0 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { splitToWords } from '../../common/src/utils/utils';
import { sha256Pad } from '../../common/src/utils/shaPad';
import { findStartIndex, getCSCAInputs } from '../../common/src/utils/csca';
describe('DSC chain certificate', function () {
this.timeout(0); // Disable timeout
let circuit;
const n_dsc = 64;
const k_dsc = 32;
const n_csca = 64;
const k_csca = 32;
const max_cert_bytes = 1664;
const dsc = fs.readFileSync('../common/src/mock_certificates/sha256_rsa_2048/mock_dsc.crt', 'utf8');
const csca = fs.readFileSync('../common/src/mock_certificates/sha256_rsa_2048/mock_csca.crt', 'utf8');
const dscCert = forge.pki.certificateFromPem(dsc);
const cscaCert = forge.pki.certificateFromPem(csca);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
console.log("inputs:", inputs);
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/certificates/dsc_sha256_rsa_2048.circom'),
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/certificates/dsc_sha256_rsa_2048.circom'),
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
console.log("Inputs:", inputs);
const witness = await circuit.calculateWitness(inputs, true);
console.log(witness);
})
})

View File

@@ -1,49 +0,0 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { getCSCAInputs } from '../../common/src/utils/csca';
describe('DSC chain certificate', function () {
this.timeout(0); // Disable timeout
let circuit;
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.crt', 'utf8');
const csca = fs.readFileSync('../common/src/mock_certificates/sha256_rsa_4096/mock_csca.crt', 'utf8');
const dscCert = forge.pki.certificateFromPem(dsc);
const cscaCert = forge.pki.certificateFromPem(csca);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
console.log("inputs:", JSON.stringify(inputs, null, 2));
fs.writeFileSync('inputs.json', JSON.stringify(inputs, null, 2));
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/certificates/dsc_sha256_rsa_4096.circom'),
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
// it('should compile and load the circuit', () => {
// expect(circuit).to.not.be.undefined;
// })
it('should compute the correct output', async () => {
//console.log("Inputs:", inputs);
const witness = await circuit.calculateWitness(inputs, true);
const blinded_dsc_commitment = (await circuit.getOutput(witness, ["blinded_dsc_commitment"])).blinded_dsc_commitment;
console.log("blinded_dsc_commitment", blinded_dsc_commitment)
})
})

View File

@@ -1,54 +0,0 @@
import { assert, expect } from 'chai'
import fs from 'fs'
import jsrsasign from 'jsrsasign';
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { splitToWords } from '../../common/src/utils/utils';
import { sha256Pad } from '../../common/src/utils/shaPad';
import { findStartIndex, getCSCAInputs } from '../../common/src/utils/csca';
import { readCertificate } from '../../common/src/utils/certificates';
describe('DSC chain certificate', function () {
this.timeout(0); // Disable timeout
let circuit;
const n_dsc = 64;
const k_dsc = 32;
const n_csca = 64;
const k_csca = 32;
const max_cert_bytes = 1664;
const dsc_path = path.join(__dirname, '../../common/src/mock_certificates/sha256_rsapss_2048/mock_dsc.pem');
const csca_path = path.join(__dirname, '../../common/src/mock_certificates/sha256_rsapss_2048/mock_csca.pem');
const dscCert = readCertificate(dsc_path);
const cscaCert = readCertificate(csca_path);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
console.log("inputs:", inputs);
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/certificates/dsc_sha256_rsapss_2048.circom'),
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
console.log("Inputs:", inputs);
const witness = await circuit.calculateWitness(inputs, true);
console.log(witness);
})
})

View File

@@ -1,26 +1,27 @@
import { assert, expect } from 'chai'
import path from "path";
const wasm_tester = require("circom_tester").wasm;
import { mockPassportData_sha256WithRSAEncryption_65537 } from '../../common/src/utils/mockPassportData';
import { formatMrz, packBytes } from '../../common/src/utils/utils';
import { attributeToPosition, COMMITMENT_TREE_DEPTH } from "../../common/src/constants/constants";
import { mockPassportData_sha256_rsa_65537 } from '../../../common/src/constants/mockPassportData';
import { formatMrz, packBytes } from '../../../common/src/utils/utils';
import { attributeToPosition, COMMITMENT_TREE_DEPTH } from "../../../common/src/constants/constants";
import { poseidon1, poseidon2, poseidon6 } from "poseidon-lite";
import { LeanIMT } from "@zk-kit/lean-imt";
import { getLeaf } from '../../common/src/utils/pubkeyTree';
import { generateCircuitInputsDisclose } from '../../common/src/utils/generateInputs';
import { unpackReveal } from '../../common/src/utils/revealBitmap';
import { getLeaf } from '../../../common/src/utils/pubkeyTree';
import { generateCircuitInputsDisclose } from '../../../common/src/utils/generateInputs';
import { unpackReveal } from '../../../common/src/utils/revealBitmap';
describe("start testing disclose.circom", function () {
describe("Disclose", function () {
this.timeout(0);
let inputs: any;
let circuit: any;
let w: any;
let passportData = mockPassportData_sha256WithRSAEncryption_65537;
let passportData = mockPassportData_sha256_rsa_65537;
let attestation_id: string;
let tree: any;
const attestation_name = "E-PASSPORT";
before(async () => {
circuit = await wasm_tester(path.join(__dirname, "../circuits/disclose.circom"),
circuit = await wasm_tester(path.join(__dirname, "../../circuits/disclose/disclose.circom"),
{
include: [
"node_modules",
@@ -31,7 +32,6 @@ describe("start testing disclose.circom", function () {
);
const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
const attestation_name = "E-PASSPORT";
attestation_id = poseidon1([
BigInt(Buffer.from(attestation_name).readUIntBE(0, 6))
]).toString();
@@ -82,8 +82,8 @@ describe("start testing disclose.circom", function () {
const nullifier_js = poseidon2([inputs.secret, inputs.scope]).toString();
const nullifier_circom = (await circuit.getOutput(w, ["nullifier"])).nullifier;
console.log("nullifier_circom", nullifier_circom);
console.log("nullifier_js", nullifier_js);
//console.log("nullifier_circom", nullifier_circom);
//console.log("nullifier_js", nullifier_js);
expect(nullifier_circom).to.equal(nullifier_js);
});
@@ -174,7 +174,7 @@ describe("start testing disclose.circom", function () {
const revealedData_packed = await circuit.getOutput(w, ["revealedData_packed[3]"])
const reveal_unpacked = unpackReveal(revealedData_packed);
console.log("reveal_unpacked", reveal_unpacked)
//console.log("reveal_unpacked", reveal_unpacked)
expect(reveal_unpacked[88]).to.equal("1");
expect(reveal_unpacked[89]).to.equal("8");
@@ -194,7 +194,7 @@ describe("start testing disclose.circom", function () {
const revealedData_packed = await circuit.getOutput(w, ["revealedData_packed[3]"])
const reveal_unpacked = unpackReveal(revealedData_packed);
console.log("reveal_unpacked", reveal_unpacked)
//console.log("reveal_unpacked", reveal_unpacked)
expect(reveal_unpacked[88]).to.equal("\x00");
expect(reveal_unpacked[89]).to.equal("\x00");

View File

@@ -0,0 +1,57 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { getCSCAInputs } from '../../../common/src/utils/csca';
import { mock_dsc_sha1_rsa_2048, mock_csca_sha1_rsa_2048 } from '../../../common/src/constants/mockCertificates';
describe('DSC chain certificate - SHA1 RSA', function () {
this.timeout(0); // Disable timeout
let circuit;
const n_dsc = 121;
const k_dsc = 17;
const n_csca = 121;
const k_csca = 17;
const max_cert_bytes = 960;
const dscCert = forge.pki.certificateFromPem(mock_dsc_sha1_rsa_2048);
const cscaCert = forge.pki.certificateFromPem(mock_csca_sha1_rsa_2048);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
before(async () => {
const circuitPath = path.resolve(__dirname, '../../circuits/tests/dsc/dsc_sha1_rsa_2048.circom');
circuit = await wasm_tester(
circuitPath,
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
it('verify dsc has been signed by the csca', () => {
const tbsCertAsn1 = forge.pki.getTBSCertificate(dscCert);
const tbsCertDer = forge.asn1.toDer(tbsCertAsn1).getBytes();
const md = forge.md.sha1.create();
md.update(tbsCertDer);
const tbsHash = md.digest().getBytes();
const signature = dscCert.signature;
const cscaCert = forge.pki.certificateFromPem(mock_csca_sha1_rsa_2048);
const publicKey = cscaCert.publicKey;
const verified = publicKey.verify(tbsHash, signature);
expect(verified).to.be.true;
})
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
const witness = await circuit.calculateWitness(inputs, true);
})
})

View File

@@ -0,0 +1,56 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { getCSCAInputs } from '../../../common/src/utils/csca';
import { mock_dsc_sha256_rsa_2048, mock_csca_sha256_rsa_2048 } from '../../../common/src/constants/mockCertificates';
describe('DSC chain certificate - SHA256 RSA', function () {
this.timeout(0); // Disable timeout
let circuit;
const n_dsc = 121;
const k_dsc = 17;
const n_csca = 121;
const k_csca = 17;
const max_cert_bytes = 960;
const dscCert = forge.pki.certificateFromPem(mock_dsc_sha256_rsa_2048);
const cscaCert = forge.pki.certificateFromPem(mock_csca_sha256_rsa_2048);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
before(async () => {
const circuitPath = path.resolve(__dirname, '../../circuits/tests/dsc/dsc_sha256_rsa_2048.circom');
circuit = await wasm_tester(
circuitPath,
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
it('verify dsc has been signed by the csca', () => {
const tbsCertAsn1 = forge.pki.getTBSCertificate(dscCert);
const tbsCertDer = forge.asn1.toDer(tbsCertAsn1).getBytes();
const md = forge.md.sha256.create();
md.update(tbsCertDer);
const tbsHash = md.digest().getBytes();
const signature = dscCert.signature;
const publicKey = cscaCert.publicKey;
const verified = publicKey.verify(tbsHash, signature);
expect(verified).to.be.true;
})
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
const witness = await circuit.calculateWitness(inputs, true);
})
})

View File

@@ -0,0 +1,87 @@
import { assert, expect } from 'chai'
import fs from 'fs'
const forge = require('node-forge');
import path from 'path';
const wasm_tester = require("circom_tester").wasm;
import { getCSCAInputs } from '../../../common/src/utils/csca';
import crypto from 'crypto';
import { mock_dsc_sha256_rsapss_2048, mock_csca_sha256_rsapss_2048 } from '../../../common/src/constants/mockCertificates';
describe('DSC chain certificate - SHA256 RSA-PSS', function () {
this.timeout(0); // Disable timeout
let circuit;
const n_dsc = 64;
const k_dsc = 32;
const n_csca = 64;
const k_csca = 32;
const max_cert_bytes = 960;
const dscCert = forge.pki.certificateFromPem(mock_dsc_sha256_rsapss_2048);
const cscaCert = forge.pki.certificateFromPem(mock_csca_sha256_rsapss_2048);
const inputs = getCSCAInputs(BigInt(0).toString(), dscCert, cscaCert, n_dsc, k_dsc, n_csca, k_csca, max_cert_bytes, true);
before(async () => {
const circuitPath = path.resolve(__dirname, '../../circuits/tests/dsc/dsc_sha256_rsapss_2048.circom');
circuit = await wasm_tester(
circuitPath,
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
// TODO: Verify the certificate chain in ts too.
// it('verify dsc has been signed by the csca using RSA-PSS', () => {
// // Extract TBS (To Be Signed) certificate
// const tbsCertAsn1 = forge.pki.getTBSCertificate(dscCert);
// const tbsCertDer = forge.asn1.toDer(tbsCertAsn1).getBytes();
// // Create SHA-256 hash of the TBS certificate
// const tbsHash = crypto.createHash('sha256').update(Buffer.from(tbsCertDer, 'binary')).digest();
// // Extract signature from DSC certificate
// const signature = Buffer.from(dscCert.signature, 'binary');
// // Get public key from CSCA certificate
// const publicKeyPem = forge.pki.publicKeyToPem(cscaCert.publicKey);
// const publicKey = crypto.createPublicKey(publicKeyPem);
// // Verify signature
// const pssOptions = {
// saltLength: 32,
// mgf1Hash: 'sha256'
// };
// try {
// const verifier = crypto.createVerify('RSA-SHA256');
// verifier.update(tbsHash);
// const isValid = verifier.verify({
// key: publicKey,
// padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
// saltLength: pssOptions.saltLength
// }, signature);
// console.log('TBS Hash:', tbsHash.toString('hex'));
// console.log('Signature:', signature.toString('hex'));
// console.log('Public Key:', publicKeyPem);
// console.log('Verification result:', isValid);
// expect(isValid).to.be.true;
// } catch (error) {
// console.error('Verification error:', error);
// throw error;
// }
// })
it('should compile and load the circuit', () => {
expect(circuit).to.not.be.undefined;
})
it('should compute the correct output', async () => {
const witness = await circuit.calculateWitness(inputs, true);
})
})

View File

@@ -3,22 +3,24 @@ import { assert, expect } from 'chai'
import path from "path";
const wasm_tester = require("circom_tester").wasm;
import { poseidon1, poseidon6 } from "poseidon-lite";
import { mockPassportData_sha1WithRSAEncryption_65537 } from "../../common/src/utils/mockPassportData";
import { generateCircuitInputsRegister } from '../../common/src/utils/generateInputs';
import { getLeaf } from '../../common/src/utils/pubkeyTree';
import { packBytes } from '../../common/src/utils/utils';
import { k_csca, k_dsc, n_csca, n_dsc } from '../../common/src/constants/constants';
import { mockPassportData_sha1_rsa_65537 } from "../../../common/src/constants/mockPassportData";
import { generateCircuitInputsRegister } from '../../../common/src/utils/generateInputs';
import { getLeaf } from '../../../common/src/utils/pubkeyTree';
import { packBytes } from '../../../common/src/utils/utils';
describe("Circuits - sha1WithRSAEncryption_65537 Register flow", function () {
describe("Register - SHA1 RSA", function () {
this.timeout(0);
let inputs: any;
let circuit: any;
let passportData = mockPassportData_sha1WithRSAEncryption_65537;
let passportData = mockPassportData_sha1_rsa_65537;
let attestation_id: string;
const attestation_name = "E-PASSPORT";
const n_dsc = 121;
const k_dsc = 17;
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, "../circuits/register_sha1WithRSAEncryption_65537.circom"),
path.join(__dirname, "../../circuits/register/register_sha1WithRSAEncryption_65537.circom"),
{
include: [
"node_modules",
@@ -30,16 +32,15 @@ describe("Circuits - sha1WithRSAEncryption_65537 Register flow", function () {
);
const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
console.log("secret", secret);
const dscSecret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
const attestation_name = "E-PASSPORT";
attestation_id = poseidon1([
BigInt(Buffer.from(attestation_name).readUIntBE(0, 6))
]).toString();
inputs = generateCircuitInputsRegister(
secret,
BigInt(0).toString(),
dscSecret,
attestation_id,
passportData,
n_dsc,
@@ -55,9 +56,13 @@ describe("Circuits - sha1WithRSAEncryption_65537 Register flow", function () {
const w = await circuit.calculateWitness(inputs);
await circuit.checkConstraints(w);
console.log("nullifier", (await circuit.getOutput(w, ["nullifier"])).nullifier);
const nullifier = (await circuit.getOutput(w, ["nullifier"])).nullifier;
console.log("\x1b[34m%s\x1b[0m", "nullifier", nullifier);
const commitment_circom = (await circuit.getOutput(w, ["commitment"])).commitment;
console.log("\x1b[34m%s\x1b[0m", "commitment", commitment_circom);
const blinded_dsc_commitment = (await circuit.getOutput(w, ["blinded_dsc_commitment"])).blinded_dsc_commitment;
console.log("\x1b[34m%s\x1b[0m", "blinded_dsc_commitment", blinded_dsc_commitment);
const mrz_bytes = packBytes(inputs.mrz);
const commitment_bytes = poseidon6([
inputs.secret[0],
@@ -72,8 +77,8 @@ describe("Circuits - sha1WithRSAEncryption_65537 Register flow", function () {
mrz_bytes[2]
]);
const commitment_js = commitment_bytes.toString();
console.log('commitment_js', commitment_js)
console.log('commitment_circom', commitment_circom)
//console.log('commitment_js', commitment_js)
//console.log('commitment_circom', commitment_circom)
expect(commitment_circom).to.be.equal(commitment_js);
});
@@ -116,17 +121,4 @@ describe("Circuits - sha1WithRSAEncryption_65537 Register flow", function () {
}
});
// it("should fail to calculate witness with invalid merkle root", async function () {
// try {
// const invalidInputs = {
// ...inputs,
// merkle_root: inputs.merkle_root.map((byte: string) => String((parseInt(byte, 10) + 1) % 256)),
// }
// await circuit.calculateWitness(invalidInputs);
// expect.fail("Expected an error but none was thrown.");
// } catch (error) {
// expect(error.message).to.include("Assert Failed");
// }
// });
});

View File

@@ -3,23 +3,24 @@ import { assert, expect } from 'chai'
import path from "path";
const wasm_tester = require("circom_tester").wasm;
import { poseidon1, poseidon6 } from "poseidon-lite";
import { mockPassportData_sha256WithRSAEncryption_65537 } from "../../common/src/utils/mockPassportData";
import { generateCircuitInputsRegister } from '../../common/src/utils/generateInputs';
import { getLeaf } from '../../common/src/utils/pubkeyTree';
import { packBytes } from '../../common/src/utils/utils';
import { mockPassportData_sha256_rsa_65537 } from "../../../common/src/constants/mockPassportData";
import { generateCircuitInputsRegister } from '../../../common/src/utils/generateInputs';
import { getLeaf } from '../../../common/src/utils/pubkeyTree';
import { packBytes } from '../../../common/src/utils/utils';
describe("Circuits - sha256WithRSAEncryption_65537 Register flow", function () {
describe("Register - SHA256 RSA", function () {
this.timeout(0);
let inputs: any;
let circuit: any;
let passportData = mockPassportData_sha256WithRSAEncryption_65537;
let passportData = mockPassportData_sha256_rsa_65537;
let attestation_id: string;
const attestation_name = "E-PASSPORT";
const n_dsc = 121;
const k_dsc = 17;
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, "../circuits/register_sha256WithRSAEncryption_65537.circom"),
path.join(__dirname, "../../circuits/register/register_sha256WithRSAEncryption_65537.circom"),
{
include: [
"node_modules",
@@ -29,23 +30,18 @@ describe("Circuits - sha256WithRSAEncryption_65537 Register flow", function () {
},
);
//const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
const secret = BigInt(0).toString();
console.log("secret", secret);
const attestation_name = "E-PASSPORT";
const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
const dscSecret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
attestation_id = poseidon1([
BigInt(Buffer.from(attestation_name).readUIntBE(0, 6))
]).toString();
inputs = generateCircuitInputsRegister(
secret,
BigInt(0).toString(),
dscSecret,
attestation_id,
passportData,
n_dsc,
k_dsc,
[mockPassportData_sha256WithRSAEncryption_65537]
k_dsc
);
});
@@ -57,12 +53,12 @@ describe("Circuits - sha256WithRSAEncryption_65537 Register flow", function () {
const w = await circuit.calculateWitness(inputs);
await circuit.checkConstraints(w);
console.log("nullifier", (await circuit.getOutput(w, ["nullifier"])).nullifier);
const nullifier = (await circuit.getOutput(w, ["nullifier"])).nullifier;
console.log("\x1b[34m%s\x1b[0m", "nullifier", nullifier);
const commitment_circom = (await circuit.getOutput(w, ["commitment"])).commitment;
console.log("commitment_circom", commitment_circom)
console.log("\x1b[34m%s\x1b[0m", "commitment", commitment_circom);
const blinded_dsc_commitment = (await circuit.getOutput(w, ["blinded_dsc_commitment"])).blinded_dsc_commitment;
console.log("blinded_dsc_commitment", blinded_dsc_commitment)
console.log("\x1b[34m%s\x1b[0m", "blinded_dsc_commitment", blinded_dsc_commitment);
const mrz_bytes = packBytes(inputs.mrz);
const commitment_bytes = poseidon6([
@@ -78,8 +74,8 @@ describe("Circuits - sha256WithRSAEncryption_65537 Register flow", function () {
mrz_bytes[2]
]);
const commitment_js = commitment_bytes.toString();
console.log('commitment_js', commitment_js)
console.log('commitment_circom', commitment_circom)
//console.log('commitment_js', commitment_js)
//console.log('commitment_circom', commitment_circom)
expect(commitment_circom).to.be.equal(commitment_js);
});
@@ -122,17 +118,4 @@ describe("Circuits - sha256WithRSAEncryption_65537 Register flow", function () {
}
});
// it("should fail to calculate witness with invalid merkle root", async function () {
// try {
// const invalidInputs = {
// ...inputs,
// merkle_root: inputs.merkle_root.map((byte: string) => String((parseInt(byte, 10) + 1) % 256)),
// }
// await circuit.calculateWitness(invalidInputs);
// expect.fail("Expected an error but none was thrown.");
// } catch (error) {
// expect(error.message).to.include("Assert Failed");
// }
// });
});

View File

@@ -3,22 +3,24 @@ import { assert, expect } from 'chai'
import path from "path";
const wasm_tester = require("circom_tester").wasm;
import { poseidon1, poseidon6 } from "poseidon-lite";
import { mockPassportData_sha256WithRSASSAPSS_65537 } from "../../common/src/utils/mockPassportData";
import { generateCircuitInputsRegister } from '../../common/src/utils/generateInputs';
import { getLeaf } from '../../common/src/utils/pubkeyTree';
import { packBytes } from '../../common/src/utils/utils';
import { k_dsc, n_dsc } from '../../common/src/constants/constants';
import { mockPassportData_sha256_rsapss_65537 } from "../../../common/src/constants/mockPassportData";
import { generateCircuitInputsRegister } from '../../../common/src/utils/generateInputs';
import { getLeaf } from '../../../common/src/utils/pubkeyTree';
import { packBytes } from '../../../common/src/utils/utils';
describe("Proof of Passport - Circuits - RSASSAPSS", function () {
describe("Register - SHA256 RSASSAPSS", function () {
this.timeout(0);
let inputs: any;
let circuit: any;
let passportData = mockPassportData_sha256WithRSASSAPSS_65537;
let passportData = mockPassportData_sha256_rsapss_65537;
const attestation_name = "E-PASSPORT";
let attestation_id: string;
const n_dsc = 64;
const k_dsc = 32;
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, "../circuits/register_sha256WithRSASSAPSS_65537.circom"),
path.join(__dirname, "../../circuits/register/register_sha256WithRSASSAPSS_65537.circom"),
{
include: [
"node_modules",
@@ -30,21 +32,18 @@ describe("Proof of Passport - Circuits - RSASSAPSS", function () {
);
const secret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
console.log("secret", secret);
const attestation_name = "E-PASSPORT";
const dscSecret = BigInt(Math.floor(Math.random() * Math.pow(2, 254))).toString();
attestation_id = poseidon1([
BigInt(Buffer.from(attestation_name).readUIntBE(0, 6))
]).toString();
inputs = generateCircuitInputsRegister(
secret,
BigInt(0).toString(),
dscSecret,
attestation_id,
passportData,
64,
32,
[passportData],
n_dsc,
k_dsc
);
});
@@ -59,9 +58,12 @@ describe("Proof of Passport - Circuits - RSASSAPSS", function () {
console.timeEnd('calculateWitness')
await circuit.checkConstraints(w);
console.log("nullifier", (await circuit.getOutput(w, ["nullifier"])).nullifier);
const nullifier = (await circuit.getOutput(w, ["nullifier"])).nullifier;
console.log("\x1b[34m%s\x1b[0m", "nullifier", nullifier);
const commitment_circom = (await circuit.getOutput(w, ["commitment"])).commitment;
console.log("\x1b[34m%s\x1b[0m", "commitment", commitment_circom);
const blinded_dsc_commitment = (await circuit.getOutput(w, ["blinded_dsc_commitment"])).blinded_dsc_commitment;
console.log("\x1b[34m%s\x1b[0m", "blinded_dsc_commitment", blinded_dsc_commitment);
const mrz_bytes = packBytes(inputs.mrz);
const commitment_bytes = poseidon6([
@@ -77,8 +79,8 @@ describe("Proof of Passport - Circuits - RSASSAPSS", function () {
mrz_bytes[2]
]);
const commitment_js = commitment_bytes.toString();
console.log('commitment_js', commitment_js)
console.log('commitment_circom', commitment_circom)
//console.log('commitment_js', commitment_js)
//console.log('commitment_circom', commitment_circom)
expect(commitment_circom).to.be.equal(commitment_js);
});
@@ -121,17 +123,4 @@ describe("Proof of Passport - Circuits - RSASSAPSS", function () {
}
});
it("should fail to calculate witness with invalid merkle root", async function () {
try {
const invalidInputs = {
...inputs,
merkle_root: inputs.merkle_root.map((byte: string) => String((parseInt(byte, 10) + 1) % 256)),
}
await circuit.calculateWitness(invalidInputs);
expect.fail("Expected an error but none was thrown.");
} catch (error) {
expect(error.message).to.include("Assert Failed");
}
});
});

View File

@@ -65,7 +65,7 @@ describe('DateIsLessChecker Circuit Test', function () {
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/isOlderThan_tester.circom'),
path.join(__dirname, '../../circuits/tests/utils/isOlderThan_tester.circom'),
{
include: [
"node_modules",

View File

@@ -64,7 +64,7 @@ describe('DateIsLessChecker Circuit Test', function () {
before(async () => {
circuit = await wasm_tester(
path.join(__dirname, '../circuits/tests/isValid_tester.circom'),
path.join(__dirname, '../../circuits/tests/utils/isValid_tester.circom'),
{
include: [
"node_modules",

View File

@@ -0,0 +1,87 @@
import { expect } from 'chai';
import { X509Certificate } from 'crypto';
import path from 'path';
import { getCSCAInputs, getTBSHash } from '../../../common/src/utils/csca';
const wasm_tester = require("circom_tester").wasm;
import forge from 'node-forge';
import { mock_dsc_sha256_rsa_2048, mock_csca_sha256_rsa_2048, mock_dsc_sha1_rsa_2048, mock_csca_sha1_rsa_2048 } from '../../../common/src/constants/mockCertificates';
function loadCertificates(dscCertContent: string, cscaCertContent: string) {
const dscCert = new X509Certificate(dscCertContent);
const cscaCert = new X509Certificate(cscaCertContent);
const dscCert_forge = forge.pki.certificateFromPem(dscCertContent);
const cscaCert_forge = forge.pki.certificateFromPem(cscaCertContent);
return { dscCert, cscaCert, dscCert_forge, cscaCert_forge };
}
describe('RSA Verifier', function () {
this.timeout(0);
let circuit;
this.beforeAll(async () => {
const circuitPath = path.resolve(__dirname, '../../circuits/tests/utils/rsa_verifier.circom');
circuit = await wasm_tester(
circuitPath,
{
include: [
"node_modules",
"./node_modules/@zk-kit/binary-merkle-root.circom/src",
"./node_modules/circomlib/circuits"
]
}
);
});
describe('Circuit', () => {
it('should compile and load the circuit', () => {
expect(circuit).not.to.be.undefined;
});
});
describe('SHA-256 certificates', async () => {
const { dscCert, cscaCert, dscCert_forge, cscaCert_forge } = loadCertificates(mock_dsc_sha256_rsa_2048, mock_csca_sha256_rsa_2048);
it('should verify DSC has been signed by the CSCA', () => {
const isVerified = dscCert.verify(cscaCert.publicKey);
console.log(`SHA-256 DSC certificate verification result: ${isVerified}`);
expect(isVerified).to.be.true;
});
it('should extract and log certificate information', async () => {
const csca_inputs = getCSCAInputs("0", dscCert_forge, cscaCert_forge, 64, 32, 64, 32, 2048, true);
const tbsCertificateHashFormatted = getTBSHash(dscCert_forge, 'sha256');
const inputs = {
"message": tbsCertificateHashFormatted,
"signature": csca_inputs.dsc_signature,
"modulus": csca_inputs.csca_modulus
}
const witness = await circuit.calculateWitness(inputs, true);
});
});
describe('SHA-1 certificates', () => {
const { dscCert, cscaCert, dscCert_forge, cscaCert_forge } = loadCertificates(mock_dsc_sha1_rsa_2048, mock_csca_sha1_rsa_2048);
it('should verify DSC has been signed by the CSCA', () => {
const isVerified = dscCert.verify(cscaCert.publicKey);
console.log(`SHA-1 DSC certificate verification result: ${isVerified}`);
expect(isVerified).to.be.true;
});
/// TODO: Use SHA1RSA verifier circuit (won't work either case because of padding)
// it('should extract and log certificate information', async () => {
// const csca_inputs = getCSCAInputs("0", dscCert_forge, cscaCert_forge, 64, 32, 64, 32, 2048, true);
// const tbsCertificateHashFormatted = getTBSHash(dscCert_forge, 'sha1');
// const inputs = {
// "message": tbsCertificateHashFormatted,
// "signature": csca_inputs.dsc_signature,
// "modulus": csca_inputs.csca_modulus
// }
// console.log("final inputs: ", inputs);
// const witness = await circuit.calculateWitness(inputs, true);
// console.log(witness);
// });
});
});

View File

@@ -584,6 +584,22 @@ arrify@^1.0.0:
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
asn1@^0.2.6:
version "0.2.6"
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d"
integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==
dependencies:
safer-buffer "~2.1.0"
asn1js@^3.0.5:
version "3.0.5"
resolved "https://registry.yarnpkg.com/asn1js/-/asn1js-3.0.5.tgz#5ea36820443dbefb51cc7f88a2ebb5b462114f38"
integrity sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==
dependencies:
pvtsutils "^1.3.2"
pvutils "^1.1.3"
tslib "^2.4.0"
assertion-error@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
@@ -1435,6 +1451,11 @@ js-yaml@4.1.0:
dependencies:
argparse "^2.0.1"
jsbn@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==
json5@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.2.tgz#63d98d60f21b313b77c4d6da18bfa69d80e1d593"
@@ -1599,6 +1620,13 @@ mocha@^10.3.0:
yargs-parser "20.2.4"
yargs-unparser "2.0.0"
modpow@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/modpow/-/modpow-1.0.0.tgz#377e5541472e855c82d733c551294da74ecfe73d"
integrity sha512-ohpGZH3RvdiZ6BPmjbMa1jqnDjwS0s+u0a6Tb2CiJUPkOR5cNIZRdhwmUwxqaOp2GTDJmO4OIsBqm553PfQo3w==
dependencies:
jsbn "^0.1.0"
ms@2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
@@ -1624,6 +1652,10 @@ node-forge@^1.3.1:
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3"
integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
"node-forge@https://github.com/remicolin/forge":
version "1.3.2-0"
resolved "https://github.com/remicolin/forge#17a11a632dd0e50343b3b8393245a2696f78afbb"
node-gyp-build@^4.2.2:
version "4.8.0"
resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd"
@@ -1712,6 +1744,18 @@ psl@^1.9.0:
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
pvtsutils@^1.3.2:
version "1.3.5"
resolved "https://registry.yarnpkg.com/pvtsutils/-/pvtsutils-1.3.5.tgz#b8705b437b7b134cd7fd858f025a23456f1ce910"
integrity sha512-ARvb14YB9Nm2Xi6nBq1ZX6dAM0FsJnuk+31aUp4TrcZEdKUlSqOqsxJHUPJDNE3qiIp+iUPEIeR6Je/tgV7zsA==
dependencies:
tslib "^2.6.1"
pvutils@^1.1.3:
version "1.1.3"
resolved "https://registry.yarnpkg.com/pvutils/-/pvutils-1.1.3.tgz#f35fc1d27e7cd3dfbd39c0826d173e806a03f5a3"
integrity sha512-pMpnA0qRdFp32b1sJl1wOJNxZLQ2cbQx+k6tjNtZ8CpvVhNqEPRgivZ2WOUev2YMajecdH7ctUPDvEe87nariQ==
r1csfile@0.0.41, r1csfile@^0.0.41:
version "0.0.41"
resolved "https://registry.yarnpkg.com/r1csfile/-/r1csfile-0.0.41.tgz#e3d2709d36923156dd1fc2db9858987b30c92948"
@@ -1772,7 +1816,7 @@ safe-buffer@^5.1.0, safe-buffer@~5.2.0:
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
"safer-buffer@>= 2.1.2 < 3.0.0":
"safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
@@ -1978,6 +2022,11 @@ tsconfig-paths@^3.5.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
tslib@^2.4.0, tslib@^2.6.1:
version "2.6.3"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0"
integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"

View File

@@ -4,16 +4,19 @@
"@zk-kit/imt": "https://gitpkg.now.sh/0xturboblitz/zk-kit/packages/imt?6d417675",
"@zk-kit/lean-imt": "^2.0.1",
"asn1.js": "^5.4.1",
"elliptic": "^6.5.5",
"fs": "^0.0.1-security",
"js-sha1": "^0.7.0",
"js-sha256": "^0.10.1",
"js-sha512": "^0.9.0",
"json-to-ts": "^2.1.0",
"jsrsasign": "^11.1.0",
"node-forge": "^1.3.1",
"node-forge": "https://github.com/remicolin/forge",
"path": "^0.12.7",
"poseidon-lite": "^0.2.0"
"poseidon-lite": "^0.2.0",
"typescript-parser": "^2.6.1"
},
"devDependencies": {
"@types/node-forge": "^1.3.10"
}
}
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,47 @@
import * as fs from 'fs';
import * as path from 'path';
const srcDir = path.join(__dirname, '..', '..', 'src', 'mock_certificates');
const outputFile = path.join(__dirname, '..', '..', 'src', 'constants', 'mockCertificates.ts');
const algorithms = [
'sha1_rsa_2048',
'sha1_rsa_4096',
'sha256_rsa_2048',
'sha256_rsa_4096',
'sha256_rsapss_2048',
'sha256_rsapss_4096',
];
function readFile(dir: string, filename: string): string | null {
const filePath = path.join(dir, filename);
if (fs.existsSync(filePath)) {
return fs.readFileSync(filePath, 'utf-8').trim();
}
return null;
}
let output = '';
algorithms.forEach((algo) => {
const algoDir = path.join(srcDir, algo);
const cscaCert = readFile(algoDir, 'mock_csca.crt') || readFile(algoDir, 'mock_csca.pem');
const dscCert = readFile(algoDir, 'mock_dsc.crt') || readFile(algoDir, 'mock_dsc.pem');
const dscKey = readFile(algoDir, 'mock_dsc.key');
if (cscaCert) {
output += `export const mock_csca_${algo} = \`${cscaCert}\`\n\n`;
}
if (dscCert) {
output += `export const mock_dsc_${algo} = \`${dscCert}\`\n\n`;
}
if (dscKey) {
output += `export const mock_dsc_key_${algo} = \`${dscKey}\`\n\n`;
}
});
fs.writeFileSync(outputFile, output);
console.log(`Certificates and keys have been written to ${outputFile}`);

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,629 @@
{
"mrz": "P<FRADUPONT<<ALPHONSE<HUGUES<ALBERT<<<<<<<<<24HB818324FRA0402111M3111115<<<<<<<<<<<<<<02",
"signatureAlgorithm": "sha256WithRSASSAPSS",
"pubKey": {
"modulus": "24462187253413274681146293990014601117483150253485750502784042435672184694412963307122026240846907391312882376801424642119473345751861224453041335405750030091821974208795494089279845074559882616814677854700627123408815125641207116387150180075958682953326415376187334908428885389819481874887447587379894859906385655519567588675165038354987379327125622417796020195813417774532495071662150990707566936780047952622227454986438290561518433120591444215515025611804148686981931860883842745085825036432179109865379231910853752492302597965268640127145219080386320748404798990484447108886155687702517815916586904444799519356177",
"exponent": "65537"
},
"dataGroupHashes": [
-114,
-118,
-62,
50,
66,
9,
-21,
-98,
-47,
-62,
-12,
-83,
77,
111,
103,
117,
-85,
-35,
-96,
21,
-11,
-19,
-27,
-99,
-119,
62,
-62,
-36,
-103,
117,
-80,
-33,
31,
-123,
108,
84,
-98,
102,
70,
11,
-91,
-81,
-60,
12,
-55,
-126,
25,
-125,
46,
125,
-100,
-62,
28,
23,
55,
-123,
-99,
-92,
-121,
-120,
-36,
78,
-66,
82,
-76,
-21,
-34,
33,
79,
50,
-104,
-120,
-114,
35,
116,
-32,
6,
-14,
-100,
-115,
-128,
-8,
10,
61,
98,
86,
-8,
45,
-49,
-46,
90,
-24,
-81,
38,
0,
-62,
104,
108,
-19,
-10,
97,
-26,
116,
-58,
69,
110,
26,
87,
17,
89,
110,
-57,
108,
-6,
36,
21,
39,
87,
110,
102,
-6,
-43,
-82,
-125,
-85,
-82,
-120,
-101,
87,
-112,
111,
15,
-104,
127,
85,
25,
-102,
81,
20,
58,
51,
75,
-63,
116,
-22,
0,
60,
30,
29,
30,
-73,
-115,
72,
-9,
-1,
-53,
100,
124,
41,
-22,
106,
78,
31,
11,
114,
-119,
-19,
17,
92,
71,
-122,
47,
62,
78,
-67,
-23,
-55,
-42,
53,
4,
47,
-67,
-55,
-123,
6,
121,
34,
-125,
64,
-114,
91,
-34,
-46,
-63,
62,
-34,
104,
82,
36,
41,
-118,
-3,
70,
15,
-108,
-48,
-100,
45,
105,
-85,
-15,
-61,
-71,
43,
-39,
-94,
-110,
-55,
-34,
89,
-18,
38,
76,
123,
-40,
13,
51,
-29,
72,
-11,
59,
-63,
-18,
-90,
103,
49,
23,
-92,
-85,
-68,
-62,
-59,
-100,
-69,
-7,
28,
-58,
95,
69,
15,
-74,
56,
54,
38
],
"eContent": [
49,
102,
48,
21,
6,
9,
42,
-122,
72,
-122,
-9,
13,
1,
9,
3,
49,
8,
6,
6,
103,
-127,
8,
1,
1,
1,
48,
28,
6,
9,
42,
-122,
72,
-122,
-9,
13,
1,
9,
5,
49,
15,
23,
13,
49,
57,
49,
50,
49,
54,
49,
55,
50,
50,
51,
56,
90,
48,
47,
6,
9,
42,
-122,
72,
-122,
-9,
13,
1,
9,
4,
49,
34,
4,
32,
-122,
-17,
-90,
-50,
-85,
-36,
1,
-60,
98,
23,
122,
117,
-121,
-30,
85,
120,
53,
83,
-125,
-57,
-15,
70,
39,
-114,
64,
123,
39,
-78,
-76,
-122,
-50,
-17
],
"encryptedDigest": [
87,
20,
96,
-119,
-78,
21,
117,
-35,
91,
41,
86,
-58,
-21,
72,
-36,
58,
-79,
-29,
74,
-103,
-98,
-46,
-58,
-84,
110,
29,
-89,
-15,
127,
121,
92,
125,
106,
81,
-16,
-96,
-9,
112,
-33,
-36,
-52,
-114,
-14,
-80,
-61,
-59,
33,
-104,
120,
-8,
8,
-29,
-56,
14,
-79,
-122,
60,
-23,
-100,
72,
51,
-31,
-68,
-70,
37,
18,
-91,
47,
-19,
-40,
-4,
-59,
-66,
88,
103,
32,
-108,
-77,
-15,
-44,
-100,
13,
46,
-45,
-41,
115,
-18,
110,
-3,
12,
-17,
85,
111,
-51,
12,
6,
114,
0,
92,
58,
-26,
-13,
-40,
34,
43,
11,
87,
-72,
-1,
-119,
-86,
13,
79,
-1,
-72,
16,
-89,
109,
79,
-99,
-26,
-110,
-17,
79,
-2,
-37,
-59,
-61,
-3,
-50,
57,
121,
-10,
-19,
106,
-76,
-43,
-33,
-68,
-1,
5,
22,
-5,
-39,
-13,
-10,
73,
33,
28,
-48,
-24,
-119,
-49,
127,
-115,
-99,
59,
10,
-62,
-47,
-33,
99,
54,
112,
116,
62,
99,
68,
-87,
-78,
104,
-84,
-105,
61,
104,
-56,
-11,
-56,
-102,
-39,
-70,
81,
-58,
-7,
98,
30,
29,
-116,
6,
-127,
-103,
-5,
98,
-64,
-83,
84,
-4,
100,
70,
112,
29,
114,
109,
-3,
-72,
-13,
-4,
-10,
-14,
-82,
14,
-38,
112,
-112,
15,
-10,
-101,
87,
23,
77,
-31,
101,
121,
-6,
-125,
117,
126,
103,
100,
10,
95,
-90,
-103,
-92,
-118,
32,
124,
-115,
-116,
4,
73,
-15,
60,
-16,
-23,
110,
30,
-122,
42,
-28,
57,
-59,
-60,
118,
53,
122
],
"photoBase64": "iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABjElEQVR42mL8//8/AyUYiBQYmIw3..."
}

View File

@@ -1,9 +1,9 @@
import { readFileSync, writeFileSync } from "fs";
import { PassportData } from "../../../common/src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, hexToDecimal, arraysAreEqual, findSubarrayIndex } from "../../../common/src/utils/utils";
import { PassportData } from "../../src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, hexToDecimal, arraysAreEqual, findSubarrayIndex } from "../../src/utils/utils";
import * as forge from 'node-forge';
import { assert } from "console";
const dsc_key = readFileSync('../common/src/mock_certificates/sha1_rsa_4096/mock_dsc.key', 'utf8');
import { mock_dsc_key_sha1_rsa_4096 } from "../../src/constants/mockCertificates";
const sampleMRZ = "P<FRADUPONT<<ALPHONSE<HUGUES<ALBERT<<<<<<<<<24HB818324FRA0402111M3111115<<<<<<<<<<<<<<02"
const sampleDataHashes = [
@@ -33,7 +33,7 @@ export function genMockPassportData_sha1WithRSAEncryption_65537(): PassportData
const eContent = assembleEContent(hash(signatureAlgorithm, concatenatedDataHashes));
const privKey = forge.pki.privateKeyFromPem(dsc_key);
const privKey = forge.pki.privateKeyFromPem(mock_dsc_key_sha1_rsa_4096);
const modulus = privKey.n.toString(16);
const md = forge.md.sha1.create();

View File

@@ -1,10 +1,10 @@
import assert from "assert";
import { PassportData } from "../../../common/src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, hexToDecimal, arraysAreEqual, findSubarrayIndex } from "../../../common/src/utils/utils";
import { PassportData } from "../../src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, hexToDecimal, arraysAreEqual, findSubarrayIndex } from "../../src/utils/utils";
import * as forge from 'node-forge';
import { writeFileSync, readFileSync } from "fs";
import { mock_dsc_key_sha256_rsa_4096 } from "../../src/constants/mockCertificates";
const dsc_key = readFileSync('../common/src/mock_certificates/sha256_rsa_4096/mock_dsc.key', 'utf8');
const sampleMRZ = "P<FRADUPONT<<ALPHONSE<HUGUES<ALBERT<<<<<<<<<24HB818324FRA0402111M3111115<<<<<<<<<<<<<<02"
const sampleDataHashes = [
@@ -46,9 +46,7 @@ export function genMockPassportData_sha256WithRSAEncryption_65537(): PassportDat
const eContent = assembleEContent(hash(signatureAlgorithm, concatenatedDataHashes));
//const rsa = forge.pki.rsa;
//const privKey = rsa.generateKeyPair({ bits: 2048 }).privateKey;
const privKey = forge.pki.privateKeyFromPem(dsc_key);
const privKey = forge.pki.privateKeyFromPem(mock_dsc_key_sha256_rsa_4096);
const modulus = privKey.n.toString(16);
const md = forge.md.sha256.create();

View File

@@ -1,11 +1,11 @@
import assert from "assert";
import { PassportData } from "../../../common/src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, arraysAreEqual, findSubarrayIndex } from "../../../common/src/utils/utils";
import { PassportData } from "../../src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, arraysAreEqual, findSubarrayIndex } from "../../src/utils/utils";
import * as forge from 'node-forge';
import crypto from 'crypto';
import { readFileSync, writeFileSync } from "fs";
const dsc_key = readFileSync('../common/src/mock_certificates/sha256_rsa_4096/mock_dsc.key', 'utf8');
const dsc_crt = readFileSync('../common/src/mock_certificates/sha256_rsa_4096/mock_dsc.crt', 'utf8');
import { mock_dsc_key_sha256_rsapss_2048 } from "../../src/constants/mockCertificates";
import { mock_dsc_sha256_rsapss_2048 } from "../../src/constants/mockCertificates";
const sampleMRZ = "P<FRADUPONT<<ALPHONSE<HUGUES<ALBERT<<<<<<<<<24HB818324FRA0402111M3111115<<<<<<<<<<<<<<02"
const sampleDataHashes = [
[
@@ -37,9 +37,9 @@ const signatureAlgorithm = 'sha256WithRSASSAPSS'
const hashLen = 32
export function genMockPassportData_sha256WithRSASSAPSS_65537(): PassportData {
const privateKeyPem = forge.pki.privateKeyFromPem(dsc_key);
const privateKeyPem = forge.pki.privateKeyFromPem(mock_dsc_key_sha256_rsapss_2048);
const privateKeyPemString = forge.pki.privateKeyToPem(privateKeyPem);
const certificate = forge.pki.certificateFromPem(dsc_crt);
const certificate = forge.pki.certificateFromPem(mock_dsc_sha256_rsapss_2048);
const publicKey = certificate.publicKey as forge.pki.rsa.PublicKey;
@@ -56,17 +56,16 @@ export function genMockPassportData_sha256WithRSASSAPSS_65537(): PassportData {
const eContent = assembleEContent(hash(signatureAlgorithm, concatenatedDataHashes));
const my_message = Buffer.from(eContent);
const hash_algorithm = 'sha256';
const private_key = {
key: privateKeyPem,
key: privateKeyPemString,
padding: crypto.constants.RSA_PKCS1_PSS_PADDING,
saltLength: salt.length,
};
const signature = crypto.sign(hash_algorithm, my_message, privateKeyPemString);
const signature = crypto.sign(hash_algorithm, my_message, private_key);
const signatureArray = Array.from(signature, byte => byte < 128 ? byte : byte - 256);
return {

View File

@@ -3,8 +3,8 @@
// It is currently broken so the line that errors is commented
import assert from "assert";
import { PassportData } from "../../../common/src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, arraysAreEqual, findSubarrayIndex } from "../../../common/src/utils/utils";
import { PassportData } from "../../src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, arraysAreEqual, findSubarrayIndex } from "../../src/utils/utils";
import * as forge from 'node-forge';
import crypto from 'crypto';
import { writeFileSync } from "fs";
@@ -62,7 +62,7 @@ export function genMockPassportData_sha256WithRSASSAPSS_65537(): PassportData {
const keylen = 2048;
const hash_algorithm = 'sha256';
const emBits = keylen - 1;
const emLen = Math.ceil(emBits/8);
const emLen = Math.ceil(emBits / 8);
const hLen = 32;
console.log('my_message:', my_message);

View File

@@ -1,6 +1,6 @@
import assert from "assert";
import { PassportData } from "../../../common/src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, arraysAreEqual, findSubarrayIndex } from "../../../common/src/utils/utils";
import { PassportData } from "../../src/utils/types";
import { hash, assembleEContent, formatAndConcatenateDataHashes, formatMrz, arraysAreEqual, findSubarrayIndex } from "../../src/utils/utils";
import * as forge from 'node-forge';
import { writeFileSync } from "fs";
import elliptic from 'elliptic';
@@ -45,19 +45,19 @@ export function genMockPassportData_SHA384withECDSA(): PassportData {
33
);
const eContent = assembleEContent(hash(signatureAlgorithm, concatenatedDataHashes));
const ec = new elliptic.ec('p384');
const keyPair = ec.genKeyPair();
const pubKey = keyPair.getPublic();
const md = forge.md.sha384.create();
md.update(forge.util.binary.raw.encode(new Uint8Array(eContent)));
const signature = keyPair.sign(md.digest().toHex(), 'hex');
const signatureBytes = Array.from(Buffer.from(signature.toDER(), 'hex'));
const Qx = pubKey.getX().toString(16);
const Qy = pubKey.getY().toString(16);
return {
mrz: sampleMRZ,
signatureAlgorithm: signatureAlgorithm,

View File

@@ -1,31 +1,201 @@
export const mock_dsc_sha256_rsa_4096 = `-----BEGIN CERTIFICATE-----
MIIEkDCCAnigAwIBAgIUVWuy5jJJ5sj+QZfD5gWs3rESlFswDQYJKoZIhvcNAQEL
BQAwYzELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCU1vY2tTdGF0ZTERMA8GA1UEBwwI
TW9ja0NpdHkxGTAXBgNVBAoMEE1vY2tPcmdhbml6YXRpb24xEjAQBgNVBAMMCW1v
Y2tfY3NjYTAeFw0yNDA2MTgxOTA4NTRaFw0yNTA2MTgxOTA4NTRaMF0xCzAJBgNV
BAYTAlhYMRIwEAYDVQQIDAlNb2NrU3RhdGUxETAPBgNVBAcMCE1vY2tDaXR5MRkw
FwYDVQQKDBBNb2NrT3JnYW5pemF0aW9uMQwwCgYDVQQDDANkc2MwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbmfvDt6mQHKcWF2mkPjF1BPS0Tggh6Gdt
/A6DCsxrb60ktxMlFm1EOkMwwf7GO2vJ/VThYqHKP+1jf8l327PNSawsZrM86dai
d8yMpim+5YMtWQfCrSzpdszusD3SSPpkUzRnYSUa5M1nywktnosYCFBQmFoS47Ya
0j6xnPp0tXEldGXqUMUF4RJRxF17u46yy4UIEk2KfJQP3aHfKaB6PRkseRw9g5Pu
RPDYTdz9KKpLeTC8YCibwKULn5oAmyz38Li099FrofAD5fbg+3b18v5l4k95bIIq
DmpeyA1Pzgr+XsdzCjL0vYMmE0xaZ4b/HWiL2Ogoy1NBH4JGmPovAgMBAAGjQjBA
MB0GA1UdDgQWBBQvTV8qsxZT6yjcGTfPp/G1g+eQkDAfBgNVHSMEGDAWgBRUaGBM
XQcIm9LEq0TQG9W1A0y3RzANBgkqhkiG9w0BAQsFAAOCAgEADYR3J1O45bTBx73a
o45qJJQAJhHAe3VhajphGPm3hpBeM2VewEZU0NIMon0Ov1dHvYudFniYiFdZMefe
CuqE9Deb39egDO1lCd2dGjybRbhg4Zr8vLqRwsG3bjdYGl6PXwyg0OsB0QbdKpm4
tVRT970BF2LefC5vdlQpeCuLas7gkxL469+LJicXotYlO3Le+CknMYEdALjvEapc
1u7jlJFlD2xx3l8+Exkon3EzgRokp3fu9ztU4Y2j3KGdieSDJ4rYfPoyDR7HCcEd
HDYCsjBAYi6Zrjz5M0Nm99/O+4vCma7MnGkBtA63ABTDjjxIv6eeu5JxhrI8PXwE
VQ9CAmM6Wh52QebRMx1adxUqTe/rwCAwuA4v1jXSlb1BTfL+7ra1k7PYYczmnskc
jVscaxnKBVq12Pg1D03LkeMPQiqWTQ7pOPz1AKQ3TIlhsuf/jXner4cYQbeIpGwf
WatGH8+eROdlpTfF/xaAUbCJ2UYjRUupGkrpU5KkS9FxrJSVS44PO3xuJwQJN1fC
x2clYiqOEhyESrTp6c5XAGK78S0dwBP2R9o7GqY5xNI+kXBJakqyVpwIPRDq4HVo
y9QRS1jM1G/2Y1XAE9pMdMjdhfYCCp/lO48swOQDty137gzfffo0Bn0039VKzhgi
nUCb8Z7CclWppvFAVjnJruJbGp4=
-----END CERTIFICATE-----
`
export const mock_csca_sha1_rsa_2048 = `-----BEGIN CERTIFICATE-----
MIIC1zCCAb+gAwIBAgIUZipRXztCv63+iMkCt+ivpxwkAOAwDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJTW9jayBDU0NBMB4XDTI0MDcxMjE3NDIxNVoXDTM0MDcx
MDE3NDIxNVowFDESMBAGA1UEAwwJTW9jayBDU0NBMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAvFuQiNhHOcXS8LMz8Tp76BIo6+ZZtythhcDaEVsroBWG
K63OqD89PTgg4d90To6TcMGXZXJZe+JifWsB5Fo+sUfwdOoWQ3hNKfWadKrkZs4x
dh/V05hJ4VAuaj9e2m937GQEsK9obG9MQnYZSlcODCYtIynM/IVmNr27I+s5fspP
0mZM+8X3mgjpQSwUob5zMkl8ZzskJau2oY6ImhI6fLNxAisS3wu/akpEVtKI3K8i
we99oPDO6xuHeuOQh0L6DbBdpYpF7jPOkah8zBQNfuENaCcjTxI2twrSN0YLuIsQ
fiEKbUq8DO5aRng9sws1DTNlf9AyvSPYfkizNtNHWwIDAQABoyEwHzAdBgNVHQ4E
FgQU16zJPs8xurwLQAoHiDOuUr+OmnQwDQYJKoZIhvcNAQEFBQADggEBAA6sMfoQ
1y42gg4/XNh6SOxHhT2z3u0lHq5+BxVORx5QcIi3rh1sgTocRBkl+4tzXFxDOzGt
RpVEOnM4VqbxgvuTLYPbZ3jnoS9S62w2if7xaOWexLO+3hsOtMIUrBfrfBax03/S
Tg9gkA98zvV1jbokPL23UXRWufv7L44HIFr3bLeikdOmpf6Lvp1ORiUXjbMi9o+c
ty+gWrxsV+825W3LGD/71DFSD4yS8wK9M9KLZb/21bt6tq4D/E3njnYbXID+1dTL
WC/4nCtzhd5n6cq1wKl6VnZ6bcyYb8MSQ6Kd6vbew1UnRae8KmFsjr2tJ50ESTj4
jQwzIZELkOP+EAE=
-----END CERTIFICATE-----`
export const mock_dsc_sha1_rsa_2048 = `-----BEGIN CERTIFICATE-----
MIIC9zCCAd+gAwIBAgIUTwHaCSG0zF1Qc7zH9crP0SpqSIMwDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJTW9jayBDU0NBMB4XDTI0MDcxMjE3NDIyM1oXDTI5MDcx
MTE3NDIyM1owEzERMA8GA1UEAwwITW9jayBEU0MwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDNAbRAvBrCOUcQpP7wrJ5faC7qxNq14sBfP6K2G7Tpj4Bg
eTkCgMAcOl4Ue1M+zhtYRo3pTnidLOvcy07lX1QMV1jwo/RLZYCVQoyqW/Lqm8Kv
VXOOJrAzkdowcyOaOLxFyWIoaWj9ZSuPuzVntWA5n7u5MT1mYVO1sq27pXpp1Cwg
DYifSLIcn3uKXGPy1CxlxUj/B3/3T0IrOEQkXqXJe7BMg1ijbjbJYoPK2Zoc10vP
bgdOXY/MwE6YxhpVo8Lzzq9E31kIq7Ovjrb6xT+kktSbXINX/3Htu8ELe6OuxAw+
27CwaS/aCK/MJnHtRFzLyKvhsBf6BEq6ZgUSUfTVAgMBAAGjQjBAMB0GA1UdDgQW
BBQ5+4AMcFOfsD0ucPu3LnUceyEJhjAfBgNVHSMEGDAWgBTXrMk+zzG6vAtACgeI
M65Sv46adDANBgkqhkiG9w0BAQUFAAOCAQEAMh6doVDMhOZObgKi9bgJibZuOks7
fYWu1Zi4zOc2e5Q593Yq/+NSPB65qRixOaFSS/G1ZO6VxAu0n6redn7Ia0NLpohd
ZOL+iNt1vNugU2Ur8FbdpbaMrNDkabWSnOiXVKJ6exXYTvdghaF3P4LkZoiutMXz
/VJ+tmeWZzhVhTQnrN0FBxvh0wfdbbdbosVaJsyB0xTD6C3aBlUTVtxdLdf3B2CA
N0/RDh6kwOOv9mcyF9u/z/YxiZB23csSJyLMmUl9WV2xPCgSZi3A1sZqOU5IIqO3
U4o97Nxcwj51Bm6x5Km/6/CbnXXRo+x+nHgAgYwMn42r4BrLFoDLUn9YRw==
-----END CERTIFICATE-----`
export const mock_dsc_key_sha1_rsa_2048 = `-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNAbRAvBrCOUcQ
pP7wrJ5faC7qxNq14sBfP6K2G7Tpj4BgeTkCgMAcOl4Ue1M+zhtYRo3pTnidLOvc
y07lX1QMV1jwo/RLZYCVQoyqW/Lqm8KvVXOOJrAzkdowcyOaOLxFyWIoaWj9ZSuP
uzVntWA5n7u5MT1mYVO1sq27pXpp1CwgDYifSLIcn3uKXGPy1CxlxUj/B3/3T0Ir
OEQkXqXJe7BMg1ijbjbJYoPK2Zoc10vPbgdOXY/MwE6YxhpVo8Lzzq9E31kIq7Ov
jrb6xT+kktSbXINX/3Htu8ELe6OuxAw+27CwaS/aCK/MJnHtRFzLyKvhsBf6BEq6
ZgUSUfTVAgMBAAECggEAGlxMvEIzwqOw0qAUtAfOOYBhAAkeAmNMzzKUjowTgDDW
lhEgVoUNrtOGg2W0N5AzDe/MkaJoefVrwrFVzMKsQQX+RrseT4+WsBqlkcZO/wHW
T8tSF4Y8A/WOM8qqWktPUj3p5D5hpKucpVeyL0qwO9ihP9foCEEdjXCTTFyj1/WY
O7IdsKNDY+srTK73xWIEnyH+ffEKIaSu9wrntYASudllLO/PrxpxJ4M+/4/I5Cep
PzklQhEdv/5ler0uzHGc/RtVfibjpdEDVgsere9Nq+cXf0k4JrZZ8ySy3WHgAPWG
zWj3sduFW37Dsb/XvzuQ7oRg4v6lofaJSlaLxA2ExQKBgQD3eE75vjVQdTkKpFMQ
c//0nLRne09VbOqPHhpkyZC9FJJ+UkIRvlNbkBtHhhNTj/u6FnkaJGS3RONeDe0o
Q0fe16zY38q70HlulNo6h069ckhWrIA8qbrKntqxc2bVL5LDUoA/VmY5nk76L5Tu
7b22+ipcdij2ibU+r10T5X5/0wKBgQDUErJVj/dm52QI039VPyl1wMjGDeUvWZxs
8iT9FT58Kp/E/+fiZ8JbFqJyWSpEm5rZyK5P40USN1r/B2EdxHSyete52sko8Huh
Jku4DVStyIzq63d3gEpIqfb2rmMUlc707bNqdgOX4IZ8RYxFgnp2AB5X8e/LyHZR
nSFdADD3twKBgHw8PMGqGM/UmZdbGYxH//ZIeVT+FbzYGgVRYoS4oF4cJtMd7qdD
uktcVCWbDLbFsOUiBRf3r0xGXDLKoQW2iS05bz/NUdTp+xxlxAzgAsqexewlW5eY
yfqQt0+glL5vzKkcEOA7OsSwUgvNuWIdnkFu47dZZoUmawQWO48ShmgbAoGBAKlz
3wc7J8YTsfzTcfUdqPUr+8E1LSGuiq0Ktr96kBkKverdR93CZqv95ANWd82mQA8w
qQewY2pwzMbmkJUGevB585HP3dhWf5J+VRZVoInTq7WyPB1CZxi0pl7pbMXwBhPz
Mt8oOSrL/umhcLnBzjQnWBeRe7frD4+a7COxmW71AoGBAO0yhYXOeHpGTnHzDzTs
qu3rNhvQKy/8f25wvqn/xR5NfbcQv/Z63PgmDoq9VLrmeektwY4zTE9wO+n7WPQU
D2BiW2DQjX4OJsOPNs63+wCE71xj08ZxipFuxFWhbjtO/A82h6QMXYwfj9do1WGD
oouEG7wJwn8++cuiivyeTWf1
-----END PRIVATE KEY-----`
export const mock_csca_sha1_rsa_4096 = `-----BEGIN CERTIFICATE-----
MIIFCTCCAvGgAwIBAgIUPfIaBL/H++x5cwbWjRnVae1VV3owDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJbW9ja19jc2NhMB4XDTI0MDYyNzA4NDgyN1oXDTI1MDYy
NzA4NDgyN1owFDESMBAGA1UEAwwJbW9ja19jc2NhMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAt/py0nO8yiepfYAslsLv5zF9/YXSsrdQ9qdhb4rL0GAO
eM/vp6yBCp8ie/qP8/y8xidtjCZmyRTa+QWxCpwW+5s+QA36hJvDW0b7v0t1diA1
LJNwr1SwmmAxteZ81ZPA/D+3uwgRbBcolwQNzqT0s0gLQn8uwpLNsJro/Da3APkl
Ovuz76uc7LIojeWBQUHcUXO/jAcKnV0GBhmo6W+RlNUMGpcO1n6m3qAR6psekyJ9
WrsDZVUAFH7uZTI5HY5bJxu0UexHpXnNHkgjWdws9Drk6MF7UDGR5TegnvaWgII8
+pgwx8kweRMarNm8rM0uIIM/6woWo8rggz8ivHOHwH0unzd4MEeSx7huILZcW2Td
wv5TD2RUxtU4AbrFgAlnKkfq18MIlQCU8Yx+dWRvyUGPJ2BhziS1tlC3Ei6AMrSw
nqxpZz8EhaYDU6tx1jw/SnjbXHgsdQpnD7epuwSUOG91Yqq8fRS2C1imkMrgu1a5
KQ3w9azXWVONQ1wdl16fV9Z9qd0zWUmeOwLapwu7RVO0t3ashzM33eDrmXkl0Z5a
Oh3yPM2KC45iYP/5kEjdqbhXFnThEHcdR8Zu2a7svKRQFefqbq6mRuuPYNBN+hnK
d0jUbwpjdl+FAPney5ev7nAqk6OoP/8645Uqo41UMWRGOwZQcNmEJ0L8/WFqTVUC
AwEAAaNTMFEwHQYDVR0OBBYEFNI6y5wUKPRc1FiuuzeWOpWCf3fDMB8GA1UdIwQY
MBaAFNI6y5wUKPRc1FiuuzeWOpWCf3fDMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
hvcNAQEFBQADggIBAGFjqs5dSQkjCHEOkd1lbXeQvG2MMLhwMS29jOyu2pk97IS2
ah2cZepC3ww48STjQ+uXYZI5Ob2vKUs0KbvQm1ZkrfF41TSkyBG/13aZLiPsPMcb
7Eu9L+xN5vjO2gUEifjuu5oU1FQIZqVGaO7mttgLDSWwj+mVp+nk1u1rnf8ttFDJ
EVVIppJ7k/uoM/5V+cV2a9vbCqd1a0nxGN8JAppHS0Mc2NX3nN6rpmdaTTcPmidm
0JPAJPsyNi1KtLDiR1N2WKakXTjmF97oyxM2uIkVJSGDUYmzRW5Qg5eTy3Adbzpk
9ErTcrQvKw5znDeDntaupx6f/0Izzbsla9J16c4ATNPsdU6DRysv+HTmHQmlirH/
tPqB4TaD+joV6LdxyGcMv/FOkgeyllxKUzdFoh8QyJZAPxOiJJhYud8/cNBhCGWg
uMGxRcwP+pPD0lApldU1uEq317cE1gtnZVjNRiZRuVTzaOA0PH98ExjZrmNgbf5o
iIUrC81FHCcvGJmzJdHosAOLRkFZMZS+7ZQ6+dTE4sQwrmSdSVWxNQTRMDjlHgXR
Nqlr+Uj3X+gds1fa0UO6QvCQUmEnRZxXv57HPKobdPJxGtHBUS+2s/3CdFy0KSHB
DeNeFcCggkhoeQqG9D3EXjGz4gre+XjGaH1wPVW0oQoV5BvKsBsMBz2oaZEX
-----END CERTIFICATE-----`
export const mock_dsc_sha1_rsa_4096 = `-----BEGIN CERTIFICATE-----
MIID9zCCAd+gAwIBAgIUOUB6xleW+ZGTlubYVAXbnjcaBWkwDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJbW9ja19jc2NhMB4XDTI0MDYyNzA4NDgzMVoXDTI1MDYy
NzA4NDgzMVowEzERMA8GA1UEAwwIbW9ja19kc2MwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQCyFWWOPc09c5/tOYYR78hx6VPGFYoap/3g3WTrPInzQyNC
KccAjM9Rwl8oXUzu+ZleKlgX4Z5Q7S3XcTdO5dhuQ5Fd0AKK3dF3HskFe+jkexYP
ISdVMvKHJI8r7d9GicFkrGi2robKWTCdwcaRuGnqJrTS+TuNdAAcHpB7egUm2QEO
dDJVQB8l5Z8kLen8bUteTFoK5eB2Bp8O3TPjX2jS8p79Ii6xJR4D6eUWrkH1rcbe
AIZAVRKLvKWFE4D08OyCp/rQJo/JjNxhknRbsNoSzFpTkXcNsma8VMDrYaLne0eZ
NN7ya2m2e2Fl+ShgMB6KDDDy6K72l0pCrNMph23DAgMBAAGjQjBAMB0GA1UdDgQW
BBQJ+GbaGRiD0cFB9hbhgEkCS77bCDAfBgNVHSMEGDAWgBTSOsucFCj0XNRYrrs3
ljqVgn93wzANBgkqhkiG9w0BAQUFAAOCAgEAipAXJXh2zCrUSRccb6ZspCAQWIYX
3UZ3tIBV7htcSHxlsiPYR5Z89Rj0iS2iMzqYcWJbRAOLG9B2oJPnEvcf2oggZoGf
hxD0NS1lmDbVDkjWsxcED5y4AYd5r0CiM2/JRxqn9+jiWUrJpyCs2idoMzo6wID1
+bTn+/h0Fnyru2aEaTA19ZbD58alkSSQ6ow00W20Kl6ZVVmAggPR3KLXs9vtwq3U
v1MCQQhbUeB76Ju+69K77+yxeTMTpevWSgeOmmc3T+NkKoLi0EcJ/4aTGhdiEcZF
bjgyc2vO2LsBPzNiXpcb/cNm+BOx8STD03xqtQA3sL8Ipgpx9bdOvj+uZtirM6Bm
1VR6W4WaYD0rh6pRgeQCs3Sudd4ZI+ErfP+hhC/CmLk+a+jHuxkMMtZeX+NOQuvc
nOjVlbxXDSOlBK3D6RuVswHGWmq9NDumopGg2WWuizq+BphQQWC0rKdF21um9OaC
hi2vmJ/bxS/Ka3mTbaM/3N3T1pLJnSn3vX4IrRH+wb6iQXzGu0Kc7zdYhWBJsv1e
vK/Cc6gkv9LGCBE4m3qfuK0FTuTUTjq2cZgJObDii3oK36Is9MdOPlGhWU1mamlI
wneTF59va2XHfVHmfEv9nPCDBD7YIOxYiQADJ+CJlbq/oe/l0vXvNq+5ikbUus2E
VeMUAwXpTAUekrk=
-----END CERTIFICATE-----`
export const mock_dsc_key_sha1_rsa_4096 = `-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCyFWWOPc09c5/t
OYYR78hx6VPGFYoap/3g3WTrPInzQyNCKccAjM9Rwl8oXUzu+ZleKlgX4Z5Q7S3X
cTdO5dhuQ5Fd0AKK3dF3HskFe+jkexYPISdVMvKHJI8r7d9GicFkrGi2robKWTCd
wcaRuGnqJrTS+TuNdAAcHpB7egUm2QEOdDJVQB8l5Z8kLen8bUteTFoK5eB2Bp8O
3TPjX2jS8p79Ii6xJR4D6eUWrkH1rcbeAIZAVRKLvKWFE4D08OyCp/rQJo/JjNxh
knRbsNoSzFpTkXcNsma8VMDrYaLne0eZNN7ya2m2e2Fl+ShgMB6KDDDy6K72l0pC
rNMph23DAgMBAAECggEAHQazyN116IBCHu5zVdUZfMelKfI00mdzUAWF/3mcmpPk
2VHp58MLv63IyNF8Sq9QOjL4rNvPbC1cfXMsqqV4A3Dr7riK0YuaKqpP5Z7utN8D
F3A18wMc2L4yv9xDukGVzgzz/GKyAaVL8Uq2TOYcDVhFvOV2uXWg1vR8ZEPdNxl9
j/9RfLYuJiQHlJ+6xT60/JFLN9AVNRD5vukZXLSIdy3El0mEsevLlZcUmzz+dJ+F
WaVKOKRir6coAn+gNBbp7haQ6ecnucQyIADDMO05R36IzD64H9aifuvZJ4z6/lbd
DlezZ4zPL7N7CVogn+nBDjioD+iFVpqUa+CINwbacQKBgQDypn9Qetp3G+4pwWze
ivWuhPjA/UYw0jabizqi0yTqPmRkNhuf/AL5xgPMNmH0pq+4XuzdJEtLtHjv7vpT
l26Djxwb/B2CqQUTNdjFWq2aAWGBt0L7zl/5z3R/ogj0KVrfz1RqPmE7zgpERY/8
Iiz7fIjg9ceBpFVyfDuhuicjBQKBgQC74YlimGdowx7Eyruw4MaY++DO2nM6wZ8O
fj8aZAO6pRYSZOh1B6iyLjWcMyHwMAeMMRPbAea1Drl77vipwNgDsmVn2h729fgv
1Z6rdunLPiQ8k3+ypHA7CidVxHppvPrLQ79Xb3H6/i/EGT2/cAsR/Wo82cpYDIT4
QvG9+sg4JwKBgQCKrj31cUGK8Zucob/nMORZagYBxr9nB73OCDTq+mIOvroBzCrd
tNq+hj2FaU9y1BF5/kbB3QxrqCm2d476V4ICDriyBdWX56HO6OeLY9f0PPXNfT/7
SmfwDnE2wRT89uXJJGXKkvxfgdK8UkWIhL/Qu8w/RjlQDuwHEpnCRPI5QQKBgGom
E7vbxVkAHIssy3w0kp/uduYHr+C7cgT7OOXNKfoyuVStJFSyfhIlX26fyQXt7OW8
+K3c1h7ncc5ehqlJ5gG4sehJ6QK4l39XHu1bIt4MfuamoxgoJayFoRGpD0xcVAmx
fhKFSY14PT560FMvl2GTnolAtzyl3h5xnCks3iAzAoGBAO432byCx+qpdPST9/Vc
T6d6bpNA4Ozcs0nFSfuBbHyUXP2M7j26QrEVOlPqdnp7oHRUIqJTNEiQK2avSSgl
kA4pOhZnWoSso9huxc2ookVVvuWWSZeOhqheOVL4cxTwTjLXQzUa+cjVuVaE1+iD
hxoG8r16SNNAZudx/NDpx1hO
-----END PRIVATE KEY-----`
export const mock_csca_sha256_rsa_2048 = `-----BEGIN CERTIFICATE-----
MIID2TCCAsGgAwIBAgIUZJXTESdl0B2qGCUUzv50dNl4VwEwDQYJKoZIhvcNAQEL
BQAwfDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJTRjEaMBgG
A1UECgwRUHJvb2Ygb2YgUGFzc3BvcnQxGTAXBgNVBAsMEG1vZHVsdXMgZGl2aXNp
b24xHDAaBgNVBAMME3R1cm5vZmZ0aGlzY29tcHV0ZXIwHhcNMjQwNjE1MTkwNzM5
WhcNMjUwNjE1MTkwNzM5WjB8MQswCQYDVQQGEwJVUzELMAkGA1UECAwCQ0ExCzAJ
BgNVBAcMAlNGMRowGAYDVQQKDBFQcm9vZiBvZiBQYXNzcG9ydDEZMBcGA1UECwwQ
bW9kdWx1cyBkaXZpc2lvbjEcMBoGA1UEAwwTdHVybm9mZnRoaXNjb21wdXRlcjCC
ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKtZGeGlIfA++frmdS4u4YtP
hgY44in+fg23OL8OvTGzBZlGLYTfMHoOswCu2n25qQKXOMyGflLLaNcsSp2pFxta
WEem4iigvxKLpzLSj9K724yN9Zx7BT+3PCIDdi9YpD7h3PA0thVrJVw6N9kPfq1D
n1MqL6SVkcTgjYtT2zTsjmCJhMmNZhogepuUHfAsvexkedCgXts9xZeyvwlC4/r2
WzHqJtorV9yHDwfAYktQXCpXyR7K1rzaVyqzOpmqN772CkaZ05ryIhIVTHHNYx1C
cHXWlj3Y5XDEu6dkCRr4aYowUOyKW9/4KY6ubdTTsjY+9ZuXlaGMDG+Fi/i3a48C
AwEAAaNTMFEwHQYDVR0OBBYEFBJbmiiOdIiv7SWL8DYQ41D+qbkyMB8GA1UdIwQY
MBaAFBJbmiiOdIiv7SWL8DYQ41D+qbkyMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
hvcNAQELBQADggEBAIoHhFao/9ubVRk5Uw/oW9rOTWSG+6yVXD4dYsrzxGGP+gXb
ftgfk4IvkTi1zGZMgN6e3eDIg6/xpoKDGNgKX9Bqa3vdeKgIyyWYlSqRJhsRnmMP
em+yZOTcNKaebx7h6Zokw7+dFKcDV5TjbkB7WYNoejp1bbCo0kNcd6C5N+WmTJkI
0rcRlUErjhIhL3DweERauQnkIltElAwV7Hiwei2cpVl6tLiWO4GydliwxxFod8AW
h88UCDvQ5BjuDnIEW1pER9MbEa5TcQa97D1ads0Unt16E86QIelLxAgdBFvd+4ip
BgA3N9B0gIhmwTvjrGT3WSG+GpQmmokIx+1bRNI=
-----END CERTIFICATE-----`
export const mock_dsc_sha256_rsa_2048 = `-----BEGIN CERTIFICATE-----
MIIDzzCCAregAwIBAgIURN604AIW+1RhbYMsyVJsuzSSrqkwDQYJKoZIhvcNAQEL
BQAwfDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQswCQYDVQQHDAJTRjEaMBgG
A1UECgwRUHJvb2Ygb2YgUGFzc3BvcnQxGTAXBgNVBAsMEG1vZHVsdXMgZGl2aXNp
b24xHDAaBgNVBAMME3R1cm5vZmZ0aGlzY29tcHV0ZXIwHhcNMjQwNjE1MTkyMDIz
WhcNMjUwNjE1MTkyMDIzWjCBgjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQsw
CQYDVQQHDAJTRjEaMBgGA1UECgwRUHJvb2Ygb2YgUGFzc3BvcnQxHzAdBgNVBAsM
Fm1vZHVsdXMgZGl2aXNpb24gLSBkc2MxHDAaBgNVBAMME3R1cm5vZmZ0aGlzY29t
cHV0ZXIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVhMyL99jHB5Q3
qqo3UR2e1aI/CarEYmafllEh3qVQ1aNJ2FKixrm8wvLgenDlpsjpnEwElpHJwFvl
pWBKf3a1KXB7uV0SBlXep7sFNbjnzfl9Zr0CbrokjWjHPAzQ0xb14HPZ1TEydHge
B0k/ZlAjUWiGV/ecOm7IFZEA6dYca5gj4D5AP/oCS2dt24rjqvnL0xF868V/Jxui
lLQR92jg1NimYIkB3huqqb8tn5wa/was8EnUYyvb1lTWEvarBkFHXpeUB1/iB3tB
aoNHm/blH3PpFjsx5eZKRvhT7I03EnvZ7HEMHvWSPHG3CY70kGjfJ6jqP1gg2nwT
ZJOwsszNAgMBAAGjQjBAMB0GA1UdDgQWBBTsFOiOCA5VDLRUCHKX5kXXFLWsODAf
BgNVHSMEGDAWgBQSW5oojnSIr+0li/A2EONQ/qm5MjANBgkqhkiG9w0BAQsFAAOC
AQEAaP7Xvj2gC4/mL7FvroObicJU2ziFs1VCtUvJSqkqFR592QpWWGsyjZ6PJz3o
ghU2sSEFk2toI3s8Gv0q1NbkafOqPjk0dwuWWQ8dguDmjp7T+Sltu4f9VQJizVBF
LkYTkJCu1UhFWM08NS/JCyjoNEN7JUHD46MzV1Q8yf8UB55jlvRpfqXM+0wUkWtO
Fv00AEvS6Tdui1MbZ/HJAkFsV83ZkYb+wOZAqmh0+Ea46dzMlwuYweKl596fwozo
ZFFNG/h2wwkcakWW1fW980jyvj+Gm6k45YworZ+bT8uoWZTloo1MUFMjdsVRI8FL
M68d6u5tbDtdO8mMPeMIRMq/ug==
-----END CERTIFICATE-----`
export const mock_csca_sha256_rsa_4096 = `-----BEGIN CERTIFICATE-----
MIIFpzCCA4+gAwIBAgIUVGoAk38qsh7YYIE2eANMIeZkr+IwDQYJKoZIhvcNAQEL
@@ -59,5 +229,224 @@ v9tNSlP4Tyzr2b1VoQcgmpQ987afINJG39lq2OsSrlK87p9bB4yoFSZwOfqok0nM
IICRxBuTUHLqP3Nhvo+tAl+iK848LDJVf87ZVQHl72JX4lkVvOo5LCXnOQPyowaP
D++J2c6tUj6gs9HAKVX7fH06m/2T5fJHae/OYx36O242yBXPQdHx6qloF/DNvGyM
EHC3NCCjLG5m6G0=
-----END CERTIFICATE-----
`
-----END CERTIFICATE-----`
export const mock_dsc_sha256_rsa_4096 = `-----BEGIN CERTIFICATE-----
MIIEkDCCAnigAwIBAgIUVWuy5jJJ5sj+QZfD5gWs3rESlFswDQYJKoZIhvcNAQEL
BQAwYzELMAkGA1UEBhMCWFgxEjAQBgNVBAgMCU1vY2tTdGF0ZTERMA8GA1UEBwwI
TW9ja0NpdHkxGTAXBgNVBAoMEE1vY2tPcmdhbml6YXRpb24xEjAQBgNVBAMMCW1v
Y2tfY3NjYTAeFw0yNDA2MTgxOTA4NTRaFw0yNTA2MTgxOTA4NTRaMF0xCzAJBgNV
BAYTAlhYMRIwEAYDVQQIDAlNb2NrU3RhdGUxETAPBgNVBAcMCE1vY2tDaXR5MRkw
FwYDVQQKDBBNb2NrT3JnYW5pemF0aW9uMQwwCgYDVQQDDANkc2MwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDbmfvDt6mQHKcWF2mkPjF1BPS0Tggh6Gdt
/A6DCsxrb60ktxMlFm1EOkMwwf7GO2vJ/VThYqHKP+1jf8l327PNSawsZrM86dai
d8yMpim+5YMtWQfCrSzpdszusD3SSPpkUzRnYSUa5M1nywktnosYCFBQmFoS47Ya
0j6xnPp0tXEldGXqUMUF4RJRxF17u46yy4UIEk2KfJQP3aHfKaB6PRkseRw9g5Pu
RPDYTdz9KKpLeTC8YCibwKULn5oAmyz38Li099FrofAD5fbg+3b18v5l4k95bIIq
DmpeyA1Pzgr+XsdzCjL0vYMmE0xaZ4b/HWiL2Ogoy1NBH4JGmPovAgMBAAGjQjBA
MB0GA1UdDgQWBBQvTV8qsxZT6yjcGTfPp/G1g+eQkDAfBgNVHSMEGDAWgBRUaGBM
XQcIm9LEq0TQG9W1A0y3RzANBgkqhkiG9w0BAQsFAAOCAgEADYR3J1O45bTBx73a
o45qJJQAJhHAe3VhajphGPm3hpBeM2VewEZU0NIMon0Ov1dHvYudFniYiFdZMefe
CuqE9Deb39egDO1lCd2dGjybRbhg4Zr8vLqRwsG3bjdYGl6PXwyg0OsB0QbdKpm4
tVRT970BF2LefC5vdlQpeCuLas7gkxL469+LJicXotYlO3Le+CknMYEdALjvEapc
1u7jlJFlD2xx3l8+Exkon3EzgRokp3fu9ztU4Y2j3KGdieSDJ4rYfPoyDR7HCcEd
HDYCsjBAYi6Zrjz5M0Nm99/O+4vCma7MnGkBtA63ABTDjjxIv6eeu5JxhrI8PXwE
VQ9CAmM6Wh52QebRMx1adxUqTe/rwCAwuA4v1jXSlb1BTfL+7ra1k7PYYczmnskc
jVscaxnKBVq12Pg1D03LkeMPQiqWTQ7pOPz1AKQ3TIlhsuf/jXner4cYQbeIpGwf
WatGH8+eROdlpTfF/xaAUbCJ2UYjRUupGkrpU5KkS9FxrJSVS44PO3xuJwQJN1fC
x2clYiqOEhyESrTp6c5XAGK78S0dwBP2R9o7GqY5xNI+kXBJakqyVpwIPRDq4HVo
y9QRS1jM1G/2Y1XAE9pMdMjdhfYCCp/lO48swOQDty137gzfffo0Bn0039VKzhgi
nUCb8Z7CclWppvFAVjnJruJbGp4=
-----END CERTIFICATE-----`
export const mock_dsc_key_sha256_rsa_4096 = `-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDbmfvDt6mQHKcW
F2mkPjF1BPS0Tggh6Gdt/A6DCsxrb60ktxMlFm1EOkMwwf7GO2vJ/VThYqHKP+1j
f8l327PNSawsZrM86daid8yMpim+5YMtWQfCrSzpdszusD3SSPpkUzRnYSUa5M1n
ywktnosYCFBQmFoS47Ya0j6xnPp0tXEldGXqUMUF4RJRxF17u46yy4UIEk2KfJQP
3aHfKaB6PRkseRw9g5PuRPDYTdz9KKpLeTC8YCibwKULn5oAmyz38Li099FrofAD
5fbg+3b18v5l4k95bIIqDmpeyA1Pzgr+XsdzCjL0vYMmE0xaZ4b/HWiL2Ogoy1NB
H4JGmPovAgMBAAECggEAEBJ2gy4DenkmX28KO8uTehGJSVL2tGiafUm31C5rpKdR
QEEn5Qx9pcMv3LcuCtsZefiRCEfcOH2yRZh6KcwKHkm4kK1Zi+k/XLew4FBe+Mo6
bgy4jS54fYPE3ulGNQhDTylpyfEpsoyxXdnVy6FxY6pkGmn0GbLRxqfBj+VBzV3B
euHX+XYgRlBnbEye3I89dvITK5gk/rYwy3N3ja8B9lb4pAkdp7RGnood/5KqbV3h
DhhFWsXnYF36DGx6Q45P20XxQvQpxiagu4NZQ6ooMZaCU0w271tdmXTdhkYYdIvV
elR6D9djY6aO9Ec/fvAjCsXJAhkIkDFuXI+tayUqCQKBgQDwiOnhrpUGbaEv6OpF
ukfAhnGKJv8vhEU5fKsHNx7NzbeUSy4dqkFZQRu46dfWyyY6moz8OeWBeQ8Sdqgp
Inh34UV6X8pPWDmB22fVxuy4/qLNaZayhKUr756mLppfpHxw1kz92UtX8LcxPFir
eeaCGJ1dDVDEDIO39dv6EOg3hwKBgQDpuIR+PUabQ/cZQ/FT7Fu03Wls0eZwoCHD
rx/Dc5L3v8QLsq9uSv8R1G4sZJd9FI7xYxaqWm+mdDNuiMUFUiLYcXBs59JxYVYu
54+e326vrQjxq28sXRQkTtp1YGuodTXmk6ucspD4QvrkiQjN3B7QtQiHiaGJo5r4
naRMCr+CGQKBgQC2uLs61r2ckYFl/MCi0XyaU0dDFJa8CPXxUrQ1mfjLjF/NxkK1
BFX6MIyXrwRoxhA3app5LJ4c+dKqSvs5rFbpcnauHMB5/+JHtF2vtxqy+bTA6Foz
KLK0qqXRRgu9Zh2mNhVsrTogBtuTCm2tbb/eykYYnvngxET3ZUyDLX7KVwKBgQCC
vfJ3/+Ugc/ulSYmVTdHbMkSIWD7VX+6jXbKiDmP3bXHIrXNPemqHWdMryDWqBbcU
tz51m1N7xOMEgUPdfx35ADRI58GkJTQl1ulTkV+ErIIlVqZBJexfhzDTmlV/DdpS
GudUJ9vK1QUulK21It6mF68mysnvifLmAqFm3FhW+QKBgQDVSCw1x3QAtkSswJRX
NFGvIdBSeGBqPpyn4XVU8eQav/uZcjcrB77AemaCG/BwGDQA/nU0eUam0cJn3MP2
NDxMDWR56waCH8Ug/iC0ickLaev1lwj9FvwRpmDLxbmJM4aQgbQw/I1KkSP4ZOAO
2+/QeO6/dvQ2u8OvYn6l0Ls41g==
-----END PRIVATE KEY-----`
export const mock_csca_sha256_rsapss_2048 = `-----BEGIN CERTIFICATE-----
MIIDbzCCAiOgAwIBAgIUOXPStXBBfo+yy5ooXC8RB8EeoXMwQQYJKoZIhvcNAQEK
MDSgDzANBglghkgBZQMEAgEFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgEF
AKIDAgEgMBQxEjAQBgNVBAMMCU1vY2sgQ1NDQTAeFw0yNDA2MjkxNTI1MjJaFw0z
NDA2MjcxNTI1MjJaMBQxEjAQBgNVBAMMCU1vY2sgQ1NDQTCCASAwCwYJKoZIhvcN
AQEKA4IBDwAwggEKAoIBAQCrA2pH2+JptsgXVKIwjLSFD2YeNMjKxhzpPPRmDxI+
wI7CoHE2OrpC8egastg7zn8YSjmq0WG+bSbokGATZ3v6klmK/IUsIEsFBNdT3Srm
knqSsOq+dUNbFj4LZqvb1UIU0m6/LFSTVNmF/tXps84AZNr10t8CyQ4/DWPMdGhR
56J36eTg46ZNuf+wdI8o9qMuFs0MBhH1tjGUD3jcNa9y8I+A8r7KkwuIntytNkU+
3jPVgzH5OT5WUyloXf6ixRmE+wNEGKRnM8VVIQTimXHeLzvTkoJ0ZutkG5Xty3eB
pFrZKrtIpomUKYQceTacCRoMBaYx7psBFIm0BFRnealBAgMBAAGjUzBRMB0GA1Ud
DgQWBBQYPvmGrUQIKMOQCtgR0WPfr8zuVzAfBgNVHSMEGDAWgBQYPvmGrUQIKMOQ
CtgR0WPfr8zuVzAPBgNVHRMBAf8EBTADAQH/MEEGCSqGSIb3DQEBCjA0oA8wDQYJ
YIZIAWUDBAIBBQChHDAaBgkqhkiG9w0BAQgwDQYJYIZIAWUDBAIBBQCiAwIBIAOC
AQEAjqa/umDzAFrm9RoQnv9/RwEo5u92Mx8PDU18/tbRM9ZhGHRCnqn0kftFBAXb
40kyFxThOVv5gyMd0hcJYlZhzLRqymN11Qry4cEWp9YSGXB7rfst+YvoFYa+W/kD
Mh6+zaJVfiWJoaW/G43j6b4Iarzhiu+hl4WXiQJFQ6Ya3o/MwEQmBV/RnmKHcEq4
tmmZDfBnFxY3RfSPliR81niP0EWD0pxIDI6CzuuqmI+vXnRRob3MAa8mfefof34T
rA0kQqEcklmJFh95bOODC7UjOZlDDTEt7Mxg8CGKwrBxaEN79XCfpDH6kPnNqnfl
W3IkvjmEJJY6dZOOrjyYZ+2ReA==
-----END CERTIFICATE-----`
export const mock_dsc_sha256_rsapss_2048 = `-----BEGIN CERTIFICATE-----
MIIDXTCCAhGgAwIBAgIUbOJrpiPFgnwWkNUmues/B8JMbf8wQQYJKoZIhvcNAQEK
MDSgDzANBglghkgBZQMEAgEFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgEF
AKIDAgEgMBQxEjAQBgNVBAMMCU1vY2sgQ1NDQTAeFw0yNDA2MjkxNTI1MjJaFw0y
OTA2MjgxNTI1MjJaMBMxETAPBgNVBAMMCE1vY2sgRFNDMIIBIDALBgkqhkiG9w0B
AQoDggEPADCCAQoCggEBAMHHISQWwp1DwHjEriD/xxOUZXkvsEiLRFV+brQSzFhX
dAo4BvVo8FeDR+YNFxxC9aO2IZDKGiMIzNvECvL+sPnzaF21tr1I6gleWqlAW+VT
oivtpUDR9iBmg1zj2+a2R/09YSS8EN/j1X3zq9brEXCv9Mt2iOUis3oAanRr43Jr
pRSViaeVt8TpDf5V/Wj7kOnYtCgzfAQErP7zOARPSC2+zI1v0Uma7EVoGgzwbG+D
jYQITwBDrNL8bQWXDJvKkdY7s2uRRSdTbhOCvQyAZM1xXxiTxMkO8E/IUXTfPA67
dR3D/fgc8W7DrzF+cKnrtPeIjhfmM0sDFAKUZCi09RECAwEAAaNCMEAwHQYDVR0O
BBYEFNMfaLhjl1+bostxDIB2HKAT53DVMB8GA1UdIwQYMBaAFBg++YatRAgow5AK
2BHRY9+vzO5XMEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkq
hkiG9w0BAQgwDQYJYIZIAWUDBAIBBQCiAwIBIAOCAQEApZ8ZoneEw8gYQ+gsGjxi
xE2om6hf9dfFt5Ui86HPIfRd3y2CMvoAnmpFd8ZLjTugbetYq9S5TlLlTK/gD7bR
FdkU88m8mVwJISyWappsH6HuEaZiMjThAtcPfBP4iE+RT74uNAp70UJubvsap7FW
CgJQjLO9n2Ek7IWj1yy0BBTl5UWCsCBdv8CSDorBI+UlOyzbFMvl2wxp8MMOw8oZ
Z3WWH5U/MDtSFDQFTJLRTIlPHl5wtoqCLgZC+fqqmnY1oHPj7KCv2lIFHuTdCbrD
QVmOLpEmz/j8CpSgXpMqBp9A5KTjfZaW5FvBw4O3I7JapyZold9gt50G33ky35S0
gQ==
-----END CERTIFICATE-----`
export const mock_dsc_key_sha256_rsapss_2048 = `-----BEGIN PRIVATE KEY-----
MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEAwcchJBbCnUPAeMSu
IP/HE5RleS+wSItEVX5utBLMWFd0CjgG9WjwV4NH5g0XHEL1o7YhkMoaIwjM28QK
8v6w+fNoXbW2vUjqCV5aqUBb5VOiK+2lQNH2IGaDXOPb5rZH/T1hJLwQ3+PVffOr
1usRcK/0y3aI5SKzegBqdGvjcmulFJWJp5W3xOkN/lX9aPuQ6di0KDN8BASs/vM4
BE9ILb7MjW/RSZrsRWgaDPBsb4ONhAhPAEOs0vxtBZcMm8qR1juza5FFJ1NuE4K9
DIBkzXFfGJPEyQ7wT8hRdN88Drt1HcP9+BzxbsOvMX5wqeu094iOF+YzSwMUApRk
KLT1EQIDAQABAoIBACv85RQJKqKCh8WieBi7l1hlfmd1IOJG4vs5WS39em+vYoMT
VtkMukpTXdXmMNHUjWhdZt80UZyUWdSlewrQMCJ9U7q6DkKHs8Dur0vudS3ov06T
gsjlIKcYPkeu3fNQe6UL8upg2r/IO2V9FAwUjn/zIXGydb72EqHmSEQnXZlSWp1y
UyRVLRpvgP9q+wuUbI1eJowPM5UwOpJo/8GiyWQ6B9TWn6FBTX2VpeTl2GTm7t4m
yXsuHExwXbElSmdxiSWWoCIpV36f++1F1zgRGBpf+DJrgbbDfidyQklImP5dYc8w
/TnWJQwNqMh/0bRpGPE4cnC50F0FS/f++ZLyZbECgYEA9uz7ACbzuemApzXmXPe1
NTKaMZPRqHL38amSd05KUG0NTOTqJVXrvmwXMi0TLRRJZ+xExfdqNhyL/kMJ25iT
1ryjz1y3P2p6d9w8BkFsi6A471Odn2dNg3XVMU4FjHOZ70mDgS5zZZEY+dgeifYc
2Aozfbv+NJKkh8L9UF/XwCUCgYEAyOYldmhhrb6OoTRl4RCyXoHNTTb3KWACxcjr
FUsh8fh9qvj17VfwG7+NuhwPv0zr/jy5MyJKIcho7YVTmtPkucXY1newvzQfn+W3
JCIOs0bteD8BDa6efq3+c/G7YNi+2bUF9OamqE6ScsCX+lC2P/PLszpCuuPXjZXn
wTS0p30CgYEAhcAp2ZQ/0sU7jdcxV8xJWG53fUFPgIn96eXrUzqSIGxhlvQsLFsV
HglYqzIlP/bMKEGfowf4fSULY4eWkF9ePSPjK1BSZkRb4A7oaI8Jp7v6+w/0wkJn
hzzNZS6Y7NI1YJsWY2Pw1+Q3fiXlrN8mEpO7/nBVKs7/1hX1tpKjwA0CgYA6Lo0C
8c/4JYvhG++1csR1oln21shV7zxeU4XhsNSv4yth7KAskJ81KhC9qYrV+E0QYD2y
lWeqyQO6ZjaETIGdW7MkyZ0igtH12O1lRYfEW/JCNNz1PXEhdvqOUZ/WuG7tVgPX
nUT+0WKQYT6ie+WMN+ryiRjyTzIKCzQHPGBlcQKBgQDFP00AGgLW8yQYj5rxNdif
ok4FOnU5hQHaDwDGqc51Xpl1SqTUc8sNYDqauMIupoq9c37lCzljUakLpFra1DK1
i4UYRl1inWp3BqGVE5V0GN/NYAtQiKUNM5iXf+10UUNrlsJujD6DQL0tttnAFsWl
gR8ctVfp/DLstUdwl54qiQ==
-----END PRIVATE KEY-----`
export const mock_csca_sha256_rsapss_4096 = `-----BEGIN CERTIFICATE-----
MIIFbzCCAyOgAwIBAgIUcPyz9NNu9cv8bmvhreKdo5w6JhcwQQYJKoZIhvcNAQEK
MDSgDzANBglghkgBZQMEAgEFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgEF
AKIDAgEgMBQxEjAQBgNVBAMMCU1vY2sgQ1NDQTAeFw0yNDA2MjkxNTQzNTBaFw0z
NDA2MjcxNTQzNTBaMBQxEjAQBgNVBAMMCU1vY2sgQ1NDQTCCAiAwCwYJKoZIhvcN
AQEKA4ICDwAwggIKAoICAQDHnCloSc6AwW4YfCOBdKp0PbsGy3bykmWYHakCjGPb
GeaKIrHIuJBjJb0QF0wmGgtkgTKLQtRwClDxKg9y9vru90gZzZ/o729McC7xGLq7
S137By1hRPMqtJjYQTDrC33Wq0IwI+c3U11+TcS3fosJ9mLBmGkT69eO9nZ4wAHo
0oyK0x/OxpEsVimJFyWiYBFmHK/rxwFP0cybpg1U0If8TGf5R0fBTpGzUxbtqf1F
RDMPSOYwF+hvCyyqC7uIe9mB/0HAAHx6DxcXoxiOQFFvFJ855aTIB+lNngLjA+AV
8qiA7TIBbSJNYQIrNxoKO570t8UkvQ1gMJKbzuZZqCxxYHYs88/l27BQ4Et8yVis
zMLVLljtIIK1falI96iXavoIJwzu26skb0B4koTzhISQNiqrcq3ZGmR8Q4YBOOjt
gHsmZnvFiTq6XmbUVsGECLNvQj9Afflt/KY200bLpumVVtMshW30tT4lUPOCyKEM
bGPR2znowm8qlS7heQ0MK//mpz2CcYn/OsXiWti/6pLmfgCy/k48NCUX5jOVpuoQ
Cm6dLp5Rxe+cHSw/btcI3yu4FxuunSh9OQF6dYd+dZAvEahrD23O/+g68B92Y/Gd
d3H/6/nYZdL2VbT5CAA4F/GMBlqSXaIp/I8zMjkbrMgIBbFXAwmSS++rEu03ldtS
IQIDAQABo1MwUTAdBgNVHQ4EFgQUPKXfRIsfGKkfqmZMJiHriBUBfbswHwYDVR0j
BBgwFoAUPKXfRIsfGKkfqmZMJiHriBUBfbswDwYDVR0TAQH/BAUwAwEB/zBBBgkq
hkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAQUAoRwwGgYJKoZIhvcNAQEIMA0GCWCG
SAFlAwQCAQUAogMCASADggIBABZ/KiLl6XqJugAXXFrsOQ0DKsa/Hc1oQO2thZWl
k5zr7/i8OH1Jh+uPdOFAYEx0Oa/w0xVYfn7j/QR+VDdlycAQ5tdStP8nUp5QZwG9
x90SUZ7jl2Cab+qGHNH+cZFQve+ArH3l+vc2aMYgzYEmk5GokRWXVcIb/2m2vD4Z
2S86RRhyfpb1M7Oo1OrdySdLJdTa9DVlOwfwlnHBfI1/Vqx/Jt8EZ+GMVHXj41IZ
TedFFKiSpe37mWBEEHG+h/fFgi2Txh8OIEZoUDJWynatFJbRwsVdwZnXlbhnLB4g
68L9fIrwpTdDjV+y02pgyKkGojxvhduV279Det9G+vH+i+qicIbJAbj7hJ6LmYdt
xPnlMfH3dcSxAvUoreNC4xhCKArhySgjHNI5gJ6Yk5XNxLrj7N4+N2wx4z35NkAR
nY63+meescNm8peF6pNYsJjFAbKuAyIuw8rAUC8hr75xGdnBgBgjD71m5AMnogbf
JrurbPjiZ+f+ie/WAI730Mo3OOKnv6z+6qIPr4KqM9MOpECp9u8J0VcWhIDCrYhe
ZOhjTvvbwLrq4Smh8iH6C20IZFK5Je//SOkolBvsRh6ToQoJerR1lWGVlX4ljN8o
9g5hp1KC7Fe25/7Ga14YFAjrXIeRp59zpNCkX4swvUQiSYM4BQTsaNmBEvQQnlT+
9OCw
-----END CERTIFICATE-----`
export const mock_dsc_sha256_rsapss_4096 = `-----BEGIN CERTIFICATE-----
MIIEXTCCAhGgAwIBAgIUdS5K/Y5Ty0C8hDFibjmvBeQr4SgwQQYJKoZIhvcNAQEK
MDSgDzANBglghkgBZQMEAgEFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgEF
AKIDAgEgMBQxEjAQBgNVBAMMCU1vY2sgQ1NDQTAeFw0yNDA2MjkxNTQzNTBaFw0y
OTA2MjgxNTQzNTBaMBMxETAPBgNVBAMMCE1vY2sgRFNDMIIBIDALBgkqhkiG9w0B
AQoDggEPADCCAQoCggEBAPA3vVaGvzo4jKssVHzb/Ocel+K2TRnwUTtWMedwPj6c
xaiAdx/QpBPDV7lDIAVwWGERCJkrKF6mzDcGR+c+ANbmMY9sW+lSrSSK0VycRKmq
iSiOAYLGf70Owq+lqxEu3oFeXLLJ7C6oXWaYyDUEB8lqs8s8cNxb/uUcqYkuGayu
/pu5f2LxXM2/ieaYdfULQPlkWAhkbs4gERVWNfnUFRK4gYFLEWaT6fAHIaHnnRSO
Jt7xQl94FpuFCLzB7agg/jwuOmfVQS8ISda2O8uDaIDdA2536Hf89vDZXZ0EboPq
JoDYT3BGjoOYROariywgJc1B3JHxDdX4w5FKgY03PIcCAwEAAaNCMEAwHQYDVR0O
BBYEFKFL3WvKxngqdWX909QLsr4d/JDVMB8GA1UdIwQYMBaAFDyl30SLHxipH6pm
TCYh64gVAX27MEEGCSqGSIb3DQEBCjA0oA8wDQYJYIZIAWUDBAIBBQChHDAaBgkq
hkiG9w0BAQgwDQYJYIZIAWUDBAIBBQCiAwIBIAOCAgEACyyjRAoe1d8hzMtNS+wv
Tu0oKQ2TbI1dpYKMqEdTxN+BIxKxblieCDTkx2c3VmlBQFjpf4c6RqpG0SqihtPa
6XP9ZUiYjrHgTGebeQ/aXS824vCAosCt45sEqTSIV5uBvBqKDNdwL1NP8lxinuNG
Lr+7m0wZ1soLQh53tP/G7SU8q1Z/ZIhuYMBX90LsDlR4h8diPAvYJhFkb6//rx3n
gLGmSiQdbtY9EhkNhsPx2tOj8eCKcgWh1TEYllwXCcfW+fs9wLD0l87eRUW5bzuB
H9jozpEbd2HCn7xLsLn8sjmO4P8Qczx00X+eY4FkjMk4w+HDwokPXPTVyBX5ZX4p
qsHHRz+6uLSSY/q6HTcdHFCacs1VETI4i9UG0YjY4A3EPAUNvgz/GIn7Lja/JxSH
wvJoPVJzopzyZsUUeD1GpUE6yVgA31/E1+diJ5S/ZKHHmyl8nf/H1hzUl9o/Sz/7
pCrZG4WfUY8ifggReHLoLWSFF8S4JqBKykRu67fbkXLe52VgnYSv6GVxvf1N7mhD
O50iFYNDXId0SgL+adTylqIsr5l5BQw84vf2m+PO8xX2PPFTO6kUsivr9d5cUgVh
duDfJWPas4d3FKdmuSqnUUh7tGWZctzXnA0kBVXa1j5OtU5w+1qp9pbtv/kci2OH
FnvLWs1nzkj58FcjpVG0+ZM=
-----END CERTIFICATE-----`
export const mock_dsc_key_sha256_rsapss_4096 = `-----BEGIN PRIVATE KEY-----
MIIEvAIBADALBgkqhkiG9w0BAQoEggSoMIIEpAIBAAKCAQEA8De9Voa/OjiMqyxU
fNv85x6X4rZNGfBRO1Yx53A+PpzFqIB3H9CkE8NXuUMgBXBYYREImSsoXqbMNwZH
5z4A1uYxj2xb6VKtJIrRXJxEqaqJKI4BgsZ/vQ7Cr6WrES7egV5cssnsLqhdZpjI
NQQHyWqzyzxw3Fv+5RypiS4ZrK7+m7l/YvFczb+J5ph19QtA+WRYCGRuziARFVY1
+dQVEriBgUsRZpPp8AchoeedFI4m3vFCX3gWm4UIvMHtqCD+PC46Z9VBLwhJ1rY7
y4NogN0Dbnfod/z28NldnQRug+omgNhPcEaOg5hE5quLLCAlzUHckfEN1fjDkUqB
jTc8hwIDAQABAoIBAHEoULCp2Pr8GIep4kLO/luBNds+NSO66QkimW+EmE22XAX8
PiFmj2Qf6PsEe9kUCw3ukDZW9jVgLWLeOpDbzFlvJnmBeep3X8iO/AC8PDwQcXwB
KQUJrLLKeTt0txjpEzet080FAZUZCqaB4g3XUDO5Z+idGC01yOT0k4hjhwSooPQh
Bh6Ufi5ENMORLyyDD9MVlVZVHFIeGD7zmoo+HobeSdhBTHoe0L/ppwN8UABpRH5n
mFzVixE7xqJoPFY5zpkV/gecYgPFVFfG+1ALyp2s6moWyExxOl30zF5WjerTGfRl
Tbo0irz/fb8CPFmvO28FF9y4qby/wC4VUxfAa4ECgYEA+V6BWaI6sWLro5i8/Gpo
kZy+sVowqjhhc0DSaIXJTHL5Z8EjwE7C7rbMTcHAZUDuq7zC0t3lqdljaiCg8EQz
douLsjbbkypfILyUjEWE5PuDPWV0LrIIwJuXz37o8hDl/1fC2JPB8Z9SKzlZlswQ
4ur3ksOudtOaAj9Xu4zXI58CgYEA9prwar9/b8GUH45a9Fpjj6rhrxKvRJ/f1R1S
kStlZUYmUTi7FF1xwwuip/u470eScB/CYWfZm1aKPIKqDi/NHewrMk2MEz/XENig
w7LHsjYDiGpBu3ioMsHs41YjnEfBT3+YZhT0BTqxvqxTQOWzq/p/1SruOF2jtMzT
6pQD/hkCgYEAp9m99WhmW1o7RD4eD0VMp567GMOdeCZFKf/a4PIUofnN+NGfT+Vz
/pxafohJCZ6gSEbhWHB2E1K5QQk/axptDYE2gbm9KJzftThaQOTWZA8Lsrrkbj31
+DeDAu7ou282cR5Qj9k9NXdJJsEOlZs8TpFcHZTLjT43LwYV9q8BbP8CgYATzceG
2xAR2nrZueXl/6hFLlTnaVm36hrgk3VBATooUuTa2vJzJTnwjuumD9n/JUFGTdaf
Weaoyd9aEqgzcXVIdOHXLVEVbqgHy03FyYKt9hZ8iwPyWTMwuFAcxZsgfsawaq/D
auVZ0ifaBx68dHXkVr6TUNpGnoZ6C4TtLqvPaQKBgQDm66dlLxat1KDfEMXmpOMq
MNaFmxLFgtNngCKgGxHcjOtaMYonPGXVO1uBn+aM4Bcj3Kx21zm8DJBLQmUyIzjc
bUTICRnwWI2dWQz/K5VQuMdEDhxpzDw4uhBun97HlwEZnQnMxrf4whDby1yEnMrk
jXtnkq7Exo0bOsVwH7VNkw==
-----END PRIVATE KEY-----`

View File

@@ -1,19 +1,18 @@
-----BEGIN CERTIFICATE-----
MIIDCTCCAfGgAwIBAgIUVgXmIg3ZjJoGkQE2mwtKlcPI3bIwDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJbW9ja19jc2NhMB4XDTI0MDYyODEzNDUzMFoXDTI1MDYy
ODEzNDUzMFowFDESMBAGA1UEAwwJbW9ja19jc2NhMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAmTkg9LzPdTsFgOL6uXHCGMylvo43XD5BpdION5nBFfx+
tKxC30AH41JAbJBb8kDY1FXQPfmE63ROfU0W9oMh8vu/n+yCJ22F4xqgOA012cXw
mEwa6A8dxeOqxv92dBdtN5XpcEne5FI1qzCCCRooQ5lMGikiGJiPVfXbIFPgVEv0
uW/bbmbNwmm3FZbWFKtotWIbfvLi14/9isk9Bgb1yYaiRhhr1AIyz6Whpsgxc+WE
GF8aOdmMzZWXouIyeaSr41R/PuXvOmkizg/YoJij4CDch42ofT/gtShP5k3uFa+G
NnmObx492pE7oEmtbJYi3ixuzx4tmnej+On40QBoSQIDAQABo1MwUTAdBgNVHQ4E
FgQUdTWxPLHwrq0uuqFF8jzGc1QPLOgwHwYDVR0jBBgwFoAUdTWxPLHwrq0uuqFF
8jzGc1QPLOgwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAlxot
U0kau1ukBqaaY8CrnxDYyW2WvxNLRSsT9M3I8V/XrDaok44qVl4yXg9p8dd7Pn8j
2ddnYk+tRBTm1I3sjdq/nVJ4soEqGdoxCQIKhKio8cJ26AOjuDv2j9mCZS6a4ptF
ZDpjuFA3Tuwaoxo5oygdk/0y1LX2ZLONn3moS/A/4mHwGID9jVBnwLsvYJNjHqBP
Dw7AiAaGUWC4IzBYE05PEz1VhcfFx9Gk0GhGqjB31da4J4QFq7uTz/WTuqQM7yoh
gy3qwxe+RisZnvsWHjrhmSyhVZJdUhqjvSnWF3LgJKux49VfRICsGbbWy8HXZzu0
ogX7sybD35QELYoB7A==
MIIC1zCCAb+gAwIBAgIUZipRXztCv63+iMkCt+ivpxwkAOAwDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJTW9jayBDU0NBMB4XDTI0MDcxMjE3NDIxNVoXDTM0MDcx
MDE3NDIxNVowFDESMBAGA1UEAwwJTW9jayBDU0NBMIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAvFuQiNhHOcXS8LMz8Tp76BIo6+ZZtythhcDaEVsroBWG
K63OqD89PTgg4d90To6TcMGXZXJZe+JifWsB5Fo+sUfwdOoWQ3hNKfWadKrkZs4x
dh/V05hJ4VAuaj9e2m937GQEsK9obG9MQnYZSlcODCYtIynM/IVmNr27I+s5fspP
0mZM+8X3mgjpQSwUob5zMkl8ZzskJau2oY6ImhI6fLNxAisS3wu/akpEVtKI3K8i
we99oPDO6xuHeuOQh0L6DbBdpYpF7jPOkah8zBQNfuENaCcjTxI2twrSN0YLuIsQ
fiEKbUq8DO5aRng9sws1DTNlf9AyvSPYfkizNtNHWwIDAQABoyEwHzAdBgNVHQ4E
FgQU16zJPs8xurwLQAoHiDOuUr+OmnQwDQYJKoZIhvcNAQEFBQADggEBAA6sMfoQ
1y42gg4/XNh6SOxHhT2z3u0lHq5+BxVORx5QcIi3rh1sgTocRBkl+4tzXFxDOzGt
RpVEOnM4VqbxgvuTLYPbZ3jnoS9S62w2if7xaOWexLO+3hsOtMIUrBfrfBax03/S
Tg9gkA98zvV1jbokPL23UXRWufv7L44HIFr3bLeikdOmpf6Lvp1ORiUXjbMi9o+c
ty+gWrxsV+825W3LGD/71DFSD4yS8wK9M9KLZb/21bt6tq4D/E3njnYbXID+1dTL
WC/4nCtzhd5n6cq1wKl6VnZ6bcyYb8MSQ6Kd6vbew1UnRae8KmFsjr2tJ50ESTj4
jQwzIZELkOP+EAE=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,15 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICWTCCAUECAQAwFDESMBAGA1UEAwwJTW9jayBDU0NBMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAvFuQiNhHOcXS8LMz8Tp76BIo6+ZZtythhcDaEVsr
oBWGK63OqD89PTgg4d90To6TcMGXZXJZe+JifWsB5Fo+sUfwdOoWQ3hNKfWadKrk
Zs4xdh/V05hJ4VAuaj9e2m937GQEsK9obG9MQnYZSlcODCYtIynM/IVmNr27I+s5
fspP0mZM+8X3mgjpQSwUob5zMkl8ZzskJau2oY6ImhI6fLNxAisS3wu/akpEVtKI
3K8iwe99oPDO6xuHeuOQh0L6DbBdpYpF7jPOkah8zBQNfuENaCcjTxI2twrSN0YL
uIsQfiEKbUq8DO5aRng9sws1DTNlf9AyvSPYfkizNtNHWwIDAQABoAAwDQYJKoZI
hvcNAQELBQADggEBAK09cR+mHmiK10DSkVlnrZIk6sXO2jksPBBh2LGwE4CQSaBz
5C/XSQbXImkLWzkt2Kh2xYBCgjdoL8JNfsPYHWkjbN7OzOao0LM42a2o3mJZKixR
jcsWQLerrgXqhzP61gm+UVcZ77o5bfMtt1/52bIkJaBWd8Ka59wnTM75JQMVzM0y
R+dM7pSdvICzXvMc8NKZGOOROmAN3O317i5oFI89KgFQ0mhjjwdK7X8v9I7dhnHe
lI7ESWn/WCnIiq1tlDW3VyKzKul9nBFV2lDM1pHdfez0c9rAzry3Lz0NkM+yAtta
W4mf0Ybiz72mwkuY95Sk0+2GohR2BgYK3OjmVkw=
-----END CERTIFICATE REQUEST-----

View File

@@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCZOSD0vM91OwWA
4vq5ccIYzKW+jjdcPkGl0g43mcEV/H60rELfQAfjUkBskFvyQNjUVdA9+YTrdE59
TRb2gyHy+7+f7IInbYXjGqA4DTXZxfCYTBroDx3F46rG/3Z0F203lelwSd7kUjWr
MIIJGihDmUwaKSIYmI9V9dsgU+BUS/S5b9tuZs3CabcVltYUq2i1Yht+8uLXj/2K
yT0GBvXJhqJGGGvUAjLPpaGmyDFz5YQYXxo52YzNlZei4jJ5pKvjVH8+5e86aSLO
D9igmKPgINyHjah9P+C1KE/mTe4Vr4Y2eY5vHj3akTugSa1sliLeLG7PHi2ad6P4
6fjRAGhJAgMBAAECggEAA8T8pzIKb12Xz5wLPkWazcdMwronCUH0VZRMJSjHOpIz
GqDcG80sgdaKZHQC47wIluUIue+XVNS64MOv32RqO5sJ07EVjMtZsP9nkT1yStS0
bAYU9DV5U77GOv36VRXln1Q/hr5LKXDkJl12WNY6hvA2El+Fmdc4poJwBRTJ1upb
h+cGW/TBZXPirzRI1gicx4Qv++4Tv+GADpUAciOL8qXPklux5A8+cWCdOXHsb4sQ
rRILZ0INclZma1hmyMQYL5bfGqTpvNmoJbx4jiLuJTkIcIiCO0VR+A0Rd7l0bg/S
gzPuCK0/iSCB9QtctjVjsGF9XZut2xS/op8i0rz7UQKBgQDQ47Mp+dsHFLM3g/hw
s8loOcLDS0oRqTyg5NRWyAg6cuTTGs/RvEb77R2RTwok5l2+XcCR/WTc6f+cW3M/
XcDFaeXiStur1tnLr5d10twfdZE4C6xBujGAAt4pFUaerc76jb0HfUJDaANYlZIh
5p9nwuFGlYhFckBt4YuZek9omQKBgQC7x4R06PyIka7hrkUwLtDRMTgmi2OWP0Fv
rPQYLRKqL40Io/lI5VEpfQdgTI0k0YO92QsnvFqJBL+7qW3iPrqKAIMILiu37MNE
t65U4U7wzJRd7b2e33Fx6VWMOVbwvmEACoBTN+p8d/WJgg5FZ2wXo6GFWOQofOiI
0QhBkvdbMQKBgQCwjCI7Ef96ZpZqD1IE/w701gy0PoflkWG6omyMxBegPscDXR/U
JgrglbFtxJ3QPhtw74/4U2/R/ruZDPnEzppEv5IZxicPf1Eog8nBPWvp8tW/xq3a
B2IazVGy61Z6em/695ySHd3JVrmtPwz5Ng/4BI+dtngsKbompH/2QZen0QKBgGWZ
PuaOhMxTnn6G7vJx8hOtgMcCFgDd+sa0mmFWScoA7lrldWRmhrJe7pXA9YEdRx16
CJoYRBfslNyxgD2wWPd/7WWIrajXFpPgmhdczHxnBEOJ9VW3accLS3kSMSMSrqL6
C5J7J4ju0s/yqUwN+CMWKrdecBwj8SDNkJ0CKomRAoGAKUinXQmfvvJaSWe/dtBq
4Y97Q0vqFEZBDlE5WMYgnAVfnntdLfyMFcjvzVQksKrQWBIBCMboyhPABBdq7i9Y
X4g2czz9mQBgQdUoJ/Co2QBUaB3IqHnP7GbUuPjJ1kBv3xAh9MFBjdrD+sxfB0C7
NxT13TVPl8DrpE219OeBT8w=
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8W5CI2Ec5xdLw
szPxOnvoEijr5lm3K2GFwNoRWyugFYYrrc6oPz09OCDh33ROjpNwwZdlcll74mJ9
awHkWj6xR/B06hZDeE0p9Zp0quRmzjF2H9XTmEnhUC5qP17ab3fsZASwr2hsb0xC
dhlKVw4MJi0jKcz8hWY2vbsj6zl+yk/SZkz7xfeaCOlBLBShvnMySXxnOyQlq7ah
joiaEjp8s3ECKxLfC79qSkRW0ojcryLB732g8M7rG4d645CHQvoNsF2likXuM86R
qHzMFA1+4Q1oJyNPEja3CtI3Rgu4ixB+IQptSrwM7lpGeD2zCzUNM2V/0DK9I9h+
SLM200dbAgMBAAECggEACUarHgokq9QxuLfikXkzW/D1AfUUqwAga+Fc++jVA6u7
sU/8cu22Wtr2R5llFW9RFIb8KTtR69dwyUNpUvEc0Ec+MMvMb+MvTacyRZea6vMx
nWMg+SwxSz7TIllflvtRWRtt3bOtvVVX2JgPU8lowDFrHKW02iTJrV13p2Owr606
TUt0xq8xvnqWdmIl/xdGSgmb0PfdsWKLpwCVpJI6KZj2hQGffWhU/A3zNHNjGMfG
lRv3LEcqlsL/5+sYp5bOigk9fPMdrQ9eDJFvT5mas2mJt/YOUgefhy7quyyjuWEC
aT5QuYLEytCYrHKvdMowBznLjdcRtkDfYXOTtwtLfQKBgQDl+N7b28En4mD4Y9xE
N7pwQH+tjchtb/nSHmgXdvghiozBrvpg5tTujIPBJeZJdra6E8tNhSvafnsSPQbn
E3n2C3mqfUjR2/BVMYV9IQRhlxgvtMhLzsD2Oe7kbHl+aPiku3UZkWel+8CjeO4w
/3bzfHQB4jCPX0DjzcfEUvKSRwKBgQDRrPipyXH1idzuIVuuhrUZaA9hvawWd32K
IBAQCgILomL1IKcydoDJ71mCKvd3qVJd5u3zkbp+zQf+qs44Xofsvb1hZ5VIbqqA
APS53YOwvhV6J/yBHeNFvTPjynPNhH+Zd6h+N9FLezxttR7RnHxvdTz3sT6/JGnn
xkem8FR4TQKBgAbqlDFCi62aZlYyEqbOkkHb/rsGf5ei/X1vQqwp/M5tb0xH6enO
J2tBOJkvfZyKAHbaL4wWTDpXAXaL9VAvysQ2liMlf3IoTjMRuTUJMCuLMsQEiN2W
y0Dcfy3JgWHm4Et8A8qQD/DzAFkqQuegV0B9ZrPDzLgTIk13m+FwqTDzAoGBAKnU
u7jyhM6H8x4igNs1GxzQD51wfyHXeSTW4YvMP2njBtpbr3GNULW/m7V2TelriV6r
vNLLl847Dh21hcFcuCYGbY2m0+DOWmXB4Hdnt9IBtO2z069VYQ/Mt2nrQq8VgjDx
HdXWKj1EPWbzDFplsNiqkk5iD1vNB8cG8GSERzcFAoGAZprGJIfgEDkDX4lFpkkp
6NvUWxrZptebuVwm0hhPlXeb+p2myZtLUo/ID2S7iopb3eylSmZkOws0H54xsvc8
PguW+Vfc/bPqiejOPj+n2gKVw+1dBEsdGVV997fpCTXwNpjH9B6FJ4K4pEu0llcG
5q5M4KoybB6KWSeawgGrYZ4=
-----END PRIVATE KEY-----

View File

@@ -0,0 +1 @@
4F01DA0921B4CC5D5073BCC7F5CACFD12A6A4883

View File

@@ -1,18 +1,18 @@
-----BEGIN CERTIFICATE-----
MIIC9zCCAd+gAwIBAgIUNOzWgMvjFClqJXtzixwFryngrG8wDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJbW9ja19jc2NhMB4XDTI0MDYyODEzNDU1NloXDTI1MDYy
ODEzNDU1NlowEzERMA8GA1UEAwwIbW9ja19kc2MwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDMk6l4jst9VsRv1lLb8c88pqz6KJw932Tg11S2t9cB0r4b
NPFjEiLZGfjWgIvGpO3Qj6lFjdDXUKZWNgshJFt9It3fNVyzPU73/TCqyFIJCRw5
Olv/Rbn5lfKUuSY/sK+0v7WdAq9zVhflrccL2LcsZ6gw4Is4ZTzS2lDHVRrjLyXE
GO9OhKdbumVZsods6Gh3fb9jiQ9p0HDYLphfgBWutl/CSEBxCMcnezebmwYU+/MQ
0CCetSQQ6VOsM1s9y5S9ZJcA7mDPhUrCYU7yPZnL0r2ciecq6TKJGJIzFxBcoRLq
xAfxMoh/Ahrekw8c+ZMptgstUDYDsFQZybt1QfebAgMBAAGjQjBAMB0GA1UdDgQW
BBQOnxkKKSWjKiTmM6OdASuguBVXYTAfBgNVHSMEGDAWgBR1NbE8sfCurS66oUXy
PMZzVA8s6DANBgkqhkiG9w0BAQUFAAOCAQEAj02C0TIH6UVrwbU7SKl3XcaEjxJc
2FZ2oljdCaKkNKuBNKvfp9faf99WeGBdpcgFpdi01R5KuY5Nxla7mRX+Ui3nLr3o
liedieUn11Vg2XM73aoF7FrhM/DnLrgrd8fOfp6IPxXCK935m5F2Yp2v2xf7xlKo
rDIGzX44gmTYs3tlGdhf1+/zxXmY9KLNP/vdFze8SUYizlci/nRVOmxFkH20pWd5
0p9dgtebMBDmT7WB5mzfCqg8AOHxLDrl5s6AYya/MfvfnqunpOaBgd4+U1Z6ukx2
v7oH6bR2gKuuvX6Ceg6bqroNnT2kUwugyEafeZnLGPmLGUZrC7sJrBxerA==
MIIC9zCCAd+gAwIBAgIUTwHaCSG0zF1Qc7zH9crP0SpqSIMwDQYJKoZIhvcNAQEF
BQAwFDESMBAGA1UEAwwJTW9jayBDU0NBMB4XDTI0MDcxMjE3NDIyM1oXDTI5MDcx
MTE3NDIyM1owEzERMA8GA1UEAwwITW9jayBEU0MwggEiMA0GCSqGSIb3DQEBAQUA
A4IBDwAwggEKAoIBAQDNAbRAvBrCOUcQpP7wrJ5faC7qxNq14sBfP6K2G7Tpj4Bg
eTkCgMAcOl4Ue1M+zhtYRo3pTnidLOvcy07lX1QMV1jwo/RLZYCVQoyqW/Lqm8Kv
VXOOJrAzkdowcyOaOLxFyWIoaWj9ZSuPuzVntWA5n7u5MT1mYVO1sq27pXpp1Cwg
DYifSLIcn3uKXGPy1CxlxUj/B3/3T0IrOEQkXqXJe7BMg1ijbjbJYoPK2Zoc10vP
bgdOXY/MwE6YxhpVo8Lzzq9E31kIq7Ovjrb6xT+kktSbXINX/3Htu8ELe6OuxAw+
27CwaS/aCK/MJnHtRFzLyKvhsBf6BEq6ZgUSUfTVAgMBAAGjQjBAMB0GA1UdDgQW
BBQ5+4AMcFOfsD0ucPu3LnUceyEJhjAfBgNVHSMEGDAWgBTXrMk+zzG6vAtACgeI
M65Sv46adDANBgkqhkiG9w0BAQUFAAOCAQEAMh6doVDMhOZObgKi9bgJibZuOks7
fYWu1Zi4zOc2e5Q593Yq/+NSPB65qRixOaFSS/G1ZO6VxAu0n6redn7Ia0NLpohd
ZOL+iNt1vNugU2Ur8FbdpbaMrNDkabWSnOiXVKJ6exXYTvdghaF3P4LkZoiutMXz
/VJ+tmeWZzhVhTQnrN0FBxvh0wfdbbdbosVaJsyB0xTD6C3aBlUTVtxdLdf3B2CA
N0/RDh6kwOOv9mcyF9u/z/YxiZB23csSJyLMmUl9WV2xPCgSZi3A1sZqOU5IIqO3
U4o97Nxcwj51Bm6x5Km/6/CbnXXRo+x+nHgAgYwMn42r4BrLFoDLUn9YRw==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,15 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICWDCCAUACAQAwEzERMA8GA1UEAwwITW9jayBEU0MwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQDNAbRAvBrCOUcQpP7wrJ5faC7qxNq14sBfP6K2G7Tp
j4BgeTkCgMAcOl4Ue1M+zhtYRo3pTnidLOvcy07lX1QMV1jwo/RLZYCVQoyqW/Lq
m8KvVXOOJrAzkdowcyOaOLxFyWIoaWj9ZSuPuzVntWA5n7u5MT1mYVO1sq27pXpp
1CwgDYifSLIcn3uKXGPy1CxlxUj/B3/3T0IrOEQkXqXJe7BMg1ijbjbJYoPK2Zoc
10vPbgdOXY/MwE6YxhpVo8Lzzq9E31kIq7Ovjrb6xT+kktSbXINX/3Htu8ELe6Ou
xAw+27CwaS/aCK/MJnHtRFzLyKvhsBf6BEq6ZgUSUfTVAgMBAAGgADANBgkqhkiG
9w0BAQsFAAOCAQEAXrunn244+vrEniiMFJ7si14YfKtnsE3goLAewViTfQHYkf/3
3v4rjYW0uWBjNVpgtLXAFcg2tl/xi0olngiITyj6f4CNWaoZdGTZ1HpeSAKKf/qR
jx8l09BnLp90xNTZOxjQNDGsnNs6Qx0D/jHEVk2ZeLy84clalIp7Y9VEvULR6uGt
PQrZSjNvzbseKA7UmFELak+6SotP9iG25UmaEB2V2XHZmMY5wiS9TjVqrSzpaTrt
B4A5aslqcpaWtXchX+Udg90c6aqFosAxfURbYW8Eq6FtU/PMbxZmIhdSW6tmmcCp
ee72V7kOyRp/GXAzlf2mjefkiOv0jbFlTpEBUg==
-----END CERTIFICATE REQUEST-----

View File

@@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDMk6l4jst9VsRv
1lLb8c88pqz6KJw932Tg11S2t9cB0r4bNPFjEiLZGfjWgIvGpO3Qj6lFjdDXUKZW
NgshJFt9It3fNVyzPU73/TCqyFIJCRw5Olv/Rbn5lfKUuSY/sK+0v7WdAq9zVhfl
rccL2LcsZ6gw4Is4ZTzS2lDHVRrjLyXEGO9OhKdbumVZsods6Gh3fb9jiQ9p0HDY
LphfgBWutl/CSEBxCMcnezebmwYU+/MQ0CCetSQQ6VOsM1s9y5S9ZJcA7mDPhUrC
YU7yPZnL0r2ciecq6TKJGJIzFxBcoRLqxAfxMoh/Ahrekw8c+ZMptgstUDYDsFQZ
ybt1QfebAgMBAAECggEAOj8ao+goOO4Q7PS9T8En65FbM7iHT7iArOGyTXnHXk4F
8ZIf3kDGKkEST+R2p57C1TxqChMoMH3WdjpZ7dw/rj/Uox464A+nIcV1a1KwxMDS
x9p9Yg+UtWLDmCOlJ8IjLNfemi8vDCwpjqvtPcq80IhM42mzSeHNMQ2WrUJmbuM1
0H8bFCRA1orqSYJz4tBVhlwtcEZFDstWgXZQ26kXkXcTtJVjfaJTAg6qwErsCUr8
hn6j3fzqOyhHqx2vHyvZns+ARchWHuMLQ5KLP16ijvDXuVHCMGv5FJT1CtUDG6n0
SY4nooaSviJoNJB2gg36KqUUwoGxMoGnreIAOIfH4QKBgQDmMXYfFGcBbWYRKX1D
ClaHfUlFR/7rZXhlVmKLgHMBR+OqCiqZbvorUbVAxpXw4IH+GNx695OqiQhLUOY7
yICpCt6Pq8gkfLYFQiXebevxfF60OB/NrbXICYtWyzqPAclBHauS4J9tDIYHfSJo
JD0MqJL37I0ctil0fNjmCVTJuwKBgQDjgwKxAvqvJX4En2+hrKG/aOmCXg5Wdn+3
wHvxu/3QRQJehbq/Qcz3MDXPATqOoH86SzFfjREMpsL3+FZYlN5cWK3siNDRq+Uz
O1JOPWB0ehMNCFX+UmaFdNfS1NB+oQ1QD+PVVRZUwDz5jdBKTXt4mtgUHbkYMFcs
xzVOecM7oQKBgQDKtWO/msfaiewH0PFtx/zK85lCWVQzFvgexSOilUqxJg1l/+3j
j8bdvuZOVJJVvF681EfUQZDX7DRRnrwgiUBDnD7BZhSpjOj9WHLgnQvZbBw5t/LJ
vN8HeOArXmwC4x/HJ8mfXg8GiLC+h4N1EfRw4UIK8VSSpBd9bTPT3wO7YQKBgHvE
FX6+JCmLt9ZD9bJ5+zPpmr409I/MvwXzTHngzt6x6+wHy+OnpB0EuQD3pidY4F2R
8jYMw62iOoYzLqXZtm1+QH9gnlixrmoEZ23wrbwvfJWmZ0GHCgan3ZDv/MwmSNu5
CTRQqWlJeuI3Z4xEQlsFwW6QDNU/1uyhIjqiuraBAoGACoHype8atLKYQsVMIqWE
t8+PeLJs1OKoJFCvTPaZ4uc5hj9q/Zwm1d2lXQHEys2fNnX04szAR4CqdMA+6vpE
pdoTmDwzpY1fjisWTZxuAKky1/MKoPx2vJefuC3P1EoLoIjOXxs8c1eIqmjtkvpr
AG9WTDrJOYamVzCLQ9mME/g=
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDNAbRAvBrCOUcQ
pP7wrJ5faC7qxNq14sBfP6K2G7Tpj4BgeTkCgMAcOl4Ue1M+zhtYRo3pTnidLOvc
y07lX1QMV1jwo/RLZYCVQoyqW/Lqm8KvVXOOJrAzkdowcyOaOLxFyWIoaWj9ZSuP
uzVntWA5n7u5MT1mYVO1sq27pXpp1CwgDYifSLIcn3uKXGPy1CxlxUj/B3/3T0Ir
OEQkXqXJe7BMg1ijbjbJYoPK2Zoc10vPbgdOXY/MwE6YxhpVo8Lzzq9E31kIq7Ov
jrb6xT+kktSbXINX/3Htu8ELe6OuxAw+27CwaS/aCK/MJnHtRFzLyKvhsBf6BEq6
ZgUSUfTVAgMBAAECggEAGlxMvEIzwqOw0qAUtAfOOYBhAAkeAmNMzzKUjowTgDDW
lhEgVoUNrtOGg2W0N5AzDe/MkaJoefVrwrFVzMKsQQX+RrseT4+WsBqlkcZO/wHW
T8tSF4Y8A/WOM8qqWktPUj3p5D5hpKucpVeyL0qwO9ihP9foCEEdjXCTTFyj1/WY
O7IdsKNDY+srTK73xWIEnyH+ffEKIaSu9wrntYASudllLO/PrxpxJ4M+/4/I5Cep
PzklQhEdv/5ler0uzHGc/RtVfibjpdEDVgsere9Nq+cXf0k4JrZZ8ySy3WHgAPWG
zWj3sduFW37Dsb/XvzuQ7oRg4v6lofaJSlaLxA2ExQKBgQD3eE75vjVQdTkKpFMQ
c//0nLRne09VbOqPHhpkyZC9FJJ+UkIRvlNbkBtHhhNTj/u6FnkaJGS3RONeDe0o
Q0fe16zY38q70HlulNo6h069ckhWrIA8qbrKntqxc2bVL5LDUoA/VmY5nk76L5Tu
7b22+ipcdij2ibU+r10T5X5/0wKBgQDUErJVj/dm52QI039VPyl1wMjGDeUvWZxs
8iT9FT58Kp/E/+fiZ8JbFqJyWSpEm5rZyK5P40USN1r/B2EdxHSyete52sko8Huh
Jku4DVStyIzq63d3gEpIqfb2rmMUlc707bNqdgOX4IZ8RYxFgnp2AB5X8e/LyHZR
nSFdADD3twKBgHw8PMGqGM/UmZdbGYxH//ZIeVT+FbzYGgVRYoS4oF4cJtMd7qdD
uktcVCWbDLbFsOUiBRf3r0xGXDLKoQW2iS05bz/NUdTp+xxlxAzgAsqexewlW5eY
yfqQt0+glL5vzKkcEOA7OsSwUgvNuWIdnkFu47dZZoUmawQWO48ShmgbAoGBAKlz
3wc7J8YTsfzTcfUdqPUr+8E1LSGuiq0Ktr96kBkKverdR93CZqv95ANWd82mQA8w
qQewY2pwzMbmkJUGevB585HP3dhWf5J+VRZVoInTq7WyPB1CZxi0pl7pbMXwBhPz
Mt8oOSrL/umhcLnBzjQnWBeRe7frD4+a7COxmW71AoGBAO0yhYXOeHpGTnHzDzTs
qu3rNhvQKy/8f25wvqn/xR5NfbcQv/Z63PgmDoq9VLrmeektwY4zTE9wO+n7WPQU
D2BiW2DQjX4OJsOPNs63+wCE71xj08ZxipFuxFWhbjtO/A82h6QMXYwfj9do1WGD
oouEG7wJwn8++cuiivyeTWf1
-----END PRIVATE KEY-----

View File

@@ -91,4 +91,26 @@ export function readCertificate(filePath: string): jsrsasign.X509 {
const certificate = new jsrsasign.X509();
certificate.readCertPEM(certPem);
return certificate;
}
export function getTBSCertificate(certificate: jsrsasign.X509): Buffer {
// console.log("Certificate:", certificate);
const certASN1 = certificate.getParam();
// console.log("certASN1:", certASN1);
if (!certASN1) {
console.error("Failed to get certificate parameters");
throw new Error("Invalid certificate structure");
}
// Extract the TBS part directly from the certificate's hex representation
const certHex = certificate.hex;
const tbsStartIndex = certHex.indexOf('30') + 2; // Start after the first sequence tag
const tbsLength = parseInt(certHex.substr(tbsStartIndex, 2), 16) * 2 + 2; // Length in bytes * 2 for hex + 2 for length field
const tbsHex = certHex.substr(tbsStartIndex - 2, tbsLength); // Include the sequence tag
// console.log("TBS Hex:", tbsHex);
return Buffer.from(tbsHex, 'hex');
}

View File

@@ -5,6 +5,7 @@ import { CSCA_AKI_MODULUS, CSCA_TREE_DEPTH } from "../constants/constants";
import { poseidon16, poseidon2, poseidon4 } from "poseidon-lite";
import { IMT } from "@zk-kit/imt";
import serialized_csca_tree from "../../pubkeys/serialized_csca_tree.json"
import { createHash } from "crypto";
export function findStartIndex(modulus: string, messagePadded: Uint8Array): number {
const modulusNumArray = [];
@@ -44,11 +45,15 @@ export function getCSCAInputs(dscSecret: string, dscCertificate: any, cscaCertif
if (devmod) {
console.log('DEV MODE');
//const csca_modulus_bigint = BigInt('0x' + csca_modulus);
//console.log("certificate", cscaCertificate);
//console.log('csca_modulus_hex', cscaCertificate.getPublicKeyHex());
const rsaPublicKey = cscaCertificate.publicKey as forge.pki.rsa.PublicKey;
const csca_modulus = rsaPublicKey.n.toString(16).toLowerCase();
//console.log('csca_modulus', csca_modulus);
csca_modulus_bigint = BigInt(`0x${csca_modulus}`);
csca_modulus_formatted = splitToWords(csca_modulus_bigint, BigInt(n_csca), BigInt(k_csca));
console.log('csca_modulus_formatted', csca_modulus_formatted);
//console.log('csca_modulus_formatted', csca_modulus_formatted);
}
@@ -71,7 +76,7 @@ export function getCSCAInputs(dscSecret: string, dscCertificate: any, cscaCertif
csca_modulus_bigint = BigInt(`0x${csca_modulus_cleaned}`);
csca_modulus_formatted = splitToWords(csca_modulus_bigint, BigInt(n_csca), BigInt(k_csca));
//console.log('CSCA modulus as bigint:', csca_modulus_bigint);
console.log('CSCA modulus extracted from json:', csca_modulus_formatted);
//console.log('CSCA modulus extracted from json:', csca_modulus_formatted);
}
const signatureAlgorithm = dscCertificate.signatureOid;;
@@ -105,12 +110,17 @@ export function getCSCAInputs(dscSecret: string, dscCertificate: any, cscaCertif
else if (signatureAlgorithm === '1.2.840.113549.1.1.11') { //sha256
[dsc_message_padded, dsc_messagePaddedLen] = sha256Pad(dsc_tbsCertificateUint8Array, max_cert_bytes);
}
else {
console.log("Signature algorithm not recognized", signatureAlgorithm);
[dsc_message_padded, dsc_messagePaddedLen] = sha256Pad(dsc_tbsCertificateUint8Array, max_cert_bytes);
}
const startIndex = findStartIndex(dsc_modulus, dsc_message_padded);
const startIndex_formatted = startIndex.toString();
const dsc_message_padded_formatted = Array.from(dsc_message_padded).map((x) => x.toString())
console.log('dsc_message_padded_formatted', dsc_message_padded_formatted);
// console.log('dsc_message_padded_formatted', dsc_message_padded_formatted);
const dsc_messagePaddedLen_formatted = BigInt(dsc_messagePaddedLen).toString()
console.log('dsc_messagePaddedLen_formatted', dsc_messagePaddedLen_formatted);
// console.log('dsc_messagePaddedLen_formatted', dsc_messagePaddedLen_formatted);
// merkle tree saga
const leaf = computeLeafFromModulusBigInt(csca_modulus_bigint);
@@ -186,7 +196,7 @@ export function computeLeafFromModulusBigInt(modulus_bigint: bigint) {
hashInputs[i] = poseidon16(hashInputs[i].map(input => input.toString()));
}
const finalHash = poseidon4(hashInputs.map(h => h));
console.log(finalHash);
//console.log(finalHash);
return finalHash.toString();
}
else {
@@ -206,5 +216,18 @@ export function getCSCAModulusProof(leaf, n, k) {
return [tree.root, proof];
}
export function getTBSHash(cert: forge.pki.Certificate, hashAlgorithm: 'sha1' | 'sha256'): string[] {
const tbsCertAsn1 = forge.pki.certificateToAsn1(cert).value[0];
const tbsCertDer = forge.asn1.toDer(tbsCertAsn1 as any).getBytes();
const md = hashAlgorithm === 'sha256' ? forge.md.sha256.create() : forge.md.sha1.create();
md.update(tbsCertDer);
const tbsCertificateHash = md.digest();
const tbsCertificateHashString = tbsCertificateHash.data;
const tbsCertificateHashHex = Buffer.from(tbsCertificateHashString, 'binary').toString('hex');
const tbsCertificateHashBigint = BigInt(`0x${tbsCertificateHashHex}`);
console.log('tbsCertificateHashBigint', tbsCertificateHashBigint);
return splitToWords(tbsCertificateHashBigint, BigInt(64), BigInt(32));
}

View File

@@ -14,7 +14,7 @@ import { packBytes } from "../utils/utils";
import { getCSCAModulusMerkleTree } from "./csca";
import {
mockPassportDatas,
} from "./mockPassportData";
} from "../constants/mockPassportData";
export function generateCircuitInputsRegister(
secret: string,
@@ -137,7 +137,7 @@ export function generateCircuitInputsDisclose(
mrz_bytes[2]
]);
console.log('commitment', commitment.toString());
//console.log('commitment', commitment.toString());
const index = findIndexInTree(merkletree, commitment);
@@ -171,7 +171,7 @@ export function findIndexInTree(tree: LeanIMT, commitment: bigint): number {
if (index === -1) {
throw new Error("This commitment was not found in the tree");
} else {
console.log(`Index of commitment in the registry: ${index}`);
// console.log(`Index of commitment in the registry: ${index}`);
}
return index;
}

View File

@@ -41,6 +41,53 @@
dependencies:
buffer "^6.0.3"
array-buffer-byte-length@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f"
integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==
dependencies:
call-bind "^1.0.5"
is-array-buffer "^3.0.4"
array-includes@^3.0.2:
version "3.1.8"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d"
integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-abstract "^1.23.2"
es-object-atoms "^1.0.0"
get-intrinsic "^1.2.4"
is-string "^1.0.7"
array.prototype.reduce@^1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.7.tgz#6aadc2f995af29cb887eb866d981dc85ab6f7dc7"
integrity sha512-mzmiUCVwtiD4lgxYP8g7IYy8El8p2CSMePvIbTS7gchKir/L1fgJrk0yDKmAX6mnRQFKNADYIk8nNlTris5H1Q==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-abstract "^1.23.2"
es-array-method-boxes-properly "^1.0.0"
es-errors "^1.3.0"
es-object-atoms "^1.0.0"
is-string "^1.0.7"
arraybuffer.prototype.slice@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6"
integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==
dependencies:
array-buffer-byte-length "^1.0.1"
call-bind "^1.0.5"
define-properties "^1.2.1"
es-abstract "^1.22.3"
es-errors "^1.2.1"
get-intrinsic "^1.2.3"
is-array-buffer "^3.0.4"
is-shared-array-buffer "^1.0.2"
asn1.js@^5.4.1:
version "5.4.1"
resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07"
@@ -51,16 +98,28 @@ asn1.js@^5.4.1:
minimalistic-assert "^1.0.0"
safer-buffer "^2.1.0"
available-typed-arrays@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846"
integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==
dependencies:
possible-typed-array-names "^1.0.0"
base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
bn.js@^4.0.0:
bn.js@^4.0.0, bn.js@^4.11.9:
version "4.12.0"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
brorand@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
buffer@^6.0.3:
version "6.0.3"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6"
@@ -69,11 +128,304 @@ buffer@^6.0.3:
base64-js "^1.3.1"
ieee754 "^1.2.1"
call-bind@^1.0.0, call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
dependencies:
es-define-property "^1.0.0"
es-errors "^1.3.0"
function-bind "^1.1.2"
get-intrinsic "^1.2.4"
set-function-length "^1.2.1"
data-view-buffer@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2"
integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==
dependencies:
call-bind "^1.0.6"
es-errors "^1.3.0"
is-data-view "^1.0.1"
data-view-byte-length@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2"
integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==
dependencies:
call-bind "^1.0.7"
es-errors "^1.3.0"
is-data-view "^1.0.1"
data-view-byte-offset@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a"
integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==
dependencies:
call-bind "^1.0.6"
es-errors "^1.3.0"
is-data-view "^1.0.1"
define-data-property@^1.0.1, define-data-property@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e"
integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
dependencies:
es-define-property "^1.0.0"
es-errors "^1.3.0"
gopd "^1.0.1"
define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==
dependencies:
define-data-property "^1.0.1"
has-property-descriptors "^1.0.0"
object-keys "^1.1.1"
elliptic@^6.5.5:
version "6.5.5"
resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded"
integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==
dependencies:
bn.js "^4.11.9"
brorand "^1.1.0"
hash.js "^1.0.0"
hmac-drbg "^1.0.1"
inherits "^2.0.4"
minimalistic-assert "^1.0.1"
minimalistic-crypto-utils "^1.0.1"
es-abstract@^1.17.0-next.1, es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2:
version "1.23.3"
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0"
integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==
dependencies:
array-buffer-byte-length "^1.0.1"
arraybuffer.prototype.slice "^1.0.3"
available-typed-arrays "^1.0.7"
call-bind "^1.0.7"
data-view-buffer "^1.0.1"
data-view-byte-length "^1.0.1"
data-view-byte-offset "^1.0.0"
es-define-property "^1.0.0"
es-errors "^1.3.0"
es-object-atoms "^1.0.0"
es-set-tostringtag "^2.0.3"
es-to-primitive "^1.2.1"
function.prototype.name "^1.1.6"
get-intrinsic "^1.2.4"
get-symbol-description "^1.0.2"
globalthis "^1.0.3"
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
has-proto "^1.0.3"
has-symbols "^1.0.3"
hasown "^2.0.2"
internal-slot "^1.0.7"
is-array-buffer "^3.0.4"
is-callable "^1.2.7"
is-data-view "^1.0.1"
is-negative-zero "^2.0.3"
is-regex "^1.1.4"
is-shared-array-buffer "^1.0.3"
is-string "^1.0.7"
is-typed-array "^1.1.13"
is-weakref "^1.0.2"
object-inspect "^1.13.1"
object-keys "^1.1.1"
object.assign "^4.1.5"
regexp.prototype.flags "^1.5.2"
safe-array-concat "^1.1.2"
safe-regex-test "^1.0.3"
string.prototype.trim "^1.2.9"
string.prototype.trimend "^1.0.8"
string.prototype.trimstart "^1.0.8"
typed-array-buffer "^1.0.2"
typed-array-byte-length "^1.0.1"
typed-array-byte-offset "^1.0.2"
typed-array-length "^1.0.6"
unbox-primitive "^1.0.2"
which-typed-array "^1.1.15"
es-array-method-boxes-properly@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e"
integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==
es-define-property@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
dependencies:
get-intrinsic "^1.2.4"
es-errors@^1.2.1, es-errors@^1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
es-object-atoms@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941"
integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==
dependencies:
es-errors "^1.3.0"
es-set-tostringtag@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777"
integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==
dependencies:
get-intrinsic "^1.2.4"
has-tostringtag "^1.0.2"
hasown "^2.0.1"
es-to-primitive@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
dependencies:
is-callable "^1.1.4"
is-date-object "^1.0.1"
is-symbol "^1.0.2"
es7-shim@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/es7-shim/-/es7-shim-6.0.0.tgz#0c430b40b8505ad15570721a8d8dd4eb0c553155"
integrity sha512-aiQ/QyJBVJbabtsSediM1S4qI+P3p8F5J5YR5o/bH003BCnnclzxK9pi5Qd2Hg01ktAtZCaQBdejHrkOBGwf5Q==
dependencies:
array-includes "^3.0.2"
object.entries "^1.0.3"
object.getownpropertydescriptors "^2.0.2"
object.values "^1.0.3"
string-at "^1.0.1"
string.prototype.padend "^3.0.0"
string.prototype.padstart "^3.0.0"
string.prototype.trimleft "^2.0.0"
string.prototype.trimright "^2.0.0"
for-each@^0.3.3:
version "0.3.3"
resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
dependencies:
is-callable "^1.1.3"
fs@^0.0.1-security:
version "0.0.1-security"
resolved "https://registry.yarnpkg.com/fs/-/fs-0.0.1-security.tgz#8a7bd37186b6dddf3813f23858b57ecaaf5e41d4"
integrity sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==
function-bind@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
function.prototype.name@^1.1.6:
version "1.1.6"
resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd"
integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==
dependencies:
call-bind "^1.0.2"
define-properties "^1.2.0"
es-abstract "^1.22.1"
functions-have-names "^1.2.3"
functions-have-names@^1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4:
version "1.2.4"
resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd"
integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
dependencies:
es-errors "^1.3.0"
function-bind "^1.1.2"
has-proto "^1.0.1"
has-symbols "^1.0.3"
hasown "^2.0.0"
get-symbol-description@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==
dependencies:
call-bind "^1.0.5"
es-errors "^1.3.0"
get-intrinsic "^1.2.4"
globalthis@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236"
integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==
dependencies:
define-properties "^1.2.1"
gopd "^1.0.1"
gopd@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
dependencies:
get-intrinsic "^1.1.3"
has-bigints@^1.0.1, has-bigints@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854"
integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
dependencies:
es-define-property "^1.0.0"
has-proto@^1.0.1, has-proto@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd"
integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
has-symbols@^1.0.2, has-symbols@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
has-tostringtag@^1.0.0, has-tostringtag@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
dependencies:
has-symbols "^1.0.3"
hash.js@^1.0.0, hash.js@^1.0.3:
version "1.1.7"
resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
dependencies:
inherits "^2.0.3"
minimalistic-assert "^1.0.1"
hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
dependencies:
function-bind "^1.1.2"
hmac-drbg@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
dependencies:
hash.js "^1.0.3"
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
ieee754@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
@@ -84,11 +436,122 @@ inherits@2.0.3:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==
inherits@^2.0.1:
inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
internal-slot@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802"
integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==
dependencies:
es-errors "^1.3.0"
hasown "^2.0.0"
side-channel "^1.0.4"
is-array-buffer@^3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98"
integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==
dependencies:
call-bind "^1.0.2"
get-intrinsic "^1.2.1"
is-bigint@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
dependencies:
has-bigints "^1.0.1"
is-boolean-object@^1.1.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
dependencies:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
version "1.2.7"
resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
is-data-view@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f"
integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==
dependencies:
is-typed-array "^1.1.13"
is-date-object@^1.0.1:
version "1.0.5"
resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
dependencies:
has-tostringtag "^1.0.0"
is-negative-zero@^2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747"
integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==
is-number-object@^1.0.4:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
dependencies:
has-tostringtag "^1.0.0"
is-regex@^1.1.4:
version "1.1.4"
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
dependencies:
call-bind "^1.0.2"
has-tostringtag "^1.0.0"
is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688"
integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==
dependencies:
call-bind "^1.0.7"
is-string@^1.0.5, is-string@^1.0.7:
version "1.0.7"
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
dependencies:
has-tostringtag "^1.0.0"
is-symbol@^1.0.2, is-symbol@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
dependencies:
has-symbols "^1.0.2"
is-typed-array@^1.1.13:
version "1.1.13"
resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229"
integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==
dependencies:
which-typed-array "^1.1.14"
is-weakref@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
dependencies:
call-bind "^1.0.2"
isarray@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
js-sha1@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/js-sha1/-/js-sha1-0.7.0.tgz#fecaf5f36bb09a51b01da46b43a207c8452c9c1e"
@@ -104,20 +567,94 @@ js-sha512@^0.9.0:
resolved "https://registry.yarnpkg.com/js-sha512/-/js-sha512-0.9.0.tgz#ed569aa1e4bdaf0b83363c29db1ab87b1192d9ae"
integrity sha512-mirki9WS/SUahm+1TbAPkqvbCiCfOAAsyXeHxK1UkullnJVVqoJG2pL9ObvT05CN+tM7fxhfYm0NbXn+1hWoZg==
json-to-ts@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/json-to-ts/-/json-to-ts-2.1.0.tgz#c68c0b210a811e8dccbe2752e68efbc0ca62bfc5"
integrity sha512-JeScjtIGYAxQVxEYgQUKROU0329eS+rsTSviGtuKiwKuXpcIU7DxhDYm2tey0vcBetwc9kD0+YHDI5KvEexMew==
dependencies:
es7-shim "^6.0.0"
hash.js "^1.0.3"
pluralize "^3.1.0"
jsrsasign@^11.1.0:
version "11.1.0"
resolved "https://registry.yarnpkg.com/jsrsasign/-/jsrsasign-11.1.0.tgz#195e788102731102fbf3e36b33fde28936f4bf57"
integrity sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==
minimalistic-assert@^1.0.0:
lodash-es@^4.17.10:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee"
integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==
lodash@^4.17.10:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
node-forge@^1.3.1:
version "1.3.1"
resolved "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz"
integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==
minimalistic-crypto-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
"node-forge@https://github.com/remicolin/forge":
version "1.3.2-0"
resolved "https://github.com/remicolin/forge#17a11a632dd0e50343b3b8393245a2696f78afbb"
object-inspect@^1.13.1:
version "1.13.2"
resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff"
integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
object-keys@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
object.assign@^4.1.5:
version "4.1.5"
resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0"
integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==
dependencies:
call-bind "^1.0.5"
define-properties "^1.2.1"
has-symbols "^1.0.3"
object-keys "^1.1.1"
object.entries@^1.0.3:
version "1.1.8"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.8.tgz#bffe6f282e01f4d17807204a24f8edd823599c41"
integrity sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
object.getownpropertydescriptors@^2.0.2:
version "2.1.8"
resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.8.tgz#2f1fe0606ec1a7658154ccd4f728504f69667923"
integrity sha512-qkHIGe4q0lSYMv0XI4SsBTJz3WaURhLvd0lKSgtVuOsJ2krg4SgMw3PIRQFMp07yi++UR3se2mkcLqsBNpBb/A==
dependencies:
array.prototype.reduce "^1.0.6"
call-bind "^1.0.7"
define-properties "^1.2.1"
es-abstract "^1.23.2"
es-object-atoms "^1.0.0"
gopd "^1.0.1"
safe-array-concat "^1.1.2"
object.values@^1.0.3:
version "1.2.0"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b"
integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
path@^0.12.7:
version "0.12.7"
@@ -127,11 +664,21 @@ path@^0.12.7:
process "^0.11.1"
util "^0.10.3"
pluralize@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-3.1.0.tgz#84213d0a12356069daa84060c559242633161368"
integrity sha512-2wcybwjwXOzGI1rlxWtlcs0/nSYK0OzNPqsg35TKxJFQlGhFu3cZ1x7EHS4r4bubQlhzyF4YxxlJqQnIhkUQCw==
poseidon-lite@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/poseidon-lite/-/poseidon-lite-0.2.0.tgz#dbc242ebd9c10c32d507a533fa497231d168fd72"
integrity sha512-vivDZnGmz8W4G/GzVA72PXkfYStjilu83rjjUfpL4PueKcC8nfX6hCPh2XhoC5FBgC6y0TA3YuUeUo5YCcNoig==
possible-typed-array-names@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
process@^0.11.1:
version "0.11.10"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
@@ -142,11 +689,220 @@ regenerator-runtime@^0.14.0:
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
regexp.prototype.flags@^1.5.2:
version "1.5.2"
resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334"
integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==
dependencies:
call-bind "^1.0.6"
define-properties "^1.2.1"
es-errors "^1.3.0"
set-function-name "^2.0.1"
safe-array-concat@^1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb"
integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==
dependencies:
call-bind "^1.0.7"
get-intrinsic "^1.2.4"
has-symbols "^1.0.3"
isarray "^2.0.5"
safe-regex-test@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==
dependencies:
call-bind "^1.0.6"
es-errors "^1.3.0"
is-regex "^1.1.4"
safer-buffer@^2.1.0:
version "2.1.2"
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
set-function-length@^1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
dependencies:
define-data-property "^1.1.4"
es-errors "^1.3.0"
function-bind "^1.1.2"
get-intrinsic "^1.2.4"
gopd "^1.0.1"
has-property-descriptors "^1.0.2"
set-function-name@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985"
integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==
dependencies:
define-data-property "^1.1.4"
es-errors "^1.3.0"
functions-have-names "^1.2.3"
has-property-descriptors "^1.0.2"
side-channel@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2"
integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
dependencies:
call-bind "^1.0.7"
es-errors "^1.3.0"
get-intrinsic "^1.2.4"
object-inspect "^1.13.1"
string-at@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/string-at/-/string-at-1.1.0.tgz#332e090c5724418266a27a09394924b9fad41275"
integrity sha512-jCpPowWKBn0NFdvtmK2qxK40Ol4jPcgCt8qYnKpPx6B5eDwHMDhRvq9MCsDEgsOTNtbXY6beAMHMRT2qPJXllA==
dependencies:
define-properties "^1.1.3"
es-abstract "^1.17.0-next.1"
string.prototype.padend@^3.0.0:
version "3.1.6"
resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz#ba79cf8992609a91c872daa47c6bb144ee7f62a5"
integrity sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-abstract "^1.23.2"
es-object-atoms "^1.0.0"
string.prototype.padstart@^3.0.0:
version "3.1.6"
resolved "https://registry.yarnpkg.com/string.prototype.padstart/-/string.prototype.padstart-3.1.6.tgz#bda3b28098270e1e285e08318e47ad53bc601ffd"
integrity sha512-1y15lz7otgfRTAVK5qbp3eHIga+w8j7+jIH+7HpUrOfnLVl6n0hbspi4EXf4tR+PNOpBjPstltemkx0SvViOCg==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-abstract "^1.23.0"
es-object-atoms "^1.0.0"
string.prototype.trim@^1.2.9:
version "1.2.9"
resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4"
integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-abstract "^1.23.0"
es-object-atoms "^1.0.0"
string.prototype.trimend@^1.0.3, string.prototype.trimend@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229"
integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
string.prototype.trimleft@^2.0.0:
version "2.1.3"
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.3.tgz#dee305118117d0a1843c1fc0d38d5d0754d83c60"
integrity sha512-699Ibssmj/awVzvdNk4g83/Iu8U9vDohzmA/ly2BrQWGhamuY4Tlvs5XKmKliDt3ky6SKbE1bzPhASKCFlx9Sg==
dependencies:
call-bind "^1.0.0"
define-properties "^1.1.3"
string.prototype.trimstart "^1.0.3"
string.prototype.trimright@^2.0.0:
version "2.1.3"
resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.3.tgz#dc16a21d7456cbc8b2c54d47fe01f06d9efe94eb"
integrity sha512-hoOq56oRFnnfDuXNy2lGHiwT77MehHv9d0zGfRZ8QdC+4zjrkFB9vd5i/zYTd/ymFBd4YxtbdgHt3U6ksGeuBw==
dependencies:
call-bind "^1.0.0"
define-properties "^1.1.3"
string.prototype.trimend "^1.0.3"
string.prototype.trimstart@^1.0.3, string.prototype.trimstart@^1.0.8:
version "1.0.8"
resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde"
integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==
dependencies:
call-bind "^1.0.7"
define-properties "^1.2.1"
es-object-atoms "^1.0.0"
tslib@^1.9.3:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
typed-array-buffer@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==
dependencies:
call-bind "^1.0.7"
es-errors "^1.3.0"
is-typed-array "^1.1.13"
typed-array-byte-length@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67"
integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==
dependencies:
call-bind "^1.0.7"
for-each "^0.3.3"
gopd "^1.0.1"
has-proto "^1.0.3"
is-typed-array "^1.1.13"
typed-array-byte-offset@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063"
integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==
dependencies:
available-typed-arrays "^1.0.7"
call-bind "^1.0.7"
for-each "^0.3.3"
gopd "^1.0.1"
has-proto "^1.0.3"
is-typed-array "^1.1.13"
typed-array-length@^1.0.6:
version "1.0.6"
resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3"
integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==
dependencies:
call-bind "^1.0.7"
for-each "^0.3.3"
gopd "^1.0.1"
has-proto "^1.0.3"
is-typed-array "^1.1.13"
possible-typed-array-names "^1.0.0"
typescript-parser@^2.6.1:
version "2.6.1"
resolved "https://registry.yarnpkg.com/typescript-parser/-/typescript-parser-2.6.1.tgz#b5f86e3f9d35ad46a346a32068cab61bbd96f803"
integrity sha512-p4ZC10pu67KO8+WJALsJWhbAq4pRBIcP+ls8Bhl+V8KvzYQDwxw/P5hJhn3rBdLnfS5aGLflfh7WiZpN6yi+5g==
dependencies:
lodash "^4.17.10"
lodash-es "^4.17.10"
tslib "^1.9.3"
typescript "^3.0.3"
typescript@^3.0.3:
version "3.9.10"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8"
integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==
unbox-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
dependencies:
call-bind "^1.0.2"
has-bigints "^1.0.2"
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
undici-types@~5.26.4:
version "5.26.5"
resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz"
@@ -158,3 +914,25 @@ util@^0.10.3:
integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==
dependencies:
inherits "2.0.3"
which-boxed-primitive@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
dependencies:
is-bigint "^1.0.1"
is-boolean-object "^1.1.0"
is-number-object "^1.0.4"
is-string "^1.0.5"
is-symbol "^1.0.3"
which-typed-array@^1.1.14, which-typed-array@^1.1.15:
version "1.1.15"
resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d"
integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==
dependencies:
available-typed-arrays "^1.0.7"
call-bind "^1.0.7"
for-each "^0.3.3"
gopd "^1.0.1"
has-tostringtag "^1.0.2"

File diff suppressed because one or more lines are too long