Skip to content

Commit 999fb30

Browse files
author
Ian Tan
committed
test(schnorr): re-generate fresh values for schnorr scheme, ensuring
that they match r and s generated by C++ implementation
1 parent 787a66b commit 999fb30

File tree

2 files changed

+78
-95
lines changed

2 files changed

+78
-95
lines changed

src/__tests__/schnorr.fixtures.ts

Lines changed: 70 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -1,96 +1,92 @@
11
export default [
22
{
3-
pub: '0307fbd1e93bd1b913348f68d2a4dd139059195d3607704725409f7a9d093de8b5',
4-
priv: '0ffd5ebcc02d807ad639d5057fc9c867c6b48dabc1548f9bb767e2debcd8fd48',
5-
k: 'b053865828f47f0b6cefa6b0c13ce848824a45e190647aff7c794b295f941e14',
6-
r: '2f1ec68a2d46233c483dddd251e609c2a8b8c93bc6587b18a4a7e731bf418303',
7-
s: 'a9ec1e855970b68d5af3662150bcf7762654ddbe79e5321e3cf6a4fe1cf73a24',
3+
msg:
4+
'89D68815DDB9E5F8D7FD53B6EC096616A773B9421F6704CED36EF4E484BA0C6C5A4855C71C33A54AC82BE803E5CFD175779FC444B7E6AA9001EEFABEBC0CF99754887C7B0A27AFDDC415F8A02C5AF1EFEA26AD1E5D92B1E2',
5+
priv: 'EDA7AFB6E3CEC979CC37BA87A09E63CAA864D0202A6BA7DF7966C012B1D92F7E',
6+
pub: '024C34E2D3921D05102BF3D4EE806E188395AFD033F39D090A46A369D709797FC3',
7+
k: '63C6C74C9FD5F31B5576E47873994BB6C8724FA31EEAB7669DB915EDFDB1A23C',
8+
r: '4B31EA76A9E890D533A753BEB0EE9DE1072CA5508B0DA5D45B1AA9487FA491FE',
9+
s: 'CC92A532CCB5172C1199178E832EA770B4BFA696034471BDC1CE23215276B109',
810
},
9-
1011
{
11-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
12-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
13-
k: '6728ca3c4ca06dace3a975d287404afe59cf33646d97476e02efe0a9fb2556ab',
14-
r: '2877e1a0d9d7eff22a60dda2c8f51352843bb5dc91c67721a35e5efe33b2141a',
15-
s: 'f80e014de0753ab42f4fd5886798c40504574131cb9adbb907b046878997d23a',
12+
msg:
13+
'EF9237CE5B615BC08677EE5ABFBD85F73F7F8868CB1B5FBA4C1309F16061AA133821FBE2A758D2BBE6AA040A940D41B7D3B869CEE945150AA4A40E6FF719EEC24B2681CD5CE06B50273436584066046656D5EFED73157591',
14+
priv: 'C7A5FCF7B927D652231C56CB8F007D2E4A392726620D6604B50F54BC32732A16',
15+
pub: '024F39C9B8DC1355E806F5C324A8D80B67FD0B1848A2A78F7C7E9E514ED9C51074',
16+
k: '015B931D9C7BF3A7A70E57868BF29712377E74355FC59032CD7547C80E179010',
17+
r: '611FAB2F8B1D0E48D2D535CD9A1DFD9F31AB834F8C34C20100FC93CBA61EEF72',
18+
s: '371DC25E061CF20F096AA2B1FE552A7C07D8B102B2F7F8865E984BA679CAF4AF',
1619
},
17-
1820
{
19-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
20-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
21-
k: 'e223ea623edc0acc57b3b20adfab24ec3a91d8294cf799ec9f8190aac446c81b',
22-
r: '319e5f4998225164b2af4352a3420d2ffdcf143c7c68787f0d4d25768fa38d0a',
23-
s: 'b5663a77cd92667d94f1502ad3f439610c9314b6f658c2db503f7bbb2f3b1cab',
21+
msg:
22+
'4E0E67D2D03957F0CF6C87834BF328540588360BA7C7C5F88541634FB7BADE5F94FF671D1FEBDCBDA116D2DA779038ED7679896C29198B2657B58C50EA054F644F4129C8BA8D8D544B727633DD40754398046796E038626F',
23+
priv: '8608065C1B777CE7655311293995AA091C84C2B16B010985138936A6736EF0F6',
24+
pub: '03707675447CB9E50CDF2DDD4B3D0B2A5CFE2DE60AD377509E340E9D0B75F7458B',
25+
k: '8695F6766BA6D132E4EB547AFC9B65C0EE5F2AEC1D0F41E695ABCD161EAC9A52',
26+
r: '9CFB236E54868BE966A5104051EB9E1BB7F38B5BA30D2AA865E73F1BABE6C283',
27+
s: '4A213BC595BE4A6B91BDC2989041EFEACDD5E09EADEE21AEF6110A32C57C3317',
2428
},
25-
2629
{
27-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
28-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
29-
k: 'c537b0331d4b8dd1f8f88548793796ab5468c3f429ff9a3da9ac18d944a7db51',
30-
r: '793b300cc7343d5e6608e84d0093a1d7c35d441ac486c537595df3d0897c5c61',
31-
s: 'be0640531d4ed3ac4f518941783a6ff1f3617d1cd874074302ba6a8af1898225',
30+
msg:
31+
'D9D5BF144C08E9577ED0D1E5E560875109B340980580473DBC2E689A3BE838E77A0A3348FE960EC9BF81DA36F1868CA5D24788FA4C0C778BF0D12314285495636516CF40861B3D737FD35DBB591C5B5D25916EB1D86176B1',
32+
priv: '01310279230B5D9230AFAD6F72FD6AAB3584F0756833910278BCC54FDCFF2B45',
33+
pub: '03CB4F22931C82DE38780DEE9DB105CB7175287D65CF754D79165B2E50E4012E28',
34+
k: '6DF6E9E4A2CCCE53812CAA61477B93130F123782614BF61867653C966B03D689',
35+
r: '01F095B428B01F7243217C87839892E1EA44ABB22D3BC1FADBA774901218C1FD',
36+
s: '6A46F23B370EB837CBB8F52B99F4336FE4FE718C50270938B868314D9609D543',
3237
},
33-
3438
{
35-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
36-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
37-
k: '6926a1d285bd260591e8535320414c69da604976b36bcfddde4182735df7d368',
38-
r: '7750745a0cb9d45fd3a7c247095979758bf30695ded6b1053c87a68c3e0cfc78',
39-
s: '02718e9f2d7fda99321888b53f592a5acc3a86e6b121fdbc2ab63b1fc93e9ff5',
39+
msg:
40+
'1C1784B5484EECDB393F6A0ACA11B91DF0866B500B8DEE501FD7EB9BCE09A17D74124B4605ADFC0777BED9816D8D7E8488544A18D8045CB3283B0A752B881B5F500FADB59010E63D1B664F8BDA2DBF33CB6BE21C8EB3ECA9',
41+
priv: '8CEE0A6AEE8FB30A0AE7B6A5BFAFFA52E097E88F5388919F06D407520056503E',
42+
pub: '02D9CFD6CD6B4231BD6F1BDC5DAC502B4AF6144A9407FE37764CAB8CFC530566FA',
43+
k: '12C31321A6E3D10597C560DF6D4505ACF85E1531A56FC70EC65466BA79BAA7F7',
44+
r: 'AB561B9544923AA35F200AAF84206C4132E0F95629FD7CB7CBB211B4D88174F7',
45+
s: 'B65BAA2528FC5F3B195169EB6BFA2BD7B6D28B7B1323647105A7A733C0FEC4CE',
4046
},
41-
4247
{
43-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
44-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
45-
k: '4d97d99f024665caac41ec48496bfc1690c272960d50b5014e27649f76edbae1',
46-
r: '6b5008e0490700566ce225155e3b4786f61d959d95bc3e611ddf99ba08890909',
47-
s: 'f40300d7a6d74201425e902c65b763acf5b35e6ee3b92b4939d1a1c54a96581d',
48+
msg:
49+
'B9103262CDB941F77376F5D3DBB7A3D5A387797FC4819A035ECA704CEDB37110ee7f206b0c8805aaebf4963e7c4708ce8d4e092366e71792a8a3b2bbcdee321b3e15380c541ef0930888969f7457afe18588826a419d5831',
50+
priv: '042E4F26C128D61B356C1C44DD8688945B9104CC064572137FF0C2238F3D1B26',
51+
pub: '02F898D30F7BE156B7AB89F92B5BE536D0BFADFF1343628DA68FAF24BBF8051F60',
52+
k: 'BC174CD51F7D19FF103CEA62AD9054387EFCBC9665991501C303549BACDF749B',
53+
r: '6E4CF5B29AE2F51645CB48FD0240B3D7A40F54FB87CD0CB6A81AE08086F87A9B',
54+
s: 'E68710FB6721EC077F7C57878CB7A79370CF7B4D056CE755C6761C166C39FB73',
4855
},
49-
5056
{
51-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
52-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
53-
k: '62918747182c53472a60f8c8d331f1420298451232ad8921e5a6fe9ce84c423f',
54-
r: '71e876ef8ebb8c9409c6f47b4eae1e1f2407b3e01000ce6b0ea3584bbdd461ea',
55-
s: '63a87fe05fb92beb7f826998ae0cb3fdf7290c2d9ffffadd5efe46c7396fe7d6',
57+
msg:
58+
'3957166441B93515E8F03C95D8E8CE1E1864FAAD68DDFC5932130109390B0F1FE5CA716805F8362E98DCCAADC86ADBED25801A9A9DCFA6264319DDAFE83A89C51F3C6D199D38DE10E660C37BE872C3F2B31660DE8BC95902',
59+
priv: '1A0A27DC91FC16956F2C18A9D3024DE4B3CEE9F330D4955E0655741929181DDF',
60+
pub: '0299831A1D3ECEDAC359355059D9D8CA3829CE4788B6D52873BE6811EA7926C0CD',
61+
k: 'CD9F19178563B5EE012E603C0F977E94E1D22A1FA98992177550E453AAEC0257',
62+
r: '391FE228C29165EAA4D3062CF96E2AA7C07B4F0F8D720CEC5162A3F16F653679',
63+
s: '513E0537B56E5CFCBE2CFB06022A280DE5BC224021B3BB06EF2BC78721903731',
5664
},
57-
5865
{
59-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
60-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
61-
k: '45ed3343a9642f49a690a5bc9b4f3d222ef33216c812561d1848b5e5e35ae85f',
62-
r: 'd15bff757a35316b669f3b85a637b5819f3dd2c62cf02805f355531cac61bba7',
63-
s: 'b26b09f02d497cfc4e6d9304b2ae5a4172237a3f35e25d5abfc689b61280b2ef',
66+
msg:
67+
'0687EF5309D108534F51F8658FB4F080B7CB19EE9AEBD718CC4FA27C8C37DFC1ADA5D133D13ABE03F021E9B1B78CCBD82F7FF2B38C6D48D01E481B2D4FAF7171805FD7F2D39EF4C4F19B9496E81DAB8193B3737E1B27D9C4',
68+
priv: '5E986AD51606AE69D9DA413B8FB503878BA607A31D12EA0B98B7930AC23662A7',
69+
pub: '031DFE3D937119F0DAC3BD4CD6DBF6E41FEB29C6B5C14EFB8E387AC4C4EFEB4036',
70+
k: '82BFDC4F8C897C46286109FA7B1B4ECCB724CE8823A27B01C0E857587587C71E',
71+
r: 'C200BC1708C1AEAFA624FB89ECB5FC8F92122D829ABB87FC8A14E27084FB7909',
72+
s: '48FDDFCD83AF62442380F3FF1E1A8F986196B56F2BE3F797EA991086F95CEDCE',
6473
},
65-
6674
{
67-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
68-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
69-
k: '41ccf2765e55f6ec9d4d167067cb5ed38c7a657d666475a4ccb7544e756cfb63',
70-
r: '66eafaf74d9bfa4163aa75712036e75c27eed53998e20d515fb0290cd08f13a0',
71-
s: '6f25481a3b13305c59772d4c81d7820587825142047e6b4c05bed92bb9d2dae3',
75+
msg:
76+
'5BFA6CC351E220AE0CE106986D61FF34A11E19FD3650E9B7818FC33A1E0FC02C44557AC8AB50C9B2DEB2F6B5E24C4FDD9F8867BDCE1FF261008E7897970E346207D75E47A158298E5BA2F56246869CC42E362A02731264E6',
77+
priv: 'EF7AE484F4821E320D4104F5350B8A9B82121329CAF1596D1563B22595738536',
78+
pub: '0250E299F2A83E5E88C4B0A80D2CD5D6F4261E0E5B788F800AA332B4CE4CBC6AD0',
79+
k: '9B605C81169E65D8CABCC026834109027D07BC35DB4E60C094704CAD41436522',
80+
r: '3B5FC26609EC90B2CEC4A7D43BDC700D8BFA1A20E3AAB5C6A7DAFF4C9BB01C3B',
81+
s: '655568B30AFA1DFB60009F33DD9CBD8A4A44CC2A4A446FB7E0B2F84AE08828E5',
7282
},
73-
7483
{
75-
pub: '02f6606cbb700f5da4077d1fc9dbfd4534168d8b3de9d265220883a7466c3bb750',
76-
priv: 'bd143eb7b4498de53e9acc78df88e3871757de2405ed519fab7e707ddc6a295d',
77-
k: 'e52aad1f8074676a2d14910ab5470999c65af342b130f6a90e6aa381c5f262a9',
78-
r: '2ca70748219697d09719fd1963aa5ab6885db84d51829db94213fee5b96380af',
79-
s: '59545be43bbceedd08568695929b206bad42d3733fc612cd6a4f94b3d08eb33d',
80-
},
81-
{
82-
pub: '02f6c7bba28e737b94ec1e06bdd9c88d76204b8fd2a2469a7040ab560871ed538e',
83-
priv: '71fb3a7e741b5f20495b54e443317c0aebdb961a3bed5f72824b6cabca14b5e6',
84-
k: 'ff08966f93d25621cd11f959f52cea87150e19b89c2bce7bd02ee09cf491eba1',
85-
r: '9505c4d10b6301c1825257063555cc6d400d9412e25b5d0e558e7d66cc08cf53',
86-
s: '369143a81826822fa772bd0152007974324232bbbf2e7663cb01afeb58caf3b1',
87-
},
88-
89-
{
90-
pub: '02faec818c6ab810eb657458453e55a093dc91a389c598dcb4be70e9ea63e9db5a',
91-
priv: 'b6a3f24d372f1e07b288730197507f06ce5ad56e9a2caee045502c10219750e5',
92-
k: '9f988f5b2f6eaeacc9a23f65d7e2475059643982afbf89d25af544a2f63543b9',
93-
r: '57502ef2df7f793a50e7570fbce47453263a38d12ce30ef88f9e85be01e70922',
94-
s: 'acbd5039f350b0de6a26dda8ff251c2db75b1f649ea6e1ab7cf076d1e49a79ec',
84+
msg:
85+
'A7F1D92A82C8D8FE434D98558CE2B347171198542F112D0558F56BD68807999248336241F30D23E55F30D1C8ED610C4B0235398184B814A29CB45A672ACAE548E9C5F1B0C4158AE59B4D39F6F7E8A105D3FEEDA5D5F3D9E4',
86+
priv: '0755EFB1BDCA8E28FD29CA57774D9DB7B07A65A48EF7F8762E52840D43FDD277',
87+
pub: '02076F5B8511A3AD45A4856681AB66C0B8A979F44640036E752231298ED75AD48E',
88+
k: 'BC59D8D973767EBB04AE5BCDAD61849985E800D148165FAFF3AD93004EFB42D6',
89+
r: '76697A7A7BA544C21FB4B7EB64EF9E1C7CEA22C9CB861C9BB565D99C55767B82',
90+
s: '53354ADB50D95DB0608D999214FEB6D6E60FAF2323275162E023C09FB3FE3A04',
9591
},
9692
];

src/__tests__/util.spec.ts

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -154,35 +154,22 @@ describe('utils', () => {
154154
});
155155

156156
it('should match the C++ implementation', () => {
157-
schnorrVectors.forEach(({priv, k}, idx) => {
158-
const pub = secp256k1.keyFromPrivate(priv, 'hex').getPublic(true, 'hex');
159-
160-
const tx = {
161-
version: 8,
162-
nonce: 8,
163-
to: util.getAddressFromPublicKey(pub),
164-
pubKey: pub,
165-
amount: new BN('888', 10),
166-
gasPrice: 8,
167-
gasLimit: 88,
168-
code: '',
169-
data: '',
170-
};
171-
172-
const encodedTx = util.encodeTransaction(tx);
173-
174-
let sig;
157+
schnorrVectors.forEach(({ msg, priv, pub, k, r, s }) => {
158+
let sig: Signature | null = null;
175159
while (!sig) {
176160
sig = schnorr.trySign(
177-
encodedTx,
161+
new Buffer(msg, 'hex'),
178162
new BN(new Buffer(priv, 'hex')),
179-
new BN(k),
163+
new BN(k, 16),
180164
new Buffer(''),
181165
new Buffer(pub, 'hex'),
182166
);
183167
}
184168

185-
const res = schnorr.verify(encodedTx, sig, new Buffer(pub, 'hex'));
169+
const res = schnorr.verify(new Buffer(msg, 'hex'), sig, new Buffer(pub, 'hex'));
170+
171+
expect(sig.r.toString('hex', 64).toUpperCase()).toEqual(r);
172+
expect(sig.s.toString('hex', 64).toUpperCase()).toEqual(s);
186173
expect(res).toBeTruthy();
187174
});
188175
});

0 commit comments

Comments
 (0)