Skip to content

Commit b02746f

Browse files
KyrylRArvolear
andauthored
Added more dispatchers and verifiers (#46)
* Added C_RSA_SHA2_2048_122125 * Added more dispatchers * Added verifier * Added more dispatchers * Added an ability to register expired certificates * Updated CHANGELOG.md * rm log --------- Co-authored-by: Artem Chystiakov <artem.ch31@gmail.com>
1 parent 05923a4 commit b02746f

File tree

9 files changed

+3506
-9
lines changed

9 files changed

+3506
-9
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog
22

3+
## [UNRELEASED]
4+
5+
* Added an ability to register expired certificates
6+
* Added `C_RSA_SHA512_2048`, `C_RSA_SHA2_2048_122125`, `C_ECDSA_SECP256R1_SHA2_512`, `C_ECDSA_SECP256R1_SHA2_2048`, `C_ECDSA_BRAINPOOLP256R1_SHA2_512` dispatchers.
7+
* Added `Z_NOIR_PASSPORT_ID_CARD_I` verifier
8+
39
## [0.4.2]
410

511
* Made the `_buildPublicSignals` and `getPublicSignals` functions view.

contracts/certificate/signers/CECDSA256Signer.sol

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ contract CECDSA256Signer is ICertificateSigner, Initializable {
1919
}
2020

2121
enum HF {
22-
sha1
22+
sha1,
23+
sha2
2324
}
2425

2526
EC256.Curve private _secp256r1CurveParams =
@@ -66,6 +67,8 @@ contract CECDSA256Signer is ICertificateSigner, Initializable {
6667

6768
if (hashFunction == HF.sha1) {
6869
hasher_ = _sha1;
70+
} else if (hashFunction == HF.sha2) {
71+
hasher_ = _sha2;
6972
}
7073

7174
return
@@ -79,4 +82,8 @@ contract CECDSA256Signer is ICertificateSigner, Initializable {
7982
function _sha1(bytes memory message) internal pure returns (bytes32) {
8083
return bytes32(message.sha1()) >> 96;
8184
}
85+
86+
function _sha2(bytes memory message) internal pure returns (bytes32) {
87+
return sha256(message);
88+
}
8289
}

contracts/passport/verifiers2/noir/NoirRegisterIdentity_ID_Card_I.sol

Lines changed: 3416 additions & 0 deletions
Large diffs are not rendered by default.

contracts/state/StateKeeper.sol

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,10 @@ contract StateKeeper is Initializable, AMultiOwnable, UUPSUpgradeable {
104104
bytes32 certificateKey_,
105105
uint256 expirationTimestamp_
106106
) external virtual onlyRegistration {
107-
require(expirationTimestamp_ > block.timestamp, "StateKeeper: certificate is expired");
107+
require(
108+
expirationTimestamp_ + 5 * 365 days > block.timestamp,
109+
"StateKeeper: certificate is expired"
110+
);
108111

109112
_certificateInfos[certificateKey_].expirationTimestamp = uint64(expirationTimestamp_);
110113

deploy/10_setup.migration.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ import {
100100
C_RSA_SHA2_2048,
101101
C_RSA_SHA2_3072,
102102
C_RSA_SHA2_4096,
103+
C_RSA_SHA2_2048_122125,
103104
C_RSA_SHA2_3072_56611,
105+
C_RSA_SHA512_2048,
104106
C_RSA_SHA512_4096,
105107
C_RSAPSS_SHA2_2048,
106108
C_RSAPSS_SHA2_3072,
@@ -112,9 +114,12 @@ import {
112114
C_ECDSA_SECP256R1_SHA1_256,
113115
C_ECDSA_SECP256R1_SHA1_384,
114116
C_ECDSA_SECP256R1_SHA1_512,
117+
C_ECDSA_SECP256R1_SHA2_512,
118+
C_ECDSA_SECP256R1_SHA2_2048,
115119
C_ECDSA_SECP384R1_SHA2_512,
116120
C_ECDSA_SECP384R1_SHA384_512,
117121
C_ECDSA_BRAINPOOLP256R1_SHA1_448,
122+
C_ECDSA_BRAINPOOLP256R1_SHA2_512,
118123
C_ECDSA_BRAINPOOLP384R1_SHA2_512,
119124
C_ECDSA_BRAINPOOLP384R1_SHA384_512,
120125
C_ECDSA_BRAINPOOLP384R1_SHA384_768,
@@ -225,11 +230,16 @@ export = async (deployer: Deployer) => {
225230
const cRsa4096Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 512 65537");
226231
const cRsa3072Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 384 65537");
227232
const cRsa2048Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 256 65537");
233+
const cRsa4096Sha256Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA512 256 65537");
228234
const cRsa4096Sha512Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA512 512 65537");
229235
const cRsa3072Sha2Dispatcher_56611 = await deployer.deployed(
230236
CRSADispatcher__factory,
231237
"CRSADispatcher SHA2 512 56611",
232238
);
239+
const cRsa2048Sha2Dispatcher_122125 = await deployer.deployed(
240+
CRSADispatcher__factory,
241+
"CRSADispatcher SHA2 256 122125",
242+
);
233243

234244
const cRsaPss2048Sha2Dispatcher = await deployer.deployed(
235245
CRSADispatcher__factory,
@@ -276,6 +286,21 @@ export = async (deployer: Deployer) => {
276286
"CECDSADispatcher SECP256 SHA1 128",
277287
);
278288

289+
const cEcdsaSecp256r1512Sha2Dispatcher = await deployer.deployed(
290+
CECDSADispatcher__factory,
291+
"CECDSADispatcher SECP256 SHA2 128",
292+
);
293+
294+
const cEcdsaSecp256r12048Sha2Dispatcher = await deployer.deployed(
295+
CECDSADispatcher__factory,
296+
"CECDSADispatcher SECP256 SHA2 512",
297+
);
298+
299+
const cEcdsaBrainpoolP256r1128Sha2Dispatcher = await deployer.deployed(
300+
CECDSADispatcher__factory,
301+
"CECDSADispatcher brainpoolP256r1 SHA2 128",
302+
);
303+
279304
const cEcdsaBrainpoolP256r1112Sha1Dispatcher = await deployer.deployed(
280305
CECDSADispatcher__factory,
281306
"CECDSADispatcher brainpoolP256r1 SHA1 112",
@@ -564,11 +589,16 @@ export = async (deployer: Deployer) => {
564589
await registration.mockAddCertificateDispatcher(C_RSA_SHA2_4096, await cRsa4096Sha2Dispatcher.getAddress());
565590
await registration.mockAddCertificateDispatcher(C_RSA_SHA2_3072, await cRsa3072Sha2Dispatcher.getAddress());
566591
await registration.mockAddCertificateDispatcher(C_RSA_SHA2_2048, await cRsa2048Sha2Dispatcher.getAddress());
592+
await registration.mockAddCertificateDispatcher(C_RSA_SHA512_2048, await cRsa4096Sha256Dispatcher.getAddress());
567593
await registration.mockAddCertificateDispatcher(C_RSA_SHA512_4096, await cRsa4096Sha512Dispatcher.getAddress());
568594
await registration.mockAddCertificateDispatcher(
569595
C_RSA_SHA2_3072_56611,
570596
await cRsa3072Sha2Dispatcher_56611.getAddress(),
571597
);
598+
await registration.mockAddCertificateDispatcher(
599+
C_RSA_SHA2_2048_122125,
600+
await cRsa2048Sha2Dispatcher_122125.getAddress(),
601+
);
572602

573603
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA2_2048, await cRsaPss2048Sha2Dispatcher.getAddress());
574604
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA2_4096, await cRsaPss4096Sha2Dispatcher.getAddress());
@@ -591,6 +621,18 @@ export = async (deployer: Deployer) => {
591621
C_ECDSA_SECP256R1_SHA1_512,
592622
await cEcdsaSecp256r1512Sha1Dispatcher.getAddress(),
593623
);
624+
await registration.mockAddCertificateDispatcher(
625+
C_ECDSA_SECP256R1_SHA2_512,
626+
await cEcdsaSecp256r1512Sha2Dispatcher.getAddress(),
627+
);
628+
await registration.mockAddCertificateDispatcher(
629+
C_ECDSA_SECP256R1_SHA2_2048,
630+
await cEcdsaSecp256r12048Sha2Dispatcher.getAddress(),
631+
);
632+
await registration.mockAddCertificateDispatcher(
633+
C_ECDSA_BRAINPOOLP256R1_SHA2_512,
634+
await cEcdsaBrainpoolP256r1128Sha2Dispatcher.getAddress(),
635+
);
594636
await registration.mockAddCertificateDispatcher(
595637
C_ECDSA_BRAINPOOLP256R1_SHA1_448,
596638
await cEcdsaBrainpoolP256r1112Sha1Dispatcher.getAddress(),

deploy/2_registration.migration.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,10 @@ export = async (deployer: Deployer) => {
3232
await deployCRSADispatcher(deployer, "SHA2", "65537", "512", "0x0282020100");
3333
await deployCRSADispatcher(deployer, "SHA2", "65537", "384", "0x0282018100");
3434
await deployCRSADispatcher(deployer, "SHA2", "65537", "256", "0x0282010100");
35+
await deployCRSADispatcher(deployer, "SHA512", "65537", "256", "0x0282010100");
3536
await deployCRSADispatcher(deployer, "SHA512", "65537", "512", "0x0282020100");
3637
await deployCRSADispatcher(deployer, "SHA2", "56611", "512", "0x0282018100");
38+
await deployCRSADispatcher(deployer, "SHA2", "122125", "256", "0x0282010100");
3739

3840
await deployCRSAPSSDispatcher(deployer, "SHA2", "65537", "256", "0x0282010100");
3941
await deployCRSAPSSDispatcher(deployer, "SHA2", "65537", "512", "0x0282020100");
@@ -46,7 +48,10 @@ export = async (deployer: Deployer) => {
4648
await deployCECDSADispatcher(deployer, "SECP256", "SHA1", "64", "0x03420004");
4749
await deployCECDSADispatcher(deployer, "SECP256", "SHA1", "96", "0x03320004");
4850
await deployCECDSADispatcher(deployer, "SECP256", "SHA1", "128", "0x03420004");
51+
await deployCECDSADispatcher(deployer, "SECP256", "SHA2", "128", "0x03420004");
52+
await deployCECDSADispatcher(deployer, "SECP256", "SHA2", "512", "0x0282010100");
4953
await deployCECDSADispatcher(deployer, "brainpoolP256r1", "SHA1", "112", "0x033A0004");
54+
await deployCECDSADispatcher(deployer, "brainpoolP256r1", "SHA2", "128", "0x03420004");
5055
await deployCECDSADispatcher(deployer, "SECP384", "SHA2", "64", "0x03420004");
5156
await deployCECDSADispatcher(deployer, "SECP384", "SHA384", "64", "0x03420004");
5257
await deployCECDSADispatcher(deployer, "brainpoolP384r1", "SHA2", "64", "0x03420004");

deploy/helpers/dispatchers/certificate.ts

Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,17 +48,17 @@ export const deployCECDSADispatcher = async (
4848
deployer: Deployer,
4949
curve: "SECP256" | "SECP384" | "brainpoolP256r1" | "brainpoolP384r1" | "brainpoolP512r1",
5050
hashFunc: "SHA1" | "SHA2" | "SHA384" | "SHA512",
51-
keyLength: "64" | "96" | "112" | "128",
51+
keyLength: "64" | "96" | "112" | "128" | "512",
5252
keyPrefix: string,
5353
) => {
5454
let signer: CECDSA384Signer | CECDSA512Signer;
5555

5656
if (curve == "brainpoolP512r1") {
5757
signer = await deployECDSA512Signer(deployer, keyLength);
5858
} else if (curve == "SECP256") {
59-
signer = await deployECDSA256Signer(deployer, curve, keyLength);
59+
signer = await deployECDSA256Signer(deployer, curve, hashFunc, keyLength);
6060
} else if (curve == "brainpoolP256r1") {
61-
signer = await deployECDSA256Signer(deployer, curve, keyLength);
61+
signer = await deployECDSA256Signer(deployer, curve, hashFunc, keyLength);
6262
} else {
6363
signer = await deployECDSA384Signer(deployer, curve, hashFunc, keyLength);
6464
}
@@ -160,25 +160,35 @@ const deployECDSA384Signer = async (deployer: Deployer, curve: string, hashfunc:
160160
return signer;
161161
};
162162

163-
const deployECDSA256Signer = async (deployer: Deployer, curve: string, keyLength: string) => {
163+
const deployECDSA256Signer = async (deployer: Deployer, curve: string, hashfunc: string, keyLength: string) => {
164164
try {
165-
const result = await deployer.deployed(CECDSA256Signer__factory, `CESDCA256Signer ${keyLength}`);
165+
const result = await deployer.deployed(
166+
CECDSA256Signer__factory,
167+
`CESDCA256Signer ${hashfunc} ${curve} ${keyLength}`,
168+
);
166169
return result;
167170
} catch {}
168171

169172
const signer = await deployer.deploy(CECDSA256Signer__factory, {
170-
name: `CESDCA256Signer ${keyLength}`,
173+
name: `CESDCA256Signer ${hashfunc} ${curve} ${keyLength}`,
171174
});
172175

173176
let curv;
177+
let hf;
174178

175179
if (curve === "SECP256") {
176180
curv = 0;
177181
} else {
178182
curv = 1;
179183
}
180184

181-
await signer.__CECDSA256Signer_init(curv, 0 /* SHA1 */);
185+
if (hashfunc === "SHA2") {
186+
hf = 1;
187+
} else {
188+
hf = 0;
189+
}
190+
191+
await signer.__CECDSA256Signer_init(curv, hf);
182192

183193
return signer;
184194
};

hardhat.config.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ const config: HardhatUserConfig = {
5757
"rarimo-l2": {
5858
url: "https://l2.rarimo.com",
5959
gasMultiplier: 1.2,
60+
gasPrice: 1060000,
6061
},
6162
"rarimo-l2-testnet": {
6263
url: "https://l2.testnet.rarimo.com",

scripts/utils/types.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ export const C_RSA_SHA1_2048 = keccak256(["string"], ["C_RSA_SHA1_2048"]);
77
export const C_RSA_SHA2_4096 = keccak256(["string"], ["C_RSA_4096"]);
88
export const C_RSA_SHA2_3072 = keccak256(["string"], ["C_RSA_3072"]);
99
export const C_RSA_SHA2_2048 = keccak256(["string"], ["C_RSA_2048"]);
10+
export const C_RSA_SHA512_2048 = keccak256(["string"], ["C_RSA_SHA512_2048"]);
1011
export const C_RSA_SHA512_4096 = keccak256(["string"], ["C_RSA_SHA512_4096"]);
1112
export const C_RSA_SHA2_3072_56611 = keccak256(["string"], ["C_RSA_3072_56611"]);
13+
export const C_RSA_SHA2_2048_122125 = keccak256(["string"], ["C_RSA_2048_122125"]);
1214

1315
export const C_RSAPSS_SHA2_2048 = keccak256(["string"], ["C_RSAPSS_SHA2_2048"]);
1416
export const C_RSAPSS_SHA2_4096 = keccak256(["string"], ["C_RSAPSS_SHA2_4096"]);
@@ -21,9 +23,12 @@ export const C_RSAPSS_SHA384_2048 = keccak256(["string"], ["C_RSAPSS_SHA384_2048
2123
export const C_ECDSA_SECP256R1_SHA1_256 = keccak256(["string"], ["C_ECDSA_SECP256R1_SHA1_256"]);
2224
export const C_ECDSA_SECP256R1_SHA1_384 = keccak256(["string"], ["C_ECDSA_SECP256R1_SHA1_384"]);
2325
export const C_ECDSA_SECP256R1_SHA1_512 = keccak256(["string"], ["C_ECDSA_SECP256R1_SHA1_512"]);
26+
export const C_ECDSA_SECP256R1_SHA2_512 = keccak256(["string"], ["C_ECDSA_SECP256R1_SHA2_512"]);
27+
export const C_ECDSA_SECP256R1_SHA2_2048 = keccak256(["string"], ["C_ECDSA_SECP256R1_SHA2_2048"]);
2428
export const C_ECDSA_SECP384R1_SHA2_512 = keccak256(["string"], ["C_ECDSA_SECP384R1_SHA2_512"]);
2529
export const C_ECDSA_SECP384R1_SHA384_512 = keccak256(["string"], ["C_ECDSA_SECP384R1_SHA384_512"]);
2630
export const C_ECDSA_BRAINPOOLP256R1_SHA1_448 = keccak256(["string"], ["C_ECDSA_BRAINPOOLP256R1_SHA1_448"]);
31+
export const C_ECDSA_BRAINPOOLP256R1_SHA2_512 = keccak256(["string"], ["C_ECDSA_BRAINPOOLP256R1_SHA2_512"]);
2732
export const C_ECDSA_BRAINPOOLP384R1_SHA2_512 = keccak256(["string"], ["C_ECDSA_BRAINPOOLP384R1_SHA2_512"]);
2833
export const C_ECDSA_BRAINPOOLP384R1_SHA384_512 = keccak256(["string"], ["C_ECDSA_BRAINPOOLP384R1_SHA384_512"]);
2934
export const C_ECDSA_BRAINPOOLP384R1_SHA384_768 = keccak256(["string"], ["C_ECDSA_BRAINPOOLP384R1_SHA384_768"]);
@@ -245,3 +250,5 @@ export const Z_NOIR_PASSPORT_26_512_3_3_336_264_1_1968_2_256 = keccak256(
245250
["Z_NOIR_PASSPORT_26_512_3_3_336_264_1_1968_2_256"],
246251
);
247252
export const Z_NOIR_PASSPORT_27_512_3_4_336_248_NA = keccak256(["string"], ["Z_NOIR_PASSPORT_27_512_3_4_336_248_NA"]);
253+
254+
export const Z_NOIR_PASSPORT_ID_CARD_I = keccak256(["string"], ["Z_NOIR_PASSPORT_ID_CARD_I"]);

0 commit comments

Comments
 (0)