mirror of
https://github.com/selfxyz/self.git
synced 2026-01-10 15:18:18 -05:00
Merge branch 'dev' of https://github.com/zk-passport/openpassport into feat/register-disclose
This commit is contained in:
@@ -1602,4 +1602,242 @@ cIlCXtLAlhwxvkvq6fXlDHODihiBrcmRBxz08o+IXvjgBYlfHWP5iDS4RO0lzId4
|
||||
JYSWvyeHGutMDlIMuw5KEE1kVxR2XXcZypc9dWHGaI6MrYwpmmvTB6oZg11FEZzm
|
||||
S8w23130L6pAB1EjCC8lUQubEkgDZ0bfy4UxpkOiqctzYdakvgo+zOwpORhN/Wxp
|
||||
Vnmv
|
||||
-----END CERTIFICATE-----`;
|
||||
-----END CERTIFICATE-----`;
|
||||
|
||||
export const mock_dsc_key_sha256_rsa_3_4096 = `-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
/oJPpjQ+6ZN4gCl9P8dlm+A4GnqoNw==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
`;
|
||||
|
||||
export const mock_dsc_sha256_rsa_3_4096 = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
ZPOzG68rtudy
|
||||
-----END CERTIFICATE-----
|
||||
`;
|
||||
|
||||
export const mock_dsc_key_sha512_rsa_65537_4096 = `-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
5oD/m9q2ACiOw9Hmu/folOkgH1oP
|
||||
-----END PRIVATE KEY-----
|
||||
`;
|
||||
|
||||
export const mock_dsc_sha512_rsa_65537_4096 = `-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
j9Sia6tiYeI4rSQ=
|
||||
-----END CERTIFICATE-----
|
||||
`;
|
||||
|
||||
export const mock_dsc_key_sha512_rsa_65537_2048 = `-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSvKqw2u9u4+Qz
|
||||
uhrJ2+o41eonPWAD1SodMORJVecATSjRb+HpYYBrcV7AB8AmmTKwYfkbugEUspnJ
|
||||
/5yl0IldEEoZ+FJm5S+3tmN20DuickdDYKkXPOkXZelWFU3sE4jpYTEzXu/nTH4L
|
||||
pNwqXYjHXH+/INUS7xJ0gYYPZ2DThVgobYbXETmFdyuJpH8vFdAV1Fxxp0C2Rwkt
|
||||
jSwkhF+h8Hs2vi4ojGcghYUFLmDTF4UP/uPPuJonzQJRL7EQHiHTC7eZ+EtMS1PS
|
||||
6X0VeC/uAAtT8b7+zBGMz8+x+aAAwXIut/yY2LnoSBVxUu+4g8Ii5Zt5rzPGm6GQ
|
||||
P6IfCwARAgMBAAECggEAHGoE59C1TPHcUJ8swn/s7lnldwH/ArVItuPjPAIhofhF
|
||||
YyvfPY0AeDwyhtjkry+j1oV3RaZIRAaq1sIo2HCsPMiX/TVuwuHvE6m7coc0KzyW
|
||||
YD7VvcTgNt/uXMWFmqmtoa4RqLgJx9mX+zDw4KN48EyICvi90g47IktejJAnTY2j
|
||||
1MlAZ/00qXwWifaNhc7+VuA46mlstX2UxOHoqu8neYgE2vhC8/A6oHmVePMQASjS
|
||||
akUEYzGhF1t69A1EFxbh1LI/Z07F2J9Jt7u+a1SlDIjevKq5ExkioPfcm1Wvn1Zy
|
||||
8Kys5JYtORTGQj8EyJQRxIFE+xuwoj1eMqxTZq2BowKBgQD70PYrAFCA2g/fnygf
|
||||
rwjhYroyEp9tUbI9jTOIW5iFFvrgvJ9z5w/DofE9X2EKWOr6ZriyXIN3J4OU8Ttm
|
||||
0a85DDMYmxQvLLnCLlHkMXIpC6k72mwYRTyrlHirkRHxfvBujp2OoY+yMsaPyi2C
|
||||
EFHEKv/sb39OJ8E7fh1Y2uvKTwKBgQDWPPwNvcMmiRwAOniuAB1/2MqWwuluk8Bu
|
||||
rL6WPt3KgItqGKFNC3c0ainI8XGWullmk1SwP7YqBuPcfb6LkAe3wYcb5sSOZsZb
|
||||
tpk+f/TsU8bCkTE87cnPrmv7wIoxvm+ItqOeWp+7B8wkEHnOBn/TkUggcwb7tnbX
|
||||
sWKr6VDXnwKBgBJzczYfZcarM7KM9OGtb5ckJsR4fNoDvG2qJPZ+z6Qg1O0WpRBX
|
||||
A96vxP9cN74MWdtTH4FiKffXG1sUeefEwXQKosvQwR/bxRinUDTKMrUzN4k9LeJx
|
||||
YEqqLFVV4dyyEmfnZ0AGMoM6GTZ79+2pyHP5OptWaBuP6iazzO6vy8sdAoGBAKxR
|
||||
JwdCb7oKJCyG21RRIWkYjXKP2cQoMWqTpUQh0rEzjW9L2kmnBD1zeqJ2mT98KbZY
|
||||
oJCW3kWVfyd1OJL2yU5i6fJmPgiv37Ia/82GjBCeHcuXjvwL4vwZth8rMbxrCTj0
|
||||
dkxDZiDAV9FWMzKkhaI9Q79d5esGSzaYJd5SbsTPAoGAWD5FANbg1QbxOE1giyyi
|
||||
hvAVZ2dT/HZj7wbAFATO/C69r7sbG5SF2TrxBHGI+fhLwI1wXSURE/oCYpfkUmsS
|
||||
dIDFa1lQSaf44x11efTrWhjvU3gB6z7Y/lutrvFdihebWOJDRmxUkDJ7fxNDKssJ
|
||||
robTDzXXBGlHrGJRKHwKxow=
|
||||
-----END PRIVATE KEY-----
|
||||
`;
|
||||
|
||||
export const mock_dsc_sha512_rsa_65537_2048 = `-----BEGIN CERTIFICATE-----
|
||||
MIIEpzCCAo+gAwIBAgIUUD90GVlb8r8b3X9dBiU3w+hDICYwDQYJKoZIhvcNAQEN
|
||||
BQAwSTELMAkGA1UEBhMCSlAxEjAQBgNVBAoMCU1vY2sgQ1NDQTESMBAGA1UECwwJ
|
||||
TW9jayBVbml0MRIwEAYDVQQDDAlNb2NrIENTQ0EwHhcNMjUwMTEwMTU1NDQzWhcN
|
||||
MzAwMTA5MTU1NDQzWjBWMQswCQYDVQQGEwJKUDERMA8GA1UECgwITW9jayBEU0Mx
|
||||
EjAQBgNVBAsMCU1vY2sgVW5pdDEgMB4GA1UEAwwXTW9jayBEU0MgU0hBNTEyIFJT
|
||||
QTIwNDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSvKqw2u9u4+Qz
|
||||
uhrJ2+o41eonPWAD1SodMORJVecATSjRb+HpYYBrcV7AB8AmmTKwYfkbugEUspnJ
|
||||
/5yl0IldEEoZ+FJm5S+3tmN20DuickdDYKkXPOkXZelWFU3sE4jpYTEzXu/nTH4L
|
||||
pNwqXYjHXH+/INUS7xJ0gYYPZ2DThVgobYbXETmFdyuJpH8vFdAV1Fxxp0C2Rwkt
|
||||
jSwkhF+h8Hs2vi4ojGcghYUFLmDTF4UP/uPPuJonzQJRL7EQHiHTC7eZ+EtMS1PS
|
||||
6X0VeC/uAAtT8b7+zBGMz8+x+aAAwXIut/yY2LnoSBVxUu+4g8Ii5Zt5rzPGm6GQ
|
||||
P6IfCwARAgMBAAGjejB4MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMBgG
|
||||
A1UdJQEB/wQOMAwGCisGAQQBgjcKAwwwHQYDVR0OBBYEFO3kqWll+f8YY9uDfBJX
|
||||
eaKngTVuMB8GA1UdIwQYMBaAFNGLaWDO8CTAQRwgxawm4FxsWINfMA0GCSqGSIb3
|
||||
DQEBDQUAA4ICAQCKG3TGrnzI9wI2wrIg6bBfPH84HaxkRfhWPgy6Kl9JC31ngmSU
|
||||
dc1e+Bkdg9DjOgEAfSQJ/0s8xkOFZI8gOBBj8XjWsSGZfNY1EAo3By1eVceZ/9bq
|
||||
f2YcoNI0UFQaiqZMCGqfFduZEZ6O3BvO+kV8fGQR22ClfmNV6bVbejWH+gu69blt
|
||||
N/paiO/66tnMhnIQtGMCqXDaHKRPhIm9+TZKurPANlYHBHXUm2/GmoglLBqt2i2K
|
||||
S99TWc4aefkE4PIo9Y4tjzg8dtzKIZ8bIb2ZaZ0eMOcaIBoHDrT4CIM6qBpCybY9
|
||||
2eyjAtqEB273FewqaaUwqwBLBYq5eELzvY2RXec79iWCdA57+JM8gvLaOLp4oRrv
|
||||
T1VhweZqJl+f1DGP7GtSS9kwdHc2bGy/c+Q0sNcsbi1fDKR0Ua6UD7VI/OQAd7qI
|
||||
BnCMQlb6OmGJ7NwHqc5LqXQfl9TIXoCM2SbCILSMftQgF/1VNRjuLJ8zjR+0aRop
|
||||
ZxnwjCKuBSKSWE3MlFZ4KYpt0Tu4NjfgQwcpd9jNGh2ju4cW2y94+aZHYjY1S/61
|
||||
fCwuoiDeII65pXx8lO2nk51Cidz6utia9gHit8U8xxjoeQhlb9SScPzuAK5vn63r
|
||||
ZywzAe8hoV47K1/m1GnJL/1T4qOOeomQngQGtn+ydO/+m0NHwYwRFW5DLg==
|
||||
-----END CERTIFICATE-----
|
||||
`;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
31
common/src/mock_certificates/sha256_rsa_3_4096/mock_csca.crt
Normal file
31
common/src/mock_certificates/sha256_rsa_3_4096/mock_csca.crt
Normal file
@@ -0,0 +1,31 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
52
common/src/mock_certificates/sha256_rsa_3_4096/mock_csca.key
Normal file
52
common/src/mock_certificates/sha256_rsa_3_4096/mock_csca.key
Normal file
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIJQQIBADANBgkqhkiG9w0BAQEFAASCCSswggknAgEAAoICAQDA/dBVdCz4sxIH
|
||||
f0t9T7nCD+Ryi2ZcqnQusMSmhHaJuGbIUKZve+0XeRcehwqAmdGjA8lHy5pyntZQ
|
||||
ectbq5daavJ/mdk0y0dzhCtRjKvogt+yslL2ru6U38NZH/RBzibCukj/RONJmNl7
|
||||
igBGel/pRRtvTdzDuvfKpVCwx5RP9jSIYNr5q10VzKAWJH6ngy92Imc/otqfWwuZ
|
||||
yUjBvA9FAEbMtElmnscOvhamnhra1PTIBH/tapxatgW6CMyR1c2Sy+gkzhkLNbF9
|
||||
nNOeIbCG7HpBnbeex5CQbeZsXXXkmZ0XMv8+gitOAtpR6LypXHJfdmhFT6Ua3yO1
|
||||
vgzDIFYkKPBi9/DIj5J1UhWyIy5DPWHur3xophmeJ7F9QhQI1dZEZclWdJcaqXEq
|
||||
a5mA7xr3rTLPv0wWCpRN1NLaJ2NoRSEluiGiF6uY8uvQVJYhUlvGBZISyrL9wkcx
|
||||
NsnjDu5IBsSLxaaSHciip+UbFrkgTN0eAjS3UCMT1qzhD5vKo+q47RdZjGj+NxlL
|
||||
Ym1ph5DpBXJ5tnYh1JWSWfkiLsZtTdqF4xNz5971oDSaqFT9iiRzo+aBd/ntXm1M
|
||||
mqIKqPlY+l0ZqiWr8gTErJZCmiuBFIpAsOTOCzfrVpipYMR2OZxjzhKWCTV4qMlQ
|
||||
uaSTFCSW3DEgLilt4yylahbPHBY1fQIDAQABAoIB/xdepNu0Nb3n8Ub3Iy0JenUF
|
||||
d6RnPP37phYBUc7YO4Jx0gBvw7e8SfmNsD8CG0N3XOtgif8nqIw4r7sPBJEVNj68
|
||||
tKC/AI5kD0LtvlEht69wKaZ58ZHtnPZqIj2ooOtXC1qJNE21CdDfsXZEP8RJDVQy
|
||||
CiBwTUtmWJsxaZP+lvcX2USqddnF5n+9R6Vmxe+C8zxa7iXGkrK5U65LsYPEQhUY
|
||||
83nWWw0SLQib/CIxAw98uid+Y/9b6ZMSd58PcbY3La2ZA4NxcZbp6ZRMaVO8wKOV
|
||||
/zfy4UlY4SicJkr5Bk2oTF2Cz2XCXXwU3FsO08muaCsnK3k5K8UVQD3BxcnbIJMK
|
||||
fex8AMEsOZ+Z+UlS5T1iXXkg4q0eLGkHgSmidpezpg1nLeE0/5AyTSgjnIdeXS5/
|
||||
iMlr53lrv5u2Oqs3YJlbVBcQKeE3PDw6D6nC3NFiYkYyLxAupvBcCOl9nO2RqjFh
|
||||
tKAJQWPIiJ5YJkFMGXCBRI0AhViUi/9g/AMSWo5cbn2yZxmWX9EV0g6Acg0qaU9m
|
||||
VldID+/0KGnk0hrLEdLcGCBVKvR3hT0Zxm3izc0QsslprD5FGZKdl2jeFTW1OXis
|
||||
rJUgEaYoqCabz/kxGjeZVG4Dv0HD+ryZA+UJIpy/SFsSqqded4eayr6q8PCS6i57
|
||||
ifEpct2pRpdFH6jmuwUCggEBAOjxKzyfh4zOx2BUueQ1FW8yx5QbI7BsPE8cZauf
|
||||
CkIqj21Mr5FGyupO/+6tbyVIPAihcRZ3ChJ1uRIV+fhI8rtYXYJxbe538VWBEnz9
|
||||
XXJvUU+6qRYZlcuAxrcm7dpc+q1fXxzwwGW+e60Q3rMzbjNHot2FZ/mh9ro9Dg+w
|
||||
x9TmFZ4P90F8+zVEoXtwr52YuZljJDF8W9F5oRyEDwqk1lIDquOv4yiJQEhg/NUh
|
||||
KGZmYOqyCke5TU1xMxadIKFNp/zoBpDG2l4ai4RxYbpIHAlT6S9qaO2ZSABlAPh6
|
||||
v7Tnycf2xhr/43JV9Bi0bwchKY4+IEAAMDaDrdwIiXX8tp8CggEBANQYSHGZmmYH
|
||||
bU/rL5hPXQtA2LVSXbTakbhA7SXu/TbXBx/daeRSNV0ngbBibMq1ajNM86tiS1lg
|
||||
Z6tOYKJVylCTiy1V1jCCgsRCXDZaLTDWgG/+j/kDwrTtdqzZToqCwJQKR5DsG7ir
|
||||
/rJsMHEcg9Gty37ugA0Q/LE7DFe8iUr9mf1TYl/HpF+qM6DGnBeyMPtbzEfW7yud
|
||||
CZZcUCKxI/RCU1fMi4GaNFe2d1Vn90CmhWsWRhznFgde/POQqbGA66Fqsaiivy5K
|
||||
w1n/CiFToVEEjnfCeagOGnEGTSX6ChH10OTkQz/LEH4d5TgtMFBHgswhCqjesGEr
|
||||
A5BpsMwqqmMCggEALRZJBSHnrbR0WMvtcyNnM6/De4JJRSOeBL39W9ubs7TjMAew
|
||||
z9DBA9sopH0DT1cM76q35d5Cn9ITcVG5oXoVKXfwGYh0+7xRhPhHqNOtm7G6LlF1
|
||||
2uY23T3euKKbVTG7/4S/Ny3OP6M/8v6Z7FufD+PkvTXOKz5TMDcTGqxf8XBbbM2w
|
||||
UQes4+GV0/u6silWez76SW3Fo+UD7y4Mb0X6icNV914a/MScIaZMKcCSPkfAqIyv
|
||||
erR+JugrOExPfYk3Y7dRVgJ3T9GZgZgkj1bXvmJ0dw4Eo0CQ9CqYpn+zzYMzxjWY
|
||||
oK84ye+jIIkEGIAtt++EdH7U1ihkpXstiB3TBwKCAQAwtKreO5HzYD1AHxg89+y8
|
||||
CtY5PYL7Zz4TfAV5spo/n72pGaWZoy9SByKHKPMm0eZjhYZnkxkOm07zTfpvDRh6
|
||||
zIcnkBCx7yasfzjB2o+KKZgxH9pcKvrppaadJwIcWM50sK+injX3gLfqrWGqeAvl
|
||||
eO3EZmzNk1sUMCUzeL5mlDpqrF1o9WXP+jwE7dcmsesBriEJVlhyQYvUFbrpXJiP
|
||||
HTQac4SN7KWchvB8knV7SUJWRzUuqfqrEqswG8Z8VsjFtsS5nzYcIVsfLaxb3uKq
|
||||
wksdQXHCoAp+bh4FXJg3a6XfCnRPEAjnjWH4NphjtyhYTDYwdYM3rTMSVNMe76VV
|
||||
AoIBAQCxFUTJvdKDER3WyNkJRsZcyZlCs5FG8gXKBfvWyZhlSJ6QgCTl0Yq0UmOg
|
||||
7jlf1ylH0JwIDt/lvd1xDlprzzIoRGWL9prQRfT4oGJhKAaAljvlxviZIXQBJJe5
|
||||
aNZqGL+p9nLW6TIoOer7LUD7/fO/lLN2KYb1DuVjR30AK1z3mIWPGkRctSjhLAAg
|
||||
I6YQvvsZ5sCnMeamxhv/9XsQc/qLhGs9APzAotgqRCx3QAfB13bUhZphsVqJBvdm
|
||||
iomKqM/awSwlzW5nQyt9rJPyu7BNYFYhH4OENXMNTCatNagC7JqwUX9uWhBmQQKT
|
||||
GNYoCtc56XQ1ArIAzBynL0sfhxnX
|
||||
-----END PRIVATE KEY-----
|
||||
33
common/src/mock_certificates/sha256_rsa_3_4096/mock_dsc.crt
Normal file
33
common/src/mock_certificates/sha256_rsa_3_4096/mock_dsc.crt
Normal file
@@ -0,0 +1,33 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
ZPOzG68rtudy
|
||||
-----END CERTIFICATE-----
|
||||
52
common/src/mock_certificates/sha256_rsa_3_4096/mock_dsc.key
Normal file
52
common/src/mock_certificates/sha256_rsa_3_4096/mock_dsc.key
Normal file
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
/oJPpjQ+6ZN4gCl9P8dlm+A4GnqoNw==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,31 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
4xrHDL4L6oYeb/EQLVbBnzcXqZkEQA==
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,27 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIEpzCCAo+gAwIBAgIUUD90GVlb8r8b3X9dBiU3w+hDICYwDQYJKoZIhvcNAQEN
|
||||
BQAwSTELMAkGA1UEBhMCSlAxEjAQBgNVBAoMCU1vY2sgQ1NDQTESMBAGA1UECwwJ
|
||||
TW9jayBVbml0MRIwEAYDVQQDDAlNb2NrIENTQ0EwHhcNMjUwMTEwMTU1NDQzWhcN
|
||||
MzAwMTA5MTU1NDQzWjBWMQswCQYDVQQGEwJKUDERMA8GA1UECgwITW9jayBEU0Mx
|
||||
EjAQBgNVBAsMCU1vY2sgVW5pdDEgMB4GA1UEAwwXTW9jayBEU0MgU0hBNTEyIFJT
|
||||
QTIwNDgwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDSvKqw2u9u4+Qz
|
||||
uhrJ2+o41eonPWAD1SodMORJVecATSjRb+HpYYBrcV7AB8AmmTKwYfkbugEUspnJ
|
||||
/5yl0IldEEoZ+FJm5S+3tmN20DuickdDYKkXPOkXZelWFU3sE4jpYTEzXu/nTH4L
|
||||
pNwqXYjHXH+/INUS7xJ0gYYPZ2DThVgobYbXETmFdyuJpH8vFdAV1Fxxp0C2Rwkt
|
||||
jSwkhF+h8Hs2vi4ojGcghYUFLmDTF4UP/uPPuJonzQJRL7EQHiHTC7eZ+EtMS1PS
|
||||
6X0VeC/uAAtT8b7+zBGMz8+x+aAAwXIut/yY2LnoSBVxUu+4g8Ii5Zt5rzPGm6GQ
|
||||
P6IfCwARAgMBAAGjejB4MAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMBgG
|
||||
A1UdJQEB/wQOMAwGCisGAQQBgjcKAwwwHQYDVR0OBBYEFO3kqWll+f8YY9uDfBJX
|
||||
eaKngTVuMB8GA1UdIwQYMBaAFNGLaWDO8CTAQRwgxawm4FxsWINfMA0GCSqGSIb3
|
||||
DQEBDQUAA4ICAQCKG3TGrnzI9wI2wrIg6bBfPH84HaxkRfhWPgy6Kl9JC31ngmSU
|
||||
dc1e+Bkdg9DjOgEAfSQJ/0s8xkOFZI8gOBBj8XjWsSGZfNY1EAo3By1eVceZ/9bq
|
||||
f2YcoNI0UFQaiqZMCGqfFduZEZ6O3BvO+kV8fGQR22ClfmNV6bVbejWH+gu69blt
|
||||
N/paiO/66tnMhnIQtGMCqXDaHKRPhIm9+TZKurPANlYHBHXUm2/GmoglLBqt2i2K
|
||||
S99TWc4aefkE4PIo9Y4tjzg8dtzKIZ8bIb2ZaZ0eMOcaIBoHDrT4CIM6qBpCybY9
|
||||
2eyjAtqEB273FewqaaUwqwBLBYq5eELzvY2RXec79iWCdA57+JM8gvLaOLp4oRrv
|
||||
T1VhweZqJl+f1DGP7GtSS9kwdHc2bGy/c+Q0sNcsbi1fDKR0Ua6UD7VI/OQAd7qI
|
||||
BnCMQlb6OmGJ7NwHqc5LqXQfl9TIXoCM2SbCILSMftQgF/1VNRjuLJ8zjR+0aRop
|
||||
ZxnwjCKuBSKSWE3MlFZ4KYpt0Tu4NjfgQwcpd9jNGh2ju4cW2y94+aZHYjY1S/61
|
||||
fCwuoiDeII65pXx8lO2nk51Cidz6utia9gHit8U8xxjoeQhlb9SScPzuAK5vn63r
|
||||
ZywzAe8hoV47K1/m1GnJL/1T4qOOeomQngQGtn+ydO/+m0NHwYwRFW5DLg==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDSvKqw2u9u4+Qz
|
||||
uhrJ2+o41eonPWAD1SodMORJVecATSjRb+HpYYBrcV7AB8AmmTKwYfkbugEUspnJ
|
||||
/5yl0IldEEoZ+FJm5S+3tmN20DuickdDYKkXPOkXZelWFU3sE4jpYTEzXu/nTH4L
|
||||
pNwqXYjHXH+/INUS7xJ0gYYPZ2DThVgobYbXETmFdyuJpH8vFdAV1Fxxp0C2Rwkt
|
||||
jSwkhF+h8Hs2vi4ojGcghYUFLmDTF4UP/uPPuJonzQJRL7EQHiHTC7eZ+EtMS1PS
|
||||
6X0VeC/uAAtT8b7+zBGMz8+x+aAAwXIut/yY2LnoSBVxUu+4g8Ii5Zt5rzPGm6GQ
|
||||
P6IfCwARAgMBAAECggEAHGoE59C1TPHcUJ8swn/s7lnldwH/ArVItuPjPAIhofhF
|
||||
YyvfPY0AeDwyhtjkry+j1oV3RaZIRAaq1sIo2HCsPMiX/TVuwuHvE6m7coc0KzyW
|
||||
YD7VvcTgNt/uXMWFmqmtoa4RqLgJx9mX+zDw4KN48EyICvi90g47IktejJAnTY2j
|
||||
1MlAZ/00qXwWifaNhc7+VuA46mlstX2UxOHoqu8neYgE2vhC8/A6oHmVePMQASjS
|
||||
akUEYzGhF1t69A1EFxbh1LI/Z07F2J9Jt7u+a1SlDIjevKq5ExkioPfcm1Wvn1Zy
|
||||
8Kys5JYtORTGQj8EyJQRxIFE+xuwoj1eMqxTZq2BowKBgQD70PYrAFCA2g/fnygf
|
||||
rwjhYroyEp9tUbI9jTOIW5iFFvrgvJ9z5w/DofE9X2EKWOr6ZriyXIN3J4OU8Ttm
|
||||
0a85DDMYmxQvLLnCLlHkMXIpC6k72mwYRTyrlHirkRHxfvBujp2OoY+yMsaPyi2C
|
||||
EFHEKv/sb39OJ8E7fh1Y2uvKTwKBgQDWPPwNvcMmiRwAOniuAB1/2MqWwuluk8Bu
|
||||
rL6WPt3KgItqGKFNC3c0ainI8XGWullmk1SwP7YqBuPcfb6LkAe3wYcb5sSOZsZb
|
||||
tpk+f/TsU8bCkTE87cnPrmv7wIoxvm+ItqOeWp+7B8wkEHnOBn/TkUggcwb7tnbX
|
||||
sWKr6VDXnwKBgBJzczYfZcarM7KM9OGtb5ckJsR4fNoDvG2qJPZ+z6Qg1O0WpRBX
|
||||
A96vxP9cN74MWdtTH4FiKffXG1sUeefEwXQKosvQwR/bxRinUDTKMrUzN4k9LeJx
|
||||
YEqqLFVV4dyyEmfnZ0AGMoM6GTZ79+2pyHP5OptWaBuP6iazzO6vy8sdAoGBAKxR
|
||||
JwdCb7oKJCyG21RRIWkYjXKP2cQoMWqTpUQh0rEzjW9L2kmnBD1zeqJ2mT98KbZY
|
||||
oJCW3kWVfyd1OJL2yU5i6fJmPgiv37Ia/82GjBCeHcuXjvwL4vwZth8rMbxrCTj0
|
||||
dkxDZiDAV9FWMzKkhaI9Q79d5esGSzaYJd5SbsTPAoGAWD5FANbg1QbxOE1giyyi
|
||||
hvAVZ2dT/HZj7wbAFATO/C69r7sbG5SF2TrxBHGI+fhLwI1wXSURE/oCYpfkUmsS
|
||||
dIDFa1lQSaf44x11efTrWhjvU3gB6z7Y/lutrvFdihebWOJDRmxUkDJ7fxNDKssJ
|
||||
robTDzXXBGlHrGJRKHwKxow=
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,31 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
kx3ZHdN5uk9awxx825mnlb+c97Ia
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -0,0 +1,33 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
j9Sia6tiYeI4rSQ=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,52 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
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
|
||||
5oD/m9q2ACiOw9Hmu/folOkgH1oP
|
||||
-----END PRIVATE KEY-----
|
||||
@@ -1,164 +1,182 @@
|
||||
import { saltLengths } from "../constants/constants";
|
||||
import { hashAlgos } from "../constants/constants";
|
||||
import { CertificateData, PublicKeyDetailsECDSA, PublicKeyDetailsRSA } from "./certificate_parsing/dataStructure";
|
||||
import { initElliptic } from "./certificate_parsing/elliptic";
|
||||
import * as asn1js from "asn1js";
|
||||
import * as forge from "node-forge";
|
||||
import { getCurveForElliptic } from "./certificate_parsing/curves";
|
||||
import { Certificate } from "pkijs";
|
||||
import { hash } from "./utils";
|
||||
import { saltLengths } from '../constants/constants';
|
||||
import { hashAlgos } from '../constants/constants';
|
||||
import {
|
||||
CertificateData,
|
||||
PublicKeyDetailsECDSA,
|
||||
PublicKeyDetailsRSA,
|
||||
} from './certificate_parsing/dataStructure';
|
||||
import { initElliptic } from './certificate_parsing/elliptic';
|
||||
import * as asn1js from 'asn1js';
|
||||
import * as forge from 'node-forge';
|
||||
import { getCurveForElliptic } from './certificate_parsing/curves';
|
||||
import { Certificate } from 'pkijs';
|
||||
import { hash } from './utils';
|
||||
|
||||
export function brutforceSignatureAlgorithmDsc(dsc: CertificateData, csca: CertificateData) {
|
||||
if (csca.signatureAlgorithm === 'ecdsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithmDsc(dsc, csca, 'ecdsa');
|
||||
return {
|
||||
signatureAlgorithm: 'ecdsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
if (csca.signatureAlgorithm === 'ecdsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithmDsc(dsc, csca, 'ecdsa');
|
||||
return {
|
||||
signatureAlgorithm: 'ecdsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
} else if (csca.signatureAlgorithm === 'rsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithmDsc(dsc, csca, 'rsa');
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
}
|
||||
else if (csca.signatureAlgorithm === 'rsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithmDsc(dsc, csca, 'rsa');
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
//it's important to not put 'else if' statement here, because a rsapss signature can use rsa key certificate.
|
||||
for (const saltLength of saltLengths) {
|
||||
const hashAlgorithm = brutforceHashAlgorithmDsc(dsc, csca, 'rsapss', saltLength);
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsapss',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: saltLength,
|
||||
};
|
||||
}
|
||||
//it's important to not put 'else if' statement here, because a rsapss signature can use rsa key certificate.
|
||||
for (const saltLength of saltLengths) {
|
||||
const hashAlgorithm = brutforceHashAlgorithmDsc(dsc, csca, 'rsapss', saltLength);
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsapss',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: saltLength,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function brutforceHashAlgorithmDsc(dsc: CertificateData, csca: CertificateData, signatureAlgorithm: string, saltLength?: number): any {
|
||||
|
||||
for (const hashFunction of hashAlgos) {
|
||||
// console.log(`\nTrying hash function: ${hashFunction}`);
|
||||
if (verifySignature(dsc, csca, signatureAlgorithm, hashFunction, saltLength)) {
|
||||
// console.log(`✓ Success with hash function: ${hashFunction}`);
|
||||
return hashFunction;
|
||||
}
|
||||
// console.log(`✗ Failed with hash function: ${hashFunction}`);
|
||||
function brutforceHashAlgorithmDsc(
|
||||
dsc: CertificateData,
|
||||
csca: CertificateData,
|
||||
signatureAlgorithm: string,
|
||||
saltLength?: number
|
||||
): any {
|
||||
for (const hashFunction of hashAlgos) {
|
||||
// console.log(`\nTrying hash function: ${hashFunction}`);
|
||||
if (verifySignature(dsc, csca, signatureAlgorithm, hashFunction, saltLength)) {
|
||||
// console.log(`✓ Success with hash function: ${hashFunction}`);
|
||||
return hashFunction;
|
||||
}
|
||||
return false;
|
||||
// console.log(`✗ Failed with hash function: ${hashFunction}`);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function verifySignature(dsc: CertificateData, csca: CertificateData, signatureAlgorithm: string, hashAlgorithm: string, saltLength: number = 0): boolean {
|
||||
switch (signatureAlgorithm) {
|
||||
case 'ecdsa':
|
||||
return verifyECDSA(dsc, csca, hashAlgorithm);
|
||||
case 'rsa':
|
||||
return verifyRSA(dsc, csca, hashAlgorithm);
|
||||
case 'rsapss':
|
||||
return verifyRSAPSS(dsc, csca, hashAlgorithm, saltLength);
|
||||
}
|
||||
function verifySignature(
|
||||
dsc: CertificateData,
|
||||
csca: CertificateData,
|
||||
signatureAlgorithm: string,
|
||||
hashAlgorithm: string,
|
||||
saltLength: number = 0
|
||||
): boolean {
|
||||
switch (signatureAlgorithm) {
|
||||
case 'ecdsa':
|
||||
return verifyECDSA(dsc, csca, hashAlgorithm);
|
||||
case 'rsa':
|
||||
return verifyRSA(dsc, csca, hashAlgorithm);
|
||||
case 'rsapss':
|
||||
return verifyRSAPSS(dsc, csca, hashAlgorithm, saltLength);
|
||||
}
|
||||
}
|
||||
|
||||
function verifyECDSA(dsc: CertificateData, csca: CertificateData, hashAlgorithm: string): boolean {
|
||||
const elliptic = initElliptic();
|
||||
const certBuffer_csca = Buffer.from(
|
||||
csca.rawPem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data_csca = asn1js.fromBER(certBuffer_csca);
|
||||
const cert_csca = new Certificate({ schema: asn1Data_csca.result });
|
||||
const publicKeyInfo_csca = cert_csca.subjectPublicKeyInfo;
|
||||
const publicKeyBuffer_csca = publicKeyInfo_csca.subjectPublicKey.valueBlock.valueHexView;
|
||||
const curveForElliptic_csca = getCurveForElliptic((csca.publicKeyDetails as PublicKeyDetailsECDSA).curve);
|
||||
const ec_csca = new elliptic.ec(curveForElliptic_csca);
|
||||
const key_csca = ec_csca.keyFromPublic(publicKeyBuffer_csca);
|
||||
const elliptic = initElliptic();
|
||||
const certBuffer_csca = Buffer.from(
|
||||
csca.rawPem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data_csca = asn1js.fromBER(certBuffer_csca);
|
||||
const cert_csca = new Certificate({ schema: asn1Data_csca.result });
|
||||
const publicKeyInfo_csca = cert_csca.subjectPublicKeyInfo;
|
||||
const publicKeyBuffer_csca = publicKeyInfo_csca.subjectPublicKey.valueBlock.valueHexView;
|
||||
const curveForElliptic_csca = getCurveForElliptic(
|
||||
(csca.publicKeyDetails as PublicKeyDetailsECDSA).curve
|
||||
);
|
||||
const ec_csca = new elliptic.ec(curveForElliptic_csca);
|
||||
const key_csca = ec_csca.keyFromPublic(publicKeyBuffer_csca);
|
||||
|
||||
const tbsHash = getTBSHash(dsc.rawPem, hashAlgorithm, 'hex');
|
||||
|
||||
const certBuffer_dsc = Buffer.from(
|
||||
dsc.rawPem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data_dsc = asn1js.fromBER(certBuffer_dsc);
|
||||
const cert_dsc = new Certificate({ schema: asn1Data_dsc.result });
|
||||
const signatureValue = cert_dsc.signatureValue.valueBlock.valueHexView;
|
||||
const signature_crypto = Buffer.from(signatureValue).toString('hex');
|
||||
return key_csca.verify(tbsHash, signature_crypto);
|
||||
const tbsHash = getTBSHash(dsc.rawPem, hashAlgorithm, 'hex');
|
||||
|
||||
const certBuffer_dsc = Buffer.from(
|
||||
dsc.rawPem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data_dsc = asn1js.fromBER(certBuffer_dsc);
|
||||
const cert_dsc = new Certificate({ schema: asn1Data_dsc.result });
|
||||
const signatureValue = cert_dsc.signatureValue.valueBlock.valueHexView;
|
||||
const signature_crypto = Buffer.from(signatureValue).toString('hex');
|
||||
return key_csca.verify(tbsHash, signature_crypto);
|
||||
}
|
||||
function verifyRSA(dsc: CertificateData, csca: CertificateData, hashAlgorithm: string): boolean {
|
||||
try {
|
||||
const dscCert = forge.pki.certificateFromPem(dsc.rawPem);
|
||||
const cscaCert = forge.pki.certificateFromPem(csca.rawPem);
|
||||
const tbsHash = getTBSHash(dsc.rawPem, hashAlgorithm);
|
||||
if (!tbsHash) {
|
||||
return false;
|
||||
}
|
||||
const publicKey = cscaCert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const signature = dscCert.signature;
|
||||
try {
|
||||
const verified = publicKey.verify(tbsHash, signature);
|
||||
return verified;
|
||||
} catch (verifyError) {
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
return false;
|
||||
try {
|
||||
const dscCert = forge.pki.certificateFromPem(dsc.rawPem);
|
||||
const cscaCert = forge.pki.certificateFromPem(csca.rawPem);
|
||||
const tbsHash = getTBSHash(dsc.rawPem, hashAlgorithm);
|
||||
if (!tbsHash) {
|
||||
return false;
|
||||
}
|
||||
const publicKey = cscaCert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const signature = dscCert.signature;
|
||||
try {
|
||||
const verified = publicKey.verify(tbsHash, signature);
|
||||
return verified;
|
||||
} catch (verifyError) {
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function verifyRSAPSS(dsc: CertificateData, csca: CertificateData, hashAlgorithm: string, saltLength: number): boolean {
|
||||
try {
|
||||
const dscCert = forge.pki.certificateFromPem(dsc.rawPem);
|
||||
const cscaCert = forge.pki.certificateFromPem(csca.rawPem);
|
||||
const tbsHash = getTBSHash(dsc.rawPem, hashAlgorithm);
|
||||
if (!tbsHash) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const publicKey = cscaCert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const signature = dscCert.signature;
|
||||
|
||||
if (saltLength === 0) {
|
||||
throw new Error('Salt length is required for RSA-PSS');
|
||||
}
|
||||
|
||||
try {
|
||||
const pss = forge.pss.create({
|
||||
md: forge.md[hashAlgorithm].create(),
|
||||
mgf: forge.mgf.mgf1.create(forge.md[hashAlgorithm].create()),
|
||||
saltLength: saltLength,
|
||||
});
|
||||
return publicKey.verify(tbsHash, signature, pss);
|
||||
} catch (verifyError) {
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
return false;
|
||||
function verifyRSAPSS(
|
||||
dsc: CertificateData,
|
||||
csca: CertificateData,
|
||||
hashAlgorithm: string,
|
||||
saltLength: number
|
||||
): boolean {
|
||||
try {
|
||||
const dscCert = forge.pki.certificateFromPem(dsc.rawPem);
|
||||
const cscaCert = forge.pki.certificateFromPem(csca.rawPem);
|
||||
const tbsHash = getTBSHash(dsc.rawPem, hashAlgorithm);
|
||||
if (!tbsHash) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const publicKey = cscaCert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const signature = dscCert.signature;
|
||||
|
||||
if (saltLength === 0) {
|
||||
throw new Error('Salt length is required for RSA-PSS');
|
||||
}
|
||||
|
||||
try {
|
||||
const pss = forge.pss.create({
|
||||
md: forge.md[hashAlgorithm].create(),
|
||||
mgf: forge.mgf.mgf1.create(forge.md[hashAlgorithm].create()),
|
||||
saltLength: saltLength,
|
||||
});
|
||||
return publicKey.verify(tbsHash, signature, pss);
|
||||
} catch (verifyError) {
|
||||
return false;
|
||||
}
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export function getTBSHash(
|
||||
pem: string,
|
||||
hashFunction: string,
|
||||
format: 'hex' | 'data' = 'data',
|
||||
pem: string,
|
||||
hashFunction: string,
|
||||
format: 'hex' | 'data' = 'data'
|
||||
): string {
|
||||
const certBuffer = Buffer.from(
|
||||
pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data_cert = asn1js.fromBER(certBuffer);
|
||||
const cert = new Certificate({ schema: asn1Data_cert.result });
|
||||
const tbsAsn1 = cert.encodeTBS();
|
||||
const tbsDer = tbsAsn1.toBER(false);
|
||||
const tbsBytes = Buffer.from(tbsDer);
|
||||
const tbsBytesArray = Array.from(tbsBytes);
|
||||
const msgHash = hash(hashFunction, tbsBytesArray, format === 'hex' ? 'hex' : 'binary');
|
||||
return msgHash as string;
|
||||
}
|
||||
const certBuffer = Buffer.from(
|
||||
pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data_cert = asn1js.fromBER(certBuffer);
|
||||
const cert = new Certificate({ schema: asn1Data_cert.result });
|
||||
const tbsAsn1 = cert.encodeTBS();
|
||||
const tbsDer = tbsAsn1.toBER(false);
|
||||
const tbsBytes = Buffer.from(tbsDer);
|
||||
const tbsBytesArray = Array.from(tbsBytes);
|
||||
const msgHash = hash(hashFunction, tbsBytesArray, format === 'hex' ? 'hex' : 'binary');
|
||||
return msgHash as string;
|
||||
}
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import { PassportData } from './types';
|
||||
import { parseCertificateSimple } from './certificate_parsing/parseCertificateSimple';
|
||||
import {
|
||||
PublicKeyDetailsECDSA,
|
||||
} from './certificate_parsing/dataStructure';
|
||||
import { PublicKeyDetailsECDSA } from './certificate_parsing/dataStructure';
|
||||
import forge, { md } from 'node-forge';
|
||||
import * as asn1js from 'asn1js';
|
||||
import { initElliptic } from './certificate_parsing/elliptic';
|
||||
@@ -11,117 +9,120 @@ import { Certificate } from 'pkijs';
|
||||
import { hashAlgos, saltLengths } from '../constants/constants';
|
||||
import { hash } from './utils';
|
||||
|
||||
|
||||
export function brutforceSignatureAlgorithm(passportData: PassportData) {
|
||||
const parsedDsc = parseCertificateSimple(passportData.dsc);
|
||||
if (parsedDsc.signatureAlgorithm === 'ecdsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithm(passportData, 'ecdsa');
|
||||
return {
|
||||
signatureAlgorithm: 'ecdsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
const parsedDsc = parseCertificateSimple(passportData.dsc);
|
||||
if (parsedDsc.signatureAlgorithm === 'ecdsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithm(passportData, 'ecdsa');
|
||||
return {
|
||||
signatureAlgorithm: 'ecdsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
} else if (parsedDsc.signatureAlgorithm === 'rsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithm(passportData, 'rsa');
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
}
|
||||
else if (parsedDsc.signatureAlgorithm === 'rsa') {
|
||||
const hashAlgorithm = brutforceHashAlgorithm(passportData, 'rsa');
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsa',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: 0,
|
||||
};
|
||||
}
|
||||
}
|
||||
// it's important to not put 'else if' statement here, because a rsapss signature can use rsa key certificate.
|
||||
for (const saltLength of saltLengths) {
|
||||
const hashAlgorithm = brutforceHashAlgorithm(passportData, 'rsapss', saltLength);
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsapss',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: saltLength,
|
||||
};
|
||||
}
|
||||
// it's important to not put 'else if' statement here, because a rsapss signature can use rsa key certificate.
|
||||
for (const saltLength of saltLengths) {
|
||||
const hashAlgorithm = brutforceHashAlgorithm(passportData, 'rsapss', saltLength);
|
||||
if (hashAlgorithm) {
|
||||
return {
|
||||
signatureAlgorithm: 'rsapss',
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
saltLength: saltLength,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function brutforceHashAlgorithm(passportData: PassportData, signatureAlgorithm: string, saltLength?: number): any {
|
||||
for (const hashFunction of hashAlgos) {
|
||||
if (verifySignature(passportData, signatureAlgorithm, hashFunction, saltLength)) {
|
||||
return hashFunction;
|
||||
}
|
||||
function brutforceHashAlgorithm(
|
||||
passportData: PassportData,
|
||||
signatureAlgorithm: string,
|
||||
saltLength?: number
|
||||
): any {
|
||||
for (const hashFunction of hashAlgos) {
|
||||
if (verifySignature(passportData, signatureAlgorithm, hashFunction, saltLength)) {
|
||||
return hashFunction;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
export function verifySignature(passportData: PassportData, signatureAlgorithm: string, hashAlgorithm: string, saltLength: number = 0): boolean {
|
||||
|
||||
switch (signatureAlgorithm) {
|
||||
case 'ecdsa':
|
||||
return verifyECDSA(passportData, hashAlgorithm);
|
||||
case 'rsa':
|
||||
return verifyRSA(passportData, hashAlgorithm);
|
||||
case 'rsapss':
|
||||
return verifyRSAPSS(passportData, hashAlgorithm, saltLength);
|
||||
}
|
||||
|
||||
export function verifySignature(
|
||||
passportData: PassportData,
|
||||
signatureAlgorithm: string,
|
||||
hashAlgorithm: string,
|
||||
saltLength: number = 0
|
||||
): boolean {
|
||||
switch (signatureAlgorithm) {
|
||||
case 'ecdsa':
|
||||
return verifyECDSA(passportData, hashAlgorithm);
|
||||
case 'rsa':
|
||||
return verifyRSA(passportData, hashAlgorithm);
|
||||
case 'rsapss':
|
||||
return verifyRSAPSS(passportData, hashAlgorithm, saltLength);
|
||||
}
|
||||
}
|
||||
|
||||
function verifyECDSA(passportData: PassportData, hashAlgorithm: string) {
|
||||
const elliptic = initElliptic();
|
||||
const { dsc, signedAttr, encryptedDigest } = passportData;
|
||||
const { publicKeyDetails } = parseCertificateSimple(dsc);
|
||||
const certBuffer = Buffer.from(
|
||||
dsc.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data = asn1js.fromBER(certBuffer);
|
||||
const cert = new Certificate({ schema: asn1Data.result });
|
||||
const publicKeyInfo = cert.subjectPublicKeyInfo;
|
||||
const publicKeyBuffer = publicKeyInfo.subjectPublicKey.valueBlock.valueHexView;
|
||||
const curveForElliptic = getCurveForElliptic((publicKeyDetails as PublicKeyDetailsECDSA).curve);
|
||||
const ec = new elliptic.ec(curveForElliptic);
|
||||
const elliptic = initElliptic();
|
||||
const { dsc, signedAttr, encryptedDigest } = passportData;
|
||||
const { publicKeyDetails } = parseCertificateSimple(dsc);
|
||||
const certBuffer = Buffer.from(
|
||||
dsc.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n)/g, ''),
|
||||
'base64'
|
||||
);
|
||||
const asn1Data = asn1js.fromBER(certBuffer);
|
||||
const cert = new Certificate({ schema: asn1Data.result });
|
||||
const publicKeyInfo = cert.subjectPublicKeyInfo;
|
||||
const publicKeyBuffer = publicKeyInfo.subjectPublicKey.valueBlock.valueHexView;
|
||||
const curveForElliptic = getCurveForElliptic((publicKeyDetails as PublicKeyDetailsECDSA).curve);
|
||||
const ec = new elliptic.ec(curveForElliptic);
|
||||
|
||||
const key = ec.keyFromPublic(publicKeyBuffer);
|
||||
const msgHash = hash(hashAlgorithm, signedAttr, 'hex');
|
||||
const signature_crypto = Buffer.from(encryptedDigest).toString('hex');
|
||||
const key = ec.keyFromPublic(publicKeyBuffer);
|
||||
const msgHash = hash(hashAlgorithm, signedAttr, 'hex');
|
||||
const signature_crypto = Buffer.from(encryptedDigest).toString('hex');
|
||||
|
||||
return key.verify(msgHash, signature_crypto);
|
||||
return key.verify(msgHash, signature_crypto);
|
||||
}
|
||||
|
||||
function verifyRSA(passportData: PassportData, hashAlgorithm: string) {
|
||||
const { dsc, signedAttr, encryptedDigest } = passportData;
|
||||
const cert = forge.pki.certificateFromPem(dsc);
|
||||
const publicKey = cert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const msgHash = hash(hashAlgorithm, signedAttr, 'binary');
|
||||
const signature = Buffer.from(encryptedDigest).toString('binary');
|
||||
try {
|
||||
return publicKey.verify(msgHash as string, signature);
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
const { dsc, signedAttr, encryptedDigest } = passportData;
|
||||
const cert = forge.pki.certificateFromPem(dsc);
|
||||
const publicKey = cert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const msgHash = hash(hashAlgorithm, signedAttr, 'binary');
|
||||
const signature = Buffer.from(encryptedDigest).toString('binary');
|
||||
try {
|
||||
return publicKey.verify(msgHash as string, signature);
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
function verifyRSAPSS(passportData: PassportData, hashAlgorithm: string, saltLength: number) {
|
||||
const { dsc, signedAttr, encryptedDigest } = passportData;
|
||||
const cert = forge.pki.certificateFromPem(dsc);
|
||||
const publicKey = cert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const msgHash = hash(hashAlgorithm, signedAttr, 'binary');
|
||||
const { dsc, signedAttr, encryptedDigest } = passportData;
|
||||
const cert = forge.pki.certificateFromPem(dsc);
|
||||
const publicKey = cert.publicKey as forge.pki.rsa.PublicKey;
|
||||
const msgHash = hash(hashAlgorithm, signedAttr, 'binary');
|
||||
|
||||
const signature = Buffer.from(encryptedDigest).toString('binary');
|
||||
if (saltLength === 0) {
|
||||
throw new Error('Salt length is required for RSA-PSS');
|
||||
}
|
||||
try {
|
||||
const pss = forge.pss.create({
|
||||
md: forge.md[hashAlgorithm].create(),
|
||||
mgf: forge.mgf.mgf1.create(forge.md[hashAlgorithm].create()),
|
||||
saltLength: saltLength,
|
||||
});
|
||||
return publicKey.verify(msgHash as string, signature, pss);
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
const signature = Buffer.from(encryptedDigest).toString('binary');
|
||||
if (saltLength === 0) {
|
||||
throw new Error('Salt length is required for RSA-PSS');
|
||||
}
|
||||
try {
|
||||
const pss = forge.pss.create({
|
||||
md: forge.md[hashAlgorithm].create(),
|
||||
mgf: forge.mgf.mgf1.create(forge.md[hashAlgorithm].create()),
|
||||
saltLength: saltLength,
|
||||
});
|
||||
return publicKey.verify(msgHash as string, signature, pss);
|
||||
} catch (error) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,10 +2,10 @@ import * as asn1js from 'asn1js';
|
||||
import { Certificate, RSAPublicKey, RSASSAPSSParams } from 'pkijs';
|
||||
import { getFriendlyName } from './oids';
|
||||
import {
|
||||
CertificateData,
|
||||
PublicKeyDetailsECDSA,
|
||||
PublicKeyDetailsRSA,
|
||||
PublicKeyDetailsRSAPSS,
|
||||
CertificateData,
|
||||
PublicKeyDetailsECDSA,
|
||||
PublicKeyDetailsRSA,
|
||||
PublicKeyDetailsRSAPSS,
|
||||
} from './dataStructure';
|
||||
import { getCurveForElliptic, getECDSACurveBits, identifyCurve, StandardCurve } from './curves';
|
||||
import { getIssuerCountryCode, getSubjectKeyIdentifier } from './utils';
|
||||
@@ -14,318 +14,318 @@ import { Mode } from '../appType';
|
||||
import { initElliptic } from './elliptic';
|
||||
|
||||
export function parseCertificateSimple(pem: string): CertificateData {
|
||||
let certificateData: CertificateData = {
|
||||
id: '',
|
||||
issuer: '',
|
||||
validity: {
|
||||
notBefore: '',
|
||||
notAfter: '',
|
||||
},
|
||||
subjectKeyIdentifier: '',
|
||||
authorityKeyIdentifier: '',
|
||||
signatureAlgorithm: '',
|
||||
hashAlgorithm: '',
|
||||
publicKeyDetails: undefined,
|
||||
rawPem: '',
|
||||
rawTxt: '',
|
||||
};
|
||||
try {
|
||||
const pemFormatted = pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n|\r)/g, '');
|
||||
const binary = Buffer.from(pemFormatted, 'base64');
|
||||
const arrayBuffer = new ArrayBuffer(binary.length);
|
||||
const view = new Uint8Array(arrayBuffer);
|
||||
for (let i = 0; i < binary.length; i++) {
|
||||
view[i] = binary[i];
|
||||
}
|
||||
|
||||
const asn1 = asn1js.fromBER(arrayBuffer);
|
||||
if (asn1.offset === -1) {
|
||||
throw new Error(`ASN.1 parsing error: ${asn1.result.error}`);
|
||||
}
|
||||
|
||||
const cert = new Certificate({ schema: asn1.result });
|
||||
const publicKeyAlgoOID = cert.subjectPublicKeyInfo.algorithm.algorithmId;
|
||||
const publicKeyAlgoFN = getFriendlyName(publicKeyAlgoOID);
|
||||
const signatureAlgoOID = cert.signatureAlgorithm.algorithmId;
|
||||
const signatureAlgoFN = getFriendlyName(signatureAlgoOID);
|
||||
certificateData.hashAlgorithm = getHashAlgorithm(signatureAlgoFN);
|
||||
let params;
|
||||
if (publicKeyAlgoFN === 'RSA') {
|
||||
certificateData.signatureAlgorithm = 'rsa';
|
||||
params = getParamsRSA(cert);
|
||||
} else if (publicKeyAlgoFN === 'ECC') {
|
||||
certificateData.signatureAlgorithm = 'ecdsa';
|
||||
params = getParamsECDSA(cert);
|
||||
} else if (publicKeyAlgoFN === 'RSASSA_PSS') {
|
||||
certificateData.signatureAlgorithm = 'rsapss';
|
||||
params = getParamsRSAPSS(cert);
|
||||
} else {
|
||||
console.log(publicKeyAlgoFN);
|
||||
}
|
||||
certificateData.publicKeyDetails = params;
|
||||
certificateData.issuer = getIssuerCountryCode(cert);
|
||||
certificateData.validity = {
|
||||
notBefore: cert.notBefore.value.toString(),
|
||||
notAfter: cert.notAfter.value.toString(),
|
||||
};
|
||||
const ski = getSubjectKeyIdentifier(cert);
|
||||
certificateData.id = ski.slice(0, 12);
|
||||
certificateData.subjectKeyIdentifier = ski;
|
||||
certificateData.rawPem = pem;
|
||||
|
||||
const authorityKeyIdentifier = getAuthorityKeyIdentifier(cert);
|
||||
certificateData.authorityKeyIdentifier = authorityKeyIdentifier;
|
||||
|
||||
// corner case for rsapss
|
||||
if (certificateData.signatureAlgorithm === 'rsapss' && !certificateData.hashAlgorithm) {
|
||||
certificateData.hashAlgorithm = (
|
||||
certificateData.publicKeyDetails as PublicKeyDetailsRSAPSS
|
||||
).hashAlgorithm;
|
||||
}
|
||||
|
||||
return certificateData;
|
||||
} catch (error) {
|
||||
console.error(`Error processing certificate`, error);
|
||||
throw error;
|
||||
let certificateData: CertificateData = {
|
||||
id: '',
|
||||
issuer: '',
|
||||
validity: {
|
||||
notBefore: '',
|
||||
notAfter: '',
|
||||
},
|
||||
subjectKeyIdentifier: '',
|
||||
authorityKeyIdentifier: '',
|
||||
signatureAlgorithm: '',
|
||||
hashAlgorithm: '',
|
||||
publicKeyDetails: undefined,
|
||||
rawPem: '',
|
||||
rawTxt: '',
|
||||
};
|
||||
try {
|
||||
const pemFormatted = pem.replace(/(-----(BEGIN|END) CERTIFICATE-----|\n|\r)/g, '');
|
||||
const binary = Buffer.from(pemFormatted, 'base64');
|
||||
const arrayBuffer = new ArrayBuffer(binary.length);
|
||||
const view = new Uint8Array(arrayBuffer);
|
||||
for (let i = 0; i < binary.length; i++) {
|
||||
view[i] = binary[i];
|
||||
}
|
||||
|
||||
const asn1 = asn1js.fromBER(arrayBuffer);
|
||||
if (asn1.offset === -1) {
|
||||
throw new Error(`ASN.1 parsing error: ${asn1.result.error}`);
|
||||
}
|
||||
|
||||
const cert = new Certificate({ schema: asn1.result });
|
||||
const publicKeyAlgoOID = cert.subjectPublicKeyInfo.algorithm.algorithmId;
|
||||
const publicKeyAlgoFN = getFriendlyName(publicKeyAlgoOID);
|
||||
const signatureAlgoOID = cert.signatureAlgorithm.algorithmId;
|
||||
const signatureAlgoFN = getFriendlyName(signatureAlgoOID);
|
||||
certificateData.hashAlgorithm = getHashAlgorithm(signatureAlgoFN);
|
||||
let params;
|
||||
if (publicKeyAlgoFN === 'RSA') {
|
||||
certificateData.signatureAlgorithm = 'rsa';
|
||||
params = getParamsRSA(cert);
|
||||
} else if (publicKeyAlgoFN === 'ECC') {
|
||||
certificateData.signatureAlgorithm = 'ecdsa';
|
||||
params = getParamsECDSA(cert);
|
||||
} else if (publicKeyAlgoFN === 'RSASSA_PSS') {
|
||||
certificateData.signatureAlgorithm = 'rsapss';
|
||||
params = getParamsRSAPSS(cert);
|
||||
} else {
|
||||
console.log(publicKeyAlgoFN);
|
||||
}
|
||||
certificateData.publicKeyDetails = params;
|
||||
certificateData.issuer = getIssuerCountryCode(cert);
|
||||
certificateData.validity = {
|
||||
notBefore: cert.notBefore.value.toString(),
|
||||
notAfter: cert.notAfter.value.toString(),
|
||||
};
|
||||
const ski = getSubjectKeyIdentifier(cert);
|
||||
certificateData.id = ski.slice(0, 12);
|
||||
certificateData.subjectKeyIdentifier = ski;
|
||||
certificateData.rawPem = pem;
|
||||
|
||||
const authorityKeyIdentifier = getAuthorityKeyIdentifier(cert);
|
||||
certificateData.authorityKeyIdentifier = authorityKeyIdentifier;
|
||||
|
||||
// corner case for rsapss
|
||||
if (certificateData.signatureAlgorithm === 'rsapss' && !certificateData.hashAlgorithm) {
|
||||
certificateData.hashAlgorithm = (
|
||||
certificateData.publicKeyDetails as PublicKeyDetailsRSAPSS
|
||||
).hashAlgorithm;
|
||||
}
|
||||
|
||||
return certificateData;
|
||||
} catch (error) {
|
||||
console.error(`Error processing certificate`, error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
function getParamsRSA(cert: Certificate): PublicKeyDetailsRSA {
|
||||
const publicKeyValue = cert.subjectPublicKeyInfo.parsedKey as RSAPublicKey;
|
||||
const modulusBytes = publicKeyValue.modulus.valueBlock.valueHexView;
|
||||
const modulusHex = Buffer.from(modulusBytes).toString('hex');
|
||||
const exponentBigInt = publicKeyValue.publicExponent.toBigInt();
|
||||
const exponentDecimal = exponentBigInt.toString();
|
||||
const actualBits = modulusBytes.length * 8;
|
||||
const publicKeyValue = cert.subjectPublicKeyInfo.parsedKey as RSAPublicKey;
|
||||
const modulusBytes = publicKeyValue.modulus.valueBlock.valueHexView;
|
||||
const modulusHex = Buffer.from(modulusBytes).toString('hex');
|
||||
const exponentBigInt = publicKeyValue.publicExponent.toBigInt();
|
||||
const exponentDecimal = exponentBigInt.toString();
|
||||
const actualBits = modulusBytes.length * 8;
|
||||
|
||||
return {
|
||||
modulus: modulusHex,
|
||||
exponent: exponentDecimal,
|
||||
bits: actualBits.toString(),
|
||||
};
|
||||
return {
|
||||
modulus: modulusHex,
|
||||
exponent: exponentDecimal,
|
||||
bits: actualBits.toString(),
|
||||
};
|
||||
}
|
||||
|
||||
function getParamsRSAPSS(cert: Certificate): PublicKeyDetailsRSAPSS {
|
||||
// Get the subjectPublicKey BitString
|
||||
const spki = cert.subjectPublicKeyInfo;
|
||||
const spkiValueHex = spki.subjectPublicKey.valueBlock.valueHexView;
|
||||
// Get the subjectPublicKey BitString
|
||||
const spki = cert.subjectPublicKeyInfo;
|
||||
const spkiValueHex = spki.subjectPublicKey.valueBlock.valueHexView;
|
||||
|
||||
// Parse the public key ASN.1 structure
|
||||
const asn1PublicKey = asn1js.fromBER(spkiValueHex);
|
||||
if (asn1PublicKey.offset === -1) {
|
||||
throw new Error('Error parsing public key ASN.1 structure');
|
||||
}
|
||||
// Parse the public key ASN.1 structure
|
||||
const asn1PublicKey = asn1js.fromBER(spkiValueHex);
|
||||
if (asn1PublicKey.offset === -1) {
|
||||
throw new Error('Error parsing public key ASN.1 structure');
|
||||
}
|
||||
|
||||
// The public key is an RSAPublicKey structure
|
||||
const rsaPublicKey = new RSAPublicKey({ schema: asn1PublicKey.result });
|
||||
const modulusBytes = rsaPublicKey.modulus.valueBlock.valueHexView;
|
||||
const modulusHex = Buffer.from(modulusBytes).toString('hex');
|
||||
const exponentBigInt = rsaPublicKey.publicExponent.toBigInt();
|
||||
const exponentDecimal = exponentBigInt.toString();
|
||||
const actualBits = modulusBytes.length * 8;
|
||||
// The public key is an RSAPublicKey structure
|
||||
const rsaPublicKey = new RSAPublicKey({ schema: asn1PublicKey.result });
|
||||
const modulusBytes = rsaPublicKey.modulus.valueBlock.valueHexView;
|
||||
const modulusHex = Buffer.from(modulusBytes).toString('hex');
|
||||
const exponentBigInt = rsaPublicKey.publicExponent.toBigInt();
|
||||
const exponentDecimal = exponentBigInt.toString();
|
||||
const actualBits = modulusBytes.length * 8;
|
||||
|
||||
const sigAlgParams = cert.signatureAlgorithm.algorithmParams;
|
||||
const pssParams = new RSASSAPSSParams({ schema: sigAlgParams });
|
||||
const hashAlgorithm = getFriendlyName(pssParams.hashAlgorithm.algorithmId);
|
||||
const mgf = getFriendlyName(pssParams.maskGenAlgorithm.algorithmId);
|
||||
const sigAlgParams = cert.signatureAlgorithm.algorithmParams;
|
||||
const pssParams = new RSASSAPSSParams({ schema: sigAlgParams });
|
||||
const hashAlgorithm = getFriendlyName(pssParams.hashAlgorithm.algorithmId);
|
||||
const mgf = getFriendlyName(pssParams.maskGenAlgorithm.algorithmId);
|
||||
|
||||
return {
|
||||
modulus: modulusHex,
|
||||
exponent: exponentDecimal,
|
||||
bits: actualBits.toString(),
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
mgf: mgf,
|
||||
saltLength: pssParams.saltLength.toString(),
|
||||
};
|
||||
return {
|
||||
modulus: modulusHex,
|
||||
exponent: exponentDecimal,
|
||||
bits: actualBits.toString(),
|
||||
hashAlgorithm: hashAlgorithm,
|
||||
mgf: mgf,
|
||||
saltLength: pssParams.saltLength.toString(),
|
||||
};
|
||||
}
|
||||
|
||||
export function getParamsECDSA(cert: Certificate): PublicKeyDetailsECDSA {
|
||||
try {
|
||||
const algorithmParams = cert.subjectPublicKeyInfo.algorithm.algorithmParams;
|
||||
try {
|
||||
const algorithmParams = cert.subjectPublicKeyInfo.algorithm.algorithmParams;
|
||||
|
||||
if (!algorithmParams) {
|
||||
console.error('No algorithm params found');
|
||||
return {
|
||||
curve: 'Unknown',
|
||||
params: {} as StandardCurve,
|
||||
bits: 'Unknown',
|
||||
x: 'Unknown',
|
||||
y: 'Unknown',
|
||||
};
|
||||
}
|
||||
|
||||
let curveName,
|
||||
bits,
|
||||
x,
|
||||
y = 'Unknown';
|
||||
let curveParams: StandardCurve = {} as StandardCurve;
|
||||
|
||||
// Try to get the curve name from the OID
|
||||
if (algorithmParams instanceof asn1js.ObjectIdentifier) {
|
||||
const curveOid = algorithmParams.valueBlock.toString();
|
||||
curveName = getFriendlyName(curveOid) || 'Unknown';
|
||||
bits = getECDSACurveBits(curveName);
|
||||
}
|
||||
|
||||
// If the OID of the curve is not present, we try to get the curve parameters and identify the curve from them
|
||||
else {
|
||||
const params = asn1js.fromBER(algorithmParams.valueBeforeDecodeView).result;
|
||||
const valueBlock: any = params.valueBlock;
|
||||
if (valueBlock.value && valueBlock.value.length >= 5) {
|
||||
const curveParams: StandardCurve = {} as StandardCurve;
|
||||
// Field ID (index 1)
|
||||
const fieldId = valueBlock.value[1];
|
||||
if (fieldId && fieldId.valueBlock && fieldId.valueBlock.value) {
|
||||
const fieldType = fieldId.valueBlock.value[0];
|
||||
const prime = fieldId.valueBlock.value[1];
|
||||
//curveParams.fieldType = fieldType.valueBlock.toString();
|
||||
curveParams.p = Buffer.from(prime.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
// Curve Coefficients (index 2)
|
||||
const curveCoefficients = valueBlock.value[2];
|
||||
if (
|
||||
curveCoefficients &&
|
||||
curveCoefficients.valueBlock &&
|
||||
curveCoefficients.valueBlock.value
|
||||
) {
|
||||
const a = curveCoefficients.valueBlock.value[0];
|
||||
const b = curveCoefficients.valueBlock.value[1];
|
||||
curveParams.a = Buffer.from(a.valueBlock.valueHexView).toString('hex');
|
||||
curveParams.b = Buffer.from(b.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
// Base Point G (index 3)
|
||||
const basePoint = valueBlock.value[3];
|
||||
if (basePoint && basePoint.valueBlock) {
|
||||
curveParams.G = Buffer.from(basePoint.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
// Order n (index 4)
|
||||
const order = valueBlock.value[4];
|
||||
if (order && order.valueBlock) {
|
||||
curveParams.n = Buffer.from(order.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
if (valueBlock.value.length >= 6) {
|
||||
// Cofactor h (index 5)
|
||||
const cofactor = valueBlock.value[5];
|
||||
if (cofactor && cofactor.valueBlock) {
|
||||
curveParams.h = Buffer.from(cofactor.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
} else {
|
||||
curveParams.h = '01';
|
||||
}
|
||||
const identifiedCurve = identifyCurve(curveParams);
|
||||
curveName = identifiedCurve;
|
||||
bits = getECDSACurveBits(curveName);
|
||||
} else {
|
||||
if (valueBlock.value) {
|
||||
console.log(valueBlock.value);
|
||||
} else {
|
||||
console.log('No value block found');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the public key x and y parameters
|
||||
const publicKeyBuffer = cert.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHexView;
|
||||
if (publicKeyBuffer && curveName !== 'Unknown') {
|
||||
const elliptic = initElliptic();
|
||||
const ec = new elliptic.ec(getCurveForElliptic(curveName));
|
||||
const key = ec.keyFromPublic(publicKeyBuffer);
|
||||
x = key.getPublic().getX().toString('hex');
|
||||
y = key.getPublic().getY().toString('hex');
|
||||
}
|
||||
return { curve: curveName, params: curveParams, bits: bits, x: x, y: y };
|
||||
} catch (error) {
|
||||
console.error('Error parsing EC parameters:', error);
|
||||
return {
|
||||
curve: 'Error',
|
||||
params: {} as StandardCurve,
|
||||
bits: 'Unknown',
|
||||
x: 'Unknown',
|
||||
y: 'Unknown',
|
||||
};
|
||||
if (!algorithmParams) {
|
||||
console.error('No algorithm params found');
|
||||
return {
|
||||
curve: 'Unknown',
|
||||
params: {} as StandardCurve,
|
||||
bits: 'Unknown',
|
||||
x: 'Unknown',
|
||||
y: 'Unknown',
|
||||
};
|
||||
}
|
||||
|
||||
let curveName,
|
||||
bits,
|
||||
x,
|
||||
y = 'Unknown';
|
||||
let curveParams: StandardCurve = {} as StandardCurve;
|
||||
|
||||
// Try to get the curve name from the OID
|
||||
if (algorithmParams instanceof asn1js.ObjectIdentifier) {
|
||||
const curveOid = algorithmParams.valueBlock.toString();
|
||||
curveName = getFriendlyName(curveOid) || 'Unknown';
|
||||
bits = getECDSACurveBits(curveName);
|
||||
}
|
||||
|
||||
// If the OID of the curve is not present, we try to get the curve parameters and identify the curve from them
|
||||
else {
|
||||
const params = asn1js.fromBER(algorithmParams.valueBeforeDecodeView).result;
|
||||
const valueBlock: any = params.valueBlock;
|
||||
if (valueBlock.value && valueBlock.value.length >= 5) {
|
||||
const curveParams: StandardCurve = {} as StandardCurve;
|
||||
// Field ID (index 1)
|
||||
const fieldId = valueBlock.value[1];
|
||||
if (fieldId && fieldId.valueBlock && fieldId.valueBlock.value) {
|
||||
const fieldType = fieldId.valueBlock.value[0];
|
||||
const prime = fieldId.valueBlock.value[1];
|
||||
//curveParams.fieldType = fieldType.valueBlock.toString();
|
||||
curveParams.p = Buffer.from(prime.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
// Curve Coefficients (index 2)
|
||||
const curveCoefficients = valueBlock.value[2];
|
||||
if (
|
||||
curveCoefficients &&
|
||||
curveCoefficients.valueBlock &&
|
||||
curveCoefficients.valueBlock.value
|
||||
) {
|
||||
const a = curveCoefficients.valueBlock.value[0];
|
||||
const b = curveCoefficients.valueBlock.value[1];
|
||||
curveParams.a = Buffer.from(a.valueBlock.valueHexView).toString('hex');
|
||||
curveParams.b = Buffer.from(b.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
// Base Point G (index 3)
|
||||
const basePoint = valueBlock.value[3];
|
||||
if (basePoint && basePoint.valueBlock) {
|
||||
curveParams.G = Buffer.from(basePoint.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
// Order n (index 4)
|
||||
const order = valueBlock.value[4];
|
||||
if (order && order.valueBlock) {
|
||||
curveParams.n = Buffer.from(order.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
|
||||
if (valueBlock.value.length >= 6) {
|
||||
// Cofactor h (index 5)
|
||||
const cofactor = valueBlock.value[5];
|
||||
if (cofactor && cofactor.valueBlock) {
|
||||
curveParams.h = Buffer.from(cofactor.valueBlock.valueHexView).toString('hex');
|
||||
}
|
||||
} else {
|
||||
curveParams.h = '01';
|
||||
}
|
||||
const identifiedCurve = identifyCurve(curveParams);
|
||||
curveName = identifiedCurve;
|
||||
bits = getECDSACurveBits(curveName);
|
||||
} else {
|
||||
if (valueBlock.value) {
|
||||
console.log(valueBlock.value);
|
||||
} else {
|
||||
console.log('No value block found');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the public key x and y parameters
|
||||
const publicKeyBuffer = cert.subjectPublicKeyInfo.subjectPublicKey.valueBlock.valueHexView;
|
||||
if (publicKeyBuffer && curveName !== 'Unknown') {
|
||||
const elliptic = initElliptic();
|
||||
const ec = new elliptic.ec(getCurveForElliptic(curveName));
|
||||
const key = ec.keyFromPublic(publicKeyBuffer);
|
||||
x = key.getPublic().getX().toString('hex');
|
||||
y = key.getPublic().getY().toString('hex');
|
||||
}
|
||||
return { curve: curveName, params: curveParams, bits: bits, x: x, y: y };
|
||||
} catch (error) {
|
||||
console.error('Error parsing EC parameters:', error);
|
||||
return {
|
||||
curve: 'Error',
|
||||
params: {} as StandardCurve,
|
||||
bits: 'Unknown',
|
||||
x: 'Unknown',
|
||||
y: 'Unknown',
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export const getAuthorityKeyIdentifier = (cert: Certificate): string => {
|
||||
const authorityKeyIdentifier = cert.extensions.find((ext) => ext.extnID === '2.5.29.35');
|
||||
if (authorityKeyIdentifier) {
|
||||
let akiValue = Buffer.from(authorityKeyIdentifier.extnValue.valueBlock.valueHexView).toString(
|
||||
'hex'
|
||||
);
|
||||
akiValue = akiValue.replace(/^(?:3016)?(?:0414)?/, '');
|
||||
// cur off the first 2 bytes
|
||||
akiValue = akiValue.slice(4);
|
||||
return akiValue;
|
||||
}
|
||||
return null;
|
||||
const authorityKeyIdentifier = cert.extensions.find((ext) => ext.extnID === '2.5.29.35');
|
||||
if (authorityKeyIdentifier) {
|
||||
let akiValue = Buffer.from(authorityKeyIdentifier.extnValue.valueBlock.valueHexView).toString(
|
||||
'hex'
|
||||
);
|
||||
akiValue = akiValue.replace(/^(?:3016)?(?:0414)?/, '');
|
||||
// cur off the first 2 bytes
|
||||
akiValue = akiValue.slice(4);
|
||||
return akiValue;
|
||||
}
|
||||
return null;
|
||||
};
|
||||
|
||||
export const getCircuitName = (
|
||||
circuitMode: 'prove' | 'dsc' | 'vc_and_disclose',
|
||||
signatureAlgorithm: string,
|
||||
hashFunction: string,
|
||||
domainParameter: string,
|
||||
keyLength: string
|
||||
circuitMode: 'prove' | 'dsc' | 'vc_and_disclose',
|
||||
signatureAlgorithm: string,
|
||||
hashFunction: string,
|
||||
domainParameter: string,
|
||||
keyLength: string
|
||||
) => {
|
||||
const circuit = circuitNameFromMode[circuitMode];
|
||||
if (circuit == 'vc_and_disclose') {
|
||||
return 'vc_and_disclose';
|
||||
}
|
||||
if (circuit == 'dsc') {
|
||||
return (
|
||||
circuit +
|
||||
'_' +
|
||||
signatureAlgorithm +
|
||||
'_' +
|
||||
hashFunction +
|
||||
'_' +
|
||||
domainParameter +
|
||||
'_' +
|
||||
keyLength
|
||||
);
|
||||
}
|
||||
const circuit = circuitNameFromMode[circuitMode];
|
||||
if (circuit == 'vc_and_disclose') {
|
||||
return 'vc_and_disclose';
|
||||
}
|
||||
if (circuit == 'dsc') {
|
||||
return (
|
||||
circuit +
|
||||
'_' +
|
||||
signatureAlgorithm +
|
||||
'_' +
|
||||
hashFunction +
|
||||
'_' +
|
||||
domainParameter +
|
||||
'_' +
|
||||
keyLength
|
||||
circuit +
|
||||
'_' +
|
||||
signatureAlgorithm +
|
||||
'_' +
|
||||
hashFunction +
|
||||
'_' +
|
||||
domainParameter +
|
||||
'_' +
|
||||
keyLength
|
||||
);
|
||||
}
|
||||
return (
|
||||
circuit +
|
||||
'_' +
|
||||
signatureAlgorithm +
|
||||
'_' +
|
||||
hashFunction +
|
||||
'_' +
|
||||
domainParameter +
|
||||
'_' +
|
||||
keyLength
|
||||
);
|
||||
};
|
||||
export const getCircuitNameOld = (
|
||||
circuitMode: Mode,
|
||||
signatureAlgorithm: string,
|
||||
hashFunction: string
|
||||
circuitMode: Mode,
|
||||
signatureAlgorithm: string,
|
||||
hashFunction: string
|
||||
) => {
|
||||
const circuit = circuitNameFromMode[circuitMode];
|
||||
if (circuit == 'vc_and_disclose') {
|
||||
return 'vc_and_disclose';
|
||||
} else if (signatureAlgorithm === 'ecdsa') {
|
||||
return circuit + '_' + signatureAlgorithm + '_secp256r1_' + hashFunction;
|
||||
} else {
|
||||
return circuit + '_' + signatureAlgorithm + '_65537_' + hashFunction;
|
||||
}
|
||||
const circuit = circuitNameFromMode[circuitMode];
|
||||
if (circuit == 'vc_and_disclose') {
|
||||
return 'vc_and_disclose';
|
||||
} else if (signatureAlgorithm === 'ecdsa') {
|
||||
return circuit + '_' + signatureAlgorithm + '_secp256r1_' + hashFunction;
|
||||
} else {
|
||||
return circuit + '_' + signatureAlgorithm + '_65537_' + hashFunction;
|
||||
}
|
||||
};
|
||||
|
||||
export function getHashAlgorithm(rawSignatureAlgorithm: string) {
|
||||
const input = rawSignatureAlgorithm.toLowerCase();
|
||||
const patterns = [/sha-?1/i, /sha-?256/i, /sha-?384/i, /sha-?512/i];
|
||||
const input = rawSignatureAlgorithm.toLowerCase();
|
||||
const patterns = [/sha-?1/i, /sha-?256/i, /sha-?384/i, /sha-?512/i];
|
||||
|
||||
for (const pattern of patterns) {
|
||||
const match = input.match(pattern);
|
||||
if (match) {
|
||||
// Remove any hyphens and return standardized format
|
||||
return match[0].replace('-', '');
|
||||
}
|
||||
for (const pattern of patterns) {
|
||||
const match = input.match(pattern);
|
||||
if (match) {
|
||||
// Remove any hyphens and return standardized format
|
||||
return match[0].replace('-', '');
|
||||
}
|
||||
}
|
||||
|
||||
return 'unknown';
|
||||
return 'unknown';
|
||||
}
|
||||
|
||||
@@ -36,8 +36,7 @@ export const getAuthorityKeyIdentifier = (cert: Certificate): string => {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
console.log('\x1b[31m%s\x1b[0m', 'no authority key identifier found');
|
||||
}
|
||||
return '';
|
||||
|
||||
@@ -38,4 +38,4 @@ export function getCircuitNameFromPassportData(passportData: PassportData) {
|
||||
} else {
|
||||
throw new Error('Unsupported signature algorithm');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,6 +58,12 @@ import {
|
||||
mock_dsc_sha512_brainpoolP512r1,
|
||||
mock_dsc_key_sha224_braipoolP224r1,
|
||||
mock_dsc_sha224_brainpoolP224r1,
|
||||
mock_dsc_key_sha512_rsa_65537_4096,
|
||||
mock_dsc_sha512_rsa_65537_4096,
|
||||
mock_dsc_key_sha256_rsa_3_4096,
|
||||
mock_dsc_sha256_rsa_3_4096,
|
||||
mock_dsc_key_sha512_rsa_65537_2048,
|
||||
mock_dsc_sha512_rsa_65537_2048,
|
||||
} from '../constants/mockCertificates';
|
||||
import { countryCodes } from '../constants/constants';
|
||||
import { parseCertificateSimple } from './certificate_parsing/parseCertificateSimple';
|
||||
@@ -145,6 +151,10 @@ export function genMockPassportData(
|
||||
privateKeyPem = mock_dsc_key_sha1_rsa_4096;
|
||||
dsc = mock_dsc_sha1_rsa_4096;
|
||||
break;
|
||||
case 'rsa_sha1_65537_4096':
|
||||
privateKeyPem = mock_dsc_key_sha1_rsa_4096;
|
||||
dsc = mock_dsc_sha1_rsa_4096;
|
||||
break;
|
||||
case 'rsa_sha256_65537_2048':
|
||||
privateKeyPem = mock_dsc_key_sha256_rsa_4096;
|
||||
dsc = mock_dsc_sha256_rsa_4096;
|
||||
@@ -233,6 +243,22 @@ export function genMockPassportData(
|
||||
privateKeyPem = mock_dsc_key_sha512_brainpoolP512r1;
|
||||
dsc = mock_dsc_sha512_brainpoolP512r1;
|
||||
break;
|
||||
case 'rsa_sha256_65537_4096':
|
||||
privateKeyPem = mock_dsc_key_sha256_rsa_4096;
|
||||
dsc = mock_dsc_sha256_rsa_4096;
|
||||
break;
|
||||
case 'rsa_sha512_65537_4096':
|
||||
privateKeyPem = mock_dsc_key_sha512_rsa_65537_4096;
|
||||
dsc = mock_dsc_sha512_rsa_65537_4096;
|
||||
break;
|
||||
case 'rsa_sha512_65537_2048':
|
||||
privateKeyPem = mock_dsc_key_sha512_rsa_65537_2048;
|
||||
dsc = mock_dsc_sha512_rsa_65537_2048;
|
||||
break;
|
||||
case 'rsa_sha256_3_4096':
|
||||
privateKeyPem = mock_dsc_key_sha256_rsa_3_4096;
|
||||
dsc = mock_dsc_sha256_rsa_3_4096;
|
||||
break;
|
||||
}
|
||||
|
||||
// Generate MRZ hash first
|
||||
|
||||
@@ -72,7 +72,7 @@ export function generateCircuitInputsDisclose(
|
||||
const name_leaf = getNameLeaf(formattedMrz.slice(10, 49)); // [6-44] + 5 shift
|
||||
const {
|
||||
root: smt_root,
|
||||
closestleaf: smt_leaf_value,
|
||||
closestleaf: smt_leaf_key,
|
||||
siblings: smt_siblings,
|
||||
} = generateSMTProof(name_smt, name_leaf);
|
||||
|
||||
@@ -93,7 +93,7 @@ export function generateCircuitInputsDisclose(
|
||||
majority: formatInput(majority_ascii),
|
||||
user_identifier: formatInput(castFromUUID(user_identifier)),
|
||||
smt_root: formatInput(smt_root),
|
||||
smt_leaf_value: formatInput(smt_leaf_value),
|
||||
smt_leaf_key: formatInput(smt_leaf_key),
|
||||
smt_siblings: formatInput(smt_siblings),
|
||||
selector_ofac: formatInput(selector_ofac),
|
||||
forbidden_countries_list: formatInput(formatCountriesList(forbidden_countries_list)),
|
||||
@@ -123,7 +123,7 @@ export function generateCircuitInputsOfac(
|
||||
|
||||
return {
|
||||
dg1: formatInput(mrz_bytes),
|
||||
smt_leaf_value: formatInput(closestleaf),
|
||||
smt_leaf_key: formatInput(closestleaf),
|
||||
smt_root: formatInput(root),
|
||||
smt_siblings: formatInput(siblings),
|
||||
};
|
||||
@@ -141,7 +141,7 @@ export function generateCircuitInputsCountryVerifier(
|
||||
return {
|
||||
dg1: formatInput(mrz_bytes),
|
||||
hostCountry: formatInput(usa_ascii),
|
||||
smt_leaf_value: formatInput(closestleaf),
|
||||
smt_leaf_key: formatInput(closestleaf),
|
||||
smt_root: formatInput(root),
|
||||
smt_siblings: formatInput(siblings),
|
||||
};
|
||||
@@ -168,7 +168,7 @@ export function findIndexInTree(tree: LeanIMT, commitment: bigint): number {
|
||||
export function generateCircuitInputsRegister(
|
||||
secret: number | string,
|
||||
dsc_secret: number | string,
|
||||
passportData: PassportData,
|
||||
passportData: PassportData
|
||||
) {
|
||||
const { mrz, eContent, signedAttr, dg2Hash } = passportData;
|
||||
const passportMetadata = parsePassportData(passportData);
|
||||
|
||||
@@ -1,45 +1,48 @@
|
||||
import { brutforceSignatureAlgorithmDsc } from "./brutForceDscSignature";
|
||||
import { CertificateData } from "./certificate_parsing/dataStructure";
|
||||
import { parseCertificateSimple } from "./certificate_parsing/parseCertificateSimple";
|
||||
import { getCSCAFromSKI } from "./csca";
|
||||
import { getCurveOrExponent } from "./parsePassportData";
|
||||
import { brutforceSignatureAlgorithmDsc } from './brutForceDscSignature';
|
||||
import { CertificateData } from './certificate_parsing/dataStructure';
|
||||
import { parseCertificateSimple } from './certificate_parsing/parseCertificateSimple';
|
||||
import { getCSCAFromSKI } from './csca';
|
||||
import { getCurveOrExponent } from './parsePassportData';
|
||||
|
||||
export interface DscCertificateMetaData {
|
||||
cscaFound: boolean;
|
||||
cscaHashAlgorithm: string;
|
||||
cscaSignatureAlgorithm: string;
|
||||
cscaCurveOrExponent: string;
|
||||
cscaSignatureAlgorithmBits: number;
|
||||
cscaSaltLength: number;
|
||||
cscaFound: boolean;
|
||||
cscaHashAlgorithm: string;
|
||||
cscaSignatureAlgorithm: string;
|
||||
cscaCurveOrExponent: string;
|
||||
cscaSignatureAlgorithmBits: number;
|
||||
cscaSaltLength: number;
|
||||
}
|
||||
|
||||
export function parseDscCertificateData(dscCert: CertificateData): any {
|
||||
let csca, parsedCsca, cscaHashAlgorithm, cscaSignatureAlgorithm, cscaCurveOrExponent, cscaSignatureAlgorithmBits, cscaSaltLength;
|
||||
let cscaFound = false;
|
||||
if (dscCert.authorityKeyIdentifier) {
|
||||
try {
|
||||
csca = getCSCAFromSKI(dscCert.authorityKeyIdentifier, true);
|
||||
if (csca) {
|
||||
parsedCsca = parseCertificateSimple(csca);
|
||||
const details = brutforceSignatureAlgorithmDsc(dscCert, parsedCsca);
|
||||
cscaFound = true;
|
||||
cscaHashAlgorithm = details.hashAlgorithm;
|
||||
cscaSignatureAlgorithm = details.signatureAlgorithm;
|
||||
cscaCurveOrExponent = getCurveOrExponent(parsedCsca);
|
||||
cscaSignatureAlgorithmBits = parseInt(parsedCsca.publicKeyDetails.bits);
|
||||
cscaSaltLength = details.saltLength;
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
}
|
||||
}
|
||||
return {
|
||||
cscaFound,
|
||||
cscaHashAlgorithm,
|
||||
cscaSignatureAlgorithm,
|
||||
cscaCurveOrExponent,
|
||||
cscaSignatureAlgorithmBits,
|
||||
cscaSaltLength
|
||||
}
|
||||
|
||||
}
|
||||
let csca,
|
||||
parsedCsca,
|
||||
cscaHashAlgorithm,
|
||||
cscaSignatureAlgorithm,
|
||||
cscaCurveOrExponent,
|
||||
cscaSignatureAlgorithmBits,
|
||||
cscaSaltLength;
|
||||
let cscaFound = false;
|
||||
if (dscCert.authorityKeyIdentifier) {
|
||||
try {
|
||||
csca = getCSCAFromSKI(dscCert.authorityKeyIdentifier, true);
|
||||
if (csca) {
|
||||
parsedCsca = parseCertificateSimple(csca);
|
||||
const details = brutforceSignatureAlgorithmDsc(dscCert, parsedCsca);
|
||||
cscaFound = true;
|
||||
cscaHashAlgorithm = details.hashAlgorithm;
|
||||
cscaSignatureAlgorithm = details.signatureAlgorithm;
|
||||
cscaCurveOrExponent = getCurveOrExponent(parsedCsca);
|
||||
cscaSignatureAlgorithmBits = parseInt(parsedCsca.publicKeyDetails.bits);
|
||||
cscaSaltLength = details.saltLength;
|
||||
}
|
||||
} catch (error) {}
|
||||
}
|
||||
return {
|
||||
cscaFound,
|
||||
cscaHashAlgorithm,
|
||||
cscaSignatureAlgorithm,
|
||||
cscaCurveOrExponent,
|
||||
cscaSignatureAlgorithmBits,
|
||||
cscaSaltLength,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,153 +2,147 @@ import { PassportData } from '../../../common/src/utils/types';
|
||||
import { findSubarrayIndex, formatMrz, getHashLen, hash } from './utils';
|
||||
import { parseCertificateSimple } from './certificate_parsing/parseCertificateSimple';
|
||||
import {
|
||||
CertificateData,
|
||||
PublicKeyDetailsECDSA,
|
||||
PublicKeyDetailsRSA,
|
||||
PublicKeyDetailsRSAPSS,
|
||||
CertificateData,
|
||||
PublicKeyDetailsECDSA,
|
||||
PublicKeyDetailsRSA,
|
||||
PublicKeyDetailsRSAPSS,
|
||||
} from './certificate_parsing/dataStructure';
|
||||
import { hashAlgos } from '../constants/constants';
|
||||
import { brutforceSignatureAlgorithm } from './brutForcePassportSignature';
|
||||
import { DscCertificateMetaData, parseDscCertificateData } from './parseDscCertificateData';
|
||||
|
||||
export interface PassportMetadata {
|
||||
dataGroups: string;
|
||||
dg1HashFunction: string;
|
||||
dg1HashOffset: number;
|
||||
dgPaddingBytes: number;
|
||||
eContentSize: number;
|
||||
eContentHashFunction: string;
|
||||
eContentHashOffset: number;
|
||||
signedAttrSize: number;
|
||||
signedAttrHashFunction: string;
|
||||
signatureAlgorithm: string;
|
||||
saltLength: number;
|
||||
curveOrExponent: string;
|
||||
signatureAlgorithmBits: number;
|
||||
countryCode: string;
|
||||
cscaFound: boolean;
|
||||
cscaHashFunction: string;
|
||||
cscaSignature: string;
|
||||
cscaSaltLength: number;
|
||||
cscaCurveOrExponent: string;
|
||||
cscaSignatureAlgorithmBits: number;
|
||||
dsc: string;
|
||||
dataGroups: string;
|
||||
dg1HashFunction: string;
|
||||
dg1HashOffset: number;
|
||||
dgPaddingBytes: number;
|
||||
eContentSize: number;
|
||||
eContentHashFunction: string;
|
||||
eContentHashOffset: number;
|
||||
signedAttrSize: number;
|
||||
signedAttrHashFunction: string;
|
||||
signatureAlgorithm: string;
|
||||
saltLength: number;
|
||||
curveOrExponent: string;
|
||||
signatureAlgorithmBits: number;
|
||||
countryCode: string;
|
||||
cscaFound: boolean;
|
||||
cscaHashFunction: string;
|
||||
cscaSignature: string;
|
||||
cscaSaltLength: number;
|
||||
cscaCurveOrExponent: string;
|
||||
cscaSignatureAlgorithmBits: number;
|
||||
dsc: string;
|
||||
}
|
||||
|
||||
function findHashSizeOfEContent(eContent: number[], signedAttr: number[]) {
|
||||
for (const hashFunction of hashAlgos) {
|
||||
const hashValue = hash(hashFunction, eContent);
|
||||
const hashOffset = findSubarrayIndex(signedAttr, hashValue as number[]);
|
||||
if (hashOffset !== -1) {
|
||||
return { hashFunction, offset: hashOffset };
|
||||
}
|
||||
for (const hashFunction of hashAlgos) {
|
||||
const hashValue = hash(hashFunction, eContent);
|
||||
const hashOffset = findSubarrayIndex(signedAttr, hashValue as number[]);
|
||||
if (hashOffset !== -1) {
|
||||
return { hashFunction, offset: hashOffset };
|
||||
}
|
||||
return { hashFunction: 'unknown', offset: -1 };
|
||||
}
|
||||
return { hashFunction: 'unknown', offset: -1 };
|
||||
}
|
||||
|
||||
function findDG1HashInEContent(
|
||||
mrz: string,
|
||||
eContent: number[]
|
||||
mrz: string,
|
||||
eContent: number[]
|
||||
): { hash: number[]; hashFunction: string; offset: number } | null {
|
||||
const formattedMrz = formatMrz(mrz);
|
||||
const formattedMrz = formatMrz(mrz);
|
||||
|
||||
for (const hashFunction of hashAlgos) {
|
||||
const hashValue = hash(hashFunction, formattedMrz);
|
||||
const normalizedHash = (hashValue as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
|
||||
const hashOffset = findSubarrayIndex(eContent, normalizedHash);
|
||||
for (const hashFunction of hashAlgos) {
|
||||
const hashValue = hash(hashFunction, formattedMrz);
|
||||
const normalizedHash = (hashValue as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
|
||||
const hashOffset = findSubarrayIndex(eContent, normalizedHash);
|
||||
|
||||
if (hashOffset !== -1) {
|
||||
return { hash: hashValue as number[], hashFunction, offset: hashOffset };
|
||||
}
|
||||
if (hashOffset !== -1) {
|
||||
return { hash: hashValue as number[], hashFunction, offset: hashOffset };
|
||||
}
|
||||
return null;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
function getDgPaddingBytes(passportData: PassportData, dg1HashFunction: string): number {
|
||||
const formattedMrz = formatMrz(passportData.mrz);
|
||||
const hashValue = hash(dg1HashFunction, formattedMrz);
|
||||
const normalizedHash = (hashValue as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
|
||||
const dg1HashOffset = findSubarrayIndex(passportData.eContent, normalizedHash);
|
||||
const dg2Hash = passportData.dg2Hash;
|
||||
const normalizedDg2Hash = (dg2Hash as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
|
||||
const dg2HashOffset = findSubarrayIndex(passportData.eContent, normalizedDg2Hash);
|
||||
return dg2HashOffset - dg1HashOffset - getHashLen(dg1HashFunction);
|
||||
const formattedMrz = formatMrz(passportData.mrz);
|
||||
const hashValue = hash(dg1HashFunction, formattedMrz);
|
||||
const normalizedHash = (hashValue as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
|
||||
const dg1HashOffset = findSubarrayIndex(passportData.eContent, normalizedHash);
|
||||
const dg2Hash = passportData.dg2Hash;
|
||||
const normalizedDg2Hash = (dg2Hash as number[]).map((byte) => (byte > 127 ? byte - 256 : byte));
|
||||
const dg2HashOffset = findSubarrayIndex(passportData.eContent, normalizedDg2Hash);
|
||||
return dg2HashOffset - dg1HashOffset - getHashLen(dg1HashFunction);
|
||||
}
|
||||
|
||||
export function getCountryCodeFromMrz(mrz: string): string {
|
||||
return mrz.substring(2, 5);
|
||||
return mrz.substring(2, 5);
|
||||
}
|
||||
|
||||
export function getCurveOrExponent(certData: CertificateData): string {
|
||||
if (certData.signatureAlgorithm === 'rsapss' || certData.signatureAlgorithm === 'rsa') {
|
||||
return (certData.publicKeyDetails as PublicKeyDetailsRSA).exponent;
|
||||
}
|
||||
return (certData.publicKeyDetails as PublicKeyDetailsECDSA).curve;
|
||||
if (certData.signatureAlgorithm === 'rsapss' || certData.signatureAlgorithm === 'rsa') {
|
||||
return (certData.publicKeyDetails as PublicKeyDetailsRSA).exponent;
|
||||
}
|
||||
return (certData.publicKeyDetails as PublicKeyDetailsECDSA).curve;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
export function parsePassportData(passportData: PassportData): PassportMetadata {
|
||||
const dg1HashInfo = passportData.mrz
|
||||
? findDG1HashInEContent(passportData.mrz, passportData.eContent)
|
||||
: null;
|
||||
const dg1HashInfo = passportData.mrz
|
||||
? findDG1HashInEContent(passportData.mrz, passportData.eContent)
|
||||
: null;
|
||||
|
||||
const dg1HashFunction = dg1HashInfo?.hashFunction || 'unknown';
|
||||
const dg1HashOffset = dg1HashInfo?.offset || 0;
|
||||
let dgPaddingBytes = -1;
|
||||
try {
|
||||
dgPaddingBytes = getDgPaddingBytes(passportData, dg1HashFunction);
|
||||
} catch (error) {
|
||||
console.error('Error getting DG padding bytes:', error);
|
||||
}
|
||||
const { hashFunction: eContentHashFunction, offset: eContentHashOffset } = findHashSizeOfEContent(
|
||||
passportData.eContent,
|
||||
passportData.signedAttr
|
||||
);
|
||||
const dg1HashFunction = dg1HashInfo?.hashFunction || 'unknown';
|
||||
const dg1HashOffset = dg1HashInfo?.offset || 0;
|
||||
let dgPaddingBytes = -1;
|
||||
try {
|
||||
dgPaddingBytes = getDgPaddingBytes(passportData, dg1HashFunction);
|
||||
} catch (error) {
|
||||
console.error('Error getting DG padding bytes:', error);
|
||||
}
|
||||
const { hashFunction: eContentHashFunction, offset: eContentHashOffset } = findHashSizeOfEContent(
|
||||
passportData.eContent,
|
||||
passportData.signedAttr
|
||||
);
|
||||
|
||||
const brutForcedPublicKeyDetails = brutforceSignatureAlgorithm(passportData);
|
||||
const brutForcedPublicKeyDetails = brutforceSignatureAlgorithm(passportData);
|
||||
|
||||
let parsedDsc = null;
|
||||
let dscSignatureAlgorithmBits = 0;
|
||||
let parsedDsc = null;
|
||||
let dscSignatureAlgorithmBits = 0;
|
||||
|
||||
let brutForcedPublicKeyDetailsDsc: DscCertificateMetaData;
|
||||
let brutForcedPublicKeyDetailsDsc: DscCertificateMetaData;
|
||||
|
||||
if (passportData.dsc) {
|
||||
parsedDsc = parseCertificateSimple(passportData.dsc);
|
||||
dscSignatureAlgorithmBits = parseInt(parsedDsc.publicKeyDetails?.bits || '0');
|
||||
if (passportData.dsc) {
|
||||
parsedDsc = parseCertificateSimple(passportData.dsc);
|
||||
dscSignatureAlgorithmBits = parseInt(parsedDsc.publicKeyDetails?.bits || '0');
|
||||
|
||||
brutForcedPublicKeyDetailsDsc = parseDscCertificateData(parsedDsc)
|
||||
brutForcedPublicKeyDetailsDsc = parseDscCertificateData(parsedDsc);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
return {
|
||||
dataGroups:
|
||||
passportData.dgPresents
|
||||
?.toString()
|
||||
.split(',')
|
||||
.map((item) => item.replace('DG', ''))
|
||||
.join(',') || 'None',
|
||||
dg1HashFunction,
|
||||
dg1HashOffset,
|
||||
dgPaddingBytes,
|
||||
eContentSize: passportData.eContent?.length || 0,
|
||||
eContentHashFunction,
|
||||
eContentHashOffset,
|
||||
signedAttrSize: passportData.signedAttr?.length || 0,
|
||||
signedAttrHashFunction: brutForcedPublicKeyDetails.hashAlgorithm,
|
||||
signatureAlgorithm: brutForcedPublicKeyDetails.signatureAlgorithm,
|
||||
saltLength: brutForcedPublicKeyDetails.saltLength,
|
||||
curveOrExponent: parsedDsc ? getCurveOrExponent(parsedDsc) : 'unknown',
|
||||
signatureAlgorithmBits: dscSignatureAlgorithmBits,
|
||||
countryCode: passportData.mrz ? getCountryCodeFromMrz(passportData.mrz) : 'unknown',
|
||||
cscaFound: brutForcedPublicKeyDetailsDsc.cscaFound,
|
||||
cscaHashFunction: brutForcedPublicKeyDetailsDsc.cscaHashAlgorithm,
|
||||
cscaSignature: brutForcedPublicKeyDetailsDsc.cscaSignatureAlgorithm,
|
||||
cscaSaltLength: brutForcedPublicKeyDetailsDsc.cscaSaltLength,
|
||||
cscaCurveOrExponent: brutForcedPublicKeyDetailsDsc.cscaCurveOrExponent,
|
||||
cscaSignatureAlgorithmBits: brutForcedPublicKeyDetailsDsc.cscaSignatureAlgorithmBits,
|
||||
dsc: passportData.dsc,
|
||||
};
|
||||
}
|
||||
return {
|
||||
dataGroups:
|
||||
passportData.dgPresents
|
||||
?.toString()
|
||||
.split(',')
|
||||
.map((item) => item.replace('DG', ''))
|
||||
.join(',') || 'None',
|
||||
dg1HashFunction,
|
||||
dg1HashOffset,
|
||||
dgPaddingBytes,
|
||||
eContentSize: passportData.eContent?.length || 0,
|
||||
eContentHashFunction,
|
||||
eContentHashOffset,
|
||||
signedAttrSize: passportData.signedAttr?.length || 0,
|
||||
signedAttrHashFunction: brutForcedPublicKeyDetails.hashAlgorithm,
|
||||
signatureAlgorithm: brutForcedPublicKeyDetails.signatureAlgorithm,
|
||||
saltLength: brutForcedPublicKeyDetails.saltLength,
|
||||
curveOrExponent: parsedDsc ? getCurveOrExponent(parsedDsc) : 'unknown',
|
||||
signatureAlgorithmBits: dscSignatureAlgorithmBits,
|
||||
countryCode: passportData.mrz ? getCountryCodeFromMrz(passportData.mrz) : 'unknown',
|
||||
cscaFound: brutForcedPublicKeyDetailsDsc.cscaFound,
|
||||
cscaHashFunction: brutForcedPublicKeyDetailsDsc.cscaHashAlgorithm,
|
||||
cscaSignature: brutForcedPublicKeyDetailsDsc.cscaSignatureAlgorithm,
|
||||
cscaSaltLength: brutForcedPublicKeyDetailsDsc.cscaSaltLength,
|
||||
cscaCurveOrExponent: brutForcedPublicKeyDetailsDsc.cscaCurveOrExponent,
|
||||
cscaSignatureAlgorithmBits: brutForcedPublicKeyDetailsDsc.cscaSignatureAlgorithmBits,
|
||||
dsc: passportData.dsc,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -20,25 +20,34 @@ export type SignatureAlgorithm =
|
||||
| 'rsapss_sha256_3_3072'
|
||||
| 'rsapss_sha384_65537_3072'
|
||||
| 'rsapss_sha384_65537_4096'
|
||||
| 'rsa_sha256_3_4096'
|
||||
| 'rsa_sha512_65537_2048'
|
||||
| 'rsa_sha1_65537_4096'
|
||||
| 'ecdsa_sha256_secp256r1_256'
|
||||
| 'ecdsa_sha1_secp256r1_256'
|
||||
| 'ecdsa_sha384_secp384r1_384'
|
||||
| 'ecdsa_sha256_secp384r1_384'
|
||||
| 'ecdsa_sha384_brainpoolP256r1_256'
|
||||
| 'ecdsa_sha512_brainpoolP256r1_256'
|
||||
| 'ecdsa_sha256_brainpoolP256r1_256'
|
||||
| 'rsa_sha256_3_2048'
|
||||
| 'rsa_sha256_65537_3072'
|
||||
| 'rsa_sha256_65537_4096'
|
||||
| 'rsa_sha512_65537_4096'
|
||||
| 'rsa_sha224_65537_2048'
|
||||
| 'rsapss_sha256_65537_3072'
|
||||
| 'rsapss_sha256_65537_4096'
|
||||
| 'rsapss_sha256_3_2048'
|
||||
| 'rsapss_sha512_3_4096'
|
||||
| 'rsapss_sha512_3_2048'
|
||||
| 'rsapss_sha384_3_4096'
|
||||
| 'rsapss_sha384_3_3072'
|
||||
| 'ecdsa_sha256_secp384r1_384'
|
||||
| 'ecdsa_sha384_brainpoolP256r1_256'
|
||||
| 'ecdsa_sha512_brainpoolP256r1_256'
|
||||
| 'ecdsa_sha384_brainpoolP384r1_384'
|
||||
| 'ecdsa_sha512_brainpoolP384r1_384'
|
||||
| 'ecdsa_sha1_brainpoolP224r1_224'
|
||||
| 'ecdsa_sha224_brainpoolP224r1_224'
|
||||
| 'ecdsa_sha256_brainpoolP224r1_224'
|
||||
| 'ecdsa_sha512_brainpoolP512r1_512'
|
||||
| 'rsapss_sha256_65537_4096';
|
||||
| 'ecdsa_sha512_brainpoolP512r1_512';
|
||||
|
||||
export type Proof = {
|
||||
proof: {
|
||||
|
||||
@@ -250,7 +250,11 @@ export function hexToDecimal(hex: string): string {
|
||||
}
|
||||
|
||||
// hash logic here because the one in utils.ts only works with node
|
||||
export function hash(hashFunction: string, bytesArray: number[], format: string = 'bytes'): string | number[] {
|
||||
export function hash(
|
||||
hashFunction: string,
|
||||
bytesArray: number[],
|
||||
format: string = 'bytes'
|
||||
): string | number[] {
|
||||
const unsignedBytesArray = bytesArray.map((byte) => byte & 0xff);
|
||||
let hashResult: string;
|
||||
|
||||
@@ -527,9 +531,9 @@ function checkStringLength(str: string) {
|
||||
function stringToBigInt(str: string): bigint {
|
||||
return BigInt(
|
||||
'1' +
|
||||
Array.from(str)
|
||||
.map((char) => char.charCodeAt(0).toString().padStart(3, '0'))
|
||||
.join('')
|
||||
Array.from(str)
|
||||
.map((char) => char.charCodeAt(0).toString().padStart(3, '0'))
|
||||
.join('')
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,12 @@ describe('Mock Passport Data Generator', function () {
|
||||
});
|
||||
});
|
||||
|
||||
function verify(passportData: PassportData, dgHashAlgo: string, eContentHashAlgo: string, sigAlg: string): boolean {
|
||||
function verify(
|
||||
passportData: PassportData,
|
||||
dgHashAlgo: string,
|
||||
eContentHashAlgo: string,
|
||||
sigAlg: string
|
||||
): boolean {
|
||||
const passportMetaData = parsePassportData(passportData);
|
||||
// console.log('passportMetaData', passportMetaData);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user