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 }