1 // SoftEther VPN Source Code - Stable Edition Repository 2 // Cedar Communication Module 3 // 4 // SoftEther VPN Server, Client and Bridge are free software under the Apache License, Version 2.0. 5 // 6 // Copyright (c) Daiyuu Nobori. 7 // Copyright (c) SoftEther VPN Project, University of Tsukuba, Japan. 8 // Copyright (c) SoftEther Corporation. 9 // Copyright (c) all contributors on SoftEther VPN project in GitHub. 10 // 11 // All Rights Reserved. 12 // 13 // http://www.softether.org/ 14 // 15 // This stable branch is officially managed by Daiyuu Nobori, the owner of SoftEther VPN Project. 16 // Pull requests should be sent to the Developer Edition Master Repository on https://github.com/SoftEtherVPN/SoftEtherVPN 17 // 18 // License: The Apache License, Version 2.0 19 // https://www.apache.org/licenses/LICENSE-2.0 20 // 21 // DISCLAIMER 22 // ========== 23 // 24 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 25 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 26 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 27 // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 28 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 29 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 30 // SOFTWARE. 31 // 32 // THIS SOFTWARE IS DEVELOPED IN JAPAN, AND DISTRIBUTED FROM JAPAN, UNDER 33 // JAPANESE LAWS. YOU MUST AGREE IN ADVANCE TO USE, COPY, MODIFY, MERGE, PUBLISH, 34 // DISTRIBUTE, SUBLICENSE, AND/OR SELL COPIES OF THIS SOFTWARE, THAT ANY 35 // JURIDICAL DISPUTES WHICH ARE CONCERNED TO THIS SOFTWARE OR ITS CONTENTS, 36 // AGAINST US (SOFTETHER PROJECT, SOFTETHER CORPORATION, DAIYUU NOBORI OR OTHER 37 // SUPPLIERS), OR ANY JURIDICAL DISPUTES AGAINST US WHICH ARE CAUSED BY ANY KIND 38 // OF USING, COPYING, MODIFYING, MERGING, PUBLISHING, DISTRIBUTING, SUBLICENSING, 39 // AND/OR SELLING COPIES OF THIS SOFTWARE SHALL BE REGARDED AS BE CONSTRUED AND 40 // CONTROLLED BY JAPANESE LAWS, AND YOU MUST FURTHER CONSENT TO EXCLUSIVE 41 // JURISDICTION AND VENUE IN THE COURTS SITTING IN TOKYO, JAPAN. YOU MUST WAIVE 42 // ALL DEFENSES OF LACK OF PERSONAL JURISDICTION AND FORUM NON CONVENIENS. 43 // PROCESS MAY BE SERVED ON EITHER PARTY IN THE MANNER AUTHORIZED BY APPLICABLE 44 // LAW OR COURT RULE. 45 // 46 // USE ONLY IN JAPAN. DO NOT USE THIS SOFTWARE IN ANOTHER COUNTRY UNLESS YOU HAVE 47 // A CONFIRMATION THAT THIS SOFTWARE DOES NOT VIOLATE ANY CRIMINAL LAWS OR CIVIL 48 // RIGHTS IN THAT PARTICULAR COUNTRY. USING THIS SOFTWARE IN OTHER COUNTRIES IS 49 // COMPLETELY AT YOUR OWN RISK. THE SOFTETHER VPN PROJECT HAS DEVELOPED AND 50 // DISTRIBUTED THIS SOFTWARE TO COMPLY ONLY WITH THE JAPANESE LAWS AND EXISTING 51 // CIVIL RIGHTS INCLUDING PATENTS WHICH ARE SUBJECTS APPLY IN JAPAN. OTHER 52 // COUNTRIES' LAWS OR CIVIL RIGHTS ARE NONE OF OUR CONCERNS NOR RESPONSIBILITIES. 53 // WE HAVE NEVER INVESTIGATED ANY CRIMINAL REGULATIONS, CIVIL LAWS OR 54 // INTELLECTUAL PROPERTY RIGHTS INCLUDING PATENTS IN ANY OF OTHER 200+ COUNTRIES 55 // AND TERRITORIES. BY NATURE, THERE ARE 200+ REGIONS IN THE WORLD, WITH 56 // DIFFERENT LAWS. IT IS IMPOSSIBLE TO VERIFY EVERY COUNTRIES' LAWS, REGULATIONS 57 // AND CIVIL RIGHTS TO MAKE THE SOFTWARE COMPLY WITH ALL COUNTRIES' LAWS BY THE 58 // PROJECT. EVEN IF YOU WILL BE SUED BY A PRIVATE ENTITY OR BE DAMAGED BY A 59 // PUBLIC SERVANT IN YOUR COUNTRY, THE DEVELOPERS OF THIS SOFTWARE WILL NEVER BE 60 // LIABLE TO RECOVER OR COMPENSATE SUCH DAMAGES, CRIMINAL OR CIVIL 61 // RESPONSIBILITIES. NOTE THAT THIS LINE IS NOT LICENSE RESTRICTION BUT JUST A 62 // STATEMENT FOR WARNING AND DISCLAIMER. 63 // 64 // READ AND UNDERSTAND THE 'WARNING.TXT' FILE BEFORE USING THIS SOFTWARE. 65 // SOME SOFTWARE PROGRAMS FROM THIRD PARTIES ARE INCLUDED ON THIS SOFTWARE WITH 66 // LICENSE CONDITIONS WHICH ARE DESCRIBED ON THE 'THIRD_PARTY.TXT' FILE. 67 // 68 // 69 // SOURCE CODE CONTRIBUTION 70 // ------------------------ 71 // 72 // Your contribution to SoftEther VPN Project is much appreciated. 73 // Please send patches to us through GitHub. 74 // Read the SoftEther VPN Patch Acceptance Policy in advance: 75 // http://www.softether.org/5-download/src/9.patch 76 // 77 // 78 // DEAR SECURITY EXPERTS 79 // --------------------- 80 // 81 // If you find a bug or a security vulnerability please kindly inform us 82 // about the problem immediately so that we can fix the security problem 83 // to protect a lot of users around the world as soon as possible. 84 // 85 // Our e-mail address for security reports is: 86 // softether-vpn-security [at] softether.org 87 // 88 // Please note that the above e-mail address is not a technical support 89 // inquiry address. If you need technical assistance, please visit 90 // http://www.softether.org/ and ask your question on the users forum. 91 // 92 // Thank you for your cooperation. 93 // 94 // 95 // NO MEMORY OR RESOURCE LEAKS 96 // --------------------------- 97 // 98 // The memory-leaks and resource-leaks verification under the stress 99 // test has been passed before release this source code. 100 101 102 // IPsec_IkePacket.h 103 // Header of IPsec_IkePacket.c 104 105 #ifndef IPSEC_PACKET_H 106 #define IPSEC_PACKET_H 107 108 // Constants 109 #ifdef OS_WIN32 110 #pragma pack(push, 1) 111 #endif // OS_WIN32 112 113 // Maximum hash size 114 #define IKE_MAX_HASH_SIZE 64 // Size of SHA-2-512 is the maximum for now 115 116 // Maximum block size 117 #define IKE_MAX_BLOCK_SIZE 16 // Size of AES is maximum at the moment 118 119 // Maximum key size 120 #define IKE_MAX_KEY_SIZE 32 // Size of AES-256 is the maximum for now 121 122 // IKE version 123 #define IKE_VERSION 0x10 // 1.0 124 125 // IKE payload type 126 #define IKE_PAYLOAD_NONE 0 // No payload 127 #define IKE_PAYLOAD_SA 1 // SA payload 128 #define IKE_PAYLOAD_PROPOSAL 2 // Proposal payload 129 #define IKE_PAYLOAD_TRANSFORM 3 // Transform payload 130 #define IKE_PAYLOAD_KEY_EXCHANGE 4 // Key exchange payload 131 #define IKE_PAYLOAD_ID 5 // ID payload 132 #define IKE_PAYLOAD_CERT 6 // Certificate payload 133 #define IKE_PAYLOAD_CERT_REQUEST 7 // Certificate request payload 134 #define IKE_PAYLOAD_HASH 8 // Hash payload 135 #define IKE_PAYLOAD_SIGN 9 // Signature payload 136 #define IKE_PAYLOAD_RAND 10 // Random number payload 137 #define IKE_PAYLOAD_NOTICE 11 // Notification Payload 138 #define IKE_PAYLOAD_DELETE 12 // Deletion payload 139 #define IKE_PAYLOAD_VENDOR_ID 13 // Vendor ID payload 140 #define IKE_PAYLOAD_NAT_D 20 // NAT-D payload 141 #define IKE_PAYLOAD_NAT_OA 21 // NAT-OA payload 142 #define IKE_PAYLOAD_NAT_D_DRAFT 130 // NAT-D payload draft 143 #define IKE_PAYLOAD_NAT_OA_DRAFT 16 // NAT-OA payload draft 144 #define IKE_PAYLOAD_NAT_OA_DRAFT_2 131 // NAT-OA payload draft 2 145 146 // Macro to check whether the payload type is supported 147 #define IKE_IS_SUPPORTED_PAYLOAD_TYPE(i) ((((i) >= IKE_PAYLOAD_SA) && ((i) <= IKE_PAYLOAD_VENDOR_ID)) || ((i) == IKE_PAYLOAD_NAT_D) || ((i) == IKE_PAYLOAD_NAT_OA) || ((i) == IKE_PAYLOAD_NAT_OA_DRAFT) || ((i) == IKE_PAYLOAD_NAT_OA_DRAFT_2) || ((i) == IKE_PAYLOAD_NAT_D_DRAFT)) 148 149 // IKE header flag 150 #define IKE_HEADER_FLAG_ENCRYPTED 1 // Encryption 151 #define IKE_HEADER_FLAG_COMMIT 2 // Commit 152 #define IKE_HEADER_FLAG_AUTH_ONLY 4 // Only authentication 153 154 // IKE payload common header 155 struct IKE_COMMON_HEADER 156 { 157 UCHAR NextPayload; 158 UCHAR Reserved; 159 USHORT PayloadSize; 160 } GCC_PACKED; 161 162 // IKE SA payload header 163 struct IKE_SA_HEADER 164 { 165 UINT DoI; // DOI value 166 UINT Situation; // Situation value 167 } GCC_PACKED; 168 169 // DOI value in the IKE SA payload 170 #define IKE_SA_DOI_IPSEC 1 // IPsec 171 172 // Situation value in the IKE SA payload 173 #define IKE_SA_SITUATION_IDENTITY 1 // Only authentication 174 175 // IKE proposal payload header 176 struct IKE_PROPOSAL_HEADER 177 { 178 UCHAR Number; // Number 179 UCHAR ProtocolId; // Protocol ID 180 UCHAR SpiSize; // Length of SPI 181 UCHAR NumTransforms; // Transform number 182 } GCC_PACKED; 183 184 // Protocol ID in the IKE proposal payload header 185 #define IKE_PROTOCOL_ID_IKE 1 // IKE 186 #define IKE_PROTOCOL_ID_IPSEC_AH 2 // AH 187 #define IKE_PROTOCOL_ID_IPSEC_ESP 3 // ESP 188 #define IKE_PROTOCOL_ID_IPV4 4 // IP 189 #define IKE_PROTOCOL_ID_IPV6 41 // IPv6 190 191 // IKE transform payload header 192 struct IKE_TRANSFORM_HEADER 193 { 194 UCHAR Number; // Number 195 UCHAR TransformId; // Transform ID 196 USHORT Reserved; // Reserved 197 } GCC_PACKED; 198 199 // Transform ID (Phase 1) in IKE transform payload header 200 #define IKE_TRANSFORM_ID_P1_KEY_IKE 1 // IKE 201 202 // Transform ID (Phase 2) in IKE transform payload header 203 #define IKE_TRANSFORM_ID_P2_ESP_DES 2 // DES-CBC 204 #define IKE_TRANSFORM_ID_P2_ESP_3DES 3 // 3DES-CBC 205 #define IKE_TRANSFORM_ID_P2_ESP_CAST 6 // CAST 206 #define IKE_TRANSFORM_ID_P2_ESP_BLOWFISH 7 // BLOWFISH 207 #define IKE_TRANSFORM_ID_P2_ESP_AES 12 // AES 208 209 // IKE transform value (fixed length) 210 struct IKE_TRANSFORM_VALUE 211 { 212 UCHAR AfBit; // AF bit (0: Fixed length, 1: Variable length) 213 UCHAR Type; // Type 214 USHORT Value; // Value data (16bit) 215 } GCC_PACKED; 216 217 // The Type value in IKE transform value (Phase 1) 218 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 219 #define IKE_TRANSFORM_VALUE_P1_CRYPTO 1 // Encryption algorithm 220 #define IKE_TRANSFORM_VALUE_P1_HASH 2 // Hash algorithm 221 #define IKE_TRANSFORM_VALUE_P1_AUTH_METHOD 3 // Authentication method 222 #define IKE_TRANSFORM_VALUE_P1_DH_GROUP 4 // DH group number 223 #define IKE_TRANSFORM_VALUE_P1_LIFE_TYPE 11 // Expiration date type 224 #define IKE_TRANSFORM_VALUE_P1_LIFE_VALUE 12 // Expiration date 225 #define IKE_TRANSFORM_VALUE_P1_KET_SIZE 14 // Key size 226 227 // The Type value in IKE transform values (Phase 2) 228 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 229 #define IKE_TRANSFORM_VALUE_P2_LIFE_TYPE 1 // Expiration date type 230 #define IKE_TRANSFORM_VALUE_P2_LIFE_VALUE 2 // Expiration date 231 #define IKE_TRANSFORM_VALUE_P2_DH_GROUP 3 // DH group number 232 #define IKE_TRANSFORM_VALUE_P2_CAPSULE 4 // Encapsulation mode 233 #define IKE_TRANSFORM_VALUE_P2_HMAC 5 // HMAC algorithm 234 #define IKE_TRANSFORM_VALUE_P2_KEY_SIZE 6 // Key size 235 236 // Phase 1: The encryption algorithm in the IKE transform value 237 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 238 #define IKE_P1_CRYPTO_DES_CBC 1 239 #define IKE_P1_CRYPTO_BLOWFISH 3 240 #define IKE_P1_CRYPTO_3DES_CBC 5 241 #define IKE_P1_CRYPTO_CAST_CBC 6 242 #define IKE_P1_CRYPTO_AES_CBC 7 243 244 // Phase 1: The hash algorithm in IKE transform value 245 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 246 #define IKE_P1_HASH_MD5 1 247 #define IKE_P1_HASH_SHA1 2 248 #define IKE_P1_HASH_SHA2_256 4 249 #define IKE_P1_HASH_SHA2_384 5 250 #define IKE_P1_HASH_SHA2_512 6 251 252 // Phase 1: The authentication method in the IKE transform value 253 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 254 #define IKE_P1_AUTH_METHOD_PRESHAREDKEY 1 255 #define IKE_P1_AUTH_METHOD_RSA_SIGN 3 256 257 // Phase 1: The DH group number in the IKE transform value 258 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 259 #define IKE_P1_DH_GROUP_768_MODP 1 260 #define IKE_P1_DH_GROUP_1024_MODP 2 261 #define IKE_P1_DH_GROUP_1536_MODP 5 262 #define IKE_P1_DH_GROUP_2048_MODP 14 263 #define IKE_P1_DH_GROUP_3072_MODP 15 264 #define IKE_P1_DH_GROUP_4096_MODP 16 265 266 // Phase 1: The expiration date type in IKE transform value 267 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 268 #define IKE_P1_LIFE_TYPE_SECONDS 1 269 #define IKE_P1_LIFE_TYPE_KILOBYTES 2 270 271 // Phase 2: The HMAC algorithm in IPsec transform value 272 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 273 #define IKE_P2_HMAC_MD5_96 1 274 #define IKE_P2_HMAC_SHA1_96 2 275 276 // Phase 2: The DH group number in the IPsec transform value 277 // MUST BE LESS THAN "MAX_IKE_ENGINE_ELEMENTS" !!! 278 #define IKE_P2_DH_GROUP_768_MODP 1 279 #define IKE_P2_DH_GROUP_1024_MODP 2 280 #define IKE_P2_DH_GROUP_1536_MODP 5 281 #define IKE_P2_DH_GROUP_2048_MODP 14 282 #define IKE_P2_DH_GROUP_3072_MODP 15 283 #define IKE_P2_DH_GROUP_4096_MODP 16 284 285 // Phase 2: The encapsulation mode in IPsec transform value 286 #define IKE_P2_CAPSULE_TUNNEL 1 287 #define IKE_P2_CAPSULE_TRANSPORT 2 288 #define IKE_P2_CAPSULE_NAT_TUNNEL_1 3 289 #define IKE_P2_CAPSULE_NAT_TUNNEL_2 61443 290 #define IKE_P2_CAPSULE_NAT_TRANSPORT_1 4 291 #define IKE_P2_CAPSULE_NAT_TRANSPORT_2 61444 292 293 // Phase 2: The expiration date type in IPsec transform value 294 #define IKE_P2_LIFE_TYPE_SECONDS 1 295 #define IKE_P2_LIFE_TYPE_KILOBYTES 2 296 297 298 // IKE ID payload header 299 struct IKE_ID_HEADER 300 { 301 UCHAR IdType; // Type of ID 302 UCHAR ProtocolId; // Protocol ID 303 USHORT Port; // Port 304 } GCC_PACKED; 305 306 // Type of ID in the IKE ID payload header 307 #define IKE_ID_IPV4_ADDR 1 // IPv4 address (32 bit) 308 #define IKE_ID_FQDN 2 // FQDN 309 #define IKE_ID_USER_FQDN 3 // User FQDN 310 #define IKE_ID_IPV4_ADDR_SUBNET 4 // IPv4 + subnet (64 bit) 311 #define IKE_ID_IPV6_ADDR 5 // IPv6 address (128 bit) 312 #define IKE_ID_IPV6_ADDR_SUBNET 6 // IPv6 + subnet (256 bit) 313 #define IKE_ID_DER_ASN1_DN 9 // X.500 Distinguished Name 314 #define IKE_ID_DER_ASN1_GN 10 // X.500 General Name 315 #define IKE_ID_KEY_ID 11 // Key 316 317 // The protocol ID in the IKE ID payload 318 #define IKE_ID_PROTOCOL_UDP IP_PROTO_UDP // UDP 319 320 // IKE certificate payload header 321 struct IKE_CERT_HEADER 322 { 323 UCHAR CertType; // Certificate Type 324 } GCC_PACKED; 325 326 // The certificate type in IKE certificate payload header 327 #define IKE_CERT_TYPE_X509 4 // X.509 certificate (for digital signature) 328 329 // IKE certificate payload header 330 struct IKE_CERT_REQUEST_HEADER 331 { 332 UCHAR CertType; // Certificate Type 333 } GCC_PACKED; 334 335 // IKE notification payload header 336 struct IKE_NOTICE_HEADER 337 { 338 UINT DoI; // DOI value 339 UCHAR ProtocolId; // Protocol ID 340 // Same to the protocol ID in the IKE proposal payload header 341 UCHAR SpiSize; // SPI size 342 USHORT MessageType; // Message type 343 } GCC_PACKED; 344 345 // IKE Deletion payload header 346 struct IKE_DELETE_HEADER 347 { 348 UINT DoI; // DOI value 349 UCHAR ProtocolId; // Protocol ID 350 // Same to the protocol ID in the IKE proposal payload header 351 UCHAR SpiSize; // SPI size 352 USHORT NumSpis; // SPI number 353 } GCC_PACKED; 354 355 // IKE NAT-OA payload header 356 struct IKE_NAT_OA_HEADER 357 { 358 UCHAR IdType; // Type of ID 359 UCHAR Reserved1; 360 USHORT Reserved2; 361 } GCC_PACKED; 362 363 364 #ifdef OS_WIN32 365 #pragma pack(pop) 366 #endif // OS_WIN32 367 368 369 370 // 371 // IKE internal data structure 372 // 373 374 // IKE packet SA payload 375 struct IKE_PACKET_SA_PAYLOAD 376 { 377 LIST *PayloadList; // Proposal payload list 378 }; 379 380 // IKE proposal packet payload 381 struct IKE_PACKET_PROPOSAL_PAYLOAD 382 { 383 UCHAR Number; // Number 384 UCHAR ProtocolId; // Protocol ID 385 BUF *Spi; // SPI data 386 387 LIST *PayloadList; // Payload list 388 }; 389 390 // IKE packet transform payload 391 struct IKE_PACKET_TRANSFORM_PAYLOAD 392 { 393 UCHAR Number; // Number 394 UCHAR TransformId; // Transform ID 395 396 LIST *ValueList; // Value list 397 }; 398 399 // IKE packet transform value 400 struct IKE_PACKET_TRANSFORM_VALUE 401 { 402 UCHAR Type; // Type 403 UINT Value; // Value 404 }; 405 406 // IKE generic data payload 407 struct IKE_PACKET_DATA_PAYLOAD 408 { 409 BUF *Data; // Generic data 410 }; 411 412 // IKE packet ID payload 413 struct IKE_PACKET_ID_PAYLOAD 414 { 415 UCHAR Type; // Type 416 UCHAR ProtocolId; // Protocol ID 417 USHORT Port; // Port number 418 BUF *IdData; // ID data 419 char StrData[128]; // Data of the result of converting to a string 420 }; 421 422 // IKE packet certificate payload 423 struct IKE_PACKET_CERT_PAYLOAD 424 { 425 UCHAR CertType; // Certificate type 426 BUF *CertData; // Certificate data 427 }; 428 429 // IKE packet certificate request payload 430 struct IKE_PACKET_CERT_REQUEST_PAYLOAD 431 { 432 UCHAR CertType; // Certificate type 433 BUF *Data; // Request data 434 }; 435 436 // IKE packet notification payload 437 struct IKE_PACKET_NOTICE_PAYLOAD 438 { 439 UCHAR ProtocolId; // Protocol ID 440 USHORT MessageType; // Message type 441 BUF *Spi; // SPI data 442 BUF *MessageData; // Message data 443 }; 444 445 // IKE notification message type 446 // Error 447 #define IKE_NOTICE_ERROR_INVALID_COOKIE 4 // Invalid cookie 448 #define IKE_NOTICE_ERROR_INVALID_EXCHANGE_TYPE 7 // Invalid exchange type 449 #define IKE_NOTICE_ERROR_INVALID_SPI 11 // Invalid SPI 450 #define IKE_NOTICE_ERROR_NO_PROPOSAL_CHOSEN 14 // There is nothing worth mentioning in the presented proposal 451 452 // DPD 453 #define IKE_NOTICE_DPD_REQUEST 36136 // R-U-THERE 454 #define IKE_NOTICE_DPD_RESPONSE 36137 // R-U-THERE-ACK 455 456 457 // IKE packet deletion payload 458 struct IKE_PACKET_DELETE_PAYLOAD 459 { 460 UCHAR ProtocolId; // Protocol ID 461 LIST *SpiList; // SPI list 462 }; 463 464 // IKE NAT-OA payload 465 struct IKE_PACKET_NAT_OA_PAYLOAD 466 { 467 IP IpAddress; // IP address 468 }; 469 470 // IKE packet payload 471 struct IKE_PACKET_PAYLOAD 472 { 473 UCHAR PayloadType; // Payload type 474 UCHAR Padding[3]; 475 BUF *BitArray; // Bit array 476 477 union 478 { 479 IKE_PACKET_SA_PAYLOAD Sa; // SA payload 480 IKE_PACKET_PROPOSAL_PAYLOAD Proposal; // Proposal payload 481 IKE_PACKET_TRANSFORM_PAYLOAD Transform; // Transform payload 482 IKE_PACKET_DATA_PAYLOAD KeyExchange; // Key exchange payload 483 IKE_PACKET_ID_PAYLOAD Id; // ID payload 484 IKE_PACKET_CERT_PAYLOAD Cert; // Certificate payload 485 IKE_PACKET_CERT_REQUEST_PAYLOAD CertRequest; // Certificate request payload 486 IKE_PACKET_DATA_PAYLOAD Hash; // Hash payload 487 IKE_PACKET_DATA_PAYLOAD Sign; // Signature payload 488 IKE_PACKET_DATA_PAYLOAD Rand; // Random number payload 489 IKE_PACKET_NOTICE_PAYLOAD Notice; // Notification Payload 490 IKE_PACKET_DELETE_PAYLOAD Delete; // Deletion payload 491 IKE_PACKET_DATA_PAYLOAD VendorId; // Vendor ID payload 492 IKE_PACKET_NAT_OA_PAYLOAD NatOa; // NAT-OA payload 493 IKE_PACKET_DATA_PAYLOAD GeneralData; // Generic data payload 494 } Payload; 495 }; 496 497 struct IKE_PACKET 498 { 499 UINT64 InitiatorCookie; // Initiator cookie 500 UINT64 ResponderCookie; // Responder cookie 501 UCHAR ExchangeType; // Exchange type 502 bool FlagEncrypted; // Encryption flag 503 bool FlagCommit; // Commit flag 504 bool FlagAuthOnly; // Flag only authentication 505 UINT MessageId; // Message ID 506 LIST *PayloadList; // Payload list 507 BUF *DecryptedPayload; // Decrypted payload 508 UINT MessageSize; // Original size 509 }; 510 511 // IKE P1 key set 512 struct IKE_P1_KEYSET 513 { 514 BUF *SKEYID_d; // IPsec SA key 515 BUF *SKEYID_a; // IKE SA authentication key 516 BUF *SKEYID_e; // IKE SA encryption key 517 }; 518 519 // Number and name of the encryption algorithm for IKE 520 #define IKE_CRYPTO_DES_ID 0 521 #define IKE_CRYPTO_DES_STRING "DES-CBC" 522 523 #define IKE_CRYPTO_3DES_ID 1 524 #define IKE_CRYPTO_3DES_STRING "3DES-CBC" 525 526 #define IKE_CRYPTO_AES_ID 2 527 #define IKE_CRYPTO_AES_STRING "AES-CBC" 528 529 #define IKE_CRYPTO_BLOWFISH_ID 3 530 #define IKE_CRYPTO_BLOWFISH_STRING "Blowfish-CBC" 531 532 #define IKE_CRYPTO_CAST_ID 4 533 #define IKE_CRYPTO_CAST_STRING "CAST-128-CBC" 534 535 // Number and name of the IKE hash algorithm 536 #define IKE_HASH_MD5_ID 0 537 #define IKE_HASH_MD5_STRING "MD5" 538 539 #define IKE_HASH_SHA1_ID 1 540 #define IKE_HASH_SHA1_STRING "SHA-1" 541 542 #define IKE_HASH_SHA2_256_ID 2 543 #define IKE_HASH_SHA2_256_STRING "SHA-2-256" 544 545 #define IKE_HASH_SHA2_384_ID 3 546 #define IKE_HASH_SHA2_384_STRING "SHA-2-384" 547 548 #define IKE_HASH_SHA2_512_ID 4 549 #define IKE_HASH_SHA2_512_STRING "SHA-2-512" 550 551 // Number and name of DH algorithm for IKE 552 #define IKE_DH_1_ID 0 553 #define IKE_DH_1_STRING "MODP 768 (Group 1)" 554 555 #define IKE_DH_2_ID 1 556 #define IKE_DH_2_STRING "MODP 1024 (Group 2)" 557 558 #define IKE_DH_5_ID 2 559 #define IKE_DH_5_STRING "MODP 1536 (Group 5)" 560 561 #define IKE_DH_2048_ID 14 562 #define IKE_DH_2048_STRING "MODP 2048 (Group 14)" 563 564 #define IKE_DH_3072_ID 15 565 #define IKE_DH_3072_STRING "MODP 3072 (Group 15)" 566 567 #define IKE_DH_4096_ID 16 568 #define IKE_DH_4096_STRING "MODP 4096 (Group 16)" 569 570 571 // Encryption algorithm for IKE 572 struct IKE_CRYPTO 573 { 574 UINT CryptoId; // ID 575 char *Name; // Name 576 UINT KeySizes[16]; // Key size candidate 577 UINT BlockSize; // Block size 578 bool VariableKeySize; // Whether the key size is variable 579 }; 580 581 // IKE encryption key 582 struct IKE_CRYPTO_KEY 583 { 584 IKE_CRYPTO *Crypto; 585 void *Data; // Key data 586 UINT Size; // Key size 587 588 DES_KEY_VALUE *DesKey1, *DesKey2, *DesKey3; // DES key 589 AES_KEY_VALUE *AesKey; // AES key 590 }; 591 592 // IKE hash algorithm 593 struct IKE_HASH 594 { 595 UINT HashId; // ID 596 char *Name; // Name 597 UINT HashSize; // Output size 598 }; 599 600 // DH algorithm for IKE 601 struct IKE_DH 602 { 603 UINT DhId; // ID 604 char *Name; // Name 605 UINT KeySize; // Key size 606 }; 607 608 #define MAX_IKE_ENGINE_ELEMENTS 64 609 610 // Encryption engine for IKE 611 struct IKE_ENGINE 612 { 613 IKE_CRYPTO *IkeCryptos[MAX_IKE_ENGINE_ELEMENTS]; // Encryption algorithm list that is used in the IKE 614 IKE_HASH *IkeHashes[MAX_IKE_ENGINE_ELEMENTS]; // Hash algorithm list that is used in the IKE 615 IKE_DH *IkeDhs[MAX_IKE_ENGINE_ELEMENTS]; // DH algorithm list that is used in the IKE 616 617 IKE_CRYPTO *EspCryptos[MAX_IKE_ENGINE_ELEMENTS]; // Encryption algorithm list that is used by ESP 618 IKE_HASH *EspHashes[MAX_IKE_ENGINE_ELEMENTS]; // Hash algorithm list that is used by ESP 619 IKE_DH *EspDhs[MAX_IKE_ENGINE_ELEMENTS]; // DH algorithm list that is used by ESP 620 621 LIST *CryptosList; 622 LIST *HashesList; 623 LIST *DhsList; 624 }; 625 626 // IKE encryption parameters 627 struct IKE_CRYPTO_PARAM 628 { 629 IKE_CRYPTO_KEY *Key; // Key 630 UCHAR Iv[IKE_MAX_BLOCK_SIZE]; // IV 631 UCHAR NextIv[IKE_MAX_BLOCK_SIZE]; // IV to be used next 632 }; 633 634 635 // Function prototype 636 IKE_PACKET *IkeParseHeader(void *data, UINT size, IKE_CRYPTO_PARAM *cparam); 637 IKE_PACKET *IkeParse(void *data, UINT size, IKE_CRYPTO_PARAM *cparam); 638 IKE_PACKET *IkeParseEx(void *data, UINT size, IKE_CRYPTO_PARAM *cparam, bool header_only); 639 void IkeFree(IKE_PACKET *p); 640 IKE_PACKET *IkeNew(UINT64 init_cookie, UINT64 resp_cookie, UCHAR exchange_type, 641 bool encrypted, bool commit, bool auth_only, UINT msg_id, 642 LIST *payload_list); 643 644 void IkeDebugPrintPayloads(LIST *o, UINT depth); 645 void IkeDebugUdpSendRawPacket(IKE_PACKET *p); 646 647 BUF *IkeEncrypt(void *data, UINT size, IKE_CRYPTO_PARAM *cparam); 648 BUF *IkeEncryptWithPadding(void *data, UINT size, IKE_CRYPTO_PARAM *cparam); 649 BUF *IkeDecrypt(void *data, UINT size, IKE_CRYPTO_PARAM *cparam); 650 651 LIST *IkeParsePayloadList(void *data, UINT size, UCHAR first_payload); 652 LIST *IkeParsePayloadListEx(void *data, UINT size, UCHAR first_payload, UINT *total_read_size); 653 void IkeFreePayloadList(LIST *o); 654 UINT IkeGetPayloadNum(LIST *o, UINT payload_type); 655 IKE_PACKET_PAYLOAD *IkeGetPayload(LIST *o, UINT payload_type, UINT index); 656 657 IKE_PACKET_PAYLOAD *IkeParsePayload(UINT payload_type, BUF *b); 658 void IkeFreePayload(IKE_PACKET_PAYLOAD *p); 659 bool IkeParseDataPayload(IKE_PACKET_DATA_PAYLOAD *t, BUF *b); 660 void IkeFreeDataPayload(IKE_PACKET_DATA_PAYLOAD *t); 661 bool IkeParseSaPayload(IKE_PACKET_SA_PAYLOAD *t, BUF *b); 662 void IkeFreeSaPayload(IKE_PACKET_SA_PAYLOAD *t); 663 bool IkeParseProposalPayload(IKE_PACKET_PROPOSAL_PAYLOAD *t, BUF *b); 664 void IkeFreeProposalPayload(IKE_PACKET_PROPOSAL_PAYLOAD *t); 665 bool IkeParseTransformPayload(IKE_PACKET_TRANSFORM_PAYLOAD *t, BUF *b); 666 void IkeFreeTransformPayload(IKE_PACKET_TRANSFORM_PAYLOAD *t); 667 LIST *IkeParseTransformValueList(BUF *b); 668 void IkeFreeTransformValueList(LIST *o); 669 bool IkeParseIdPayload(IKE_PACKET_ID_PAYLOAD *t, BUF *b); 670 void IkeFreeIdPayload(IKE_PACKET_ID_PAYLOAD *t); 671 bool IkeParseCertPayload(IKE_PACKET_CERT_PAYLOAD *t, BUF *b); 672 void IkeFreeCertPayload(IKE_PACKET_CERT_PAYLOAD *t); 673 bool IkeParseCertRequestPayload(IKE_PACKET_CERT_REQUEST_PAYLOAD *t, BUF *b); 674 void IkeFreeCertRequestPayload(IKE_PACKET_CERT_REQUEST_PAYLOAD *t); 675 bool IkeParseNoticePayload(IKE_PACKET_NOTICE_PAYLOAD *t, BUF *b); 676 void IkeFreeNoticePayload(IKE_PACKET_NOTICE_PAYLOAD *t); 677 bool IkeParseDeletePayload(IKE_PACKET_DELETE_PAYLOAD *t, BUF *b); 678 void IkeFreeDeletePayload(IKE_PACKET_DELETE_PAYLOAD *t); 679 bool IkeParseNatOaPayload(IKE_PACKET_NAT_OA_PAYLOAD *t, BUF *b); 680 681 682 bool IkeCompareHash(IKE_PACKET_PAYLOAD *hash_payload, void *hash_data, UINT hash_size); 683 684 IKE_PACKET_PAYLOAD *IkeNewPayload(UINT payload_type); 685 IKE_PACKET_PAYLOAD *IkeNewDataPayload(UCHAR payload_type, void *data, UINT size); 686 IKE_PACKET_PAYLOAD *IkeNewNatOaPayload(UCHAR payload_type, IP *ip); 687 IKE_PACKET_PAYLOAD *IkeNewSaPayload(LIST *payload_list); 688 IKE_PACKET_PAYLOAD *IkeNewProposalPayload(UCHAR number, UCHAR protocol_id, void *spi, UINT spi_size, LIST *payload_list); 689 IKE_PACKET_PAYLOAD *IkeNewTransformPayload(UCHAR number, UCHAR transform_id, LIST *value_list); 690 IKE_PACKET_TRANSFORM_VALUE *IkeNewTransformValue(UCHAR type, UINT value); 691 IKE_PACKET_PAYLOAD *IkeNewIdPayload(UCHAR id_type, UCHAR protocol_id, USHORT port, void *id_data, UINT id_size); 692 IKE_PACKET_PAYLOAD *IkeNewCertPayload(UCHAR cert_type, void *cert_data, UINT cert_size); 693 IKE_PACKET_PAYLOAD *IkeNewCertRequestPayload(UCHAR cert_type, void *data, UINT size); 694 IKE_PACKET_PAYLOAD *IkeNewNoticePayload(UCHAR protocol_id, USHORT message_type, 695 void *spi, UINT spi_size, 696 void *message, UINT message_size); 697 IKE_PACKET_PAYLOAD *IkeNewDeletePayload(UCHAR protocol_id, LIST *spi_list); 698 699 IKE_PACKET_PAYLOAD *IkeNewNoticeErrorInvalidCookiePayload(UINT64 init_cookie, UINT64 resp_cookie); 700 IKE_PACKET_PAYLOAD *IkeNewNoticeErrorInvalidExchangeTypePayload(UINT64 init_cookie, UINT64 resp_cookie, UCHAR exchange_type); 701 IKE_PACKET_PAYLOAD *IkeNewNoticeErrorInvalidSpiPayload(UINT spi); 702 IKE_PACKET_PAYLOAD *IkeNewNoticeErrorNoProposalChosenPayload(bool quick_mode, UINT64 init_cookie, UINT64 resp_cookie); 703 IKE_PACKET_PAYLOAD *IkeNewNoticeDpdPayload(bool ack, UINT64 init_cookie, UINT64 resp_cookie, UINT seq_no); 704 705 UCHAR IkeGetFirstPayloadType(LIST *o); 706 BUF *IkeBuild(IKE_PACKET *p, IKE_CRYPTO_PARAM *cparam); 707 BUF *IkeBuildEx(IKE_PACKET *p, IKE_CRYPTO_PARAM *cparam, bool use_original_decrypted); 708 BUF *IkeBuildPayloadList(LIST *o); 709 BUF *IkeBuildPayload(IKE_PACKET_PAYLOAD *p); 710 BUF *IkeBuildDataPayload(IKE_PACKET_DATA_PAYLOAD *t); 711 BUF *IkeBuildSaPayload(IKE_PACKET_SA_PAYLOAD *t); 712 BUF *IkeBuildProposalPayload(IKE_PACKET_PROPOSAL_PAYLOAD *t); 713 BUF *IkeBuildTransformPayload(IKE_PACKET_TRANSFORM_PAYLOAD *t); 714 BUF *IkeBuildTransformValue(IKE_PACKET_TRANSFORM_VALUE *v); 715 BUF *IkeBuildTransformValueList(LIST *o); 716 BUF *IkeBuildIdPayload(IKE_PACKET_ID_PAYLOAD *t); 717 BUF *IkeBuildCertPayload(IKE_PACKET_CERT_PAYLOAD *t); 718 BUF *IkeBuildCertRequestPayload(IKE_PACKET_CERT_REQUEST_PAYLOAD *t); 719 BUF *IkeBuildNoticePayload(IKE_PACKET_NOTICE_PAYLOAD *t); 720 BUF *IkeBuildDeletePayload(IKE_PACKET_DELETE_PAYLOAD *t); 721 722 BUF *IkeBuildTransformPayload(IKE_PACKET_TRANSFORM_PAYLOAD *t); 723 UINT IkeGetTransformValue(IKE_PACKET_TRANSFORM_PAYLOAD *t, UINT type, UINT index); 724 UINT IkeGetTransformValueNum(IKE_PACKET_TRANSFORM_PAYLOAD *t, UINT type); 725 726 UCHAR IkeStrToPhase1CryptId(char *name); 727 UCHAR IkeStrToPhase1HashId(char *name); 728 UCHAR IkeStrToPhase2CryptId(char *name); 729 UCHAR IkeStrToPhase2HashId(char *name); 730 BUF *IkeStrToPassword(char *str); 731 UINT IkePhase1CryptIdToKeySize(UCHAR id); 732 UINT IkePhase2CryptIdToKeySize(UCHAR id); 733 734 UINT IkeNewSpi(); 735 736 IKE_ENGINE *NewIkeEngine(); 737 IKE_CRYPTO *NewIkeCrypto(IKE_ENGINE *e, UINT crypto_id, char *name, UINT *key_sizes, UINT num_key_sizes, UINT block_size); 738 IKE_HASH *NewIkeHash(IKE_ENGINE *e, UINT hash_id, char *name, UINT size); 739 IKE_DH *NewIkeDh(IKE_ENGINE *e, UINT dh_id, char *name, UINT key_size); 740 void FreeIkeEngine(IKE_ENGINE *e); 741 void FreeIkeCrypto(IKE_CRYPTO *c); 742 void FreeIkeHash(IKE_HASH *h); 743 void FreeIkeDh(IKE_DH *d); 744 IKE_CRYPTO *GetIkeCrypto(IKE_ENGINE *e, bool for_esp, UINT i); 745 IKE_HASH *GetIkeHash(IKE_ENGINE *e, bool for_esp, UINT i); 746 IKE_DH *GetIkeDh(IKE_ENGINE *e, bool for_esp, UINT i); 747 748 void IkeHash(IKE_HASH *h, void *dst, void *src, UINT size); 749 void IkeHMac(IKE_HASH *h, void *dst, void *key, UINT key_size, void *data, UINT data_size); 750 void IkeHMacBuf(IKE_HASH *h, void *dst, BUF *key, BUF *data); 751 752 IKE_CRYPTO_KEY *IkeNewKey(IKE_CRYPTO *c, void *data, UINT size); 753 bool IkeCheckKeySize(IKE_CRYPTO *c, UINT size); 754 void IkeFreeKey(IKE_CRYPTO_KEY *k); 755 void IkeCryptoEncrypt(IKE_CRYPTO_KEY *k, void *dst, void *src, UINT size, void *ivec); 756 void IkeCryptoDecrypt(IKE_CRYPTO_KEY *k, void *dst, void *src, UINT size, void *ivec); 757 758 DH_CTX *IkeDhNewCtx(IKE_DH *d); 759 void IkeDhFreeCtx(DH_CTX *dh); 760 761 762 #endif // IPSEC_PACKET_H 763 764 765