* gcc.dg/guality/guality.exp: Skip on AIX.
[official-gcc.git] / libgo / go / crypto / hmac / hmac_test.go
blobd4860424eb1df2583b0db00c15dfc971f337ef64
1 // Copyright 2009 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package hmac
7 import (
8 "crypto/md5"
9 "crypto/sha1"
10 "crypto/sha256"
11 "crypto/sha512"
12 "fmt"
13 "hash"
14 "testing"
17 type hmacTest struct {
18 hash func() hash.Hash
19 key []byte
20 in []byte
21 out string
24 var hmacTests = []hmacTest{
25 // Tests from US FIPS 198
26 // http://csrc.nist.gov/publications/fips/fips198/fips-198a.pdf
28 sha1.New,
29 []byte{
30 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
31 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
32 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
33 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
34 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
35 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
36 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
37 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
39 []byte("Sample #1"),
40 "4f4ca3d5d68ba7cc0a1208c9c61e9c5da0403c0a",
43 sha1.New,
44 []byte{
45 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
46 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
47 0x40, 0x41, 0x42, 0x43,
49 []byte("Sample #2"),
50 "0922d3405faa3d194f82a45830737d5cc6c75d24",
53 sha1.New,
54 []byte{
55 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
56 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
57 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
58 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
59 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
60 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
61 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
62 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
63 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
64 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
65 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
66 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
67 0xb0, 0xb1, 0xb2, 0xb3,
69 []byte("Sample #3"),
70 "bcf41eab8bb2d802f3d05caf7cb092ecf8d1a3aa",
73 // Test from Plan 9.
75 md5.New,
76 []byte("Jefe"),
77 []byte("what do ya want for nothing?"),
78 "750c783e6ab0b503eaa86e310a5db738",
81 // Tests from RFC 4231
83 sha256.New,
84 []byte{
85 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
86 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
87 0x0b, 0x0b, 0x0b, 0x0b,
89 []byte("Hi There"),
90 "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7",
93 sha256.New,
94 []byte("Jefe"),
95 []byte("what do ya want for nothing?"),
96 "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843",
99 sha256.New,
100 []byte{
101 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
102 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
103 0xaa, 0xaa, 0xaa, 0xaa,
105 []byte{
106 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
107 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
108 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
109 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
110 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
111 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
112 0xdd, 0xdd,
114 "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe",
117 sha256.New,
118 []byte{
119 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
120 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
121 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
122 0x19,
124 []byte{
125 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
126 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
127 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
128 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
129 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
130 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
131 0xcd, 0xcd,
133 "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b",
136 sha256.New,
137 []byte{
138 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
139 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
140 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
141 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
142 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
143 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
144 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
145 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
146 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
147 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
148 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
149 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
150 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
151 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
152 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
153 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
154 0xaa, 0xaa, 0xaa,
156 []byte("Test Using Larger Than Block-Size Key - Hash Key First"),
157 "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54",
160 sha256.New,
161 []byte{
162 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
163 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
164 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
165 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
166 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
167 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
168 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
169 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
170 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
171 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
172 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
173 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
174 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
175 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
176 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
177 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
178 0xaa, 0xaa, 0xaa,
180 []byte("This is a test using a larger than block-size key " +
181 "and a larger than block-size data. The key needs to " +
182 "be hashed before being used by the HMAC algorithm."),
183 "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2",
186 // Tests from http://csrc.nist.gov/groups/ST/toolkit/examples.html
187 // (truncated tag tests are left out)
189 sha1.New,
190 []byte{
191 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
192 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
193 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
194 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
195 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
196 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
197 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
198 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
200 []byte("Sample message for keylen=blocklen"),
201 "5fd596ee78d5553c8ff4e72d266dfd192366da29",
204 sha1.New,
205 []byte{
206 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
207 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
208 0x10, 0x11, 0x12, 0x13,
210 []byte("Sample message for keylen<blocklen"),
211 "4c99ff0cb1b31bd33f8431dbaf4d17fcd356a807",
214 sha1.New,
215 []byte{
216 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
217 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
218 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
219 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
220 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
221 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
222 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
223 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
224 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
225 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
226 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
227 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
228 0x60, 0x61, 0x62, 0x63,
230 []byte("Sample message for keylen=blocklen"),
231 "2d51b2f7750e410584662e38f133435f4c4fd42a",
234 sha256.New224,
235 []byte{
236 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
237 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
238 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
239 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
240 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
241 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
242 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
243 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
245 []byte("Sample message for keylen=blocklen"),
246 "c7405e3ae058e8cd30b08b4140248581ed174cb34e1224bcc1efc81b",
249 sha256.New224,
250 []byte{
251 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
252 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
253 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
254 0x18, 0x19, 0x1a, 0x1b,
256 []byte("Sample message for keylen<blocklen"),
257 "e3d249a8cfb67ef8b7a169e9a0a599714a2cecba65999a51beb8fbbe",
260 sha256.New224,
261 []byte{
262 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
263 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
264 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
265 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
266 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
267 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
268 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
269 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
270 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
271 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
272 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
273 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
274 0x60, 0x61, 0x62, 0x63,
276 []byte("Sample message for keylen=blocklen"),
277 "91c52509e5af8531601ae6230099d90bef88aaefb961f4080abc014d",
280 sha256.New,
281 []byte{
282 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
283 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
284 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
285 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
286 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
287 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
288 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
289 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
291 []byte("Sample message for keylen=blocklen"),
292 "8bb9a1db9806f20df7f77b82138c7914d174d59e13dc4d0169c9057b133e1d62",
295 sha256.New,
296 []byte{
297 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
298 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
299 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
300 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
302 []byte("Sample message for keylen<blocklen"),
303 "a28cf43130ee696a98f14a37678b56bcfcbdd9e5cf69717fecf5480f0ebdf790",
306 sha256.New,
307 []byte{
308 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
309 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
310 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
311 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
312 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
313 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
314 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
315 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
316 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
317 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
318 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
319 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
320 0x60, 0x61, 0x62, 0x63,
322 []byte("Sample message for keylen=blocklen"),
323 "bdccb6c72ddeadb500ae768386cb38cc41c63dbb0878ddb9c7a38a431b78378d",
326 sha512.New384,
327 []byte{
328 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
329 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
330 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
331 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
332 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
333 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
334 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
335 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
336 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
337 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
338 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
339 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
340 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
341 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
342 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
343 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
345 []byte("Sample message for keylen=blocklen"),
346 "63c5daa5e651847ca897c95814ab830bededc7d25e83eef9195cd45857a37f448947858f5af50cc2b1b730ddf29671a9",
349 sha512.New384,
350 []byte{
351 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
352 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
353 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
354 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
355 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
356 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
358 []byte("Sample message for keylen<blocklen"),
359 "6eb242bdbb582ca17bebfa481b1e23211464d2b7f8c20b9ff2201637b93646af5ae9ac316e98db45d9cae773675eeed0",
362 sha512.New384,
363 []byte{
364 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
365 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
366 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
367 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
368 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
369 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
370 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
371 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
372 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
373 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
374 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
375 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
376 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
377 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
378 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
379 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
380 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
381 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
382 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
383 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
384 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
385 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
386 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
387 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
388 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
390 []byte("Sample message for keylen=blocklen"),
391 "5b664436df69b0ca22551231a3f0a3d5b4f97991713cfa84bff4d0792eff96c27dccbbb6f79b65d548b40e8564cef594",
394 sha512.New,
395 []byte{
396 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
397 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
398 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
399 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
400 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
401 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
402 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
403 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
404 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
405 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
406 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
407 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
408 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
409 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
410 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
411 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
413 []byte("Sample message for keylen=blocklen"),
414 "fc25e240658ca785b7a811a8d3f7b4ca" +
415 "48cfa26a8a366bf2cd1f836b05fcb024bd36853081811d6c" +
416 "ea4216ebad79da1cfcb95ea4586b8a0ce356596a55fb1347",
419 sha512.New,
420 []byte{
421 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
422 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
423 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
424 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
425 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
426 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
427 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
428 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
430 []byte("Sample message for keylen<blocklen"),
431 "fd44c18bda0bb0a6ce0e82b031bf2818" +
432 "f6539bd56ec00bdc10a8a2d730b3634de2545d639b0f2cf7" +
433 "10d0692c72a1896f1f211c2b922d1a96c392e07e7ea9fedc",
436 sha512.New,
437 []byte{
438 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
439 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
440 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
441 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
442 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
443 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
444 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
445 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
446 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
447 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
448 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
449 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
450 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
451 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
452 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
453 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
454 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
455 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
456 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
457 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
458 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
459 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
460 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
461 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
462 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
464 []byte("Sample message for keylen=blocklen"),
465 "d93ec8d2de1ad2a9957cb9b83f14e76a" +
466 "d6b5e0cce285079a127d3b14bccb7aa7286d4ac0d4ce6421" +
467 "5f2bc9e6870b33d97438be4aaa20cda5c5a912b48b8e27f3",
471 func TestHMAC(t *testing.T) {
472 for i, tt := range hmacTests {
473 h := New(tt.hash, tt.key)
474 for j := 0; j < 2; j++ {
475 n, err := h.Write(tt.in)
476 if n != len(tt.in) || err != nil {
477 t.Errorf("test %d.%d: Write(%d) = %d, %v", i, j, len(tt.in), n, err)
478 continue
481 // Repetitive Sum() calls should return the same value
482 for k := 0; k < 2; k++ {
483 sum := fmt.Sprintf("%x", h.Sum(nil))
484 if sum != tt.out {
485 t.Errorf("test %d.%d.%d: have %s want %s\n", i, j, k, sum, tt.out)
489 // Second iteration: make sure reset works.
490 h.Reset()
495 func TestEqual(t *testing.T) {
496 a := []byte("test")
497 b := []byte("test1")
498 c := []byte("test2")
500 if !Equal(b, b) {
501 t.Error("Equal failed with equal arguments")
503 if Equal(a, b) {
504 t.Error("Equal accepted a prefix of the second argument")
506 if Equal(b, a) {
507 t.Error("Equal accepted a prefix of the first argument")
509 if Equal(b, c) {
510 t.Error("Equal accepted unequal slices")