#ifndef IKED_IKEV2_H
#define IKED_IKEV2_H
#define IKEV2_VERSION 0x20
#define IKEV1_VERSION 0x10
#define IKEV2_KEYPAD "Key Pad for IKEv2"
#define IKEV2_STATE_INIT 0
#define IKEV2_STATE_COOKIE 1
#define IKEV2_STATE_SA_INIT 2
#define IKEV2_STATE_EAP 3
#define IKEV2_STATE_EAP_SUCCESS 4
#define IKEV2_STATE_AUTH_REQUEST 5
#define IKEV2_STATE_AUTH_SUCCESS 6
#define IKEV2_STATE_VALID 7
#define IKEV2_STATE_EAP_VALID 8
#define IKEV2_STATE_ESTABLISHED 9
#define IKEV2_STATE_CLOSING 10
#define IKEV2_STATE_CLOSED 11
extern struct iked_constmap ikev2_state_map[];
#define IKEV2_EXCHANGE_IKE_SA_INIT 34
#define IKEV2_EXCHANGE_IKE_AUTH 35
#define IKEV2_EXCHANGE_CREATE_CHILD_SA 36
#define IKEV2_EXCHANGE_INFORMATIONAL 37
#define IKEV2_EXCHANGE_IKE_SESSION_RESUME 38
extern struct iked_constmap ikev2_exchange_map[];
#define IKEV2_FLAG_INITIATOR 0x08
#define IKEV2_FLAG_OLDVERSION 0x10
#define IKEV2_FLAG_RESPONSE 0x20
extern struct iked_constmap ikev2_flag_map[];
struct ikev2_payload {
uint8_t pld_nextpayload;
uint8_t pld_reserved;
uint16_t pld_length;
} __packed;
struct ikev2_frag_payload {
uint16_t frag_num;
uint16_t frag_total;
} __packed;
#define IKEV2_CRITICAL_PAYLOAD 0x01
#define IKEV2_PAYLOAD_NONE 0
#define IKEV2_PAYLOAD_SA 33
#define IKEV2_PAYLOAD_KE 34
#define IKEV2_PAYLOAD_IDi 35
#define IKEV2_PAYLOAD_IDr 36
#define IKEV2_PAYLOAD_CERT 37
#define IKEV2_PAYLOAD_CERTREQ 38
#define IKEV2_PAYLOAD_AUTH 39
#define IKEV2_PAYLOAD_NONCE 40
#define IKEV2_PAYLOAD_NOTIFY 41
#define IKEV2_PAYLOAD_DELETE 42
#define IKEV2_PAYLOAD_VENDOR 43
#define IKEV2_PAYLOAD_TSi 44
#define IKEV2_PAYLOAD_TSr 45
#define IKEV2_PAYLOAD_SK 46
#define IKEV2_PAYLOAD_CP 47
#define IKEV2_PAYLOAD_EAP 48
#define IKEV2_PAYLOAD_GSPM 49
#define IKEV2_PAYLOAD_SKF 53
extern struct iked_constmap ikev2_payload_map[];
struct ikev2_sa_proposal {
uint8_t sap_more;
uint8_t sap_reserved;
uint16_t sap_length;
uint8_t sap_proposalnr;
uint8_t sap_protoid;
uint8_t sap_spisize;
uint8_t sap_transforms;
} __packed;
#define IKEV2_SAP_LAST 0
#define IKEV2_SAP_MORE 2
#define IKEV2_SAPROTO_NONE 0
#define IKEV2_SAPROTO_IKE 1
#define IKEV2_SAPROTO_AH 2
#define IKEV2_SAPROTO_ESP 3
#define IKEV2_SAPROTO_FC_ESP_HEADER 4
#define IKEV2_SAPROTO_FC_CT_AUTH 5
#define IKEV2_SAPROTO_IPCOMP 204
extern struct iked_constmap ikev2_saproto_map[];
struct ikev2_transform {
uint8_t xfrm_more;
uint8_t xfrm_reserved;
uint16_t xfrm_length;
uint8_t xfrm_type;
uint8_t xfrm_reserved1;
uint16_t xfrm_id;
} __packed;
#define IKEV2_XFORM_LAST 0
#define IKEV2_XFORM_MORE 3
#define IKEV2_XFORMTYPE_ENCR 1
#define IKEV2_XFORMTYPE_PRF 2
#define IKEV2_XFORMTYPE_INTEGR 3
#define IKEV2_XFORMTYPE_DH 4
#define IKEV2_XFORMTYPE_ESN 5
#define IKEV2_XFORMTYPE_MAX 6
extern struct iked_constmap ikev2_xformtype_map[];
#define IKEV2_XFORMENCR_NONE 0
#define IKEV2_XFORMENCR_DES_IV64 1
#define IKEV2_XFORMENCR_DES 2
#define IKEV2_XFORMENCR_3DES 3
#define IKEV2_XFORMENCR_RC5 4
#define IKEV2_XFORMENCR_IDEA 5
#define IKEV2_XFORMENCR_CAST 6
#define IKEV2_XFORMENCR_BLOWFISH 7
#define IKEV2_XFORMENCR_3IDEA 8
#define IKEV2_XFORMENCR_DES_IV32 9
#define IKEV2_XFORMENCR_RC4 10
#define IKEV2_XFORMENCR_NULL 11
#define IKEV2_XFORMENCR_AES_CBC 12
#define IKEV2_XFORMENCR_AES_CTR 13
#define IKEV2_XFORMENCR_AES_CCM_8 14
#define IKEV2_XFORMENCR_AES_CCM_12 15
#define IKEV2_XFORMENCR_AES_CCM_16 16
#define IKEV2_XFORMENCR_AES_GCM_8 18
#define IKEV2_XFORMENCR_AES_GCM_12 19
#define IKEV2_XFORMENCR_AES_GCM_16 20
#define IKEV2_XFORMENCR_NULL_AES_GMAC 21
#define IKEV2_XFORMENCR_XTS_AES 22
#define IKEV2_XFORMENCR_CAMELLIA_CBC 23
#define IKEV2_XFORMENCR_CAMELLIA_CTR 24
#define IKEV2_XFORMENCR_CAMELLIA_CCM_8 25
#define IKEV2_XFORMENCR_CAMELLIA_CCM_12 26
#define IKEV2_XFORMENCR_CAMELLIA_CCM_16 27
#define IKEV2_XFORMENCR_CHACHA20_POLY1305 28
extern struct iked_constmap ikev2_xformencr_map[];
#define IKEV2_IPCOMP_OUI 1
#define IKEV2_IPCOMP_DEFLATE 2
#define IKEV2_IPCOMP_LZS 3
#define IKEV2_IPCOMP_LZJH 4
extern struct iked_constmap ikev2_ipcomp_map[];
#define IKEV2_XFORMPRF_HMAC_MD5 1
#define IKEV2_XFORMPRF_HMAC_SHA1 2
#define IKEV2_XFORMPRF_HMAC_TIGER 3
#define IKEV2_XFORMPRF_AES128_XCBC 4
#define IKEV2_XFORMPRF_HMAC_SHA2_256 5
#define IKEV2_XFORMPRF_HMAC_SHA2_384 6
#define IKEV2_XFORMPRF_HMAC_SHA2_512 7
#define IKEV2_XFORMPRF_AES128_CMAC 8
extern struct iked_constmap ikev2_xformprf_map[];
#define IKEV2_XFORMAUTH_NONE 0
#define IKEV2_XFORMAUTH_HMAC_MD5_96 1
#define IKEV2_XFORMAUTH_HMAC_SHA1_96 2
#define IKEV2_XFORMAUTH_DES_MAC 3
#define IKEV2_XFORMAUTH_KPDK_MD5 4
#define IKEV2_XFORMAUTH_AES_XCBC_96 5
#define IKEV2_XFORMAUTH_HMAC_MD5_128 6
#define IKEV2_XFORMAUTH_HMAC_SHA1_160 7
#define IKEV2_XFORMAUTH_AES_CMAC_96 8
#define IKEV2_XFORMAUTH_AES_128_GMAC 9
#define IKEV2_XFORMAUTH_AES_192_GMAC 10
#define IKEV2_XFORMAUTH_AES_256_GMAC 11
#define IKEV2_XFORMAUTH_HMAC_SHA2_256_128 12
#define IKEV2_XFORMAUTH_HMAC_SHA2_384_192 13
#define IKEV2_XFORMAUTH_HMAC_SHA2_512_256 14
#define IKEV2_XFORMAUTH_AES_GCM_8 2018
#define IKEV2_XFORMAUTH_AES_GCM_12 2019
#define IKEV2_XFORMAUTH_AES_GCM_16 2020
extern struct iked_constmap ikev2_xformauth_map[];
#define IKEV2_XFORMDH_NONE 0
#define IKEV2_XFORMDH_MODP_768 1
#define IKEV2_XFORMDH_MODP_1024 2
#define IKEV2_XFORMDH_MODP_1536 5
#define IKEV2_XFORMDH_MODP_2048 14
#define IKEV2_XFORMDH_MODP_3072 15
#define IKEV2_XFORMDH_MODP_4096 16
#define IKEV2_XFORMDH_MODP_6144 17
#define IKEV2_XFORMDH_MODP_8192 18
#define IKEV2_XFORMDH_ECP_256 19
#define IKEV2_XFORMDH_ECP_384 20
#define IKEV2_XFORMDH_ECP_521 21
#define IKEV2_XFORMDH_ECP_224 26
#define IKEV2_XFORMDH_BRAINPOOL_P224R1 27
#define IKEV2_XFORMDH_BRAINPOOL_P256R1 28
#define IKEV2_XFORMDH_BRAINPOOL_P384R1 29
#define IKEV2_XFORMDH_BRAINPOOL_P512R1 30
#define IKEV2_XFORMDH_CURVE25519 31
#define IKEV2_XFORMDH_X_SNTRUP761X25519 1035
extern struct iked_constmap ikev2_xformdh_map[];
#define IKEV2_IPV4_OVERHEAD (20 + 8 + 28)
#define IKEV2_MAXLEN_IPV4_FRAG (576 - IKEV2_IPV4_OVERHEAD)
#define IKEV2_IPV6_OVERHEAD (40 + 8 + 28)
#define IKEV2_MAXLEN_IPV6_FRAG (1280 - IKEV2_IPV6_OVERHEAD)
#define IKEV2_MAXNUM_TSS 255
#define IKEV2_XFORMESN_NONE 0
#define IKEV2_XFORMESN_ESN 1
extern struct iked_constmap ikev2_xformesn_map[];
struct ikev2_attribute {
uint16_t attr_type;
uint16_t attr_length;
} __packed;
#define IKEV2_ATTRAF_TLV 0x0000
#define IKEV2_ATTRAF_TV 0x8000
#define IKEV2_ATTRTYPE_KEY_LENGTH 14
extern struct iked_constmap ikev2_attrtype_map[];
struct ikev2_keyexchange {
uint16_t kex_dhgroup;
uint16_t kex_reserved;
} __packed;
struct ikev2_notify {
uint8_t n_protoid;
uint8_t n_spisize;
uint16_t n_type;
} __packed;
#define IKEV2_N_UNSUPPORTED_CRITICAL_PAYLOAD 1
#define IKEV2_N_INVALID_IKE_SPI 4
#define IKEV2_N_INVALID_MAJOR_VERSION 5
#define IKEV2_N_INVALID_SYNTAX 7
#define IKEV2_N_INVALID_MESSAGE_ID 9
#define IKEV2_N_INVALID_SPI 11
#define IKEV2_N_NO_PROPOSAL_CHOSEN 14
#define IKEV2_N_INVALID_KE_PAYLOAD 17
#define IKEV2_N_AUTHENTICATION_FAILED 24
#define IKEV2_N_SINGLE_PAIR_REQUIRED 34
#define IKEV2_N_NO_ADDITIONAL_SAS 35
#define IKEV2_N_INTERNAL_ADDRESS_FAILURE 36
#define IKEV2_N_FAILED_CP_REQUIRED 37
#define IKEV2_N_TS_UNACCEPTABLE 38
#define IKEV2_N_INVALID_SELECTORS 39
#define IKEV2_N_UNACCEPTABLE_ADDRESSES 40
#define IKEV2_N_UNEXPECTED_NAT_DETECTED 41
#define IKEV2_N_USE_ASSIGNED_HoA 42
#define IKEV2_N_TEMPORARY_FAILURE 43
#define IKEV2_N_CHILD_SA_NOT_FOUND 44
#define IKEV2_N_INITIAL_CONTACT 16384
#define IKEV2_N_SET_WINDOW_SIZE 16385
#define IKEV2_N_ADDITIONAL_TS_POSSIBLE 16386
#define IKEV2_N_IPCOMP_SUPPORTED 16387
#define IKEV2_N_NAT_DETECTION_SOURCE_IP 16388
#define IKEV2_N_NAT_DETECTION_DESTINATION_IP 16389
#define IKEV2_N_COOKIE 16390
#define IKEV2_N_USE_TRANSPORT_MODE 16391
#define IKEV2_N_HTTP_CERT_LOOKUP_SUPPORTED 16392
#define IKEV2_N_REKEY_SA 16393
#define IKEV2_N_ESP_TFC_PADDING_NOT_SUPPORTED 16394
#define IKEV2_N_NON_FIRST_FRAGMENTS_ALSO 16395
#define IKEV2_N_MOBIKE_SUPPORTED 16396
#define IKEV2_N_ADDITIONAL_IP4_ADDRESS 16397
#define IKEV2_N_ADDITIONAL_IP6_ADDRESS 16398
#define IKEV2_N_NO_ADDITIONAL_ADDRESSES 16399
#define IKEV2_N_UPDATE_SA_ADDRESSES 16400
#define IKEV2_N_COOKIE2 16401
#define IKEV2_N_NO_NATS_ALLOWED 16402
#define IKEV2_N_AUTH_LIFETIME 16403
#define IKEV2_N_MULTIPLE_AUTH_SUPPORTED 16404
#define IKEV2_N_ANOTHER_AUTH_FOLLOWS 16405
#define IKEV2_N_REDIRECT_SUPPORTED 16406
#define IKEV2_N_REDIRECT 16407
#define IKEV2_N_REDIRECTED_FROM 16408
#define IKEV2_N_TICKET_LT_OPAQUE 16409
#define IKEV2_N_TICKET_REQUEST 16410
#define IKEV2_N_TICKET_ACK 16411
#define IKEV2_N_TICKET_NACK 16412
#define IKEV2_N_TICKET_OPAQUE 16413
#define IKEV2_N_LINK_ID 16414
#define IKEV2_N_USE_WESP_MODE 16415
#define IKEV2_N_ROHC_SUPPORTED 16416
#define IKEV2_N_EAP_ONLY_AUTHENTICATION 16417
#define IKEV2_N_CHILDLESS_IKEV2_SUPPORTED 16418
#define IKEV2_N_QUICK_CRASH_DETECTION 16419
#define IKEV2_N_IKEV2_MESSAGE_ID_SYNC_SUPPORTED 16420
#define IKEV2_N_IPSEC_REPLAY_CTR_SYNC_SUPPORTED 16421
#define IKEV2_N_IKEV2_MESSAGE_ID_SYNC 16422
#define IKEV2_N_IPSEC_REPLAY_CTR_SYNC 16423
#define IKEV2_N_SECURE_PASSWORD_METHODS 16424
#define IKEV2_N_PSK_PERSIST 16425
#define IKEV2_N_PSK_CONFIRM 16426
#define IKEV2_N_ERX_SUPPORTED 16427
#define IKEV2_N_IFOM_CAPABILITY 16428
#define IKEV2_N_FRAGMENTATION_SUPPORTED 16430
#define IKEV2_N_SIGNATURE_HASH_ALGORITHMS 16431
extern struct iked_constmap ikev2_n_map[];
struct ikev2_delete {
uint8_t del_protoid;
uint8_t del_spisize;
uint16_t del_nspi;
} __packed;
struct ikev2_id {
uint8_t id_type;
uint8_t id_reserved[3];
} __packed;
#define IKEV2_ID_NONE 0
#define IKEV2_ID_IPV4 1
#define IKEV2_ID_FQDN 2
#define IKEV2_ID_UFQDN 3
#define IKEV2_ID_IPV6 5
#define IKEV2_ID_ASN1_DN 9
#define IKEV2_ID_ASN1_GN 10
#define IKEV2_ID_KEY_ID 11
#define IKEV2_ID_FC_NAME 12
extern struct iked_constmap ikev2_id_map[];
struct ikev2_cert {
uint8_t cert_type;
} __packed;
#define IKEV2_CERT_NONE 0
#define IKEV2_CERT_X509_PKCS7 1
#define IKEV2_CERT_PGP 2
#define IKEV2_CERT_DNS_SIGNED_KEY 3
#define IKEV2_CERT_X509_CERT 4
#define IKEV2_CERT_KERBEROS_TOKEN 6
#define IKEV2_CERT_CRL 7
#define IKEV2_CERT_ARL 8
#define IKEV2_CERT_SPKI 9
#define IKEV2_CERT_X509_ATTR 10
#define IKEV2_CERT_RSA_KEY 11
#define IKEV2_CERT_HASHURL_X509 12
#define IKEV2_CERT_HASHURL_X509_BUNDLE 13
#define IKEV2_CERT_OCSP 14
#define IKEV2_CERT_ECDSA 201
#define IKEV2_CERT_BUNDLE 254
extern struct iked_constmap ikev2_cert_map[];
struct ikev2_tsp {
uint8_t tsp_count;
uint8_t tsp_reserved[3];
} __packed;
struct ikev2_ts {
uint8_t ts_type;
uint8_t ts_protoid;
uint16_t ts_length;
uint16_t ts_startport;
uint16_t ts_endport;
} __packed;
#define IKEV2_TS_IPV4_ADDR_RANGE 7
#define IKEV2_TS_IPV6_ADDR_RANGE 8
#define IKEV2_TS_FC_ADDR_RANGE 9
extern struct iked_constmap ikev2_ts_map[];
struct ikev2_auth {
uint8_t auth_method;
uint8_t auth_reserved[3];
} __packed;
#define IKEV2_AUTH_NONE 0
#define IKEV2_AUTH_RSA_SIG 1
#define IKEV2_AUTH_SHARED_KEY_MIC 2
#define IKEV2_AUTH_DSS_SIG 3
#define IKEV2_AUTH_ECDSA_256 9
#define IKEV2_AUTH_ECDSA_384 10
#define IKEV2_AUTH_ECDSA_521 11
#define IKEV2_AUTH_GSPM 12
#define IKEV2_AUTH_NULL 13
#define IKEV2_AUTH_SIG 14
#define IKEV2_AUTH_SIG_ANY 255
extern struct iked_constmap ikev2_auth_map[];
#define IKEV2_SIGHASH_RESERVED 0
#define IKEV2_SIGHASH_SHA1 1
#define IKEV2_SIGHASH_SHA2_256 2
#define IKEV2_SIGHASH_SHA2_384 3
#define IKEV2_SIGHASH_SHA2_512 4
extern struct iked_constmap ikev2_sighash_map[];
struct ikev2_cp {
uint8_t cp_type;
uint8_t cp_reserved[3];
} __packed;
#define IKEV2_CP_REQUEST 1
#define IKEV2_CP_REPLY 2
#define IKEV2_CP_SET 3
#define IKEV2_CP_ACK 4
extern struct iked_constmap ikev2_cp_map[];
struct ikev2_cfg {
uint16_t cfg_type;
uint16_t cfg_length;
} __packed;
#define IKEV2_CFG_INTERNAL_IP4_ADDRESS 1
#define IKEV2_CFG_INTERNAL_IP4_NETMASK 2
#define IKEV2_CFG_INTERNAL_IP4_DNS 3
#define IKEV2_CFG_INTERNAL_IP4_NBNS 4
#define IKEV2_CFG_INTERNAL_ADDRESS_EXPIRY 5
#define IKEV2_CFG_INTERNAL_IP4_DHCP 6
#define IKEV2_CFG_APPLICATION_VERSION 7
#define IKEV2_CFG_INTERNAL_IP6_ADDRESS 8
#define IKEV2_CFG_INTERNAL_IP6_DNS 10
#define IKEV2_CFG_INTERNAL_IP6_NBNS 11
#define IKEV2_CFG_INTERNAL_IP6_DHCP 12
#define IKEV2_CFG_INTERNAL_IP4_SUBNET 13
#define IKEV2_CFG_SUPPORTED_ATTRIBUTES 14
#define IKEV2_CFG_INTERNAL_IP6_SUBNET 15
#define IKEV2_CFG_MIP6_HOME_PREFIX 16
#define IKEV2_CFG_INTERNAL_IP6_LINK 17
#define IKEV2_CFG_INTERNAL_IP6_PREFIX 18
#define IKEV2_CFG_HOME_AGENT_ADDRESS 19
#define IKEV2_CFG_INTERNAL_IP4_SERVER 23456
#define IKEV2_CFG_INTERNAL_IP6_SERVER 23457
extern struct iked_constmap ikev2_cfg_map[];
#define IKEV1_PAYLOAD_NONE 0
#define IKEV1_PAYLOAD_PROPOSAL 2
#endif