cleaned up pluto's IKE alg descriptors
[strongswan.git] / src / pluto / alg / ike_alg_sha2.c
1 /* IKE SHA-2 hash algorithm description
2 * Copyright (C) JuanJo Ciarlante <jjo-ipsec@mendoza.gov.ar>
3 * Copyright (C) 2009 Andreas Steffen
4 *
5 * Hochschule fuer Technik Rapperswil
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
14 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15 * for more details.
16 */
17
18 #include <crypto/hashers/hasher.h>
19
20 #include "ike_alg.h"
21
22 /* SHA-256 hash test vectors
23 * from "The Secure Hash Algorithm Validation System (SHAVS)"
24 * July 22, 2004, Lawrence E. Bassham III, NIST
25 */
26
27 static const u_char sha256_short2_msg[] = {
28 0x19
29 };
30
31 static const u_char sha256_short2_msg_digest[] = {
32 0x68, 0xaa, 0x2e, 0x2e, 0xe5, 0xdf, 0xf9, 0x6e,
33 0x33, 0x55, 0xe6, 0xc7, 0xee, 0x37, 0x3e, 0x3d,
34 0x6a, 0x4e, 0x17, 0xf7, 0x5f, 0x95, 0x18, 0xd8,
35 0x43, 0x70, 0x9c, 0x0c, 0x9b, 0xc3, 0xe3, 0xd4
36 };
37
38 static const u_char sha256_short4_msg[] = {
39 0xe3, 0xd7, 0x25, 0x70, 0xdc, 0xdd, 0x78, 0x7c,
40 0xe3, 0x88, 0x7a, 0xb2, 0xcd, 0x68, 0x46, 0x52
41 };
42
43 static const u_char sha256_short4_msg_digest[] = {
44 0x17, 0x5e, 0xe6, 0x9b, 0x02, 0xba, 0x9b, 0x58,
45 0xe2, 0xb0, 0xa5, 0xfd, 0x13, 0x81, 0x9c, 0xea,
46 0x57, 0x3f, 0x39, 0x40, 0xa9, 0x4f, 0x82, 0x51,
47 0x28, 0xcf, 0x42, 0x09, 0xbe, 0xab, 0xb4, 0xe8
48 };
49
50 static const u_char sha256_long2_msg[] = {
51 0x83, 0x26, 0x75, 0x4e, 0x22, 0x77, 0x37, 0x2f,
52 0x4f, 0xc1, 0x2b, 0x20, 0x52, 0x7a, 0xfe, 0xf0,
53 0x4d, 0x8a, 0x05, 0x69, 0x71, 0xb1, 0x1a, 0xd5,
54 0x71, 0x23, 0xa7, 0xc1, 0x37, 0x76, 0x00, 0x00,
55 0xd7, 0xbe, 0xf6, 0xf3, 0xc1, 0xf7, 0xa9, 0x08,
56 0x3a, 0xa3, 0x9d, 0x81, 0x0d, 0xb3, 0x10, 0x77,
57 0x7d, 0xab, 0x8b, 0x1e, 0x7f, 0x02, 0xb8, 0x4a,
58 0x26, 0xc7, 0x73, 0x32, 0x5f, 0x8b, 0x23, 0x74,
59 0xde, 0x7a, 0x4b, 0x5a, 0x58, 0xcb, 0x5c, 0x5c,
60 0xf3, 0x5b, 0xce, 0xe6, 0xfb, 0x94, 0x6e, 0x5b,
61 0xd6, 0x94, 0xfa, 0x59, 0x3a, 0x8b, 0xeb, 0x3f,
62 0x9d, 0x65, 0x92, 0xec, 0xed, 0xaa, 0x66, 0xca,
63 0x82, 0xa2, 0x9d, 0x0c, 0x51, 0xbc, 0xf9, 0x33,
64 0x62, 0x30, 0xe5, 0xd7, 0x84, 0xe4, 0xc0, 0xa4,
65 0x3f, 0x8d, 0x79, 0xa3, 0x0a, 0x16, 0x5c, 0xba,
66 0xbe, 0x45, 0x2b, 0x77, 0x4b, 0x9c, 0x71, 0x09,
67 0xa9, 0x7d, 0x13, 0x8f, 0x12, 0x92, 0x28, 0x96,
68 0x6f, 0x6c, 0x0a, 0xdc, 0x10, 0x6a, 0xad, 0x5a,
69 0x9f, 0xdd, 0x30, 0x82, 0x57, 0x69, 0xb2, 0xc6,
70 0x71, 0xaf, 0x67, 0x59, 0xdf, 0x28, 0xeb, 0x39,
71 0x3d, 0x54, 0xd6
72 };
73
74 static const u_char sha256_long2_msg_digest[] = {
75 0x97, 0xdb, 0xca, 0x7d, 0xf4, 0x6d, 0x62, 0xc8,
76 0xa4, 0x22, 0xc9, 0x41, 0xdd, 0x7e, 0x83, 0x5b,
77 0x8a, 0xd3, 0x36, 0x17, 0x63, 0xf7, 0xe9, 0xb2,
78 0xd9, 0x5f, 0x4f, 0x0d, 0xa6, 0xe1, 0xcc, 0xbc
79 };
80
81 static const hash_testvector_t sha256_hash_testvectors[] = {
82 { sizeof(sha256_short2_msg), sha256_short2_msg, sha256_short2_msg_digest },
83 { sizeof(sha256_short4_msg), sha256_short4_msg, sha256_short4_msg_digest },
84 { sizeof(sha256_long2_msg), sha256_long2_msg, sha256_long2_msg_digest },
85 { 0, NULL, NULL }
86 };
87
88 /* SHA-384 hash test vectors
89 * from "The Secure Hash Algorithm Validation System (SHAVS)"
90 * July 22, 2004, Lawrence E. Bassham III, NIST
91 */
92
93 static const u_char sha384_short2_msg[] = {
94 0xb9
95 };
96
97 static const u_char sha384_short2_msg_digest[] = {
98 0xbc, 0x80, 0x89, 0xa1, 0x90, 0x07, 0xc0, 0xb1,
99 0x41, 0x95, 0xf4, 0xec, 0xc7, 0x40, 0x94, 0xfe,
100 0xc6, 0x4f, 0x01, 0xf9, 0x09, 0x29, 0x28, 0x2c,
101 0x2f, 0xb3, 0x92, 0x88, 0x15, 0x78, 0x20, 0x8a,
102 0xd4, 0x66, 0x82, 0x8b, 0x1c, 0x6c, 0x28, 0x3d,
103 0x27, 0x22, 0xcf, 0x0a, 0xd1, 0xab, 0x69, 0x38
104 };
105
106 static const u_char sha384_short4_msg[] = {
107 0xa4, 0x1c, 0x49, 0x77, 0x79, 0xc0, 0x37, 0x5f,
108 0xf1, 0x0a, 0x7f, 0x4e, 0x08, 0x59, 0x17, 0x39
109 };
110
111 static const u_char sha384_short4_msg_digest[] = {
112 0xc9, 0xa6, 0x84, 0x43, 0xa0, 0x05, 0x81, 0x22,
113 0x56, 0xb8, 0xec, 0x76, 0xb0, 0x05, 0x16, 0xf0,
114 0xdb, 0xb7, 0x4f, 0xab, 0x26, 0xd6, 0x65, 0x91,
115 0x3f, 0x19, 0x4b, 0x6f, 0xfb, 0x0e, 0x91, 0xea,
116 0x99, 0x67, 0x56, 0x6b, 0x58, 0x10, 0x9c, 0xbc,
117 0x67, 0x5c, 0xc2, 0x08, 0xe4, 0xc8, 0x23, 0xf7
118 };
119
120 static const u_char sha384_long2_msg[] = {
121 0x39, 0x96, 0x69, 0xe2, 0x8f, 0x6b, 0x9c, 0x6d,
122 0xbc, 0xbb, 0x69, 0x12, 0xec, 0x10, 0xff, 0xcf,
123 0x74, 0x79, 0x03, 0x49, 0xb7, 0xdc, 0x8f, 0xbe,
124 0x4a, 0x8e, 0x7b, 0x3b, 0x56, 0x21, 0xdb, 0x0f,
125 0x3e, 0x7d, 0xc8, 0x7f, 0x82, 0x32, 0x64, 0xbb,
126 0xe4, 0x0d, 0x18, 0x11, 0xc9, 0xea, 0x20, 0x61,
127 0xe1, 0xc8, 0x4a, 0xd1, 0x0a, 0x23, 0xfa, 0xc1,
128 0x72, 0x7e, 0x72, 0x02, 0xfc, 0x3f, 0x50, 0x42,
129 0xe6, 0xbf, 0x58, 0xcb, 0xa8, 0xa2, 0x74, 0x6e,
130 0x1f, 0x64, 0xf9, 0xb9, 0xea, 0x35, 0x2c, 0x71,
131 0x15, 0x07, 0x05, 0x3c, 0xf4, 0xe5, 0x33, 0x9d,
132 0x52, 0x86, 0x5f, 0x25, 0xcc, 0x22, 0xb5, 0xe8,
133 0x77, 0x84, 0xa1, 0x2f, 0xc9, 0x61, 0xd6, 0x6c,
134 0xb6, 0xe8, 0x95, 0x73, 0x19, 0x9a, 0x2c, 0xe6,
135 0x56, 0x5c, 0xbd, 0xf1, 0x3d, 0xca, 0x40, 0x38,
136 0x32, 0xcf, 0xcb, 0x0e, 0x8b, 0x72, 0x11, 0xe8,
137 0x3a, 0xf3, 0x2a, 0x11, 0xac, 0x17, 0x92, 0x9f,
138 0xf1, 0xc0, 0x73, 0xa5, 0x1c, 0xc0, 0x27, 0xaa,
139 0xed, 0xef, 0xf8, 0x5a, 0xad, 0x7c, 0x2b, 0x7c,
140 0x5a, 0x80, 0x3e, 0x24, 0x04, 0xd9, 0x6d, 0x2a,
141 0x77, 0x35, 0x7b, 0xda, 0x1a, 0x6d, 0xae, 0xed,
142 0x17, 0x15, 0x1c, 0xb9, 0xbc, 0x51, 0x25, 0xa4,
143 0x22, 0xe9, 0x41, 0xde, 0x0c, 0xa0, 0xfc, 0x50,
144 0x11, 0xc2, 0x3e, 0xcf, 0xfe, 0xfd, 0xd0, 0x96,
145 0x76, 0x71, 0x1c, 0xf3, 0xdb, 0x0a, 0x34, 0x40,
146 0x72, 0x0e ,0x16, 0x15, 0xc1, 0xf2, 0x2f, 0xbc,
147 0x3c, 0x72, 0x1d, 0xe5, 0x21, 0xe1, 0xb9, 0x9b,
148 0xa1, 0xbd, 0x55, 0x77, 0x40, 0x86, 0x42, 0x14,
149 0x7e, 0xd0, 0x96
150 };
151
152 static const u_char sha384_long2_msg_digest[] = {
153 0x4f, 0x44, 0x0d, 0xb1, 0xe6, 0xed, 0xd2, 0x89,
154 0x9f, 0xa3, 0x35, 0xf0, 0x95, 0x15, 0xaa, 0x02,
155 0x5e, 0xe1, 0x77, 0xa7, 0x9f, 0x4b, 0x4a, 0xaf,
156 0x38, 0xe4, 0x2b, 0x5c, 0x4d, 0xe6, 0x60, 0xf5,
157 0xde, 0x8f, 0xb2, 0xa5, 0xb2, 0xfb, 0xd2, 0xa3,
158 0xcb, 0xff, 0xd2, 0x0c, 0xff, 0x12, 0x88, 0xc0
159 };
160
161 static const hash_testvector_t sha384_hash_testvectors[] = {
162 { sizeof(sha384_short2_msg), sha384_short2_msg, sha384_short2_msg_digest },
163 { sizeof(sha384_short4_msg), sha384_short4_msg, sha384_short4_msg_digest },
164 { sizeof(sha384_long2_msg), sha384_long2_msg, sha384_long2_msg_digest },
165 { 0, NULL, NULL }
166 };
167
168 /* SHA-512 hash test vectors
169 * from "The Secure Hash Algorithm Validation System (SHAVS)"
170 * July 22, 2004, Lawrence E. Bassham III, NIST
171 */
172
173 static const u_char sha512_short2_msg[] = {
174 0xd0
175 };
176
177 static const u_char sha512_short2_msg_digest[] = {
178 0x99, 0x92, 0x20, 0x29, 0x38, 0xe8, 0x82, 0xe7,
179 0x3e, 0x20, 0xf6, 0xb6, 0x9e, 0x68, 0xa0, 0xa7,
180 0x14, 0x90, 0x90, 0x42, 0x3d, 0x93, 0xc8, 0x1b,
181 0xab, 0x3f, 0x21, 0x67, 0x8d, 0x4a, 0xce, 0xee,
182 0xe5, 0x0e, 0x4e, 0x8c, 0xaf, 0xad, 0xa4, 0xc8,
183 0x5a, 0x54, 0xea, 0x83, 0x06, 0x82, 0x6c, 0x4a,
184 0xd6, 0xe7, 0x4c, 0xec, 0xe9, 0x63, 0x1b, 0xfa,
185 0x8a, 0x54, 0x9b, 0x4a, 0xb3, 0xfb, 0xba, 0x15
186 };
187
188 static const u_char sha512_short4_msg[] = {
189 0x8d, 0x4e, 0x3c, 0x0e, 0x38, 0x89, 0x19, 0x14,
190 0x91, 0x81, 0x6e, 0x9d, 0x98, 0xbf, 0xf0, 0xa0
191 };
192
193 static const u_char sha512_short4_msg_digest[] = {
194 0xcb, 0x0b, 0x67, 0xa4, 0xb8, 0x71, 0x2c, 0xd7,
195 0x3c, 0x9a, 0xab, 0xc0, 0xb1, 0x99, 0xe9, 0x26,
196 0x9b, 0x20, 0x84, 0x4a, 0xfb, 0x75, 0xac, 0xbd,
197 0xd1, 0xc1, 0x53, 0xc9, 0x82, 0x89, 0x24, 0xc3,
198 0xdd, 0xed, 0xaa, 0xfe, 0x66, 0x9c, 0x5f, 0xdd,
199 0x0b, 0xc6, 0x6f, 0x63, 0x0f, 0x67, 0x73, 0x98,
200 0x82, 0x13, 0xeb, 0x1b, 0x16, 0xf5, 0x17, 0xad,
201 0x0d, 0xe4, 0xb2, 0xf0, 0xc9, 0x5c, 0x90, 0xf8
202 };
203
204 static const u_char sha512_long2_msg[] = {
205 0xa5, 0x5f, 0x20, 0xc4, 0x11, 0xaa, 0xd1, 0x32,
206 0x80, 0x7a, 0x50, 0x2d, 0x65, 0x82, 0x4e, 0x31,
207 0xa2, 0x30, 0x54, 0x32, 0xaa, 0x3d, 0x06, 0xd3,
208 0xe2, 0x82, 0xa8, 0xd8, 0x4e, 0x0d, 0xe1, 0xde,
209 0x69, 0x74, 0xbf, 0x49, 0x54, 0x69, 0xfc, 0x7f,
210 0x33, 0x8f, 0x80, 0x54, 0xd5, 0x8c, 0x26, 0xc4,
211 0x93, 0x60, 0xc3, 0xe8, 0x7a, 0xf5, 0x65, 0x23,
212 0xac, 0xf6, 0xd8, 0x9d, 0x03, 0xe5, 0x6f, 0xf2,
213 0xf8, 0x68, 0x00, 0x2b, 0xc3, 0xe4, 0x31, 0xed,
214 0xc4, 0x4d, 0xf2, 0xf0, 0x22, 0x3d, 0x4b, 0xb3,
215 0xb2, 0x43, 0x58, 0x6e, 0x1a, 0x7d, 0x92, 0x49,
216 0x36, 0x69, 0x4f, 0xcb, 0xba, 0xf8, 0x8d, 0x95,
217 0x19, 0xe4, 0xeb, 0x50, 0xa6, 0x44, 0xf8, 0xe4,
218 0xf9, 0x5e, 0xb0, 0xea, 0x95, 0xbc, 0x44, 0x65,
219 0xc8, 0x82, 0x1a, 0xac, 0xd2, 0xfe, 0x15, 0xab,
220 0x49, 0x81, 0x16, 0x4b, 0xbb, 0x6d, 0xc3, 0x2f,
221 0x96, 0x90, 0x87, 0xa1, 0x45, 0xb0, 0xd9, 0xcc,
222 0x9c, 0x67, 0xc2, 0x2b, 0x76, 0x32, 0x99, 0x41,
223 0x9c, 0xc4, 0x12, 0x8b, 0xe9, 0xa0, 0x77, 0xb3,
224 0xac, 0xe6, 0x34, 0x06, 0x4e, 0x6d, 0x99, 0x28,
225 0x35, 0x13, 0xdc, 0x06, 0xe7, 0x51, 0x5d, 0x0d,
226 0x73, 0x13, 0x2e, 0x9a, 0x0d, 0xc6, 0xd3, 0xb1,
227 0xf8, 0xb2, 0x46, 0xf1, 0xa9, 0x8a, 0x3f, 0xc7,
228 0x29, 0x41, 0xb1, 0xe3, 0xbb, 0x20, 0x98, 0xe8,
229 0xbf, 0x16, 0xf2, 0x68, 0xd6, 0x4f, 0x0b, 0x0f,
230 0x47, 0x07, 0xfe, 0x1e, 0xa1, 0xa1, 0x79, 0x1b,
231 0xa2, 0xf3, 0xc0, 0xc7, 0x58, 0xe5, 0xf5, 0x51,
232 0x86, 0x3a, 0x96, 0xc9, 0x49, 0xad, 0x47, 0xd7,
233 0xfb, 0x40, 0xd2
234 };
235
236 static const u_char sha512_long2_msg_digest[] = {
237 0xc6, 0x65, 0xbe, 0xfb, 0x36, 0xda, 0x18, 0x9d,
238 0x78, 0x82, 0x2d, 0x10, 0x52, 0x8c, 0xbf, 0x3b,
239 0x12, 0xb3, 0xee, 0xf7, 0x26, 0x03, 0x99, 0x09,
240 0xc1, 0xa1, 0x6a, 0x27, 0x0d, 0x48, 0x71, 0x93,
241 0x77, 0x96, 0x6b, 0x95, 0x7a, 0x87, 0x8e, 0x72,
242 0x05, 0x84, 0x77, 0x9a, 0x62, 0x82, 0x5c, 0x18,
243 0xda, 0x26, 0x41, 0x5e, 0x49, 0xa7, 0x17, 0x6a,
244 0x89, 0x4e, 0x75, 0x10, 0xfd, 0x14, 0x51, 0xf5
245 };
246
247 static const hash_testvector_t sha512_hash_testvectors[] = {
248 { sizeof(sha512_short2_msg), sha512_short2_msg, sha512_short2_msg_digest },
249 { sizeof(sha512_short4_msg), sha512_short4_msg, sha512_short4_msg_digest },
250 { sizeof(sha512_long2_msg), sha512_long2_msg, sha512_long2_msg_digest },
251 { 0, NULL, NULL }
252 };
253
254 /* SHA-256, SHA-384, and SHA-512 hmac test vectors
255 * from RFC 4231 "Identifiers and Test Vectors for HMAC-SHA-224,
256 * HMAC-SHA-256, HMAC-SHA-384, and HMAC-SHA-512"
257 * December 2005, M. Nystrom, RSA Security
258 */
259
260 static const u_char sha2_hmac1_key[] = {
261 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
262 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b, 0x0b,
263 0x0b, 0x0b, 0x0b, 0x0b
264 };
265
266 static const u_char sha2_hmac1_msg[] = {
267 0x48, 0x69, 0x20, 0x54, 0x68, 0x65, 0x72, 0x65
268 };
269
270 static const u_char sha2_hmac1_256[] = {
271 0xb0, 0x34, 0x4c, 0x61, 0xd8, 0xdb, 0x38, 0x53,
272 0x5c, 0xa8, 0xaf, 0xce, 0xaf, 0x0b, 0xf1, 0x2b,
273 0x88, 0x1d, 0xc2, 0x00, 0xc9, 0x83, 0x3d, 0xa7,
274 0x26, 0xe9, 0x37, 0x6c, 0x2e, 0x32, 0xcf, 0xf7
275 };
276
277 static const u_char sha2_hmac1_384[] = {
278 0xaf, 0xd0, 0x39, 0x44, 0xd8, 0x48, 0x95, 0x62,
279 0x6b, 0x08, 0x25, 0xf4, 0xab ,0x46, 0x90, 0x7f,
280 0x15, 0xf9, 0xda, 0xdb, 0xe4, 0x10, 0x1e, 0xc6,
281 0x82, 0xaa, 0x03, 0x4c, 0x7c, 0xeb, 0xc5, 0x9c,
282 0xfa, 0xea, 0x9e, 0xa9, 0x07, 0x6e, 0xde, 0x7f,
283 0x4a, 0xf1, 0x52, 0xe8, 0xb2, 0xfa, 0x9c, 0xb6
284 };
285
286 static const u_char sha2_hmac1_512[] = {
287 0x87, 0xaa, 0x7c, 0xde, 0xa5, 0xef, 0x61, 0x9d,
288 0x4f, 0xf0, 0xb4, 0x24, 0x1a, 0x1d, 0x6c, 0xb0,
289 0x23, 0x79, 0xf4, 0xe2, 0xce, 0x4e, 0xc2, 0x78,
290 0x7a, 0xd0, 0xb3, 0x05, 0x45, 0xe1, 0x7c, 0xde,
291 0xda, 0xa8, 0x33, 0xb7, 0xd6, 0xb8, 0xa7, 0x02,
292 0x03, 0x8b, 0x27, 0x4e, 0xae, 0xa3, 0xf4, 0xe4,
293 0xbe, 0x9d, 0x91, 0x4e, 0xeb, 0x61, 0xf1, 0x70,
294 0x2e, 0x69, 0x6c, 0x20, 0x3a, 0x12, 0x68, 0x54
295 };
296
297 static const u_char sha2_hmac2_key[] = {
298 0x4a, 0x65, 0x66, 0x65
299 };
300
301 static const u_char sha2_hmac2_msg[] = {
302 0x77, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x20,
303 0x79, 0x61, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20,
304 0x66, 0x6f, 0x72, 0x20, 0x6e, 0x6f, 0x74, 0x68,
305 0x69, 0x6e, 0x67, 0x3f
306 };
307
308 static const u_char sha2_hmac2_256[] = {
309 0x5b, 0xdc, 0xc1, 0x46, 0xbf, 0x60, 0x75, 0x4e,
310 0x6a, 0x04, 0x24, 0x26, 0x08, 0x95, 0x75, 0xc7,
311 0x5a, 0x00, 0x3f, 0x08, 0x9d, 0x27, 0x39, 0x83,
312 0x9d, 0xec, 0x58, 0xb9, 0x64, 0xec, 0x38, 0x43
313 };
314
315 static const u_char sha2_hmac2_384[] = {
316 0xaf, 0x45, 0xd2, 0xe3, 0x76, 0x48, 0x40, 0x31,
317 0x61, 0x7f, 0x78, 0xd2, 0xb5, 0x8a, 0x6b, 0x1b,
318 0x9c, 0x7e, 0xf4, 0x64, 0xf5, 0xa0, 0x1b, 0x47,
319 0xe4, 0x2e, 0xc3, 0x73, 0x63, 0x22, 0x44, 0x5e,
320 0x8e, 0x22, 0x40, 0xca, 0x5e, 0x69, 0xe2, 0xc7,
321 0x8b, 0x32, 0x39, 0xec, 0xfa, 0xb2, 0x16, 0x49
322 };
323
324 static const u_char sha2_hmac2_512[] = {
325 0x16, 0x4b, 0x7a, 0x7b, 0xfc, 0xf8, 0x19, 0xe2,
326 0xe3, 0x95, 0xfb, 0xe7, 0x3b, 0x56, 0xe0, 0xa3,
327 0x87, 0xbd, 0x64, 0x22, 0x2e, 0x83, 0x1f, 0xd6,
328 0x10, 0x27, 0x0c, 0xd7, 0xea, 0x25, 0x05, 0x54,
329 0x97, 0x58, 0xbf, 0x75, 0xc0, 0x5a, 0x99, 0x4a,
330 0x6d, 0x03, 0x4f, 0x65, 0xf8, 0xf0, 0xe6, 0xfd,
331 0xca, 0xea, 0xb1, 0xa3, 0x4d, 0x4a, 0x6b, 0x4b,
332 0x63, 0x6e, 0x07, 0x0a, 0x38, 0xbc, 0xe7, 0x37
333 };
334
335 static const u_char sha2_hmac3_key[] = {
336 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
337 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
338 0xaa, 0xaa, 0xaa, 0xaa
339 };
340
341 static const u_char sha2_hmac3_msg[] = {
342 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
343 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
344 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
345 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
346 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
347 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd, 0xdd,
348 0xdd, 0xdd
349 };
350
351 static const u_char sha2_hmac3_256[] = {
352 0x77, 0x3e, 0xa9, 0x1e, 0x36, 0x80, 0x0e, 0x46,
353 0x85, 0x4d, 0xb8, 0xeb, 0xd0, 0x91, 0x81, 0xa7,
354 0x29, 0x59, 0x09, 0x8b, 0x3e, 0xf8, 0xc1, 0x22,
355 0xd9, 0x63, 0x55, 0x14, 0xce, 0xd5, 0x65, 0xfe
356 };
357
358 static const u_char sha2_hmac3_384[] = {
359 0x88, 0x06, 0x26, 0x08, 0xd3, 0xe6, 0xad, 0x8a,
360 0x0a, 0xa2, 0xac, 0xe0, 0x14, 0xc8, 0xa8, 0x6f,
361 0x0a, 0xa6, 0x35, 0xd9, 0x47, 0xac, 0x9f, 0xeb,
362 0xe8, 0x3e, 0xf4, 0xe5, 0x59, 0x66, 0x14, 0x4b,
363 0x2a, 0x5a, 0xb3, 0x9d, 0xc1, 0x38, 0x14, 0xb9,
364 0x4e, 0x3a, 0xb6, 0xe1, 0x01, 0xa3, 0x4f, 0x27
365 };
366
367 static const u_char sha2_hmac3_512[] = {
368 0xfa, 0x73, 0xb0, 0x08, 0x9d, 0x56, 0xa2, 0x84,
369 0xef, 0xb0, 0xf0, 0x75, 0x6c, 0x89, 0x0b, 0xe9,
370 0xb1, 0xb5, 0xdb, 0xdd, 0x8e, 0xe8, 0x1a, 0x36,
371 0x55, 0xf8, 0x3e, 0x33, 0xb2, 0x27, 0x9d, 0x39,
372 0xbf, 0x3e, 0x84, 0x82, 0x79, 0xa7, 0x22, 0xc8,
373 0x06, 0xb4, 0x85, 0xa4, 0x7e, 0x67, 0xc8, 0x07,
374 0xb9, 0x46, 0xa3, 0x37, 0xbe, 0xe8, 0x94, 0x26,
375 0x74, 0x27, 0x88, 0x59, 0xe1, 0x32, 0x92, 0xfb
376 };
377
378 static const u_char sha2_hmac4_key[] = {
379 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
380 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
381 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
382 0x19
383 };
384
385 static const u_char sha2_hmac4_msg[] = {
386 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
387 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
388 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
389 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
390 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
391 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd,
392 0xcd, 0xcd
393 };
394
395 static const u_char sha2_hmac4_256[] = {
396 0x82, 0x55, 0x8a, 0x38, 0x9a, 0x44, 0x3c, 0x0e,
397 0xa4, 0xcc, 0x81, 0x98, 0x99, 0xf2, 0x08, 0x3a,
398 0x85, 0xf0, 0xfa, 0xa3, 0xe5, 0x78, 0xf8, 0x07,
399 0x7a, 0x2e, 0x3f, 0xf4, 0x67, 0x29, 0x66, 0x5b
400 };
401
402 static const u_char sha2_hmac4_384[] = {
403 0x3e, 0x8a, 0x69, 0xb7, 0x78, 0x3c, 0x25, 0x85,
404 0x19, 0x33, 0xab, 0x62, 0x90, 0xaf, 0x6c, 0xa7,
405 0x7a, 0x99, 0x81, 0x48, 0x08, 0x50, 0x00, 0x9c,
406 0xc5, 0x57, 0x7c, 0x6e, 0x1f, 0x57, 0x3b, 0x4e,
407 0x68, 0x01, 0xdd, 0x23, 0xc4, 0xa7, 0xd6, 0x79,
408 0xcc, 0xf8, 0xa3, 0x86, 0xc6, 0x74, 0xcf, 0xfb
409 };
410
411 static const u_char sha2_hmac4_512[] = {
412 0xb0, 0xba, 0x46, 0x56, 0x37, 0x45, 0x8c, 0x69,
413 0x90, 0xe5, 0xa8, 0xc5, 0xf6, 0x1d, 0x4a, 0xf7,
414 0xe5, 0x76, 0xd9, 0x7f, 0xf9, 0x4b, 0x87, 0x2d,
415 0xe7, 0x6f, 0x80, 0x50, 0x36, 0x1e, 0xe3, 0xdb,
416 0xa9, 0x1c, 0xa5, 0xc1, 0x1a, 0xa2, 0x5e, 0xb4,
417 0xd6, 0x79, 0x27, 0x5c, 0xc5, 0x78, 0x80, 0x63,
418 0xa5, 0xf1, 0x97, 0x41, 0x12, 0x0c, 0x4f, 0x2d,
419 0xe2, 0xad, 0xeb, 0xeb, 0x10, 0xa2, 0x98, 0xdd
420 };
421
422 static const u_char sha2_hmac6_key[] = {
423 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
424 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
425 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
426 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
427 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
428 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
429 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
430 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
431 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
432 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
433 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
434 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
435 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
436 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
437 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
438 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,
439 0xaa, 0xaa, 0xaa
440 };
441
442 static const u_char sha2_hmac6_msg[] = {
443 0x54, 0x65, 0x73, 0x74, 0x20, 0x55, 0x73, 0x69,
444 0x6e, 0x67, 0x20, 0x4c, 0x61, 0x72, 0x67, 0x65,
445 0x72, 0x20, 0x54, 0x68, 0x61, 0x6e, 0x20, 0x42,
446 0x6c, 0x6f, 0x63, 0x6b, 0x2d, 0x53, 0x69, 0x7a,
447 0x65, 0x20, 0x4b, 0x65, 0x79, 0x20, 0x2d, 0x20,
448 0x48, 0x61, 0x73, 0x68, 0x20, 0x4b, 0x65, 0x79,
449 0x20, 0x46, 0x69, 0x72, 0x73, 0x74
450 };
451
452 static const u_char sha2_hmac6_256[] = {
453 0x60, 0xe4, 0x31, 0x59, 0x1e, 0xe0, 0xb6, 0x7f,
454 0x0d, 0x8a, 0x26, 0xaa, 0xcb, 0xf5, 0xb7, 0x7f,
455 0x8e, 0x0b, 0xc6, 0x21, 0x37, 0x28, 0xc5, 0x14,
456 0x05, 0x46, 0x04, 0x0f, 0x0e, 0xe3, 0x7f, 0x54
457 };
458
459 static const u_char sha2_hmac6_384[] = {
460 0x4e, 0xce, 0x08, 0x44, 0x85, 0x81, 0x3e, 0x90,
461 0x88, 0xd2, 0xc6, 0x3a, 0x04, 0x1b, 0xc5, 0xb4,
462 0x4f, 0x9e, 0xf1, 0x01, 0x2a, 0x2b, 0x58, 0x8f,
463 0x3c, 0xd1, 0x1f, 0x05, 0x03, 0x3a, 0xc4, 0xc6,
464 0x0c, 0x2e, 0xf6, 0xab, 0x40, 0x30, 0xfe, 0x82,
465 0x96, 0x24, 0x8d, 0xf1, 0x63, 0xf4, 0x49, 0x52
466 };
467
468 static const u_char sha2_hmac6_512[] = {
469 0x80, 0xb2, 0x42, 0x63, 0xc7, 0xc1, 0xa3, 0xeb,
470 0xb7, 0x14, 0x93, 0xc1, 0xdd, 0x7b, 0xe8, 0xb4,
471 0x9b, 0x46, 0xd1, 0xf4, 0x1b, 0x4a, 0xee, 0xc1,
472 0x12, 0x1b, 0x01, 0x37, 0x83, 0xf8, 0xf3, 0x52,
473 0x6b, 0x56, 0xd0, 0x37, 0xe0, 0x5f, 0x25, 0x98,
474 0xbd, 0x0f, 0xd2, 0x21, 0x5d, 0x6a, 0x1e, 0x52,
475 0x95, 0xe6, 0x4f, 0x73, 0xf6, 0x3f, 0x0a, 0xec,
476 0x8b, 0x91, 0x5a, 0x98, 0x5d, 0x78, 0x65, 0x98
477 };
478
479 static const u_char sha2_hmac7_msg[] = {
480 0x54, 0x68, 0x69, 0x73, 0x20, 0x69, 0x73, 0x20,
481 0x61, 0x20, 0x74, 0x65, 0x73, 0x74, 0x20, 0x75,
482 0x73, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x20, 0x6c,
483 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74, 0x68,
484 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63, 0x6b,
485 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x6b, 0x65,
486 0x79, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x61, 0x20,
487 0x6c, 0x61, 0x72, 0x67, 0x65, 0x72, 0x20, 0x74,
488 0x68, 0x61, 0x6e, 0x20, 0x62, 0x6c, 0x6f, 0x63,
489 0x6b, 0x2d, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x64,
490 0x61, 0x74, 0x61, 0x2e, 0x20, 0x54, 0x68, 0x65,
491 0x20, 0x6b, 0x65, 0x79, 0x20, 0x6e, 0x65, 0x65,
492 0x64, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65,
493 0x20, 0x68, 0x61, 0x73, 0x68, 0x65, 0x64, 0x20,
494 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x62,
495 0x65, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x73, 0x65,
496 0x64, 0x20, 0x62, 0x79, 0x20, 0x74, 0x68, 0x65,
497 0x20, 0x48, 0x4d, 0x41, 0x43, 0x20, 0x61, 0x6c,
498 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x2e
499 };
500
501 static const u_char sha2_hmac7_256[] = {
502 0x9b, 0x09, 0xff, 0xa7, 0x1b, 0x94, 0x2f, 0xcb,
503 0x27, 0x63, 0x5f, 0xbc, 0xd5, 0xb0, 0xe9, 0x44,
504 0xbf, 0xdc, 0x63, 0x64, 0x4f, 0x07, 0x13, 0x93,
505 0x8a, 0x7f, 0x51, 0x53, 0x5c, 0x3a, 0x35, 0xe2
506 };
507
508 static const u_char sha2_hmac7_384[] = {
509 0x66, 0x17, 0x17, 0x8e, 0x94, 0x1f, 0x02, 0x0d,
510 0x35, 0x1e, 0x2f, 0x25, 0x4e, 0x8f, 0xd3, 0x2c,
511 0x60, 0x24, 0x20, 0xfe, 0xb0, 0xb8, 0xfb, 0x9a,
512 0xdc, 0xce, 0xbb, 0x82, 0x46, 0x1e, 0x99, 0xc5,
513 0xa6, 0x78, 0xcc, 0x31, 0xe7, 0x99, 0x17, 0x6d,
514 0x38, 0x60, 0xe6, 0x11, 0x0c, 0x46, 0x52, 0x3e
515 };
516
517 static const u_char sha2_hmac7_512[] = {
518 0xe3, 0x7b, 0x6a, 0x77, 0x5d, 0xc8, 0x7d, 0xba,
519 0xa4, 0xdf, 0xa9, 0xf9, 0x6e, 0x5e, 0x3f, 0xfd,
520 0xde, 0xbd, 0x71, 0xf8, 0x86, 0x72, 0x89, 0x86,
521 0x5d, 0xf5, 0xa3, 0x2d, 0x20, 0xcd, 0xc9, 0x44,
522 0xb6, 0x02, 0x2c, 0xac, 0x3c, 0x49, 0x82, 0xb1,
523 0x0d, 0x5e, 0xeb, 0x55, 0xc3, 0xe4, 0xde, 0x15,
524 0x13, 0x46, 0x76, 0xfb, 0x6d, 0xe0, 0x44, 0x60,
525 0x65, 0xc9, 0x74, 0x40, 0xfa, 0x8c, 0x6a, 0x58
526 };
527
528 static const hmac_testvector_t sha256_hmac_testvectors[] = {
529 { sizeof(sha2_hmac1_key), sha2_hmac1_key, sizeof(sha2_hmac1_msg), sha2_hmac1_msg, sha2_hmac1_256 },
530 { sizeof(sha2_hmac2_key), sha2_hmac2_key, sizeof(sha2_hmac2_msg), sha2_hmac2_msg, sha2_hmac2_256 },
531 { sizeof(sha2_hmac3_key), sha2_hmac3_key, sizeof(sha2_hmac3_msg), sha2_hmac3_msg, sha2_hmac3_256 },
532 { sizeof(sha2_hmac4_key), sha2_hmac4_key, sizeof(sha2_hmac4_msg), sha2_hmac4_msg, sha2_hmac4_256 },
533 { sizeof(sha2_hmac6_key), sha2_hmac6_key, sizeof(sha2_hmac6_msg), sha2_hmac6_msg, sha2_hmac6_256 },
534 { sizeof(sha2_hmac6_key), sha2_hmac6_key, sizeof(sha2_hmac7_msg), sha2_hmac7_msg, sha2_hmac7_256 },
535 { 0, NULL, 0, NULL, NULL }
536 };
537
538 static const hmac_testvector_t sha384_hmac_testvectors[] = {
539 { sizeof(sha2_hmac1_key), sha2_hmac1_key, sizeof(sha2_hmac1_msg), sha2_hmac1_msg, sha2_hmac1_384 },
540 { sizeof(sha2_hmac2_key), sha2_hmac2_key, sizeof(sha2_hmac2_msg), sha2_hmac2_msg, sha2_hmac2_384 },
541 { sizeof(sha2_hmac3_key), sha2_hmac3_key, sizeof(sha2_hmac3_msg), sha2_hmac3_msg, sha2_hmac3_384 },
542 { sizeof(sha2_hmac4_key), sha2_hmac4_key, sizeof(sha2_hmac4_msg), sha2_hmac4_msg, sha2_hmac4_384 },
543 { sizeof(sha2_hmac6_key), sha2_hmac6_key, sizeof(sha2_hmac6_msg), sha2_hmac6_msg, sha2_hmac6_384 },
544 { sizeof(sha2_hmac6_key), sha2_hmac6_key, sizeof(sha2_hmac7_msg), sha2_hmac7_msg, sha2_hmac7_384 },
545 { 0, NULL, 0, NULL, NULL }
546 };
547
548 static const hmac_testvector_t sha512_hmac_testvectors[] = {
549 { sizeof(sha2_hmac1_key), sha2_hmac1_key, sizeof(sha2_hmac1_msg), sha2_hmac1_msg, sha2_hmac1_512 },
550 { sizeof(sha2_hmac2_key), sha2_hmac2_key, sizeof(sha2_hmac2_msg), sha2_hmac2_msg, sha2_hmac2_512 },
551 { sizeof(sha2_hmac3_key), sha2_hmac3_key, sizeof(sha2_hmac3_msg), sha2_hmac3_msg, sha2_hmac3_512 },
552 { sizeof(sha2_hmac4_key), sha2_hmac4_key, sizeof(sha2_hmac4_msg), sha2_hmac4_msg, sha2_hmac4_512 },
553 { sizeof(sha2_hmac6_key), sha2_hmac6_key, sizeof(sha2_hmac6_msg), sha2_hmac6_msg, sha2_hmac6_512 },
554 { sizeof(sha2_hmac6_key), sha2_hmac6_key, sizeof(sha2_hmac7_msg), sha2_hmac7_msg, sha2_hmac7_512 },
555 { 0, NULL, 0, NULL, NULL }
556 };
557
558 struct hash_desc hash_desc_sha2_256 = {
559 algo_type: IKE_ALG_HASH,
560 algo_id: OAKLEY_SHA2_256,
561 algo_next: NULL,
562 hash_digest_size: HASH_SIZE_SHA256,
563 hash_testvectors: sha256_hash_testvectors,
564 hmac_testvectors: sha256_hmac_testvectors
565 };
566
567 struct hash_desc hash_desc_sha2_384 = {
568 algo_type: IKE_ALG_HASH,
569 algo_id: OAKLEY_SHA2_384,
570 algo_next: NULL,
571 hash_digest_size: HASH_SIZE_SHA384,
572 hash_testvectors: sha384_hash_testvectors,
573 hmac_testvectors: sha384_hmac_testvectors
574 };
575
576 struct hash_desc hash_desc_sha2_512 = {
577 algo_type: IKE_ALG_HASH,
578 algo_id: OAKLEY_SHA2_512,
579 algo_next: NULL,
580 hash_digest_size: HASH_SIZE_SHA512,
581 hash_testvectors: sha512_hash_testvectors,
582 hmac_testvectors: sha512_hmac_testvectors
583 };
584