@@ -18,6 +18,7 @@ type hkdfTest struct {
18
18
hash func () hash.Hash
19
19
master []byte
20
20
salt []byte
21
+ prk []byte
21
22
info []byte
22
23
out []byte
23
24
}
@@ -35,6 +36,12 @@ var hkdfTests = []hkdfTest{
35
36
0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 ,
36
37
0x08 , 0x09 , 0x0a , 0x0b , 0x0c ,
37
38
},
39
+ []byte {
40
+ 0x07 , 0x77 , 0x09 , 0x36 , 0x2c , 0x2e , 0x32 , 0xdf ,
41
+ 0x0d , 0xdc , 0x3f , 0x0d , 0xc4 , 0x7b , 0xba , 0x63 ,
42
+ 0x90 , 0xb6 , 0xc7 , 0x3b , 0xb5 , 0x0f , 0x9c , 0x31 ,
43
+ 0x22 , 0xec , 0x84 , 0x4a , 0xd7 , 0xc2 , 0xb3 , 0xe5 ,
44
+ },
38
45
[]byte {
39
46
0xf0 , 0xf1 , 0xf2 , 0xf3 , 0xf4 , 0xf5 , 0xf6 , 0xf7 ,
40
47
0xf8 , 0xf9 ,
@@ -74,6 +81,12 @@ var hkdfTests = []hkdfTest{
74
81
0xa0 , 0xa1 , 0xa2 , 0xa3 , 0xa4 , 0xa5 , 0xa6 , 0xa7 ,
75
82
0xa8 , 0xa9 , 0xaa , 0xab , 0xac , 0xad , 0xae , 0xaf ,
76
83
},
84
+ []byte {
85
+ 0x06 , 0xa6 , 0xb8 , 0x8c , 0x58 , 0x53 , 0x36 , 0x1a ,
86
+ 0x06 , 0x10 , 0x4c , 0x9c , 0xeb , 0x35 , 0xb4 , 0x5c ,
87
+ 0xef , 0x76 , 0x00 , 0x14 , 0x90 , 0x46 , 0x71 , 0x01 ,
88
+ 0x4a , 0x19 , 0x3f , 0x40 , 0xc1 , 0x5f , 0xc2 , 0x44 ,
89
+ },
77
90
[]byte {
78
91
0xb0 , 0xb1 , 0xb2 , 0xb3 , 0xb4 , 0xb5 , 0xb6 , 0xb7 ,
79
92
0xb8 , 0xb9 , 0xba , 0xbb , 0xbc , 0xbd , 0xbe , 0xbf ,
@@ -108,6 +121,12 @@ var hkdfTests = []hkdfTest{
108
121
0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b ,
109
122
},
110
123
[]byte {},
124
+ []byte {
125
+ 0x19 , 0xef , 0x24 , 0xa3 , 0x2c , 0x71 , 0x7b , 0x16 ,
126
+ 0x7f , 0x33 , 0xa9 , 0x1d , 0x6f , 0x64 , 0x8b , 0xdf ,
127
+ 0x96 , 0x59 , 0x67 , 0x76 , 0xaf , 0xdb , 0x63 , 0x77 ,
128
+ 0xac , 0x43 , 0x4c , 0x1c , 0x29 , 0x3c , 0xcb , 0x04 ,
129
+ },
111
130
[]byte {},
112
131
[]byte {
113
132
0x8d , 0xa4 , 0xe7 , 0x75 , 0xa5 , 0x63 , 0xc1 , 0x8f ,
@@ -118,6 +137,30 @@ var hkdfTests = []hkdfTest{
118
137
0x96 , 0xc8 ,
119
138
},
120
139
},
140
+ {
141
+ sha256 .New ,
142
+ []byte {
143
+ 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b ,
144
+ 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b ,
145
+ 0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b ,
146
+ },
147
+ nil ,
148
+ []byte {
149
+ 0x19 , 0xef , 0x24 , 0xa3 , 0x2c , 0x71 , 0x7b , 0x16 ,
150
+ 0x7f , 0x33 , 0xa9 , 0x1d , 0x6f , 0x64 , 0x8b , 0xdf ,
151
+ 0x96 , 0x59 , 0x67 , 0x76 , 0xaf , 0xdb , 0x63 , 0x77 ,
152
+ 0xac , 0x43 , 0x4c , 0x1c , 0x29 , 0x3c , 0xcb , 0x04 ,
153
+ },
154
+ nil ,
155
+ []byte {
156
+ 0x8d , 0xa4 , 0xe7 , 0x75 , 0xa5 , 0x63 , 0xc1 , 0x8f ,
157
+ 0x71 , 0x5f , 0x80 , 0x2a , 0x06 , 0x3c , 0x5a , 0x31 ,
158
+ 0xb8 , 0xa1 , 0x1f , 0x5c , 0x5e , 0xe1 , 0x87 , 0x9e ,
159
+ 0xc3 , 0x45 , 0x4e , 0x5f , 0x3c , 0x73 , 0x8d , 0x2d ,
160
+ 0x9d , 0x20 , 0x13 , 0x95 , 0xfa , 0xa4 , 0xb6 , 0x1a ,
161
+ 0x96 , 0xc8 ,
162
+ },
163
+ },
121
164
{
122
165
sha1 .New ,
123
166
[]byte {
@@ -128,6 +171,11 @@ var hkdfTests = []hkdfTest{
128
171
0x00 , 0x01 , 0x02 , 0x03 , 0x04 , 0x05 , 0x06 , 0x07 ,
129
172
0x08 , 0x09 , 0x0a , 0x0b , 0x0c ,
130
173
},
174
+ []byte {
175
+ 0x9b , 0x6c , 0x18 , 0xc4 , 0x32 , 0xa7 , 0xbf , 0x8f ,
176
+ 0x0e , 0x71 , 0xc8 , 0xeb , 0x88 , 0xf4 , 0xb3 , 0x0b ,
177
+ 0xaa , 0x2b , 0xa2 , 0x43 ,
178
+ },
131
179
[]byte {
132
180
0xf0 , 0xf1 , 0xf2 , 0xf3 , 0xf4 , 0xf5 , 0xf6 , 0xf7 ,
133
181
0xf8 , 0xf9 ,
@@ -167,6 +215,11 @@ var hkdfTests = []hkdfTest{
167
215
0xa0 , 0xa1 , 0xa2 , 0xa3 , 0xa4 , 0xa5 , 0xa6 , 0xa7 ,
168
216
0xa8 , 0xa9 , 0xaa , 0xab , 0xac , 0xad , 0xae , 0xaf ,
169
217
},
218
+ []byte {
219
+ 0x8a , 0xda , 0xe0 , 0x9a , 0x2a , 0x30 , 0x70 , 0x59 ,
220
+ 0x47 , 0x8d , 0x30 , 0x9b , 0x26 , 0xc4 , 0x11 , 0x5a ,
221
+ 0x22 , 0x4c , 0xfa , 0xf6 ,
222
+ },
170
223
[]byte {
171
224
0xb0 , 0xb1 , 0xb2 , 0xb3 , 0xb4 , 0xb5 , 0xb6 , 0xb7 ,
172
225
0xb8 , 0xb9 , 0xba , 0xbb , 0xbc , 0xbd , 0xbe , 0xbf ,
@@ -201,6 +254,11 @@ var hkdfTests = []hkdfTest{
201
254
0x0b , 0x0b , 0x0b , 0x0b , 0x0b , 0x0b ,
202
255
},
203
256
[]byte {},
257
+ []byte {
258
+ 0xda , 0x8c , 0x8a , 0x73 , 0xc7 , 0xfa , 0x77 , 0x28 ,
259
+ 0x8e , 0xc6 , 0xf5 , 0xe7 , 0xc2 , 0x97 , 0x78 , 0x6a ,
260
+ 0xa0 , 0xd3 , 0x2d , 0x01 ,
261
+ },
204
262
[]byte {},
205
263
[]byte {
206
264
0x0a , 0xc1 , 0xaf , 0x70 , 0x02 , 0xb3 , 0xd7 , 0x61 ,
@@ -219,7 +277,12 @@ var hkdfTests = []hkdfTest{
219
277
0x0c , 0x0c , 0x0c , 0x0c , 0x0c , 0x0c ,
220
278
},
221
279
nil ,
222
- []byte {},
280
+ []byte {
281
+ 0x2a , 0xdc , 0xca , 0xda , 0x18 , 0x77 , 0x9e , 0x7c ,
282
+ 0x20 , 0x77 , 0xad , 0x2e , 0xb1 , 0x9d , 0x3f , 0x3e ,
283
+ 0x73 , 0x13 , 0x85 , 0xdd ,
284
+ },
285
+ nil ,
223
286
[]byte {
224
287
0x2c , 0x91 , 0x11 , 0x72 , 0x04 , 0xd7 , 0x45 , 0xf3 ,
225
288
0x50 , 0x0d , 0x63 , 0x6a , 0x62 , 0xf6 , 0x4f , 0x0a ,
@@ -233,6 +296,11 @@ var hkdfTests = []hkdfTest{
233
296
234
297
func TestHKDF (t * testing.T ) {
235
298
for i , tt := range hkdfTests {
299
+ prk := Extract (tt .hash , tt .master , tt .salt )
300
+ if ! bytes .Equal (prk , tt .prk ) {
301
+ t .Errorf ("test %d: incorrect PRK: have %v, need %v." , i , prk , tt .prk )
302
+ }
303
+
236
304
hkdf := New (tt .hash , tt .master , tt .salt , tt .info )
237
305
out := make ([]byte , len (tt .out ))
238
306
@@ -244,6 +312,17 @@ func TestHKDF(t *testing.T) {
244
312
if ! bytes .Equal (out , tt .out ) {
245
313
t .Errorf ("test %d: incorrect output: have %v, need %v." , i , out , tt .out )
246
314
}
315
+
316
+ hkdf = Expand (tt .hash , prk , tt .info )
317
+
318
+ n , err = io .ReadFull (hkdf , out )
319
+ if n != len (tt .out ) || err != nil {
320
+ t .Errorf ("test %d: not enough output bytes from Expand: %d." , i , n )
321
+ }
322
+
323
+ if ! bytes .Equal (out , tt .out ) {
324
+ t .Errorf ("test %d: incorrect output from Expand: have %v, need %v." , i , out , tt .out )
325
+ }
247
326
}
248
327
}
249
328
0 commit comments