Annotation of embedaddon/strongswan/src/libcharon/tests/suites/test_childless.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2019 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 <daemon.h>
19: #include <tests/utils/exchange_test_helper.h>
20: #include <tests/utils/exchange_test_asserts.h>
21: #include <tests/utils/sa_asserts.h>
22:
23: /**
24: * Childless initiation of the IKE_SA. The first CHILD_SA is automatically
25: * initiated in a separate CREATE_CHILD_SA exchange including DH.
26: */
27: START_TEST(test_regular)
28: {
29: exchange_test_sa_conf_t conf = {
30: .initiator = {
31: .childless = CHILDLESS_FORCE,
32: .esp = "aes128-sha256-modp3072",
33: },
34: .responder = {
35: .esp = "aes128-sha256-modp3072",
36: },
37: };
38: ike_sa_t *a, *b;
39: ike_sa_id_t *id_a, *id_b;
40: child_cfg_t *child_cfg;
41:
42: child_cfg = exchange_test_helper->create_sa(exchange_test_helper, &a, &b,
43: &conf);
44: id_a = a->get_id(a);
45: id_b = b->get_id(b);
46:
47: call_ikesa(a, initiate, child_cfg, 0, NULL, NULL);
48:
49: /* IKE_SA_INIT --> */
50: id_b->set_initiator_spi(id_b, id_a->get_initiator_spi(id_a));
51: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
52: /* <-- IKE_SA_INIT */
53: assert_notify(IN, CHILDLESS_IKEV2_SUPPORTED);
54: id_a->set_responder_spi(id_a, id_b->get_responder_spi(id_b));
55: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
56:
57: /* IKE_AUTH --> */
58: assert_hook_not_called(child_updown);
59: assert_no_payload(IN, PLV2_SECURITY_ASSOCIATION);
60: assert_no_payload(IN, PLV2_TS_INITIATOR);
61: assert_no_payload(IN, PLV2_TS_RESPONDER);
62: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
63:
64: /* <-- IKE_AUTH */
65: assert_no_payload(IN, PLV2_SECURITY_ASSOCIATION);
66: assert_no_payload(IN, PLV2_TS_INITIATOR);
67: assert_no_payload(IN, PLV2_TS_RESPONDER);
68: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
69: assert_child_sa_count(a, 0);
70: assert_child_sa_count(b, 0);
71: assert_hook();
72:
73: /* CREATE_CHILD_SA { SA, Ni, KEi, TSi, TSr } --> */
74: assert_hook_called(child_updown);
75: assert_payload(IN, PLV2_KEY_EXCHANGE);
76: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
77: assert_child_sa_count(b, 1);
78: assert_hook();
79:
80: /* <-- CREATE_CHILD_SA { SA, Ni, KEi } */
81: assert_hook_called(child_updown);
82: assert_payload(IN, PLV2_KEY_EXCHANGE);
83: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
84: assert_child_sa_count(a, 1);
85: assert_hook();
86:
87: assert_sa_idle(a);
88: assert_sa_idle(b);
89:
90: call_ikesa(a, destroy);
91: call_ikesa(b, destroy);
92: }
93: END_TEST
94:
95: /**
96: * Childless initiation of the IKE_SA, no CHILD_SA created automatically.
97: * It's created with a separate initiation and exchange afterwards.
98: */
99: START_TEST(test_regular_manual)
100: {
101: exchange_test_sa_conf_t conf = {
102: .initiator = {
103: .esp = "aes128-sha256-modp3072",
104: },
105: .responder = {
106: .esp = "aes128-sha256-modp3072",
107: },
108: };
109: ike_sa_t *a, *b;
110: ike_sa_id_t *id_a, *id_b;
111: child_cfg_t *child_cfg;
112:
113: child_cfg = exchange_test_helper->create_sa(exchange_test_helper, &a, &b,
114: &conf);
115: id_a = a->get_id(a);
116: id_b = b->get_id(b);
117:
118: call_ikesa(a, initiate, NULL, 0, NULL, NULL);
119:
120: /* IKE_SA_INIT --> */
121: id_b->set_initiator_spi(id_b, id_a->get_initiator_spi(id_a));
122: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
123: /* <-- IKE_SA_INIT */
124: assert_notify(IN, CHILDLESS_IKEV2_SUPPORTED);
125: id_a->set_responder_spi(id_a, id_b->get_responder_spi(id_b));
126: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
127:
128: /* IKE_AUTH --> */
129: assert_hook_not_called(child_updown);
130: assert_no_payload(IN, PLV2_SECURITY_ASSOCIATION);
131: assert_no_payload(IN, PLV2_TS_INITIATOR);
132: assert_no_payload(IN, PLV2_TS_RESPONDER);
133: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
134:
135: /* <-- IKE_AUTH */
136: assert_no_payload(IN, PLV2_SECURITY_ASSOCIATION);
137: assert_no_payload(IN, PLV2_TS_INITIATOR);
138: assert_no_payload(IN, PLV2_TS_RESPONDER);
139: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
140: assert_child_sa_count(a, 0);
141: assert_child_sa_count(b, 0);
142: assert_hook();
143:
144: assert_sa_idle(a);
145: assert_sa_idle(b);
146:
147: call_ikesa(a, initiate, child_cfg, 0, NULL, NULL);
148:
149: /* CREATE_CHILD_SA { SA, Ni, KEi, TSi, TSr } --> */
150: assert_hook_called(child_updown);
151: assert_payload(IN, PLV2_KEY_EXCHANGE);
152: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
153: assert_child_sa_count(b, 1);
154: assert_hook();
155:
156: /* <-- CREATE_CHILD_SA { SA, Ni, KEi } */
157: assert_hook_called(child_updown);
158: assert_payload(IN, PLV2_KEY_EXCHANGE);
159: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
160: assert_child_sa_count(a, 1);
161: assert_hook();
162:
163: assert_sa_idle(a);
164: assert_sa_idle(b);
165:
166: call_ikesa(a, destroy);
167: call_ikesa(b, destroy);
168: }
169: END_TEST
170:
171: /**
172: * The initiator aborts the initiation once it notices the responder does not
173: * support childless IKE_SAs.
174: */
175: START_TEST(test_failure_init)
176: {
177: exchange_test_sa_conf_t conf = {
178: .initiator = {
179: .childless = CHILDLESS_FORCE,
180: },
181: .responder = {
182: .childless = CHILDLESS_NEVER,
183: },
184: };
185: ike_sa_t *a, *b;
186: ike_sa_id_t *id_a, *id_b;
187: child_cfg_t *child_cfg;
188: status_t status;
189:
190: child_cfg = exchange_test_helper->create_sa(exchange_test_helper, &a, &b,
191: &conf);
192: id_a = a->get_id(a);
193: id_b = b->get_id(b);
194:
195: call_ikesa(a, initiate, child_cfg, 0, NULL, NULL);
196:
197: /* IKE_SA_INIT --> */
198: id_b->set_initiator_spi(id_b, id_a->get_initiator_spi(id_a));
199: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
200: /* <-- IKE_SA_INIT */
201: assert_no_notify(IN, CHILDLESS_IKEV2_SUPPORTED);
202: id_a->set_responder_spi(id_a, id_b->get_responder_spi(id_b));
203: status = exchange_test_helper->process_message(exchange_test_helper, a,
204: NULL);
205: ck_assert_int_eq(DESTROY_ME, status);
206:
207: call_ikesa(a, destroy);
208: call_ikesa(b, destroy);
209: }
210: END_TEST
211:
212: /**
213: * The responder aborts the initiation once it notices the initiator does not
214: * create a childless IKE_SA.
215: */
216: START_TEST(test_failure_resp)
217: {
218: exchange_test_sa_conf_t conf = {
219: .initiator = {
220: .childless = CHILDLESS_NEVER,
221: },
222: .responder = {
223: .childless = CHILDLESS_FORCE,
224: },
225: };
226: ike_sa_t *a, *b;
227: ike_sa_id_t *id_a, *id_b;
228: child_cfg_t *child_cfg;
229: status_t status;
230:
231: child_cfg = exchange_test_helper->create_sa(exchange_test_helper, &a, &b,
232: &conf);
233: id_a = a->get_id(a);
234: id_b = b->get_id(b);
235:
236: call_ikesa(a, initiate, child_cfg, 0, NULL, NULL);
237:
238: /* IKE_SA_INIT --> */
239: id_b->set_initiator_spi(id_b, id_a->get_initiator_spi(id_a));
240: exchange_test_helper->process_message(exchange_test_helper, b, NULL);
241: /* <-- IKE_SA_INIT */
242: assert_notify(IN, CHILDLESS_IKEV2_SUPPORTED);
243: id_a->set_responder_spi(id_a, id_b->get_responder_spi(id_b));
244: exchange_test_helper->process_message(exchange_test_helper, a, NULL);
245:
246: /* IKE_AUTH --> */
247: assert_hook_not_called(child_updown);
248: assert_payload(IN, PLV2_SECURITY_ASSOCIATION);
249: assert_payload(IN, PLV2_TS_INITIATOR);
250: assert_payload(IN, PLV2_TS_RESPONDER);
251: status = exchange_test_helper->process_message(exchange_test_helper, b,
252: NULL);
253: ck_assert_int_eq(DESTROY_ME, status);
254: assert_hook();
255:
256: /* <-- IKE_AUTH */
257: assert_hook_not_called(child_updown);
258: assert_no_payload(IN, PLV2_SECURITY_ASSOCIATION);
259: assert_no_payload(IN, PLV2_TS_INITIATOR);
260: assert_no_payload(IN, PLV2_TS_RESPONDER);
261: assert_notify(IN, INVALID_SYNTAX);
262: status = exchange_test_helper->process_message(exchange_test_helper, a,
263: NULL);
264: ck_assert_int_eq(DESTROY_ME, status);
265: assert_hook();
266:
267: assert_sa_idle(a);
268: assert_sa_idle(b);
269:
270: call_ikesa(a, destroy);
271: call_ikesa(b, destroy);
272: }
273: END_TEST
274:
275: Suite *childless_suite_create()
276: {
277: Suite *s;
278: TCase *tc;
279:
280: s = suite_create("childless");
281:
282: tc = tcase_create("initiation");
283: tcase_add_test(tc, test_regular);
284: tcase_add_test(tc, test_regular_manual);
285: suite_add_tcase(s, tc);
286:
287: tc = tcase_create("failure");
288: tcase_add_test(tc, test_failure_init);
289: tcase_add_test(tc, test_failure_resp);
290: suite_add_tcase(s, tc);
291:
292: return s;
293: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>