Skip to content

Commit 74e6c54

Browse files
authored
Add a new dispatcher (#41)
* Added a new dispatcher * Fixed key prefix * Added more dispatchers * Added support for rsapss sha384 * Resolved comments
1 parent 3fffde4 commit 74e6c54

File tree

6 files changed

+119
-23
lines changed

6 files changed

+119
-23
lines changed

contracts/certificate/signers/CRSAPSSSigner.sol

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,16 @@ import {RSASSAPSS} from "@solarity/solidity-lib/libs/crypto/RSASSAPSS.sol";
77

88
import {ICertificateSigner} from "../../interfaces/signers/ICertificateSigner.sol";
99

10+
import {SHA384} from "../../utils/SHA384.sol";
1011
import {SHA512} from "../../utils/SHA512.sol";
1112

1213
contract CRSAPSSSigner is ICertificateSigner, Initializable {
1314
using RSASSAPSS for *;
1415

1516
enum HF {
1617
sha256,
17-
sha512
18+
sha512,
19+
sha384
1820
}
1921

2022
uint256 public exponent; // RSAPSS exponent
@@ -37,6 +39,12 @@ contract CRSAPSSSigner is ICertificateSigner, Initializable {
3739

3840
if (hashFunction == HF.sha256) {
3941
params_ = RSASSAPSS.Parameters({hashLength: 32, saltLength: 32, hasher: _sha2});
42+
} else if (hashFunction == HF.sha384) {
43+
params_ = RSASSAPSS.Parameters({
44+
hashLength: 48,
45+
saltLength: 48,
46+
hasher: SHA384.sha384
47+
});
4048
} else if (hashFunction == HF.sha512) {
4149
params_ = RSASSAPSS.Parameters({
4250
hashLength: 64,

deploy/10_setup.migration.ts

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -95,10 +95,14 @@ import {
9595
C_RSA_SHA2_2048,
9696
C_RSA_SHA2_3072,
9797
C_RSA_SHA2_4096,
98+
C_RSA_SHA2_3072_56611,
9899
C_RSA_SHA512_4096,
99100
C_RSAPSS_SHA2_2048,
101+
C_RSAPSS_SHA2_3072,
100102
C_RSAPSS_SHA2_4096,
103+
C_RSAPSS_SHA2_2048_3,
101104
C_RSAPSS_SHA512_2048,
105+
C_RSAPSS_SHA384_2048,
102106
C_RSAPSS_SHA512_4096,
103107
C_ECDSA_SECP256R1_SHA1_256,
104108
C_ECDSA_SECP384R1_SHA2_512,
@@ -203,28 +207,45 @@ export = async (deployer: Deployer) => {
203207

204208
// ------------------------ CERTIFICATE ------------------------
205209

206-
const cRsa4096Sha1Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA1 512");
207-
const cRsa2048Sha1Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA1 256");
208-
const cRsa4096Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 512");
209-
const cRsa3072Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 384");
210-
const cRsa2048Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 256");
211-
const cRsa4096Sha512Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA512 512");
210+
const cRsa4096Sha1Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA1 512 65537");
211+
const cRsa2048Sha1Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA1 256 65537");
212+
const cRsa4096Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 512 65537");
213+
const cRsa3072Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 384 65537");
214+
const cRsa2048Sha2Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA2 256 65537");
215+
const cRsa4096Sha512Dispatcher = await deployer.deployed(CRSADispatcher__factory, "CRSADispatcher SHA512 512 65537");
216+
const cRsa3072Sha2Dispatcher_56611 = await deployer.deployed(
217+
CRSADispatcher__factory,
218+
"CRSADispatcher SHA2 512 56611",
219+
);
212220

213221
const cRsaPss2048Sha2Dispatcher = await deployer.deployed(
214222
CRSADispatcher__factory,
215-
"CRSAPSSDispatcher SHA2 65537 256",
223+
"CRSAPSSDispatcher SHA2 65537 256 0x0282010100",
216224
);
217225
const cRsaPss4096Sha2Dispatcher = await deployer.deployed(
218226
CRSADispatcher__factory,
219-
"CRSAPSSDispatcher SHA2 65537 512",
227+
"CRSAPSSDispatcher SHA2 65537 512 0x0282020100",
220228
);
221229
const cRsaPss2048Sha512Dispatcher = await deployer.deployed(
222230
CRSADispatcher__factory,
223-
"CRSAPSSDispatcher SHA512 65537 256",
231+
"CRSAPSSDispatcher SHA512 65537 256 0x0282010100",
224232
);
225233
const cRsaPss4096Sha512Dispatcher = await deployer.deployed(
226234
CRSADispatcher__factory,
227-
"CRSAPSSDispatcher SHA512 65537 512",
235+
"CRSAPSSDispatcher SHA512 65537 512 0x0282020100",
236+
);
237+
238+
const cRsaPss2048Sha2Dispatcher_3 = await deployer.deployed(
239+
CRSADispatcher__factory,
240+
"CRSAPSSDispatcher SHA2 3 384 0x0282010100",
241+
);
242+
const cRsaPss3072Sha2Dispatcher = await deployer.deployed(
243+
CRSADispatcher__factory,
244+
"CRSAPSSDispatcher SHA2 65537 512 0x0282018100",
245+
);
246+
const cRsaPss3072Sha384Dispatcher = await deployer.deployed(
247+
CRSADispatcher__factory,
248+
"CRSAPSSDispatcher SHA384 65537 512 0x0282010100",
228249
);
229250

230251
const cEcdsaSecp256r1256Sha1Dispatcher = await deployer.deployed(
@@ -500,12 +521,20 @@ export = async (deployer: Deployer) => {
500521
await registration.mockAddCertificateDispatcher(C_RSA_SHA2_3072, await cRsa3072Sha2Dispatcher.getAddress());
501522
await registration.mockAddCertificateDispatcher(C_RSA_SHA2_2048, await cRsa2048Sha2Dispatcher.getAddress());
502523
await registration.mockAddCertificateDispatcher(C_RSA_SHA512_4096, await cRsa4096Sha512Dispatcher.getAddress());
524+
await registration.mockAddCertificateDispatcher(
525+
C_RSA_SHA2_3072_56611,
526+
await cRsa3072Sha2Dispatcher_56611.getAddress(),
527+
);
503528

504529
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA2_2048, await cRsaPss2048Sha2Dispatcher.getAddress());
505530
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA2_4096, await cRsaPss4096Sha2Dispatcher.getAddress());
506531
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA512_2048, await cRsaPss2048Sha512Dispatcher.getAddress());
507532
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA512_4096, await cRsaPss4096Sha512Dispatcher.getAddress());
508533

534+
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA2_2048_3, await cRsaPss2048Sha2Dispatcher_3.getAddress());
535+
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA2_3072, await cRsaPss3072Sha2Dispatcher.getAddress());
536+
await registration.mockAddCertificateDispatcher(C_RSAPSS_SHA384_2048, await cRsaPss3072Sha384Dispatcher.getAddress());
537+
509538
await registration.mockAddCertificateDispatcher(
510539
C_ECDSA_SECP256R1_SHA1_256,
511540
await cEcdsaSecp256r1256Sha1Dispatcher.getAddress(),

deploy/2_registration.migration.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,15 @@ export = async (deployer: Deployer) => {
3333
await deployCRSADispatcher(deployer, "SHA2", "65537", "384", "0x0282018100");
3434
await deployCRSADispatcher(deployer, "SHA2", "65537", "256", "0x0282010100");
3535
await deployCRSADispatcher(deployer, "SHA512", "65537", "512", "0x0282020100");
36+
await deployCRSADispatcher(deployer, "SHA2", "56611", "512", "0x0282018100");
3637

3738
await deployCRSAPSSDispatcher(deployer, "SHA2", "65537", "256", "0x0282010100");
3839
await deployCRSAPSSDispatcher(deployer, "SHA2", "65537", "512", "0x0282020100");
3940
await deployCRSAPSSDispatcher(deployer, "SHA512", "65537", "256", "0x0282010100");
4041
await deployCRSAPSSDispatcher(deployer, "SHA512", "65537", "512", "0x0282020100");
42+
await deployCRSAPSSDispatcher(deployer, "SHA2", "3", "384", "0x0282010100");
43+
await deployCRSAPSSDispatcher(deployer, "SHA2", "65537", "512", "0x0282018100");
44+
await deployCRSAPSSDispatcher(deployer, "SHA384", "65537", "512", "0x0282010100");
4145

4246
await deployCECDSADispatcher(deployer, "SECP256", "SHA1", "64", "0x03420004");
4347
await deployCECDSADispatcher(deployer, "SECP384", "SHA2", "64", "0x03420004");

deploy/helpers/dispatchers/certificate.ts

Lines changed: 49 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import { Deployer } from "@solarity/hardhat-migrate";
22

33
import {
4-
CRSAPSSSigner__factory,
5-
CRSADispatcher__factory,
6-
CRSASigner__factory,
74
CECDSA256Signer__factory,
5+
CECDSA384Signer,
86
CECDSA384Signer__factory,
7+
CECDSA512Signer,
98
CECDSA512Signer__factory,
109
CECDSADispatcher__factory,
11-
CECDSA384Signer,
12-
CECDSA512Signer,
10+
CRSADispatcher__factory,
11+
CRSAPSSSigner__factory,
12+
CRSASigner__factory,
1313
} from "@ethers-v6";
1414

1515
export const deployCRSADispatcher = async (
@@ -22,23 +22,23 @@ export const deployCRSADispatcher = async (
2222
const signer = await deployRSASigner(deployer, hashFunc, exponent, keyLength);
2323

2424
const dispatcher = await deployer.deploy(CRSADispatcher__factory, {
25-
name: `CRSADispatcher ${hashFunc} ${keyLength}`,
25+
name: `CRSADispatcher ${hashFunc} ${keyLength} ${exponent}`,
2626
});
2727

2828
await dispatcher.__CRSADispatcher_init(await signer.getAddress(), keyLength, keyPrefix);
2929
};
3030

3131
export const deployCRSAPSSDispatcher = async (
3232
deployer: Deployer,
33-
hashFunc: "SHA2" | "SHA512",
33+
hashFunc: "SHA2" | "SHA384" | "SHA512",
3434
exponent: string,
3535
keyLength: string,
3636
keyPrefix: string,
3737
) => {
3838
const signer = await deployRSAPSSSigner(deployer, hashFunc, exponent, keyLength);
3939

4040
const dispatcher = await deployer.deploy(CRSADispatcher__factory, {
41-
name: `CRSAPSSDispatcher ${hashFunc} ${exponent} ${keyLength}`,
41+
name: `CRSAPSSDispatcher ${hashFunc} ${exponent} ${keyLength} ${keyPrefix}`,
4242
});
4343

4444
await dispatcher.__CRSADispatcher_init(await signer.getAddress(), keyLength, keyPrefix);
@@ -69,6 +69,11 @@ export const deployCECDSADispatcher = async (
6969
};
7070

7171
const deployRSASigner = async (deployer: Deployer, hashfunc: string, exponent: string, keyLength: string) => {
72+
try {
73+
const result = await deployer.deployed(CRSASigner__factory, `CRSASigner ${hashfunc} ${exponent} ${keyLength}`);
74+
return result;
75+
} catch {}
76+
7277
const signer = await deployer.deploy(CRSASigner__factory, {
7378
name: `CRSASigner ${hashfunc} ${exponent} ${keyLength}`,
7479
});
@@ -89,16 +94,30 @@ const deployRSASigner = async (deployer: Deployer, hashfunc: string, exponent: s
8994
};
9095

9196
const deployRSAPSSSigner = async (deployer: Deployer, hashfunc: string, exponent: string, keyLength: string) => {
97+
try {
98+
const result = await deployer.deployed(
99+
CRSAPSSSigner__factory,
100+
`CRSAPSSSigner ${hashfunc} ${exponent} ${keyLength}`,
101+
);
102+
return result;
103+
} catch {}
104+
92105
const signer = await deployer.deploy(CRSAPSSSigner__factory, {
93106
name: `CRSAPSSSigner ${hashfunc} ${exponent} ${keyLength}`,
94107
});
95108

96109
let hf;
97110

98-
if (hashfunc === "SHA2") {
99-
hf = 0;
100-
} else {
101-
hf = 1;
111+
switch (hashfunc) {
112+
case "SHA2":
113+
hf = 0;
114+
break;
115+
case "SHA384":
116+
hf = 2;
117+
break;
118+
default:
119+
hf = 1;
120+
break;
102121
}
103122

104123
await signer.__CRSAPSSSigner_init(exponent, hf);
@@ -107,6 +126,14 @@ const deployRSAPSSSigner = async (deployer: Deployer, hashfunc: string, exponent
107126
};
108127

109128
const deployECDSA384Signer = async (deployer: Deployer, curve: string, hashfunc: string, keyLength: string) => {
129+
try {
130+
const result = await deployer.deployed(
131+
CECDSA384Signer__factory,
132+
`CESDCA384Signer ${curve} ${hashfunc} ${keyLength}`,
133+
);
134+
return result;
135+
} catch {}
136+
110137
const signer = await deployer.deploy(CECDSA384Signer__factory, {
111138
name: `CESDCA384Signer ${curve} ${hashfunc} ${keyLength}`,
112139
});
@@ -132,6 +159,11 @@ const deployECDSA384Signer = async (deployer: Deployer, curve: string, hashfunc:
132159
};
133160

134161
const deployECDSA256Signer = async (deployer: Deployer, keyLength: string) => {
162+
try {
163+
const result = await deployer.deployed(CECDSA256Signer__factory, `CESDCA256Signer ${keyLength}`);
164+
return result;
165+
} catch {}
166+
135167
const signer = await deployer.deploy(CECDSA256Signer__factory, {
136168
name: `CESDCA256Signer ${keyLength}`,
137169
});
@@ -140,6 +172,11 @@ const deployECDSA256Signer = async (deployer: Deployer, keyLength: string) => {
140172
};
141173

142174
const deployECDSA512Signer = async (deployer: Deployer, keyLength: string) => {
175+
try {
176+
const result = await deployer.deployed(CECDSA512Signer__factory, `CESDCA512Signer ${keyLength}`);
177+
return result;
178+
} catch {}
179+
143180
const signer = await deployer.deploy(CECDSA512Signer__factory, {
144181
name: `CESDCA512Signer ${keyLength}`,
145182
});

scripts/utils/types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,15 @@ 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"]);
1010
export const C_RSA_SHA512_4096 = keccak256(["string"], ["C_RSA_SHA512_4096"]);
11+
export const C_RSA_SHA2_3072_56611 = keccak256(["string"], ["C_RSA_3072_56611"]);
1112

1213
export const C_RSAPSS_SHA2_2048 = keccak256(["string"], ["C_RSAPSS_SHA2_2048"]);
1314
export const C_RSAPSS_SHA2_4096 = keccak256(["string"], ["C_RSAPSS_SHA2_4096"]);
1415
export const C_RSAPSS_SHA512_2048 = keccak256(["string"], ["C_RSAPSS_SHA512_2048"]);
1516
export const C_RSAPSS_SHA512_4096 = keccak256(["string"], ["C_RSAPSS_SHA512_4096"]);
17+
export const C_RSAPSS_SHA2_2048_3 = keccak256(["string"], ["C_RSAPSS_SHA2_2048_3"]);
18+
export const C_RSAPSS_SHA2_3072 = keccak256(["string"], ["C_RSAPSS_SHA2_3072"]);
19+
export const C_RSAPSS_SHA384_2048 = keccak256(["string"], ["C_RSAPSS_SHA384_2048"]);
1620

1721
export const C_ECDSA_SECP256R1_SHA1_256 = keccak256(["string"], ["C_ECDSA_SECP256R1_SHA1_256"]);
1822
export const C_ECDSA_SECP384R1_SHA2_512 = keccak256(["string"], ["C_ECDSA_SECP384R1_SHA2_512"]);

test/certificate/signers/CRSAPSSSigner.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,18 @@ describe("CRSAPSSSHA2Signer", () => {
99

1010
let signerSha2: CRSAPSSSigner;
1111
let signerSha512: CRSAPSSSigner;
12+
let signerSha384: CRSAPSSSigner;
1213

1314
before("setup", async () => {
1415
const CRSAPSSSigner = await ethers.getContractFactory("CRSAPSSSigner");
1516

1617
signerSha2 = await CRSAPSSSigner.deploy();
1718
signerSha512 = await CRSAPSSSigner.deploy();
19+
signerSha384 = await CRSAPSSSigner.deploy();
1820

1921
await signerSha2.__CRSAPSSSigner_init(65537, 0);
2022
await signerSha512.__CRSAPSSSigner_init(65537, 1);
23+
await signerSha384.__CRSAPSSSigner_init(65537, 2);
2124

2225
await reverter.snapshot();
2326
});
@@ -46,5 +49,16 @@ describe("CRSAPSSSHA2Signer", () => {
4649

4750
expect(await signerSha512.verifyICAOSignature(signedAttributes, icaoMemberSignature, icaoMemberKey)).to.be.true;
4851
});
52+
53+
it("should verify icao signature using SHA384", async () => {
54+
const signedAttributes =
55+
"0x3082047ba003020102020463ce64b7304106092a864886f70d01010a3034a00f300d06096086480165030402020500a11c301a06092a864886f70d010108300d06096086480165030402020500a2030201303065311f301d06035504030c164555204c61697373657a20506173736572204353434131173015060355040a0c0e4575726f7065616e20556e696f6e311c301a060355040b0c134575726f7065616e20436f6d6d697373696f6e310b3009060355040613024555301e170d3233303133303030303030305a170d3239303433303030303030305a3063311d301b06035504030c144555204c61697373657a2050617373657220445331173015060355040a0c0e4575726f7065616e20556e696f6e311c301a060355040b0c134575726f7065616e20436f6d6d697373696f6e310b300906035504061302455530820122300d06092a864886f70d01010105000382010f003082010a0282010100b0bc4b47bc63fe1324717e8564ebd9075cc3f9d69fd3b562719ddaf0c96a2848a0820120caaebb5a7d3379bfae05aa420b909d3814525a5cdb88eb01a12b44bb776ffb85f4be5d58e2e0bc6eb624bdf350cb840849153077fb56ed97506cd567b50a93bc77a1bcb1ba1d91453683ac272b81595ba8921bfb07fafaf7973567f3d2b4f04656b09e431894ed9bb97dd92f769d635514f8a50470836ee088927dcde6b5a3812bf2093884a89a48510cc3ff6110af13dfc950a471eff8ab142366ec0ce75631ba8fb2480ff1ddf150d6ad145e23614ee200702d2f68705875eb4bb3548ade6a5e6c219f4658a5699a5d607f5a5b28be0cd706f6251c2181f5f6c7bd0203010001a3820217308202133081920603551d2304818a308187801445728821c8fbff1153455807ad09ed5e868035e8a169a4673065311f301d06035504030c164555204c61697373657a20506173736572204353434131173015060355040a0c0e4575726f7065616e20556e696f6e311c301a060355040b0c134575726f7065616e20436f6d6d697373696f6e310b300906035504061302455582045f1ea223301d0603551d0e04160414230d61b5ac435ba5fc76ab8aa8e8480ebf56f6ef300e0603551d0f0101ff040403020780302b0603551d1004243022800f32303233303133303030303030305a810f32303233303433303030303030305a302f0603551d1104283026811265752d64734065632e6575726f70612e6575a410300e310c300a06035504070c0345554530310603551d12042a3028811465752d637363614065632e6575726f70612e6575a410300e310c300a06035504070c034555453081a30603551d1f04819b3081983032a030a02e862c68747470733a2f2f65752d637363612e6a72632e65632e6575726f70612e65752f63757272656e742e63726c3030a02ea02c862a68747470733a2f2f706b64646f776e6c6f6164312e6963616f2e696e742f43524c732f4555452e63726c3030a02ea02c862a68747470733a2f2f706b64646f776e6c6f6164322e6963616f2e696e742f43524c732f4555452e63726c3016060767810801010602040b300902010031041302504c";
56+
const icaoMemberSignature =
57+
"0x6e8e785cf66088e0753cdf8b423d915a19162cb8887a62e007668d0e9ffeab2c2e24e0a0eb49cf6a07095e92d2905db0c253bfd81eaac7cefd69f7cf6331f1baa983ed1648be3b26ec647a703736e06b4ad8dec71996cf956d80a2787ad037eed49d48ea9089a7607b6db95fb14145994e45df8ccb5c9fb4dd8bec98e37c25b10d56a847da0f4a0880c5a639d54279b6a62e2b69939d86f992adabd604df875d2e7d1c55c035210fb295bf5ef70acb9fa4f2e6236220388aa5037197259b3fcf9a7f567528373aa0ba9379abc092ae0cae66fa1a936c41556367b38775762d248804d92faaf934a651fbe06588c5ff9e8e967e40483623defff1f07004b9439bfe18249ce22304f1458bd6b2e3f9664a350a0aad2fb96447fa4b2961735b97d40e17f5ec1184501fc00c3cb419c386b153fc6ea75d78df6625706c869c582f0848cedb9a9b8f62f652b73fdfd4ef57c93cbcb383dae85368afc43035952564c15030d6fab4e4a10e148acf5c6b8e87c45e438edf783ce8d0208d1a477998a1072f6d6db5bb9074561f48fe6d82cd81a2a1e64db0c5eb098360a92189fa0d17c003d86b41a970555f68b51f82bfea882ef9dbebf1e096e966eef300ac7c5455207d4f234f6b0a73986a11e767ce6e6258092e00068e2c5d1d5c2bbf05aec3107eea2b8ca7f96cfd428d0b4af55db650959c4063830256ef030989560bce2e41d8";
58+
const icaoMemberKey =
59+
"0xc516b27aa9cd9c08245199108217202d2139ab3c9419d65ab6e99e08a888852f6e170c76deaaa04adc88238bacb9e253ab95d9fcad9fe710e8ca0bd6822b2c33fd93777e1a6ac7724b49f2d6860474ae71ca992fc7c8b301b3561d5c3effe29aa536e24d6f25c5e2f9b7a80035917dcf6e58e4c405c104f373f69df6e747ca230b1058089bb7de27f824e67af4651ca77499735b8c378a06f4ddd567918ec021e899b908546ac23bdcaa52f96eb6931df76f7620e9ccc87110be0cc2839d88d9084742d9b7045285fd7bd24a6421f500c69639218808ad24d3f7e1634aaddfab6c9c9c46f539fa154f3f49ca446dd4a6bb589875ee8ce226f073d6242ff492e2810a34afd5193afc3ba94891d86ce1b87852fc0bd7317207a3852fe5889e81d61a923786a9c6a9b2946886a69223f0850f78797a5e79f98a63ab30f2fc23115e23f543994dab9c391e563ee868dd6343f611bc029f27b4b2188d36a910ba058d00447d1fcfbc88317a1ff08f210ac49c48c54612d8884484e8dd71688b238297b8503c343849301b357f7859605294d315a072cf3fe49dfc2fc7c1326da8325df043c740bd80f5f606b3620d459e33c3c7ecf0d083719b581cb1c93d898443e381d07d00e590d8f2f5174bb7463a850cf5152a261f999d226af7ca379e02303d3d78ce2a8520fb350f4969779f327e2fedac5c1151cd3f506f5c92bc242f0f59";
60+
61+
expect(await signerSha384.verifyICAOSignature(signedAttributes, icaoMemberSignature, icaoMemberKey)).to.be.true;
62+
});
4963
});
5064
});

0 commit comments

Comments
 (0)