Skip to content

Commit 3580156

Browse files
committed
Added more test vector unit tests
1 parent 5d5a36c commit 3580156

File tree

2 files changed

+403
-1
lines changed

2 files changed

+403
-1
lines changed

test/core/crypto/keyPair.spec.ts

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,65 @@ describe('key pair', () => {
139139
});
140140
});
141141

142+
/**
143+
* @see https://raw.githubusercontent.com/nemtech/test-vectors/master/1.test-keys-catapult.json
144+
*/
145+
describe('Catapult test vector - SHA3', () => {
146+
it('can extract from private key test vectors', () => {
147+
// Arrange:
148+
const Private_Key = [
149+
'575dbb3062267eff57c970a336ebbc8fbcfe12c5bd3ed7bc11eb0481d7704ced',
150+
'5b0e3fa5d3b49a79022d7c1e121ba1cbbf4db5821f47ab8c708ef88defc29bfe',
151+
'738ba9bb9110aea8f15caa353aca5653b4bdfca1db9f34d0efed2ce1325aeeda',
152+
'e8bf9bc0f35c12d8c8bf94dd3a8b5b4034f1063948e3cc5304e55e31aa4b95a6',
153+
'c325ea529674396db5675939e7988883d59a5fc17a28ca977e3ba85370232a83',
154+
];
155+
156+
const Expected_Public_Keys = [
157+
'BD8D3F8B7E1B3839C650F458234AB1FF87CDB1EDA36338D9E446E27D454717F2',
158+
'26821636A618FD524A3AB57276EFC36CAF787DF19EE00F60035CE376A18E8C47',
159+
'DFC7F40FC549AC8BB2EF097600103FF457A1D7DC5755D434474761459B030E6F',
160+
'96C7AB358EBB91104322C56435642BD939A77432286B229372987FC366EA319F',
161+
'9488CFB5D7D439213B11FA80C1B57E8A7AB7E41B64CBA18A89180D412C04915C',
162+
];
163+
164+
// Sanity:
165+
expect(Private_Key.length).equal(Expected_Public_Keys.length);
166+
167+
for (let i = 0; i < Private_Key.length; ++i) {
168+
// Arrange:
169+
const privateKeyHex = Private_Key[i];
170+
const expectedPublicKey = Expected_Public_Keys[i];
171+
172+
// Act:
173+
const keyPair = KeyPair.createKeyPairFromPrivateKeyString(privateKeyHex);
174+
175+
// Assert:
176+
const message = ` from ${privateKeyHex}`;
177+
expect(convert.uint8ToHex(keyPair.publicKey).toUpperCase(), `public ${message}`).equal(expectedPublicKey.toUpperCase());
178+
expect(convert.uint8ToHex(keyPair.privateKey).toUpperCase(), `private ${message}`).equal(privateKeyHex.toUpperCase());
179+
}
180+
});
181+
182+
it('cannot extract from invalid private key', () => {
183+
// Arrange:
184+
const invalidPrivateKeys = [
185+
'', // empty
186+
'53C659B47C176A70EB228DE5C0A0FF391282C96640C2A42CD5BBD0982176AB', // short
187+
'53C659B47C176A70EB228DE5C0A0FF391282C96640C2A42CD5BBD0982176AB1BBB', // long
188+
];
189+
190+
// Act:
191+
invalidPrivateKeys.forEach((privateKey) => {
192+
// Assert:
193+
expect(() => {
194+
KeyPair.createKeyPairFromPrivateKeyString(privateKey);
195+
}, `from ${privateKey}`)
196+
.to.throw('private key has unexpected size');
197+
});
198+
});
199+
});
200+
142201
describe('sign & verify- Test Vector', () => {
143202
/**
144203
* @see https://raw.githubusercontent.com/nemtech/test-vectors/master/2.test-sign-nis1.json
@@ -620,4 +679,59 @@ describe('key pair', () => {
620679
}
621680
});
622681
});
682+
683+
/**
684+
* @see https://github.com/nemtech/test-vectors/blob/master/3.test-derive-catapult.json
685+
*/
686+
describe('derive shared key - Test Vecto Catapult', () => {
687+
it('derive shared key using sha3', () => {
688+
// Arrange: create a salt that is too long
689+
// Arrange:
690+
const Private_Key = [
691+
'00137c7c32881d1fff2e905f5b7034bcbcdb806d232f351db48a7816285c548f',
692+
'e8857f8e488d4e6d4b71bcd44bb4cff49208c32651e1f6500c3b58cafeb8def6',
693+
'd7f67b5f52cbcd1a1367e0376a8eb1012b634acfcf35e8322bae8b22bb9e8dea',
694+
'd026ddb445fb3bbf3020e4b55ed7b5f9b7fd1278c34978ca1a6ed6b358dadbae',
695+
'c522b38c391d1c3fa539cc58802bc66ac34bb3c73accd7f41b47f539bedcd016',
696+
];
697+
698+
const Public_Keys = [
699+
'bf684fb1a85a8c8091ee0442eddb22e51683802afa0c0e7c6fe3f3e3e87a8d72',
700+
'9d8e5f200b05a2638fb084a375408cabd6d5989590d96e3eea5f2cb34668178e',
701+
'9735c92d150dcee0ade5a8d1822f46a4db22c9cda25f33773ae856fe374a3e8a',
702+
'd19e6beca3b26b9d1abc127835ebeb7a6c19c33dec8ec472e1c4d458202f4ec8',
703+
'ea5b6a0053237f7712b1d2347c447d3e83e0f2191762d07e1f53f8eb7f2dfeaa',
704+
];
705+
706+
const Salt = [
707+
'422c39df16aae42a74a5597d6ee2d59cfb4eeb6b3f26d98425b9163a03daa3b5',
708+
'ad63ac08f9afc85eb0bf4f8881ca6eaa0215924c87aa2f137d56109bb76c6f98',
709+
'96104f0a28f9cca40901c066cd435134662a3b053eb6c8df80ee0d05dc941963',
710+
'd8f94a0bbb1de80aea17aab42e2ffb982e73fc49b649a318479e951e392d8728',
711+
'3f8c969678a8abdbfb76866a142c284a6f01636c1c1607947436e0d2c30d5245',
712+
];
713+
714+
const Expected_Derived_Key = [
715+
'32628d4ecf167487881de9e81466614a3442c1b1f6eb146ebe7ad69c37184696',
716+
'da30f8081c065f5c4e2d17a551af3634a63395991af9642c29a7bbc9312b98a5',
717+
'58c9a027b30fcbec8ac7962df1eb81f27317ab6f39ada66be8d9453653a305af',
718+
'58815adb5f8ef154c6091c65b28e3d6d5ea25da40040e7489ee05f65ecffa61c',
719+
'8c677358d7512c4d53b0f5d59cff421625851322fae4c66e98f670c49c916f32',
720+
];
721+
722+
for (let i = 0; i < Private_Key.length; ++i) {
723+
// Arrange:
724+
const keyPair = KeyPair.createKeyPairFromPrivateKeyString(Private_Key[i]);
725+
const publicKey = Convert.hexToUint8(Public_Keys[i]);
726+
const salt = Convert.hexToUint8(Salt[i]);
727+
728+
// Act:
729+
const sharedKey = Convert.uint8ToHex(KeyPair.deriveSharedKey(keyPair, publicKey, salt));
730+
731+
// Assert:
732+
const message = ` from ${Private_Key[i]}`;
733+
expect(sharedKey.toUpperCase()).to.deep.equal(Expected_Derived_Key[i].toUpperCase());
734+
}
735+
});
736+
});
623737
});

0 commit comments

Comments
 (0)