1 /*
2 * This file and its contents are supplied under the terms of the
3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 * You may only use this file in accordance with the terms of version
5 * 1.0 of the CDDL.
6 *
7 * A full copy of the text of the CDDL should have accompanied this
8 * source. A copy of the CDDL is also available via the Internet at
9 * http://www.illumos.org/license/CDDL.
10 */
11
12 /*
13 * Copyright (c) 2017 Joyent, Inc.
14 */
15
16 #include "ikev2_enum.h"
17 #include "ikev2.h"
18
19 #define STR(x) case x: return (#x)
20
21 /*
22 * NOTE: We intentionally use switch statements instead of arrays for
23 * mapping enumerated constants to strings. Doing so will allow the
24 * compiler to flag missing conversions for any entries that get added
25 * to enumerated types as long as no default clause is used in the switch.
26 */
27
28 const char *
29 ikev2_exch_str(ikev2_exch_t id)
30 {
31 switch (id) {
32 case IKEV2_EXCH_IKE_SA_INIT:
33 return ("SA_INIT");
34 case IKEV2_EXCH_IKE_AUTH:
35 return ("AUTH");
36 case IKEV2_EXCH_CREATE_CHILD_SA:
37 return ("CREATE_CHILD_SA");
38 case IKEV2_EXCH_INFORMATIONAL:
39 return ("INFORMATIONAL");
40 case IKEV2_EXCH_IKE_SESSION_RESUME:
41 return ("SESSION_RESUME");
42 }
43 return ("UNKNOWN");
44 }
45
46 const char *
47 ikev2_pay_str(ikev2_pay_type_t id)
48 {
49 switch (id) {
50 STR(IKEV2_PAYLOAD_NONE);
51 STR(IKEV2_PAYLOAD_SA);
52 STR(IKEV2_PAYLOAD_KE);
53 STR(IKEV2_PAYLOAD_IDi);
54 STR(IKEV2_PAYLOAD_IDr);
55 STR(IKEV2_PAYLOAD_CERT);
56 STR(IKEV2_PAYLOAD_CERTREQ);
57 STR(IKEV2_PAYLOAD_AUTH);
58 STR(IKEV2_PAYLOAD_NONCE);
59 STR(IKEV2_PAYLOAD_NOTIFY);
60 STR(IKEV2_PAYLOAD_DELETE);
61 STR(IKEV2_PAYLOAD_VENDOR);
62 STR(IKEV2_PAYLOAD_TSi);
63 STR(IKEV2_PAYLOAD_TSr);
64 STR(IKEV2_PAYLOAD_SK);
65 STR(IKEV2_PAYLOAD_CP);
66 STR(IKEV2_PAYLOAD_EAP);
67 STR(IKEV2_PAYLOAD_GSPM);
68 }
69 return ("UNKNOWN");
70 }
71
72 const char *
73 ikev2_pay_short_str(ikev2_pay_type_t id)
74 {
75 switch (id) {
76 case IKEV2_PAYLOAD_NONE:
77 return ("NONE");
78 case IKEV2_PAYLOAD_SA:
79 return ("SA");
80 case IKEV2_PAYLOAD_KE:
81 return ("KE");
82 case IKEV2_PAYLOAD_IDi:
83 return ("IDi");
84 case IKEV2_PAYLOAD_IDr:
85 return ("IDr");
86 case IKEV2_PAYLOAD_CERT:
87 return ("CERT");
88 case IKEV2_PAYLOAD_CERTREQ:
89 return ("CERTREQ");
90 case IKEV2_PAYLOAD_AUTH:
91 return ("AUTH");
92 case IKEV2_PAYLOAD_NONCE:
93 return ("No");
94 case IKEV2_PAYLOAD_NOTIFY:
95 return ("N");
96 case IKEV2_PAYLOAD_DELETE:
97 return ("D");
98 case IKEV2_PAYLOAD_VENDOR:
99 return ("V");
100 case IKEV2_PAYLOAD_TSi:
101 return ("TSi");
102 case IKEV2_PAYLOAD_TSr:
103 return ("TSr");
104 case IKEV2_PAYLOAD_SK:
105 return ("SK");
106 case IKEV2_PAYLOAD_CP:
107 return ("CP");
108 case IKEV2_PAYLOAD_EAP:
109 return ("EAP");
110 case IKEV2_PAYLOAD_GSPM:
111 return ("GSPM");
112 }
113 return ("UNKNOWN");
114 }
115 const char *
116 ikev2_spi_str(ikev2_spi_proto_t id)
117 {
118 switch (id) {
119 case IKEV2_PROTO_NONE:
120 return ("NONE");
121 case IKEV2_PROTO_IKE:
122 return ("IKE");
123 case IKEV2_PROTO_AH:
124 return ("AH");
125 case IKEV2_PROTO_ESP:
126 return ("ESP");
127 case IKEV2_PROTO_FC_ESP_HEADER:
128 return ("FC_ESP_HEADER");
129 case IKEV2_PROTO_FC_CT_AUTH:
130 return ("FC_CT_AUTH");
131 }
132 return ("UNKNOWN");
133 }
134
135 const char *
136 ikev2_xf_type_str(ikev2_xf_type_t id)
137 {
138 switch (id) {
139 case IKEV2_XF_ENCR:
140 return ("ENCR");
141 case IKEV2_XF_PRF:
142 return ("PRF");
143 case IKEV2_XF_AUTH:
144 return ("AUTH");
145 case IKEV2_XF_DH:
146 return ("DH");
147 case IKEV2_XF_ESN:
148 return ("ESN");
149 }
150 return ("UNKNOWN");
151 }
152
153 const char *
154 ikev2_xf_encr_str(ikev2_xf_encr_t id)
155 {
156 switch (id) {
157 STR(IKEV2_ENCR_NONE);
158 STR(IKEV2_ENCR_DES_IV64);
159 STR(IKEV2_ENCR_DES);
160 STR(IKEV2_ENCR_3DES);
161 STR(IKEV2_ENCR_RC5);
162 STR(IKEV2_ENCR_IDEA);
163 STR(IKEV2_ENCR_CAST);
164 STR(IKEV2_ENCR_BLOWFISH);
165 STR(IKEV2_ENCR_3IDEA);
166 STR(IKEV2_ENCR_DES_IV32);
167 STR(IKEV2_ENCR_RC4);
168 STR(IKEV2_ENCR_NULL);
169 STR(IKEV2_ENCR_AES_CBC);
170 STR(IKEV2_ENCR_AES_CTR);
171 STR(IKEV2_ENCR_AES_CCM_8);
172 STR(IKEV2_ENCR_AES_CCM_12);
173 STR(IKEV2_ENCR_AES_CCM_16);
174 STR(IKEV2_ENCR_AES_GCM_8);
175 STR(IKEV2_ENCR_AES_GCM_12);
176 STR(IKEV2_ENCR_AES_GCM_16);
177 STR(IKEV2_ENCR_NULL_AES_GMAC);
178 STR(IKEV2_ENCR_XTS_AES);
179 STR(IKEV2_ENCR_CAMELLIA_CBC);
180 STR(IKEV2_ENCR_CAMELLIA_CTR);
181 STR(IKEV2_ENCR_CAMELLIA_CCM_8);
182 STR(IKEV2_ENCR_CAMELLIA_CCM_12);
183 STR(IKEV2_ENCR_CAMELLIA_CCM_16);
184 }
185 return ("UNKNOWN");
186 }
187
188 const char *
189 ikev2_xf_auth_str(ikev2_xf_auth_t id)
190 {
191 switch (id) {
192 STR(IKEV2_XF_AUTH_NONE);
193 STR(IKEV2_XF_AUTH_HMAC_MD5_96);
194 STR(IKEV2_XF_AUTH_HMAC_SHA1_96);
195 STR(IKEV2_XF_AUTH_DES_MAC);
196 STR(IKEV2_XF_AUTH_KPDK_MD5);
197 STR(IKEV2_XF_AUTH_AES_XCBC_96);
198 STR(IKEV2_XF_AUTH_HMAC_MD5_128);
199 STR(IKEV2_XF_AUTH_HMAC_SHA1_160);
200 STR(IKEV2_XF_AUTH_AES_CMAC_96);
201 STR(IKEV2_XF_AUTH_AES_128_GMAC);
202 STR(IKEV2_XF_AUTH_AES_192_GMAC);
203 STR(IKEV2_XF_AUTH_AES_256_GMAC);
204 STR(IKEV2_XF_AUTH_HMAC_SHA2_256_128);
205 STR(IKEV2_XF_AUTH_HMAC_SHA2_384_192);
206 STR(IKEV2_XF_AUTH_HMAC_SHA2_512_256);
207 }
208 return ("UNKNOWN");
209 }
210
211 const char *
212 ikev2_auth_type_str(ikev2_auth_type_t id)
213 {
214 switch (id) {
215 STR(IKEV2_AUTH_NONE);
216 STR(IKEV2_AUTH_RSA_SIG);
217 STR(IKEV2_AUTH_SHARED_KEY_MIC);
218 STR(IKEV2_AUTH_DSS_SIG);
219 STR(IKEV2_AUTH_ECDSA_256);
220 STR(IKEV2_AUTH_ECDSA_384);
221 STR(IKEV2_AUTH_ECDSA_512);
222 STR(IKEV2_AUTH_GSPM);
223 }
224 return ("UNKNOWN");
225 }
226
227 const char *
228 ikev2_dh_str(ikev2_dh_t id)
229 {
230 switch (id) {
231 STR(IKEV2_DH_NONE);
232 STR(IKEV2_DH_MODP_768);
233 STR(IKEV2_DH_MODP_1024);
234 STR(IKEV2_DH_EC2N_155);
235 STR(IKEV2_DH_EC2N_185);
236 STR(IKEV2_DH_MODP_1536);
237 STR(IKEV2_DH_MODP_2048);
238 STR(IKEV2_DH_MODP_3072);
239 STR(IKEV2_DH_MODP_4096);
240 STR(IKEV2_DH_MODP_6144);
241 STR(IKEV2_DH_MODP_8192);
242 STR(IKEV2_DH_ECP_256);
243 STR(IKEV2_DH_ECP_384);
244 STR(IKEV2_DH_ECP_521);
245 STR(IKEV2_DH_MODP_1024_160);
246 STR(IKEV2_DH_MODP_2048_224);
247 STR(IKEV2_DH_MODP_2048_256);
248 STR(IKEV2_DH_ECP_192);
249 STR(IKEV2_DH_ECP_224);
250 STR(IKEV2_DH_BRAINPOOL_P224R1);
251 STR(IKEV2_DH_BRAINPOOL_P256R1);
252 STR(IKEV2_DH_BRAINPOOL_P384R1);
253 STR(IKEV2_DH_BRAINPOOL_P512R1);
254 }
255 return ("UNKNOWN");
256 }
257
258 const char *
259 ikev2_notify_str(ikev2_notify_type_t id)
260 {
261 switch (id) {
262 case IKEV2_N_UNSUPPORTED_CRITICAL_PAYLOAD:
263 return ("UNSUPPORTED_CRITICAL_PAYLOAD");
264 case IKEV2_N_INVALID_IKE_SPI:
265 return ("INVALID_IKE_SPI");
266 case IKEV2_N_INVALID_MAJOR_VERSION:
267 return ("INVALID_MAJOR_VERSION");
268 case IKEV2_N_INVALID_SYNTAX:
269 return ("INVALID_SYNTAX");
270 case IKEV2_N_INVALID_MESSAGE_ID:
271 return ("INVALID_MESSAGE_ID");
272 case IKEV2_N_INVALID_SPI:
273 return ("INVALID_SPI");
274 case IKEV2_N_NO_PROPOSAL_CHOSEN:
275 return ("NO_PROPOSAL_CHOSEN");
276 case IKEV2_N_INVALID_KE_PAYLOAD:
277 return ("INVALID_KE_PAYLOAD");
278 case IKEV2_N_AUTHENTICATION_FAILED:
279 return ("AUTHENTICATION_FAILED");
280 case IKEV2_N_SINGLE_PAIR_REQUIRED:
281 return ("SINGLE_PAIR_REQUIRED");
282 case IKEV2_N_NO_ADDITIONAL_SAS:
283 return ("NO_ADDITIONAL_SAS");
284 case IKEV2_N_INTERNAL_ADDRESS_FAILURE:
285 return ("INTERNAL_ADDRESS_FAILURE");
286 case IKEV2_N_FAILED_CP_REQUIRED:
287 return ("FAILED_CP_REQUIRED");
288 case IKEV2_N_TS_UNACCEPTABLE:
289 return ("TS_UNACCEPTABLE");
290 case IKEV2_N_INVALID_SELECTORS:
291 return ("INVALID_SELECTORS");
292 case IKEV2_N_UNACCEPTABLE_ADDRESSES:
293 return ("UNACCEPTABLE_ADDRESSES");
294 case IKEV2_N_UNEXPECTED_NAT_DETECTED:
295 return ("UNEXPECTED_NAT_DETECTED");
296 case IKEV2_N_USE_ASSIGNED_HoA:
297 return ("USE_ASSIGNED_HoA");
298 case IKEV2_N_TEMPORARY_FAILURE:
299 return ("TEMPORARY_FAILURE");
300 case IKEV2_N_CHILD_SA_NOT_FOUND:
301 return ("CHILD_SA_NOT_FOUND");
302 case IKEV2_N_INITIAL_CONTACT:
303 return ("INITIAL_CONTACT");
304 case IKEV2_N_SET_WINDOW_SIZE:
305 return ("SET_WINDOW_SIZE");
306 case IKEV2_N_ADDITIONAL_TS_POSSIBLE:
307 return ("ADDITIONAL_TS_POSSIBLE");
308 case IKEV2_N_IPCOMP_SUPPORTED:
309 return ("IPCOMP_SUPPORTED");
310 case IKEV2_N_NAT_DETECTION_SOURCE_IP:
311 return ("NAT_DETECTION_SOURCE_IP");
312 case IKEV2_N_NAT_DETECTION_DESTINATION_IP:
313 return ("NAT_DETECTION_DESTINATION_IP");
314 case IKEV2_N_COOKIE:
315 return ("COOKIE");
316 case IKEV2_N_USE_TRANSPORT_MODE:
317 return ("USE_TRANSPORT_MODE");
318 case IKEV2_N_HTTP_CERT_LOOKUP_SUPPORTED:
319 return ("HTTP_CERT_LOOKUP_SUPPORTED");
320 case IKEV2_N_REKEY_SA:
321 return ("REKEY_SA");
322 case IKEV2_N_ESP_TFC_PADDING_NOT_SUPPORTED:
323 return ("ESP_TFC_PADDING_NOT_SUPPORTED");
324 case IKEV2_N_NON_FIRST_FRAGMENTS_ALSO:
325 return ("NON_FIRST_FRAGMENTS_ALSO");
326 case IKEV2_N_MOBIKE_SUPPORTED:
327 return ("MOBIKE_SUPPORTED");
328 case IKEV2_N_ADDITIONAL_IP4_ADDRESS:
329 return ("ADDITIONAL_IP4_ADDRESS");
330 case IKEV2_N_ADDITIONAL_IP6_ADDRESS:
331 return ("ADDITIONAL_IP6_ADDRESS");
332 case IKEV2_N_NO_ADDITIONAL_ADDRESSES:
333 return ("NO_ADDITIONAL_ADDRESSES");
334 case IKEV2_N_UPDATE_SA_ADDRESSES:
335 return ("UPDATE_SA_ADDRESSES");
336 case IKEV2_N_COOKIE2:
337 return ("COOKIE2");
338 case IKEV2_N_NO_NATS_ALLOWED:
339 return ("NO_NATS_ALLOWED");
340 case IKEV2_N_AUTH_LIFETIME:
341 return ("AUTH_LIFETIME");
342 case IKEV2_N_MULTIPLE_AUTH_SUPPORTED:
343 return ("MULTIPLE_AUTH_SUPPORTED");
344 case IKEV2_N_ANOTHER_AUTH_FOLLOWS:
345 return ("ANOTHER_AUTH_FOLLOWS");
346 case IKEV2_N_REDIRECT_SUPPORTED:
347 return ("REDIRECT_SUPPORTED");
348 case IKEV2_N_REDIRECT:
349 return ("REDIRECT");
350 case IKEV2_N_REDIRECTED_FROM:
351 return ("REDIRECTED_FROM");
352 case IKEV2_N_TICKET_LT_OPAQUE:
353 return ("TICKET_LT_OPAQUE");
354 case IKEV2_N_TICKET_REQUEST:
355 return ("TICKET_REQUEST");
356 case IKEV2_N_TICKET_ACK:
357 return ("TICKET_ACK");
358 case IKEV2_N_TICKET_NACK:
359 return ("TICKET_NACK");
360 case IKEV2_N_TICKET_OPAQUE:
361 return ("TICKET_OPAQUE");
362 case IKEV2_N_LINK_ID:
363 return ("LINK_ID");
364 case IKEV2_N_USE_WESP_MODE:
365 return ("USE_WESP_MODE");
366 case IKEV2_N_ROHC_SUPPORTED:
367 return ("ROHC_SUPPORTED");
368 case IKEV2_N_EAP_ONLY_AUTHENTICATION:
369 return ("EAP_ONLY_AUTHENTICATION");
370 case IKEV2_N_CHILDLESS_IKEV2_SUPPORTED:
371 return ("CHILDLESS_IKEV2_SUPPORTED");
372 case IKEV2_N_QUICK_CRASH_DETECTION:
373 return ("QUICK_CRASH_DETECTION");
374 case IKEV2_N_IKEV2_MESSAGE_ID_SYNC_SUPPORTED:
375 return ("IKEV2_MESSAGE_ID_SYNC_SUPPORTED");
376 case IKEV2_N_IPSEC_REPLAY_CTR_SYNC_SUPPORTED:
377 return ("IPSEC_REPLAY_CTR_SYNC_SUPPORTED");
378 case IKEV2_N_IKEV2_MESSAGE_ID_SYNC:
379 return ("IKEV2_MESSAGE_ID_SYNC");
380 case IKEV2_N_IPSEC_REPLAY_CTR_SYNC:
381 return ("IPSEC_REPLAY_CTR_SYNC");
382 case IKEV2_N_SECURE_PASSWORD_METHODS:
383 return ("SECURE_PASSWORD_METHODS");
384 case IKEV2_N_PSK_PERSIST:
385 return ("PSK_PERSIST");
386 case IKEV2_N_PSK_CONFIRM:
387 return ("PSK_CONFIRM");
388 case IKEV2_N_ERX_SUPPORTED:
389 return ("ERX_SUPPORTED");
390 case IKEV2_N_IFOM_CAPABILITY:
391 return ("IFOM_CAPABILITY");
392 }
393 return ("UNKNOWN");
394 }