feat: support sha512 brainpoolP384r1

This commit is contained in:
ayman
2024-12-28 16:13:12 +05:30
parent 6e4a72f90d
commit 9504103a7b
11 changed files with 73 additions and 18 deletions

View File

@@ -0,0 +1,5 @@
pragma circom 2.1.9;
include "../openpassport_prove.circom";
component main { public [ scope, user_identifier, current_date] } = OPENPASSPORT_PROVE(26, 64, 6, 640, 256, 20);

View File

@@ -125,7 +125,7 @@ template EcdsaVerifier(signatureAlgorithm, n, k) {
ecdsa_verify.hashed <== hash;
ecdsa_verify.dummy <== 0;
}
if (signatureAlgorithm == 22) {
if (signatureAlgorithm == 22 || signatureAlgorithm == 26) {
component ecdsa_verify = verifyECDSABits(n, k, [
335737924824737830,
9990533504564909291,

View File

@@ -23,6 +23,7 @@ pragma circom 2.1.9;
23: ecdsa_sha256_secp384r1_384
24: ecdsa_sha384_brainpoolP256r1_256
25: ecdsa_sha512_brainpoolP256r1_256
26: ecdsa_sha512_brainpoolP384r1_384
*/
function getHashLength(signatureAlgorithm) {
@@ -92,6 +93,9 @@ function getHashLength(signatureAlgorithm) {
if (signatureAlgorithm == 25) {
return 512;
}
if (signatureAlgorithm == 26) {
return 512;
}
return 0;
}
@@ -155,9 +159,13 @@ function getKeyLength(signatureAlgorithm) {
}
if (signatureAlgorithm == 24) {
return 256;
} if (signatureAlgorithm == 25) {
}
if (signatureAlgorithm == 25) {
return 256;
}
if (signatureAlgorithm == 26) {
return 384;
}
return 0;
}
@@ -226,6 +234,9 @@ function getKLengthFactor(signatureAlgorithm) {
if (signatureAlgorithm == 25) {
return 2;
}
if (signatureAlgorithm == 26) {
return 2;
}
return 0;
}

View File

@@ -81,6 +81,7 @@ template SignatureVerifier(signatureAlgorithm, n, k) {
|| signatureAlgorithm == 23
|| signatureAlgorithm == 24
|| signatureAlgorithm == 25
|| signatureAlgorithm == 26
) {
EcdsaVerifier (signatureAlgorithm, n, k)(signature, pubKey, hash);
}

View File

@@ -1,5 +1,6 @@
-----BEGIN EC PRIVATE KEY-----
MHgCAQEEIFuQVhd8HfMpFLdTH60+UA1HfePAQkfeaGH6V9FJe5kioAsGCSskAwMC
CAEBB6FEA0IABCAx2ey4sj3xDzMbrJyjyINrSw57z98QcllbStcRHCz2YIfUUvsh
KwkgnEMAWec4iy3jeZ8yeLcoGk0fi6iCoLk=
MIGoAgEBBDB4JkHrXVXl2oWIH04Wh0ERPrGi+oW6Gm4Qs+QMlzMlZFz/pGn9BbFo
VwHIejJ8fuWgCwYJKyQDAwIIAQELoWQDYgAEgFY8mpSYBoiXECveGnKHO/9PW96k
WT80fBf3/tz8vytQGhLzqFS4kcxSsoO9lJXnfLk+PTqKyHGX8wPAqD9MvGcD8pj1
uvEviUV7Hp99wos7JXGGdm8koJhAvfGSt6N3
-----END EC PRIVATE KEY-----

View File

@@ -1,13 +1,14 @@
-----BEGIN CERTIFICATE-----
MIIB3zCCAYagAwIBAgIUQYSjqrXJx+UTzjryNw2jl8a8bUowCgYIKoZIzj0EAwQw
MIICIDCCAaagAwIBAgIUUxZNjQROjb8L3QFE3qKEAOuGA/4wCgYIKoZIzj0EAwQw
RTELMAkGA1UEBhMCQVUxEzARBgNVBAgMClNvbWUtU3RhdGUxITAfBgNVBAoMGElu
dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDEyMjgwODU5NDFaFw0yNTEyMjgw
ODU5NDFaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD
VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwWjAUBgcqhkjOPQIBBgkrJAMD
AggBAQcDQgAEIDHZ7LiyPfEPMxusnKPIg2tLDnvP3xByWVtK1xEcLPZgh9RS+yEr
CSCcQwBZ5ziLLeN5nzJ4tygaTR+LqIKguaNTMFEwHQYDVR0OBBYEFDxCzGkoR6xw
Im2XGg/24tJ+2fgyMB8GA1UdIwQYMBaAFDxCzGkoR6xwIm2XGg/24tJ+2fgyMA8G
A1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwQDRwAwRAIgPC4h2/aUem5OMnwMy42R
9j/NhYacXZGKXZv5KVBq5o4CIE/LcOS7bs7K3uNOdFxdJDCpK56YGV4H3O1paLpt
VqPW
dGVybmV0IFdpZGdpdHMgUHR5IEx0ZDAeFw0yNDEyMjgxMDA3MDdaFw0yNTEyMjgx
MDA3MDdaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD
VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwejAUBgcqhkjOPQIBBgkrJAMD
AggBAQsDYgAEgFY8mpSYBoiXECveGnKHO/9PW96kWT80fBf3/tz8vytQGhLzqFS4
kcxSsoO9lJXnfLk+PTqKyHGX8wPAqD9MvGcD8pj1uvEviUV7Hp99wos7JXGGdm8k
oJhAvfGSt6N3o1MwUTAdBgNVHQ4EFgQUUgkQRw5jvunoflxxAvX5Yc+ROgswHwYD
VR0jBBgwFoAUUgkQRw5jvunoflxxAvX5Yc+ROgswDwYDVR0TAQH/BAUwAwEB/zAK
BggqhkjOPQQDBANoADBlAjEAhtyXbjYqxVBT4KonoZcYciftQkRt+0DxBnPmRZ52
d67SbyA9LP/7XDTg8qw++aPyAjAFYTG7tu/EGBqWfvSCjEo0aK9ZS/eS5HZoTfs7
dzuXqOBuBj1L+HpiiBobsDhL63c=
-----END CERTIFICATE-----

View File

@@ -26,10 +26,11 @@ const sigAlgs = [
// { sigAlg: 'ecdsa', hashFunction: 'sha1', domainParameter: 'secp256r1', keyLength: '256' },
// { sigAlg: 'ecdsa', hashFunction: 'sha256', domainParameter: 'brainpoolP256r1', keyLength: '256' },
// { sigAlg: 'ecdsa', hashFunction: 'sha384', domainParameter: 'brainpoolP256r1', keyLength: '256' },
{ sigAlg: 'ecdsa', hashFunction: 'sha512', domainParameter: 'brainpoolP256r1', keyLength: '256' },
// { sigAlg: 'ecdsa', hashFunction: 'sha512', domainParameter: 'brainpoolP256r1', keyLength: '256' },
// { sigAlg: 'ecdsa', hashFunction: 'sha384', domainParameter: 'secp384r1', keyLength: '384' },
// { sigAlg: 'ecdsa', hashFunction: 'sha256', domainParameter: 'secp384r1', keyLength: '384' },
// { sigAlg: 'ecdsa', hashFunction: 'sha384', domainParameter: 'brainpoolP384r1', keyLength: '384' },
{ sigAlg: 'ecdsa', hashFunction: 'sha512', domainParameter: 'brainpoolP384r1', keyLength: '384' },
];
sigAlgs.forEach(({ sigAlg, hashFunction, domainParameter, keyLength }) => {