Annotation of embedaddon/strongswan/src/libstrongswan/tests/suites/test_proposal.c, revision 1.1.1.2
1.1 misho 1: /*
2: * Copyright (C) 2016-2018 Tobias Brunner
3: * HSR Hochschule fuer Technik Rapperswil
4: *
5: * This program is free software; you can redistribute it and/or modify it
6: * under the terms of the GNU General Public License as published by the
7: * Free Software Foundation; either version 2 of the License, or (at your
8: * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9: *
10: * This program is distributed in the hope that it will be useful, but
11: * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12: * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13: * for more details.
14: */
15:
16: #include "test_suite.h"
17:
18: #include <crypto/proposal/proposal.h>
19:
1.1.1.2 ! misho 20: START_TEST(test_dh_group_mapping)
! 21: {
! 22: enum_name_t *e = diffie_hellman_group_names_short;
! 23: diffie_hellman_group_t group;
! 24: const proposal_token_t *token;
! 25: char *name;
! 26:
! 27: do
! 28: {
! 29: for (group = e->first; group <= e->last; group++)
! 30: {
! 31: if (group == MODP_CUSTOM)
! 32: { /* can't be configured */
! 33: continue;
! 34: }
! 35: name = e->names[group - e->first];
! 36: token = lib->proposal->get_token(lib->proposal, name);
! 37: ck_assert_msg(token, "%s can't be mapped", name);
! 38: ck_assert_int_eq(token->type, DIFFIE_HELLMAN_GROUP);
! 39: ck_assert_int_eq(token->algorithm, group);
! 40: }
! 41: }
! 42: while ((e = e->next));
! 43: }
! 44: END_TEST
! 45:
1.1 misho 46: static struct {
47: protocol_id_t proto;
48: char *proposal;
49: char *expected;
50: } create_data[] = {
51: { PROTO_IKE, "", NULL },
52: { PROTO_IKE, "sha256", NULL },
53: { PROTO_IKE, "sha256-modp3072", NULL },
54: { PROTO_IKE, "null-sha256-modp3072", "IKE:NULL/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072" },
55: { PROTO_IKE, "aes128", NULL },
56: { PROTO_IKE, "aes128-sha256", NULL },
57: { PROTO_IKE, "aes128-sha256-modpnone", NULL },
58: { PROTO_IKE, "aes128-prfsha256", NULL },
59: { PROTO_IKE, "aes128-prfsha256-modp2048", NULL },
60: { PROTO_IKE, "aes128-sha256-modp3072", "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072" },
61: { PROTO_IKE, "aes128-sha256-prfsha384-modp3072", "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_384/MODP_3072" },
62: { PROTO_IKE, "aes128gcm16-modp3072", NULL },
63: { PROTO_IKE, "aes128gcm16-prfsha256-modp3072", "IKE:AES_GCM_16_128/PRF_HMAC_SHA2_256/MODP_3072" },
64: { PROTO_IKE, "aes128gcm16-sha256-modp3072", "IKE:AES_GCM_16_128/PRF_HMAC_SHA2_256/MODP_3072" },
65: { PROTO_IKE, "aes128gcm16-aes128-modp3072", NULL },
66: { PROTO_IKE, "aes128gcm16-aes128-sha256-modp3072", NULL },
67: { PROTO_ESP, "", NULL },
68: { PROTO_ESP, "sha256", NULL },
69: { PROTO_ESP, "aes128-sha256", "ESP:AES_CBC_128/HMAC_SHA2_256_128/NO_EXT_SEQ" },
70: { PROTO_ESP, "aes128-sha256-esn", "ESP:AES_CBC_128/HMAC_SHA2_256_128/EXT_SEQ" },
71: { PROTO_ESP, "aes128-sha256-noesn", "ESP:AES_CBC_128/HMAC_SHA2_256_128/NO_EXT_SEQ" },
72: { PROTO_ESP, "aes128-sha256-esn-noesn", "ESP:AES_CBC_128/HMAC_SHA2_256_128/EXT_SEQ/NO_EXT_SEQ" },
73: { PROTO_ESP, "aes128-sha256-prfsha256-modp3072", "ESP:AES_CBC_128/HMAC_SHA2_256_128/MODP_3072/NO_EXT_SEQ" },
74: { PROTO_ESP, "aes128gcm16-aes128-sha256-modp3072", NULL },
75: { PROTO_ESP, "aes128gmac", "ESP:NULL_AES_GMAC_128/NO_EXT_SEQ" },
76: { PROTO_AH, "", NULL },
77: { PROTO_AH, "aes128", NULL },
78: { PROTO_AH, "aes128-sha256", "AH:HMAC_SHA2_256_128/NO_EXT_SEQ" },
79: { PROTO_AH, "sha256-sha1", "AH:HMAC_SHA2_256_128/HMAC_SHA1_96/NO_EXT_SEQ" },
80: { PROTO_AH, "aes128gmac-sha256", "AH:AES_128_GMAC/HMAC_SHA2_256_128/NO_EXT_SEQ" },
81: { PROTO_AH, "aes128gmac-sha256-prfsha256", "AH:AES_128_GMAC/HMAC_SHA2_256_128/NO_EXT_SEQ" },
82: { PROTO_AH, "aes128gmac-aes256gmac-aes128-sha256", "AH:AES_128_GMAC/AES_256_GMAC/HMAC_SHA2_256_128/NO_EXT_SEQ" },
83: { PROTO_AH, "sha256-esn", "AH:HMAC_SHA2_256_128/EXT_SEQ" },
84: { PROTO_AH, "sha256-noesn", "AH:HMAC_SHA2_256_128/NO_EXT_SEQ" },
85: { PROTO_AH, "sha256-esn-noesn", "AH:HMAC_SHA2_256_128/EXT_SEQ/NO_EXT_SEQ" },
86: };
87:
88: static void assert_proposal_eq(proposal_t *proposal, char *expected)
89: {
90: char str[BUF_LEN];
91:
92: if (!expected)
93: {
94: ck_assert(!proposal);
95: return;
96: }
97: snprintf(str, sizeof(str), "%P", proposal);
98: ck_assert_str_eq(expected, str);
99: }
100:
101: START_TEST(test_create_from_string)
102: {
103: proposal_t *proposal;
104:
105: proposal = proposal_create_from_string(create_data[_i].proto,
106: create_data[_i].proposal);
107: assert_proposal_eq(proposal, create_data[_i].expected);
108: DESTROY_IF(proposal);
109: }
110: END_TEST
111:
112: static struct {
113: protocol_id_t proto;
114: char *self;
115: char *other;
116: char *expected;
117: proposal_selection_flag_t flags;
118: } select_data[] = {
119: { PROTO_ESP, "aes128", "aes128", "aes128" },
120: { PROTO_ESP, "aes128", "aes256", NULL },
121: { PROTO_ESP, "aes128-aes256", "aes256-aes128", "aes128" },
122: { PROTO_ESP, "aes256-aes128", "aes128-aes256", "aes256" },
123: { PROTO_ESP, "aes128-aes256-sha1-sha256", "aes256-aes128-sha256-sha1", "aes128-sha1" },
124: { PROTO_ESP, "aes256-aes128-sha256-sha1", "aes128-aes256-sha1-sha256", "aes256-sha256" },
125: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256", NULL },
126: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256", "aes128-sha256", PROPOSAL_SKIP_DH },
127: { PROTO_ESP, "aes128-sha256", "aes128-sha256-modp3072", NULL },
128: { PROTO_ESP, "aes128-sha256", "aes128-sha256-modp3072", "aes128-sha256", PROPOSAL_SKIP_DH },
129: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256-modp3072", "aes128-sha256", PROPOSAL_SKIP_DH },
130: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256-ecp256", "aes128-sha256", PROPOSAL_SKIP_DH },
131: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256-modpnone", NULL },
132: { PROTO_ESP, "aes128-sha256-modpnone", "aes128-sha256-modp3072", NULL },
133: { PROTO_ESP, "aes128-sha256-modp3072-modpnone", "aes128-sha256", "aes128-sha256" },
134: { PROTO_ESP, "aes128-sha256", "aes128-sha256-modp3072-modpnone", "aes128-sha256" },
135: { PROTO_ESP, "aes128-sha256-modp3072-modpnone", "aes128-sha256-modpnone-modp3072", "aes128-sha256-modp3072" },
136: { PROTO_ESP, "aes128-sha256-modpnone-modp3072", "aes128-sha256-modp3072-modpnone", "aes128-sha256" },
137: { PROTO_ESP, "aes128-sha256-esn", "aes128-sha256-esn", "aes128-sha256-esn" },
138: { PROTO_ESP, "aes128-sha256-noesn", "aes128-sha256-esn", NULL },
139: { PROTO_ESP, "aes128-sha256-noesn-esn", "aes128-sha256-esn", "aes128-sha256-esn" },
140: { PROTO_ESP, "aes128-sha256-noesn-esn", "aes128-sha256", "aes128-sha256" },
141: { PROTO_ESP, "aes128-sha256-esn-noesn", "aes128-sha256-noesn-esn", "aes128-sha256-esn" },
142: { PROTO_IKE, "aes128-sha256-modp3072", "aes128-sha256-modp3072", "aes128-sha256-modp3072" },
143: { PROTO_IKE, "aes128-sha256-modp3072", "aes128-sha256-modp3072-modpnone", "aes128-sha256-modp3072" },
144: { PROTO_IKE, "aes128-sha256-modp3072-modpnone", "aes128-sha256-modp3072", "aes128-sha256-modp3072" },
145: };
146:
147: START_TEST(test_select)
148: {
149: proposal_t *self, *other, *selected, *expected;
150:
151: self = proposal_create_from_string(select_data[_i].proto,
152: select_data[_i].self);
153: other = proposal_create_from_string(select_data[_i].proto,
154: select_data[_i].other);
155: selected = self->select(self, other, select_data[_i].flags);
156: if (select_data[_i].expected)
157: {
158: expected = proposal_create_from_string(select_data[_i].proto,
159: select_data[_i].expected);
160: ck_assert(selected);
161: ck_assert_msg(expected->equals(expected, selected), "proposal %P does "
162: "not match expected %P", selected, expected);
163: expected->destroy(expected);
164: }
165: else
166: {
167: ck_assert(!selected);
168: }
169: DESTROY_IF(selected);
170: other->destroy(other);
171: self->destroy(self);
172: }
173: END_TEST
174:
175: START_TEST(test_select_spi)
176: {
177: proposal_t *self, *other, *selected;
178:
179: self = proposal_create_from_string(PROTO_ESP, "aes128-sha256-modp3072");
180: other = proposal_create_from_string(PROTO_ESP, "aes128-sha256-modp3072");
181: other->set_spi(other, 0x12345678);
182:
183: selected = self->select(self, other, 0);
184: ck_assert(selected);
185: ck_assert_int_eq(selected->get_spi(selected), other->get_spi(other));
186: selected->destroy(selected);
187:
188: selected = self->select(self, other, PROPOSAL_PREFER_SUPPLIED);
189: ck_assert(selected);
190: ck_assert_int_eq(selected->get_spi(selected), self->get_spi(self));
191: selected->destroy(selected);
192:
193: other->destroy(other);
194: self->destroy(self);
195: }
196: END_TEST
197:
198: START_TEST(test_matches)
199: {
200: proposal_t *self, *other;
201:
202: self = proposal_create_from_string(select_data[_i].proto,
203: select_data[_i].self);
204: other = proposal_create_from_string(select_data[_i].proto,
205: select_data[_i].other);
206: if (select_data[_i].expected)
207: {
208: ck_assert(self->matches(self, other, select_data[_i].flags));
209: ck_assert(other->matches(other, self, select_data[_i].flags));
210: ck_assert(self->matches(self, other,
211: select_data[_i].flags | PROPOSAL_PREFER_SUPPLIED));
212: ck_assert(other->matches(other, self,
213: select_data[_i].flags | PROPOSAL_PREFER_SUPPLIED));
214: }
215: else
216: {
217: ck_assert(!self->matches(self, other, select_data[_i].flags));
218: ck_assert(!other->matches(other, self, select_data[_i].flags));
219: ck_assert(!self->matches(self, other,
220: select_data[_i].flags | PROPOSAL_PREFER_SUPPLIED));
221: ck_assert(!other->matches(other, self,
222: select_data[_i].flags | PROPOSAL_PREFER_SUPPLIED));
223: }
224: other->destroy(other);
225: self->destroy(self);
226: }
227: END_TEST
228:
229: static struct {
230: protocol_id_t proto;
231: char *self[5];
232: char *other[5];
233: char *expected;
234: proposal_selection_flag_t flags;
235: } select_proposal_data[] = {
236: { PROTO_ESP, {}, {}, NULL },
237: { PROTO_ESP, { "aes128" }, {}, NULL },
238: { PROTO_ESP, {}, { "aes128" }, NULL },
239: { PROTO_ESP, { "aes128" }, { "aes256" }, NULL },
240: { PROTO_ESP, { "aes128" }, { "aes128" }, "aes128" },
241: { PROTO_ESP, { "aes128", "aes256" }, { "aes256", "aes128" }, "aes128" },
242: { PROTO_ESP, { "aes128", "aes256" }, { "aes256", "aes128" }, "aes256",
243: PROPOSAL_PREFER_SUPPLIED },
244: { PROTO_ESP, { "aes128-modp1024", "aes256-modp1024" },
245: { "aes256-modp2048", "aes128-modp2048" }, NULL },
246: { PROTO_ESP, { "aes128-modp1024", "aes256-modp1024" },
247: { "aes256-modp2048", "aes128-modp2048" }, "aes128",
248: PROPOSAL_SKIP_DH },
249: { PROTO_ESP, { "aes128-modp1024", "aes256-modp1024" },
250: { "aes256-modp2048", "aes128-modp2048" }, "aes256",
251: PROPOSAL_PREFER_SUPPLIED | PROPOSAL_SKIP_DH },
252: };
253:
254: START_TEST(test_select_proposal)
255: {
256: linked_list_t *self, *other;
257: proposal_t *proposal, *selected, *expected;
258: int i;
259:
260: self = linked_list_create();
261: other = linked_list_create();
262:
263: for (i = 0; i < countof(select_proposal_data[_i].self); i++)
264: {
265: if (!select_proposal_data[_i].self[i])
266: {
267: break;
268: }
269: proposal = proposal_create_from_string(select_proposal_data[_i].proto,
270: select_proposal_data[_i].self[i]);
271: self->insert_last(self, proposal);
272: }
273: for (i = 0; i < countof(select_proposal_data[_i].other); i++)
274: {
275: if (!select_proposal_data[_i].other[i])
276: {
277: break;
278: }
279: proposal = proposal_create_from_string(select_proposal_data[_i].proto,
280: select_proposal_data[_i].other[i]);
281: other->insert_last(other, proposal);
282: }
283: selected = proposal_select(self, other, select_proposal_data[_i].flags);
284: if (select_proposal_data[_i].expected)
285: {
286: expected = proposal_create_from_string(select_proposal_data[_i].proto,
287: select_proposal_data[_i].expected);
288: ck_assert(selected);
289: ck_assert_msg(expected->equals(expected, selected), "proposal %P does "
290: "not match expected %P", selected, expected);
291: expected->destroy(expected);
292: }
293: else
294: {
295: ck_assert(!selected);
296: }
297: DESTROY_IF(selected);
298: other->destroy_offset(other, offsetof(proposal_t, destroy));
299: self->destroy_offset(self, offsetof(proposal_t, destroy));
300: }
301: END_TEST
302:
303: START_TEST(test_promote_dh_group)
304: {
305: proposal_t *proposal;
306:
307: proposal = proposal_create_from_string(PROTO_IKE,
308: "aes128-sha256-modp3072-ecp256");
309: ck_assert(proposal->promote_dh_group(proposal, ECP_256_BIT));
310: assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256/MODP_3072");
311: proposal->destroy(proposal);
312: }
313: END_TEST
314:
315: START_TEST(test_promote_dh_group_already_front)
316: {
317: proposal_t *proposal;
318:
319: proposal = proposal_create_from_string(PROTO_IKE,
320: "aes128-sha256-modp3072-ecp256");
321: ck_assert(proposal->promote_dh_group(proposal, MODP_3072_BIT));
322: assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072/ECP_256");
323: proposal->destroy(proposal);
324: }
325: END_TEST
326:
327: START_TEST(test_promote_dh_group_not_contained)
328: {
329: proposal_t *proposal;
330:
331: proposal = proposal_create_from_string(PROTO_IKE,
332: "aes128-sha256-modp3072-ecp256");
333:
334: ck_assert(!proposal->promote_dh_group(proposal, MODP_2048_BIT));
335: assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/MODP_3072/ECP_256");
336: proposal->destroy(proposal);
337: }
338: END_TEST
339:
340: START_TEST(test_unknown_transform_types_print)
341: {
342: proposal_t *proposal;
343:
344: proposal = proposal_create(PROTO_IKE, 0);
345: proposal->add_algorithm(proposal, 242, 42, 128);
346: assert_proposal_eq(proposal, "IKE:UNKNOWN_242_42_128");
347: proposal->destroy(proposal);
348:
349: proposal = proposal_create_from_string(PROTO_IKE,
350: "aes128-sha256-ecp256");
351: proposal->add_algorithm(proposal, 242, 42, 128);
352: proposal->add_algorithm(proposal, 243, 1, 0);
353: assert_proposal_eq(proposal, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256/UNKNOWN_242_42_128/UNKNOWN_243_1");
354: proposal->destroy(proposal);
355: }
356: END_TEST
357:
358: START_TEST(test_unknown_transform_types_equals)
359: {
360: proposal_t *self, *other;
361:
362: self = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
363: other = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
364: other->add_algorithm(other, 242, 42, 0);
365: ck_assert(!self->equals(self, other));
366: ck_assert(!other->equals(other, self));
367: self->add_algorithm(self, 242, 42, 0);
368: ck_assert(self->equals(self, other));
369: ck_assert(other->equals(other, self));
370: other->destroy(other);
371: self->destroy(self);
372: }
373: END_TEST
374:
375: START_TEST(test_unknown_transform_types_select_fail)
376: {
377: proposal_t *self, *other, *selected;
378:
379: self = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
380: other = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
381: other->add_algorithm(other, 242, 42, 0);
382:
383: selected = self->select(self, other, 0);
384: ck_assert(!selected);
385: other->destroy(other);
386: self->destroy(self);
387: }
388: END_TEST
389:
390: START_TEST(test_unknown_transform_types_select_fail_subtype)
391: {
392: proposal_t *self, *other, *selected;
393:
394: self = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
395: self->add_algorithm(self, 242, 8, 0);
396: other = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
397: other->add_algorithm(other, 242, 42, 0);
398:
399: selected = self->select(self, other, 0);
400: ck_assert(!selected);
401: other->destroy(other);
402: self->destroy(self);
403: }
404: END_TEST
405:
406: START_TEST(test_unknown_transform_types_select_success)
407: {
408: proposal_t *self, *other, *selected;
409:
410: self = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
411: self->add_algorithm(self, 242, 42, 128);
412: other = proposal_create_from_string(PROTO_IKE, "aes128-sha256-ecp256");
413: other->add_algorithm(other, 242, 42, 128);
414: other->add_algorithm(other, 242, 1, 0);
415:
416: selected = self->select(self, other, 0);
417: ck_assert(selected);
418: assert_proposal_eq(selected, "IKE:AES_CBC_128/HMAC_SHA2_256_128/PRF_HMAC_SHA2_256/ECP_256/UNKNOWN_242_42_128");
419: selected->destroy(selected);
420: other->destroy(other);
421: self->destroy(self);
422: }
423: END_TEST
424:
425: START_TEST(test_chacha20_poly1305_key_length)
426: {
427: proposal_t *proposal;
428: uint16_t alg, ks;
429:
430: proposal = proposal_create_from_string(PROTO_IKE, "chacha20poly1305-prfsha256-ecp256");
431: proposal->get_algorithm(proposal, ENCRYPTION_ALGORITHM, &alg, &ks);
432: ck_assert_int_eq(alg, ENCR_CHACHA20_POLY1305);
433: ck_assert_int_eq(ks, 0);
434: assert_proposal_eq(proposal, "IKE:CHACHA20_POLY1305/PRF_HMAC_SHA2_256/ECP_256");
435: proposal->destroy(proposal);
436: }
437: END_TEST
438:
439: static struct {
440: protocol_id_t proto;
441: char *orig;
442: char *expected;
443: proposal_selection_flag_t flags;
444: } clone_data[] = {
445: { PROTO_ESP, "aes128", "aes128" },
446: { PROTO_ESP, "aes128-serpent", "aes128-serpent" },
447: { PROTO_ESP, "aes128-serpent", "aes128", PROPOSAL_SKIP_PRIVATE },
448: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256-modp3072" },
449: { PROTO_ESP, "aes128-sha256-modp3072", "aes128-sha256", PROPOSAL_SKIP_DH },
450: { PROTO_ESP, "aes128-serpent-modp3072", "aes128-serpent",
451: PROPOSAL_SKIP_DH },
452: { PROTO_ESP, "aes128-serpent-modp3072", "aes128",
453: PROPOSAL_SKIP_PRIVATE | PROPOSAL_SKIP_DH },
454: };
455:
456: START_TEST(test_clone)
457: {
458: proposal_t *orig, *result, *expected;
459:
460: orig = proposal_create_from_string(clone_data[_i].proto,
461: clone_data[_i].orig);
462: orig->set_spi(orig, 0x12345678);
463:
464: result = orig->clone(orig, clone_data[_i].flags);
465:
466: expected = proposal_create_from_string(clone_data[_i].proto,
467: clone_data[_i].expected);
468: ck_assert_msg(expected->equals(expected, result), "proposal %P does "
469: "not match expected %P", result, expected);
470: ck_assert_int_eq(orig->get_spi(orig), result->get_spi(result));
471:
472: expected->destroy(expected);
473: result->destroy(result);
474: orig->destroy(orig);
475: }
476: END_TEST
477:
478: Suite *proposal_suite_create()
479: {
480: Suite *s;
481: TCase *tc;
482:
483: s = suite_create("proposal");
484:
1.1.1.2 ! misho 485: tc = tcase_create("proposal keywords");
! 486: tcase_add_test(tc, test_dh_group_mapping);
! 487: suite_add_tcase(s, tc);
! 488:
1.1 misho 489: tc = tcase_create("create_from_string");
490: tcase_add_loop_test(tc, test_create_from_string, 0, countof(create_data));
491: suite_add_tcase(s, tc);
492:
493: tc = tcase_create("select");
494: tcase_add_loop_test(tc, test_select, 0, countof(select_data));
495: tcase_add_test(tc, test_select_spi);
496: suite_add_tcase(s, tc);
497:
498: tc = tcase_create("matches");
499: tcase_add_loop_test(tc, test_matches, 0, countof(select_data));
500: suite_add_tcase(s, tc);
501:
502: tc = tcase_create("select_proposal");
503: tcase_add_loop_test(tc, test_select_proposal, 0,
504: countof(select_proposal_data));
505: suite_add_tcase(s, tc);
506:
507: tc = tcase_create("promote_dh_group");
508: tcase_add_test(tc, test_promote_dh_group);
509: tcase_add_test(tc, test_promote_dh_group_already_front);
510: tcase_add_test(tc, test_promote_dh_group_not_contained);
511: suite_add_tcase(s, tc);
512:
513: tc = tcase_create("unknown transform types");
514: tcase_add_test(tc, test_unknown_transform_types_print);
515: tcase_add_test(tc, test_unknown_transform_types_equals);
516: tcase_add_test(tc, test_unknown_transform_types_select_fail);
517: tcase_add_test(tc, test_unknown_transform_types_select_fail_subtype);
518: tcase_add_test(tc, test_unknown_transform_types_select_success);
519: suite_add_tcase(s, tc);
520:
521: tc = tcase_create("chacha20/poly1305");
522: tcase_add_test(tc, test_chacha20_poly1305_key_length);
523: suite_add_tcase(s, tc);
524:
525: tc = tcase_create("clone");
526: tcase_add_loop_test(tc, test_clone, 0, countof(clone_data));
527: suite_add_tcase(s, tc);
528:
529: return s;
530: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>