Skip to content

Commit 5b589d6

Browse files
authored
Add spec for correct behavior with RFC 8032 test vectors (#40)
Everything works correctly, as I expected, but I think the library should include the test vectors in the specs to make it more obvious that this implements Ed25519 correctly.
1 parent 0f6624d commit 5b589d6

1 file changed

Lines changed: 159 additions & 0 deletions

File tree

spec/ed25519/test_vectors_spec.rb

Lines changed: 159 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,159 @@
1+
# frozen_string_literal: true
2+
3+
require "spec_helper"
4+
5+
RSpec.describe Ed25519::SigningKey do
6+
describe "RFC 8032 test vectors" do
7+
it "are handled correctly" do
8+
tests = [
9+
[<<SK, <<PK, "", <<SIG],
10+
9d61b19deffd5a60ba844af492ec2cc4
11+
4449c5697b326919703bac031cae7f60
12+
SK
13+
d75a980182b10ab7d54bfed3c964073a
14+
0ee172f3daa62325af021a68f707511a
15+
PK
16+
e5564300c360ac729086e2cc806e828a
17+
84877f1eb8e5d974d873e06522490155
18+
5fb8821590a33bacc61e39701cf9b46b
19+
d25bf5f0595bbe24655141438e7a100b
20+
SIG
21+
[<<SK, <<PK, <<MSG, <<SIG],
22+
4ccd089b28ff96da9db6c346ec114e0f
23+
5b8a319f35aba624da8cf6ed4fb8a6fb
24+
SK
25+
3d4017c3e843895a92b70aa74d1b7ebc
26+
9c982ccf2ec4968cc0cd55f12af4660c
27+
PK
28+
72
29+
MSG
30+
92a009a9f0d4cab8720e820b5f642540
31+
a2b27b5416503f8fb3762223ebdb69da
32+
085ac1e43e15996e458f3613d0f11d8c
33+
387b2eaeb4302aeeb00d291612bb0c00
34+
SIG
35+
[<<SK, <<PK, <<MSG, <<SIG],
36+
c5aa8df43f9f837bedb7442f31dcb7b1
37+
66d38535076f094b85ce3a2e0b4458f7
38+
SK
39+
fc51cd8e6218a1a38da47ed00230f058
40+
0816ed13ba3303ac5deb911548908025
41+
PK
42+
af82
43+
MSG
44+
6291d657deec24024827e69c3abe01a3
45+
0ce548a284743a445e3680d7db5ac3ac
46+
18ff9b538d16f290ae67f760984dc659
47+
4a7c15e9716ed28dc027beceea1ec40a
48+
SIG
49+
[<<SK, <<PK, <<MSG, <<SIG],
50+
f5e5767cf153319517630f226876b86c
51+
8160cc583bc013744c6bf255f5cc0ee5
52+
SK
53+
278117fc144c72340f67d0f2316e8386
54+
ceffbf2b2428c9c51fef7c597f1d426e
55+
PK
56+
08b8b2b733424243760fe426a4b54908
57+
632110a66c2f6591eabd3345e3e4eb98
58+
fa6e264bf09efe12ee50f8f54e9f77b1
59+
e355f6c50544e23fb1433ddf73be84d8
60+
79de7c0046dc4996d9e773f4bc9efe57
61+
38829adb26c81b37c93a1b270b20329d
62+
658675fc6ea534e0810a4432826bf58c
63+
941efb65d57a338bbd2e26640f89ffbc
64+
1a858efcb8550ee3a5e1998bd177e93a
65+
7363c344fe6b199ee5d02e82d522c4fe
66+
ba15452f80288a821a579116ec6dad2b
67+
3b310da903401aa62100ab5d1a36553e
68+
06203b33890cc9b832f79ef80560ccb9
69+
a39ce767967ed628c6ad573cb116dbef
70+
efd75499da96bd68a8a97b928a8bbc10
71+
3b6621fcde2beca1231d206be6cd9ec7
72+
aff6f6c94fcd7204ed3455c68c83f4a4
73+
1da4af2b74ef5c53f1d8ac70bdcb7ed1
74+
85ce81bd84359d44254d95629e9855a9
75+
4a7c1958d1f8ada5d0532ed8a5aa3fb2
76+
d17ba70eb6248e594e1a2297acbbb39d
77+
502f1a8c6eb6f1ce22b3de1a1f40cc24
78+
554119a831a9aad6079cad88425de6bd
79+
e1a9187ebb6092cf67bf2b13fd65f270
80+
88d78b7e883c8759d2c4f5c65adb7553
81+
878ad575f9fad878e80a0c9ba63bcbcc
82+
2732e69485bbc9c90bfbd62481d9089b
83+
eccf80cfe2df16a2cf65bd92dd597b07
84+
07e0917af48bbb75fed413d238f5555a
85+
7a569d80c3414a8d0859dc65a46128ba
86+
b27af87a71314f318c782b23ebfe808b
87+
82b0ce26401d2e22f04d83d1255dc51a
88+
ddd3b75a2b1ae0784504df543af8969b
89+
e3ea7082ff7fc9888c144da2af58429e
90+
c96031dbcad3dad9af0dcbaaaf268cb8
91+
fcffead94f3c7ca495e056a9b47acdb7
92+
51fb73e666c6c655ade8297297d07ad1
93+
ba5e43f1bca32301651339e22904cc8c
94+
42f58c30c04aafdb038dda0847dd988d
95+
cda6f3bfd15c4b4c4525004aa06eeff8
96+
ca61783aacec57fb3d1f92b0fe2fd1a8
97+
5f6724517b65e614ad6808d6f6ee34df
98+
f7310fdc82aebfd904b01e1dc54b2927
99+
094b2db68d6f903b68401adebf5a7e08
100+
d78ff4ef5d63653a65040cf9bfd4aca7
101+
984a74d37145986780fc0b16ac451649
102+
de6188a7dbdf191f64b5fc5e2ab47b57
103+
f7f7276cd419c17a3ca8e1b939ae49e4
104+
88acba6b965610b5480109c8b17b80e1
105+
b7b750dfc7598d5d5011fd2dcc5600a3
106+
2ef5b52a1ecc820e308aa342721aac09
107+
43bf6686b64b2579376504ccc493d97e
108+
6aed3fb0f9cd71a43dd497f01f17c0e2
109+
cb3797aa2a2f256656168e6c496afc5f
110+
b93246f6b1116398a346f1a641f3b041
111+
e989f7914f90cc2c7fff357876e506b5
112+
0d334ba77c225bc307ba537152f3f161
113+
0e4eafe595f6d9d90d11faa933a15ef1
114+
369546868a7f3a45a96768d40fd9d034
115+
12c091c6315cf4fde7cb68606937380d
116+
b2eaaa707b4c4185c32eddcdd306705e
117+
4dc1ffc872eeee475a64dfac86aba41c
118+
0618983f8741c5ef68d3a101e8a3b8ca
119+
c60c905c15fc910840b94c00a0b9d0
120+
MSG
121+
0aab4c900501b3e24d7cdf4663326a3a
122+
87df5e4843b2cbdb67cbf6e460fec350
123+
aa5371b1508f9f4528ecea23c436d94b
124+
5e8fcd4f681e30a6ac00a9704a188a03
125+
SIG
126+
[<<SK, <<PK, <<MSG, <<SIG]
127+
833fe62409237b9d62ec77587520911e
128+
9a759cec1d19755b7da901b96dca3d42
129+
SK
130+
ec172b93ad5e563bf4932c70e1245034
131+
c35467ef2efd4d64ebf819683467e2bf
132+
PK
133+
ddaf35a193617abacc417349ae204131
134+
12e6fa4e89a97ea20a9eeee64b55d39a
135+
2192992a274fc1a836ba3c23a3feebbd
136+
454d4423643ce80e2a9ac94fa54ca49f
137+
MSG
138+
dc2a4459e7369633a52b1bf277839a00
139+
201009a3efbf3ecb69bea2186c26b589
140+
09351fc9ac90b3ecfdfbc7c66431e030
141+
3dca179c138ac17ad9bef1177331a704
142+
SIG
143+
]
144+
145+
tests.each do |ary|
146+
sk, pk, msg, sig = ary.map do |x|
147+
[x.gsub(/\s/, "")].pack("H*")
148+
end
149+
150+
signing_key = described_class.new(sk)
151+
verify_key = signing_key.verify_key
152+
153+
expect(verify_key.to_bytes).to eq pk
154+
expect(signing_key.sign(msg)).to eq sig
155+
expect(verify_key.verify(sig, msg)).to eq true
156+
end
157+
end
158+
end
159+
end

0 commit comments

Comments
 (0)