Home | History | Annotate | Download | only in Ikev2
      1 /** @file
      2   The Definitions related to IKEv2 payload.
      3 
      4   Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials
      7   are licensed and made available under the terms and conditions of the BSD License
      8   which accompanies this distribution.  The full text of the license may be found at
      9   http://opensource.org/licenses/bsd-license.php.
     10 
     11   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 #ifndef _IKE_V2_PAYLOAD_H_
     16 #define _IKE_V2_PAYLOAD_H_
     17 
     18 //
     19 // Payload Type for IKEv2
     20 //
     21 #define IKEV2_PAYLOAD_TYPE_NONE     0
     22 #define IKEV2_PAYLOAD_TYPE_SA       33
     23 #define IKEV2_PAYLOAD_TYPE_KE       34
     24 #define IKEV2_PAYLOAD_TYPE_ID_INIT  35
     25 #define IKEV2_PAYLOAD_TYPE_ID_RSP   36
     26 #define IKEV2_PAYLOAD_TYPE_CERT     37
     27 #define IKEV2_PAYLOAD_TYPE_CERTREQ  38
     28 #define IKEV2_PAYLOAD_TYPE_AUTH     39
     29 #define IKEV2_PAYLOAD_TYPE_NONCE    40
     30 #define IKEV2_PAYLOAD_TYPE_NOTIFY   41
     31 #define IKEV2_PAYLOAD_TYPE_DELETE   42
     32 #define IKEV2_PAYLOAD_TYPE_VENDOR   43
     33 #define IKEV2_PAYLOAD_TYPE_TS_INIT  44
     34 #define IKEV2_PAYLOAD_TYPE_TS_RSP   45
     35 #define IKEV2_PAYLOAD_TYPE_ENCRYPT  46
     36 #define IKEV2_PAYLOAD_TYPE_CP       47
     37 #define IKEV2_PAYLOAD_TYPE_EAP      48
     38 
     39 //
     40 // IKE header Flag for IKEv2
     41 //
     42 #define IKE_HEADER_FLAGS_INIT       0x08
     43 #define IKE_HEADER_FLAGS_RESPOND    0x20
     44 #define IKE_HEADER_FLAGS_CHILD_INIT 0
     45 
     46 //
     47 // IKE Header Exchange Type for IKEv2
     48 //
     49 #define IKEV2_EXCHANGE_TYPE_INIT         34
     50 #define IKEV2_EXCHANGE_TYPE_AUTH         35
     51 #define IKEV2_EXCHANGE_TYPE_CREATE_CHILD 36
     52 #define IKEV2_EXCHANGE_TYPE_INFO         37
     53 
     54 #pragma pack(1)
     55 typedef struct {
     56   UINT8   NextPayload;
     57   UINT8   Reserved;
     58   UINT16  PayloadLength;
     59 } IKEV2_COMMON_PAYLOAD_HEADER;
     60 #pragma pack()
     61 
     62 #pragma pack(1)
     63 typedef struct {
     64   IKEV2_COMMON_PAYLOAD_HEADER Header;
     65   //
     66   // Proposals
     67   //
     68 } IKEV2_SA;
     69 #pragma pack()
     70 
     71 #pragma pack(1)
     72 typedef struct {
     73   IKEV2_COMMON_PAYLOAD_HEADER Header;
     74   UINT8                       ProposalIndex;
     75   UINT8                       ProtocolId;
     76   UINT8                       SpiSize;
     77   UINT8                       NumTransforms;
     78 } IKEV2_PROPOSAL;
     79 #pragma pack()
     80 
     81 //
     82 // IKEv2 Transform Type Values presented within Transform Payload
     83 //
     84 #define IKEV2_TRANSFORM_TYPE_ENCR      1  // Encryption Algorithm
     85 #define IKEV2_TRANSFORM_TYPE_PRF       2  // Pseduo-Random Func
     86 #define IKEV2_TRANSFORM_TYPE_INTEG     3  // Integrity Algorithm
     87 #define IKEV2_TRANSFORM_TYPE_DH        4  // DH Group
     88 #define IKEV2_TRANSFORM_TYPE_ESN       5  // Extended Sequence Number
     89 
     90 //
     91 // IKEv2 Transform ID for Encrypt Algorithm (ENCR)
     92 //
     93 #define IKEV2_TRANSFORM_ID_ENCR_DES_IV64 1
     94 #define IKEV2_TRANSFORM_ID_ENCR_DES      2
     95 #define IKEV2_TRANSFORM_ID_ENCR_3DES     3
     96 #define IKEV2_TRANSFORM_ID_ENCR_RC5      4
     97 #define IKEV2_TRANSFORM_ID_ENCR_IDEA     5
     98 #define IKEV2_TRANSFORM_ID_ENCR_CAST     6
     99 #define IKEV2_TRANSFORM_ID_ENCR_BLOWFISH 7
    100 #define IKEV2_TRANSFORM_ID_ENCR_3IDEA    8
    101 #define IKEV2_TRANSFORM_ID_ENCR_DES_IV32 9
    102 #define IKEV2_TRANSFORM_ID_ENCR_NULL     11
    103 #define IKEV2_TRANSFORM_ID_ENCR_AES_CBC  12
    104 #define IKEV2_TRANSFORM_ID_ENCR_AES_CTR  13
    105 
    106 //
    107 // IKEv2 Transform ID for Pseudo-Random Function (PRF)
    108 //
    109 #define IKEV2_TRANSFORM_ID_PRF_HMAC_MD5     1
    110 #define IKEV2_TRANSFORM_ID_PRF_HMAC_SHA1    2
    111 #define IKEV2_TRANSFORM_ID_PRF_HMAC_TIGER   3
    112 #define IKEV2_TRANSFORM_ID_PRF_AES128_XCBC  4
    113 
    114 //
    115 // IKEv2 Transform ID for Integrity Algorithm (INTEG)
    116 //
    117 #define IKEV2_TRANSFORM_ID_AUTH_NONE              0
    118 #define IKEV2_TRANSFORM_ID_AUTH_HMAC_MD5_96       1
    119 #define IKEV2_TRANSFORM_ID_AUTH_HMAC_SHA1_96      2
    120 #define IKEV2_TRANSFORM_ID_AUTH_HMAC_DES_MAC      3
    121 #define IKEV2_TRANSFORM_ID_AUTH_HMAC_KPDK_MD5     4
    122 #define IKEV2_TRANSFORM_ID_AUTH_HMAC_AES_XCBC_96  5
    123 
    124 //
    125 // IKEv2 Transform ID for Diffie-Hellman Group (DH)
    126 //
    127 #define IKEV2_TRANSFORM_ID_DH_768MODP             1
    128 #define IKEV2_TRANSFORM_ID_DH_1024MODP            2
    129 #define IKEV2_TRANSFORM_ID_DH_2048MODP            14
    130 
    131 //
    132 // IKEv2 Attribute Type Values
    133 //
    134 #define IKEV2_ATTRIBUTE_TYPE_KEYLEN               14
    135 
    136 //
    137 // Transform Payload
    138 //
    139 #pragma pack(1)
    140 typedef struct {
    141   IKEV2_COMMON_PAYLOAD_HEADER Header;
    142   UINT8                       TransformType;
    143   UINT8                       Reserved;
    144   UINT16                      TransformId;
    145   //
    146   // SA Attributes
    147   //
    148 } IKEV2_TRANSFORM;
    149 #pragma pack()
    150 
    151 #pragma pack(1)
    152 typedef struct {
    153   IKEV2_COMMON_PAYLOAD_HEADER Header;
    154   UINT16                      DhGroup;
    155   UINT16                      Reserved;
    156   //
    157   // Remaining part contains the key exchanged
    158   //
    159 } IKEV2_KEY_EXCHANGE;
    160 #pragma pack()
    161 
    162 //
    163 // Identification Type Values presented within Ikev2 ID payload
    164 //
    165 #define IKEV2_ID_TYPE_IPV4_ADDR        1
    166 #define IKEV2_ID_TYPE_FQDN             2
    167 #define IKEV2_ID_TYPE_RFC822_ADDR      3
    168 #define IKEV2_ID_TYPE_IPV6_ADDR        5
    169 #define IKEV2_ID_TYPE_DER_ASN1_DN      9
    170 #define IKEV2_ID_TYPE_DER_ASN1_GN      10
    171 #define IKEV2_ID_TYPE_KEY_ID           11
    172 
    173 //
    174 // Identification Payload
    175 //
    176 #pragma pack(1)
    177 typedef struct {
    178   IKEV2_COMMON_PAYLOAD_HEADER Header;
    179   UINT8                       IdType;
    180   UINT8                       Reserver1;
    181   UINT16                      Reserver2;
    182   //
    183   // Identification Data
    184   //
    185 } IKEV2_ID;
    186 #pragma pack()
    187 
    188 //
    189 // Encoding Type presented in IKEV2 Cert Payload
    190 //
    191 #define IKEV2_CERT_ENCODEING_RESERVED                  0
    192 #define IKEV2_CERT_ENCODEING_X509_CERT_WRAP            1
    193 #define IKEV2_CERT_ENCODEING_PGP_CERT                  2
    194 #define IKEV2_CERT_ENCODEING_DNS_SIGN_KEY              3
    195 #define IKEV2_CERT_ENCODEING_X509_CERT_SIGN            4
    196 #define IKEV2_CERT_ENCODEING_KERBEROS_TOKEN            6
    197 #define IKEV2_CERT_ENCODEING_REVOCATION_LIST_CERT      7
    198 #define IKEV2_CERT_ENCODEING_AUTH_REVOCATION_LIST      8
    199 #define IKEV2_CERT_ENCODEING_SPKI_CERT                 9
    200 #define IKEV2_CERT_ENCODEING_X509_CERT_ATTRIBUTE       10
    201 #define IKEV2_CERT_ENCODEING_RAW_RSA_KEY               11
    202 #define IKEV2_CERT_ENCODEING_HASH_AND_URL_OF_X509_CERT 12
    203 
    204 //
    205 // IKEV2 Certificate Payload
    206 //
    207 #pragma pack(1)
    208 typedef struct {
    209   IKEV2_COMMON_PAYLOAD_HEADER Header;
    210   UINT8                       CertEncoding;
    211   //
    212   // Cert Data
    213   //
    214 } IKEV2_CERT;
    215 #pragma pack()
    216 
    217 //
    218 // IKEV2 Certificate Request Payload
    219 //
    220 #pragma pack(1)
    221 typedef struct {
    222   IKEV2_COMMON_PAYLOAD_HEADER Header;
    223   UINT8                       CertEncoding;
    224   //
    225   // Cert Authority
    226   //
    227 } IKEV2_CERT_REQ;
    228 #pragma pack()
    229 
    230 //
    231 // Authentication Payload
    232 //
    233 #pragma pack(1)
    234 typedef struct {
    235   IKEV2_COMMON_PAYLOAD_HEADER Header;
    236   UINT8                       AuthMethod;
    237   UINT8                       Reserved1;
    238   UINT16                      Reserved2;
    239   //
    240   // Auth Data
    241   //
    242 } IKEV2_AUTH;
    243 #pragma pack()
    244 
    245 //
    246 // Authmethod in Authentication Payload
    247 //
    248 #define IKEV2_AUTH_METHOD_RSA        1; // RSA Digital Signature
    249 #define IKEV2_AUTH_METHOD_SKMI       2; // Shared Key Message Integrity
    250 #define IKEV2_AUTH_METHOD_DSS        3; // DSS Digital Signature
    251 
    252 //
    253 // IKEv2 Nonce Payload
    254 //
    255 #pragma pack(1)
    256 typedef struct {
    257   IKEV2_COMMON_PAYLOAD_HEADER Header;
    258   //
    259   // Nonce Data
    260   //
    261 } IKEV2_NONCE;
    262 #pragma pack()
    263 
    264 //
    265 // Notification Payload
    266 //
    267 #pragma pack(1)
    268 typedef struct {
    269   IKEV2_COMMON_PAYLOAD_HEADER Header;
    270   UINT8                       ProtocolId;
    271   UINT8                       SpiSize;
    272   UINT16                      MessageType;
    273   //
    274   // SPI and Notification Data
    275   //
    276 } IKEV2_NOTIFY;
    277 #pragma pack()
    278 
    279 //
    280 //  Notify Message Types presented within IKEv2 Notify Payload
    281 //
    282 #define IKEV2_NOTIFICATION_UNSUPPORT_CRITICAL_PAYLOAD       1
    283 #define IKEV2_NOTIFICATION_INVALID_IKE_SPI                  4
    284 #define IKEV2_NOTIFICATION_INVALID_MAJOR_VERSION            5
    285 #define IKEV2_NOTIFICATION_INVALID_SYNTAX                   7
    286 #define IKEV2_NOTIFICATION_INVALID_MESSAGE_ID               9
    287 #define IKEV2_NOTIFICATION_INVALID_SPI                     11
    288 #define IKEV2_NOTIFICATION_NO_PROPOSAL_CHOSEN              14
    289 #define IKEV2_NOTIFICATION_INVALID_KEY_PAYLOAD             17
    290 #define IKEV2_NOTIFICATION_AUTHENTICATION_FAILED           24
    291 #define IKEV2_NOTIFICATION_SINGLE_PAIR_REQUIRED            34
    292 #define IKEV2_NOTIFICATION_NO_ADDITIONAL_SAS               35
    293 #define IKEV2_NOTIFICATION_INTERNAL_ADDRESS_FAILURE        36
    294 #define IKEV2_NOTIFICATION_FAILED_CP_REQUIRED              37
    295 #define IKEV2_NOTIFICATION_TS_UNCCEPTABLE                  38
    296 #define IKEV2_NOTIFICATION_INVALID_SELECTORS               39
    297 #define IKEV2_NOTIFICATION_COOKIE                          16390
    298 #define IKEV2_NOTIFICATION_USE_TRANSPORT_MODE              16391
    299 #define IKEV2_NOTIFICATION_REKEY_SA                        16393
    300 
    301 //
    302 // IKEv2 Protocol ID
    303 //
    304 //
    305 // IKEv2 Delete Payload
    306 //
    307 #pragma pack(1)
    308 typedef struct {
    309   IKEV2_COMMON_PAYLOAD_HEADER Header;
    310   UINT8                       ProtocolId;
    311   UINT8                       SpiSize;
    312   UINT16                      NumSpis;
    313   //
    314   // SPIs
    315   //
    316 } IKEV2_DELETE;
    317 #pragma pack()
    318 
    319 //
    320 // Traffic Selector Payload
    321 //
    322 #pragma pack(1)
    323 typedef struct {
    324   IKEV2_COMMON_PAYLOAD_HEADER Header;
    325   UINT8                       TSNumbers;
    326   UINT8                       Reserved1;
    327   UINT16                      Reserved2;
    328   //
    329   // Traffic Selector
    330   //
    331 } IKEV2_TS;
    332 #pragma pack()
    333 
    334 //
    335 // Traffic Selector
    336 //
    337 #pragma pack(1)
    338 typedef struct {
    339   UINT8                       TSType;
    340   UINT8                       IpProtocolId;
    341   UINT16                      SelecorLen;
    342   UINT16                      StartPort;
    343   UINT16                      EndPort;
    344   //
    345   // Starting Address && Ending Address
    346   //
    347 } TRAFFIC_SELECTOR;
    348 #pragma pack()
    349 
    350 //
    351 // Ts Type in Traffic Selector
    352 //
    353 #define IKEV2_TS_TYPE_IPV4_ADDR_RANGE     7
    354 #define IKEV2_TS_TYPS_IPV6_ADDR_RANGE     8
    355 
    356 //
    357 // Vendor Payload
    358 //
    359 #pragma pack(1)
    360 typedef struct {
    361   IKEV2_COMMON_PAYLOAD_HEADER Header;
    362   //
    363   // Vendor ID
    364   //
    365 } IKEV2_VENDOR;
    366 #pragma pack()
    367 
    368 //
    369 // Encrypted Payload
    370 //
    371 #pragma pack(1)
    372 typedef struct {
    373   IKEV2_COMMON_PAYLOAD_HEADER Header;
    374   //
    375   // IV, Encrypted IKE Payloads, Padding, PAD length, Integrity CheckSum
    376   //
    377 } IKEV2_ENCRYPTED;
    378 #pragma pack()
    379 
    380 #pragma pack(1)
    381 typedef struct {
    382   UINT8 PadLength;
    383 } IKEV2_PAD_LEN;
    384 #pragma pack()
    385 
    386 //
    387 // Configuration Payload
    388 //
    389 #pragma pack(1)
    390 typedef struct {
    391   IKEV2_COMMON_PAYLOAD_HEADER Header;
    392   UINT8                       CfgType;
    393   UINT8                       Reserve1;
    394   UINT16                      Reserve2;
    395   //
    396   // Configuration Attributes
    397   //
    398 } IKEV2_CFG;
    399 #pragma pack()
    400 
    401 //
    402 // Configuration Payload CPG type
    403 //
    404 #define IKEV2_CFG_TYPE_REQUEST    1
    405 #define IKEV2_CFG_TYPE_REPLY      2
    406 #define IKEV2_CFG_TYPE_SET        3
    407 #define IKEV2_CFG_TYPE_ACK        4
    408 
    409 //
    410 // Configuration Attributes
    411 //
    412 #pragma pack(1)
    413 typedef struct {
    414   UINT16    AttritType;
    415   UINT16    ValueLength;
    416 } IKEV2_CFG_ATTRIBUTES;
    417 #pragma pack()
    418 
    419 //
    420 // Configuration Attributes
    421 //
    422 #define IKEV2_CFG_ATTR_INTERNAL_IP4_ADDRESS      1
    423 #define IKEV2_CFG_ATTR_INTERNAL_IP4_NBTMASK      2
    424 #define IKEV2_CFG_ATTR_INTERNAL_IP4_DNS          3
    425 #define IKEV2_CFG_ATTR_INTERNAL_IP4_NBNS         4
    426 #define IKEV2_CFG_ATTR_INTERNA_ADDRESS_BXPIRY    5
    427 #define IKEV2_CFG_ATTR_INTERNAL_IP4_DHCP         6
    428 #define IKEV2_CFG_ATTR_APPLICATION_VERSION       7
    429 #define IKEV2_CFG_ATTR_INTERNAL_IP6_ADDRESS      8
    430 #define IKEV2_CFG_ATTR_INTERNAL_IP6_DNS          10
    431 #define IKEV2_CFG_ATTR_INTERNAL_IP6_NBNS         11
    432 #define IKEV2_CFG_ATTR_INTERNAL_IP6_DHCP         12
    433 #define IKEV2_CFG_ATTR_INTERNAL_IP4_SUBNET       13
    434 #define IKEV2_CFG_ATTR_SUPPORTED_ATTRIBUTES      14
    435 #define IKEV2_CFG_ATTR_IP6_SUBNET                15
    436 
    437 #endif
    438 
    439