ike.h
Go to the documentation of this file.
1 /**
2  * @file ike.h
3  * @brief IKEv2 (Internet Key Exchange Protocol)
4  *
5  * @section License
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  *
9  * Copyright (C) 2022-2026 Oryx Embedded SARL. All rights reserved.
10  *
11  * This file is part of CycloneIPSEC Open.
12  *
13  * This program is free software; you can redistribute it and/or
14  * modify it under the terms of the GNU General Public License
15  * as published by the Free Software Foundation; either version 2
16  * of the License, or (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software Foundation,
25  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
26  *
27  * @author Oryx Embedded SARL (www.oryx-embedded.com)
28  * @version 2.6.6
29  **/
30 
31 #ifndef _IKE_H
32 #define _IKE_H
33 
34 //Dependencies
35 #include "ipsec/ipsec.h"
38 #include "pkix/x509_common.h"
39 
40 //IKEv2 support
41 #ifndef IKE_SUPPORT
42  #define IKE_SUPPORT ENABLED
43 #elif (IKE_SUPPORT != ENABLED && IKE_SUPPORT != DISABLED)
44  #error IKE_SUPPORT parameter is not valid
45 #endif
46 
47 //Stack size required to run the IKE service
48 #ifndef IKE_STACK_SIZE
49  #define IKE_STACK_SIZE 650
50 #elif (IKE_STACK_SIZE < 1)
51  #error IKE_STACK_SIZE parameter is not valid
52 #endif
53 
54 //Priority at which the IKE service should run
55 #ifndef IKE_PRIORITY
56  #define IKE_PRIORITY OS_TASK_PRIORITY_NORMAL
57 #endif
58 
59 //IKE tick interval
60 #ifndef IKE_TICK_INTERVAL
61  #define IKE_TICK_INTERVAL 500
62 #elif (IKE_TICK_INTERVAL < 100)
63  #error IKE_TICK_INTERVAL parameter is not valid
64 #endif
65 
66 //Default lifetime for IKE SAs
67 #ifndef IKE_DEFAULT_SA_LIFETIME
68  #define IKE_DEFAULT_SA_LIFETIME 14400000
69 #elif (IKE_DEFAULT_SA_LIFETIME < 1000)
70  #error IKE_DEFAULT_SA_LIFETIME parameter is not valid
71 #endif
72 
73 //Default lifetime for Child SAs
74 #ifndef IKE_DEFAULT_CHILD_SA_LIFETIME
75  #define IKE_DEFAULT_CHILD_SA_LIFETIME 3600000
76 #elif (IKE_DEFAULT_CHILD_SA_LIFETIME < 1000)
77  #error IKE_DEFAULT_CHILD_SA_LIFETIME parameter is not valid
78 #endif
79 
80 //Certificate authentication
81 #ifndef IKE_CERT_AUTH_SUPPORT
82  #define IKE_CERT_AUTH_SUPPORT ENABLED
83 #elif (IKE_CERT_AUTH_SUPPORT != ENABLED && IKE_CERT_AUTH_SUPPORT != DISABLED)
84  #error IKE_CERT_AUTH_SUPPORT parameter is not valid
85 #endif
86 
87 //Pre-shared key authentication
88 #ifndef IKE_PSK_AUTH_SUPPORT
89  #define IKE_PSK_AUTH_SUPPORT ENABLED
90 #elif (IKE_PSK_AUTH_SUPPORT != ENABLED && IKE_PSK_AUTH_SUPPORT != DISABLED)
91  #error IKE_PSK_AUTH_SUPPORT parameter is not valid
92 #endif
93 
94 //Cookie support
95 #ifndef IKE_COOKIE_SUPPORT
96  #define IKE_COOKIE_SUPPORT DISABLED
97 #elif (IKE_COOKIE_SUPPORT != ENABLED && IKE_COOKIE_SUPPORT != DISABLED)
98  #error IKE_COOKIE_SUPPORT parameter is not valid
99 #endif
100 
101 //INITIAL_CONTACT notification support
102 #ifndef IKE_INITIAL_CONTACT_SUPPORT
103  #define IKE_INITIAL_CONTACT_SUPPORT ENABLED
104 #elif (IKE_INITIAL_CONTACT_SUPPORT != ENABLED && IKE_INITIAL_CONTACT_SUPPORT != DISABLED)
105  #error IKE_INITIAL_CONTACT_SUPPORT parameter is not valid
106 #endif
107 
108 //SIGNATURE_HASH_ALGORITHMS notification support
109 #ifndef IKE_SIGN_HASH_ALGOS_SUPPORT
110  #define IKE_SIGN_HASH_ALGOS_SUPPORT ENABLED
111 #elif (IKE_SIGN_HASH_ALGOS_SUPPORT != ENABLED && IKE_SIGN_HASH_ALGOS_SUPPORT != DISABLED)
112  #error IKE_SIGN_HASH_ALGOS_SUPPORT parameter is not valid
113 #endif
114 
115 //CREATE_CHILD_SA support
116 #ifndef IKE_CREATE_CHILD_SA_SUPPORT
117  #define IKE_CREATE_CHILD_SA_SUPPORT ENABLED
118 #elif (IKE_CREATE_CHILD_SA_SUPPORT != ENABLED && IKE_CREATE_CHILD_SA_SUPPORT != DISABLED)
119  #error IKE_CREATE_CHILD_SA_SUPPORT parameter is not valid
120 #endif
121 
122 //Child SA perfect forward secrecy support
123 #ifndef IKE_CHILD_SA_PFS_SUPPORT
124  #define IKE_CHILD_SA_PFS_SUPPORT DISABLED
125 #elif (IKE_CHILD_SA_PFS_SUPPORT != ENABLED && IKE_CHILD_SA_PFS_SUPPORT != DISABLED)
126  #error IKE_CHILD_SA_PFS_SUPPORT parameter is not valid
127 #endif
128 
129 //Reauthentication support
130 #if (IKE_CREATE_CHILD_SA_SUPPORT == DISABLED)
131  #define IKE_REAUTH_SUPPORT ENABLED
132 #else
133  #define IKE_REAUTH_SUPPORT DISABLED
134 #endif
135 
136 //Dead peer detection support
137 #ifndef IKE_DPD_SUPPORT
138  #define IKE_DPD_SUPPORT ENABLED
139 #elif (IKE_DPD_SUPPORT != ENABLED && IKE_DPD_SUPPORT != DISABLED)
140  #error IKE_DPD_SUPPORT parameter is not valid
141 #endif
142 
143 //NAT traversal support
144 #ifndef IKE_NAT_TRAVERSAL_SUPPORT
145  #define IKE_NAT_TRAVERSAL_SUPPORT DISABLED
146 #elif (IKE_NAT_TRAVERSAL_SUPPORT != ENABLED && IKE_NAT_TRAVERSAL_SUPPORT != DISABLED)
147  #error IKE_NAT_TRAVERSAL_SUPPORT parameter is not valid
148 #endif
149 
150 //Default NAT keepalive interval
151 #ifndef IKE_DEFAULT_NAT_KEEPALIVE_INTERVAL
152  #define IKE_DEFAULT_NAT_KEEPALIVE_INTERVAL 20000
153 #elif (IKE_DEFAULT_NAT_KEEPALIVE_INTERVAL < 0)
154  #error IKE_DEFAULT_NAT_KEEPALIVE_INTERVAL parameter is not valid
155 #endif
156 
157 //Include a specific traffic selector based on the triggering packet
158 #ifndef IKE_SPECIFIC_TS_SUPPORT
159  #define IKE_SPECIFIC_TS_SUPPORT ENABLED
160 #elif (IKE_SPECIFIC_TS_SUPPORT != ENABLED && IKE_SPECIFIC_TS_SUPPORT != DISABLED)
161  #error IKE_SPECIFIC_TS_SUPPORT parameter is not valid
162 #endif
163 
164 //Maximum number of retransmissions of IKE requests
165 #ifndef IKE_MAX_RETRIES
166  #define IKE_MAX_RETRIES 5
167 #elif (IKE_MAX_RETRIES < 1)
168  #error IKE_MAX_RETRIES parameter is not valid
169 #endif
170 
171 //Initial retransmission timeout
172 #ifndef IKE_INIT_TIMEOUT
173  #define IKE_INIT_TIMEOUT 3000
174 #elif (IKE_INIT_TIMEOUT < 1000)
175  #error IKE_INIT_TIMEOUT parameter is not valid
176 #endif
177 
178 //Maximum retransmission timeout
179 #ifndef IKE_MAX_TIMEOUT
180  #define IKE_MAX_TIMEOUT 60000
181 #elif (IKE_MAX_TIMEOUT < 1000)
182  #error IKE_MAX_TIMEOUT parameter is not valid
183 #endif
184 
185 //Timeout for half-open IKE SAs
186 #ifndef IKE_HALF_OPEN_TIMEOUT
187  #define IKE_HALF_OPEN_TIMEOUT 30000
188 #elif (IKE_HALF_OPEN_TIMEOUT < 1000)
189  #error IKE_HALF_OPEN_TIMEOUT parameter is not valid
190 #endif
191 
192 //Maximum jitter in percent applied randomly to calculated timeouts
193 #ifndef IKE_RANDOM_JITTER
194  #define IKE_RANDOM_JITTER 10
195 #elif (IKE_RANDOM_JITTER < 0 || IKE_RANDOM_JITTER > 100)
196  #error IKE_RANDOM_JITTER parameter is not valid
197 #endif
198 
199 //Maximum size of IKE messages
200 #ifndef IKE_MAX_MSG_SIZE
201  #define IKE_MAX_MSG_SIZE 1452
202 #elif (IKE_MAX_MSG_SIZE < 1280)
203  #error IKE_MAX_MSG_SIZE parameter is not valid
204 #endif
205 
206 //Minimum size for cookies
207 #ifndef IKE_MIN_COOKIE_SIZE
208  #define IKE_MIN_COOKIE_SIZE 1
209 #elif (IKE_MIN_COOKIE_SIZE < 1)
210  #error IKE_MIN_COOKIE_SIZE parameter is not valid
211 #endif
212 
213 //Maximum size for cookies
214 #ifndef IKE_MAX_COOKIE_SIZE
215  #define IKE_MAX_COOKIE_SIZE 64
216 #elif (IKE_MAX_COOKIE_SIZE < 64)
217  #error IKE_MAX_COOKIE_SIZE parameter is not valid
218 #endif
219 
220 //Minimum size for nonce
221 #ifndef IKE_MIN_NONCE_SIZE
222  #define IKE_MIN_NONCE_SIZE 16
223 #elif (IKE_MIN_NONCE_SIZE < 16 || IKE_MIN_NONCE_SIZE > 256)
224  #error IKE_MIN_NONCE_SIZE parameter is not valid
225 #endif
226 
227 //Default size for nonce
228 #ifndef IKE_DEFAULT_NONCE_SIZE
229  #define IKE_DEFAULT_NONCE_SIZE 32
230 #elif (IKE_DEFAULT_NONCE_SIZE < 16 || IKE_DEFAULT_NONCE_SIZE > 256)
231  #error IKE_DEFAULT_NONCE_SIZE parameter is not valid
232 #endif
233 
234 //Maximum size for nonce
235 #ifndef IKE_MAX_NONCE_SIZE
236  #define IKE_MAX_NONCE_SIZE 64
237 #elif (IKE_MAX_NONCE_SIZE < 16 || IKE_MAX_NONCE_SIZE > 256)
238  #error IKE_MAX_NONCE_SIZE parameter is not valid
239 #endif
240 
241 //Maximum length of ID
242 #ifndef IKE_MAX_ID_LEN
243  #define IKE_MAX_ID_LEN 64
244 #elif (IKE_MAX_ID_LEN < 0)
245  #error IKE_MAX_ID_LEN is not valid
246 #endif
247 
248 //Maximum length of pre-shared keys
249 #ifndef IKE_MAX_PSK_LEN
250  #define IKE_MAX_PSK_LEN 64
251 #elif (IKE_MAX_PSK_LEN < 0)
252  #error IKE_MAX_PSK_LEN is not valid
253 #endif
254 
255 //Maximum length of password
256 #ifndef IKE_MAX_PASSWORD_LEN
257  #define IKE_MAX_PASSWORD_LEN 32
258 #elif (IKE_MAX_PASSWORD_LEN < 0)
259  #error IKE_MAX_PASSWORD_LEN parameter is not valid
260 #endif
261 
262 //CBC cipher mode support
263 #ifndef IKE_CBC_SUPPORT
264  #define IKE_CBC_SUPPORT ENABLED
265 #elif (IKE_CBC_SUPPORT != ENABLED && IKE_CBC_SUPPORT != DISABLED)
266  #error IKE_CBC_SUPPORT parameter is not valid
267 #endif
268 
269 //CTR cipher mode support
270 #ifndef IKE_CTR_SUPPORT
271  #define IKE_CTR_SUPPORT DISABLED
272 #elif (IKE_CTR_SUPPORT != ENABLED && IKE_CTR_SUPPORT != DISABLED)
273  #error IKE_CTR_SUPPORT parameter is not valid
274 #endif
275 
276 //CCM_8 AEAD support
277 #ifndef IKE_CCM_8_SUPPORT
278  #define IKE_CCM_8_SUPPORT DISABLED
279 #elif (IKE_CCM_8_SUPPORT != ENABLED && IKE_CCM_8_SUPPORT != DISABLED)
280  #error IKE_CCM_8_SUPPORT parameter is not valid
281 #endif
282 
283 //CCM_12 AEAD support
284 #ifndef IKE_CCM_12_SUPPORT
285  #define IKE_CCM_12_SUPPORT DISABLED
286 #elif (IKE_CCM_12_SUPPORT != ENABLED && IKE_CCM_12_SUPPORT != DISABLED)
287  #error IKE_CCM_12_SUPPORT parameter is not valid
288 #endif
289 
290 //CCM_16 AEAD support
291 #ifndef IKE_CCM_16_SUPPORT
292  #define IKE_CCM_16_SUPPORT DISABLED
293 #elif (IKE_CCM_16_SUPPORT != ENABLED && IKE_CCM_16_SUPPORT != DISABLED)
294  #error IKE_CCM_16_SUPPORT parameter is not valid
295 #endif
296 
297 //GCM_8 AEAD support
298 #ifndef IKE_GCM_8_SUPPORT
299  #define IKE_GCM_8_SUPPORT DISABLED
300 #elif (IKE_GCM_8_SUPPORT != ENABLED && IKE_GCM_8_SUPPORT != DISABLED)
301  #error IKE_GCM_8_SUPPORT parameter is not valid
302 #endif
303 
304 //GCM_12 AEAD support
305 #ifndef IKE_GCM_12_SUPPORT
306  #define IKE_GCM_12_SUPPORT DISABLED
307 #elif (IKE_GCM_12_SUPPORT != ENABLED && IKE_GCM_12_SUPPORT != DISABLED)
308  #error IKE_GCM_12_SUPPORT parameter is not valid
309 #endif
310 
311 //GCM_16 AEAD support
312 #ifndef IKE_GCM_16_SUPPORT
313  #define IKE_GCM_16_SUPPORT ENABLED
314 #elif (IKE_GCM_16_SUPPORT != ENABLED && IKE_GCM_16_SUPPORT != DISABLED)
315  #error IKE_GCM_16_SUPPORT parameter is not valid
316 #endif
317 
318 //ChaCha20Poly1305 AEAD support
319 #ifndef IKE_CHACHA20_POLY1305_SUPPORT
320  #define IKE_CHACHA20_POLY1305_SUPPORT ENABLED
321 #elif (IKE_CHACHA20_POLY1305_SUPPORT != ENABLED && IKE_CHACHA20_POLY1305_SUPPORT != DISABLED)
322  #error IKE_CHACHA20_POLY1305_SUPPORT parameter is not valid
323 #endif
324 
325 //CMAC integrity support
326 #ifndef IKE_CMAC_AUTH_SUPPORT
327  #define IKE_CMAC_AUTH_SUPPORT DISABLED
328 #elif (IKE_CMAC_AUTH_SUPPORT != ENABLED && IKE_CMAC_AUTH_SUPPORT != DISABLED)
329  #error IKE_CMAC_AUTH_SUPPORT parameter is not valid
330 #endif
331 
332 //HMAC integrity support
333 #ifndef IKE_HMAC_AUTH_SUPPORT
334  #define IKE_HMAC_AUTH_SUPPORT ENABLED
335 #elif (IKE_HMAC_AUTH_SUPPORT != ENABLED && IKE_HMAC_AUTH_SUPPORT != DISABLED)
336  #error IKE_HMAC_AUTH_SUPPORT parameter is not valid
337 #endif
338 
339 //KMAC128 integrity support (experimental)
340 #ifndef IKE_KMAC128_AUTH_SUPPORT
341  #define IKE_KMAC128_AUTH_SUPPORT DISABLED
342 #elif (IKE_KMAC128_AUTH_SUPPORT != ENABLED && IKE_KMAC128_AUTH_SUPPORT != DISABLED)
343  #error IKE_KMAC128_AUTH_SUPPORT parameter is not valid
344 #endif
345 
346 //KMAC256 integrity support (experimental)
347 #ifndef IKE_KMAC256_AUTH_SUPPORT
348  #define IKE_KMAC256_AUTH_SUPPORT DISABLED
349 #elif (IKE_KMAC256_AUTH_SUPPORT != ENABLED && IKE_KMAC256_AUTH_SUPPORT != DISABLED)
350  #error IKE_KMAC256_AUTH_SUPPORT parameter is not valid
351 #endif
352 
353 //XCBC-MAC integrity support
354 #ifndef IKE_XCBC_MAC_AUTH_SUPPORT
355  #define IKE_XCBC_MAC_AUTH_SUPPORT DISABLED
356 #elif (IKE_XCBC_MAC_AUTH_SUPPORT != ENABLED && IKE_XCBC_MAC_AUTH_SUPPORT != DISABLED)
357  #error IKE_XCBC_MAC_AUTH_SUPPORT parameter is not valid
358 #endif
359 
360 //CMAC PRF support
361 #ifndef IKE_CMAC_PRF_SUPPORT
362  #define IKE_CMAC_PRF_SUPPORT DISABLED
363 #elif (IKE_CMAC_PRF_SUPPORT != ENABLED && IKE_CMAC_PRF_SUPPORT != DISABLED)
364  #error IKE_CMAC_PRF_SUPPORT parameter is not valid
365 #endif
366 
367 //HMAC PRF support
368 #ifndef IKE_HMAC_PRF_SUPPORT
369  #define IKE_HMAC_PRF_SUPPORT ENABLED
370 #elif (IKE_HMAC_PRF_SUPPORT != ENABLED && IKE_HMAC_PRF_SUPPORT != DISABLED)
371  #error IKE_HMAC_PRF_SUPPORT parameter is not valid
372 #endif
373 
374 //KMAC128 PRF support (experimental)
375 #ifndef IKE_KMAC128_PRF_SUPPORT
376  #define IKE_KMAC128_PRF_SUPPORT DISABLED
377 #elif (IKE_KMAC128_PRF_SUPPORT != ENABLED && IKE_KMAC128_PRF_SUPPORT != DISABLED)
378  #error IKE_KMAC128_PRF_SUPPORT parameter is not valid
379 #endif
380 
381 //KMAC256 PRF support (experimental)
382 #ifndef IKE_KMAC256_PRF_SUPPORT
383  #define IKE_KMAC256_PRF_SUPPORT DISABLED
384 #elif (IKE_KMAC256_PRF_SUPPORT != ENABLED && IKE_KMAC256_PRF_SUPPORT != DISABLED)
385  #error IKE_KMAC256_PRF_SUPPORT parameter is not valid
386 #endif
387 
388 //XCBC-MAC PRF support
389 #ifndef IKE_XCBC_MAC_PRF_SUPPORT
390  #define IKE_XCBC_MAC_PRF_SUPPORT DISABLED
391 #elif (IKE_XCBC_MAC_PRF_SUPPORT != ENABLED && IKE_XCBC_MAC_PRF_SUPPORT != DISABLED)
392  #error IKE_XCBC_MAC_PRF_SUPPORT parameter is not valid
393 #endif
394 
395 //IDEA cipher support (insecure)
396 #ifndef IKE_IDEA_SUPPORT
397  #define IKE_IDEA_SUPPORT DISABLED
398 #elif (IKE_IDEA_SUPPORT != ENABLED && IKE_IDEA_SUPPORT != DISABLED)
399  #error IKE_IDEA_SUPPORT parameter is not valid
400 #endif
401 
402 //DES cipher support (insecure)
403 #ifndef IKE_DES_SUPPORT
404  #define IKE_DES_SUPPORT DISABLED
405 #elif (IKE_DES_SUPPORT != ENABLED && IKE_DES_SUPPORT != DISABLED)
406  #error IKE_DES_SUPPORT parameter is not valid
407 #endif
408 
409 //Triple DES cipher support (weak)
410 #ifndef IKE_3DES_SUPPORT
411  #define IKE_3DES_SUPPORT DISABLED
412 #elif (IKE_3DES_SUPPORT != ENABLED && IKE_3DES_SUPPORT != DISABLED)
413  #error IKE_3DES_SUPPORT parameter is not valid
414 #endif
415 
416 //AES 128-bit cipher support
417 #ifndef IKE_AES_128_SUPPORT
418  #define IKE_AES_128_SUPPORT ENABLED
419 #elif (IKE_AES_128_SUPPORT != ENABLED && IKE_AES_128_SUPPORT != DISABLED)
420  #error IKE_AES_128_SUPPORT parameter is not valid
421 #endif
422 
423 //AES 192-bit cipher support
424 #ifndef IKE_AES_192_SUPPORT
425  #define IKE_AES_192_SUPPORT ENABLED
426 #elif (IKE_AES_192_SUPPORT != ENABLED && IKE_AES_192_SUPPORT != DISABLED)
427  #error IKE_AES_192_SUPPORT parameter is not valid
428 #endif
429 
430 //AES 256-bit cipher support
431 #ifndef IKE_AES_256_SUPPORT
432  #define IKE_AES_256_SUPPORT ENABLED
433 #elif (IKE_AES_256_SUPPORT != ENABLED && IKE_AES_256_SUPPORT != DISABLED)
434  #error IKE_AES_256_SUPPORT parameter is not valid
435 #endif
436 
437 //Camellia 128-bit cipher support
438 #ifndef IKE_CAMELLIA_128_SUPPORT
439  #define IKE_CAMELLIA_128_SUPPORT DISABLED
440 #elif (IKE_CAMELLIA_128_SUPPORT != ENABLED && IKE_CAMELLIA_128_SUPPORT != DISABLED)
441  #error IKE_CAMELLIA_128_SUPPORT parameter is not valid
442 #endif
443 
444 //Camellia 192-bit cipher support
445 #ifndef IKE_CAMELLIA_192_SUPPORT
446  #define IKE_CAMELLIA_192_SUPPORT DISABLED
447 #elif (IKE_CAMELLIA_192_SUPPORT != ENABLED && IKE_CAMELLIA_192_SUPPORT != DISABLED)
448  #error IKE_CAMELLIA_192_SUPPORT parameter is not valid
449 #endif
450 
451 //Camellia 256-bit cipher support
452 #ifndef IKE_CAMELLIA_256_SUPPORT
453  #define IKE_CAMELLIA_256_SUPPORT DISABLED
454 #elif (IKE_CAMELLIA_256_SUPPORT != ENABLED && IKE_CAMELLIA_256_SUPPORT != DISABLED)
455  #error IKE_CAMELLIA_256_SUPPORT parameter is not valid
456 #endif
457 
458 //SM4 cipher support (experimental)
459 #ifndef IKE_SM4_SUPPORT
460  #define IKE_SM4_SUPPORT DISABLED
461 #elif (IKE_SM4_SUPPORT != ENABLED && IKE_SM4_SUPPORT != DISABLED)
462  #error IKE_SM4_SUPPORT parameter is not valid
463 #endif
464 
465 //MD5 hash support (insecure)
466 #ifndef IKE_MD5_SUPPORT
467  #define IKE_MD5_SUPPORT DISABLED
468 #elif (IKE_MD5_SUPPORT != ENABLED && IKE_MD5_SUPPORT != DISABLED)
469  #error IKE_MD5_SUPPORT parameter is not valid
470 #endif
471 
472 //SHA-1 hash support (weak)
473 #ifndef IKE_SHA1_SUPPORT
474  #define IKE_SHA1_SUPPORT ENABLED
475 #elif (IKE_SHA1_SUPPORT != ENABLED && IKE_SHA1_SUPPORT != DISABLED)
476  #error IKE_SHA1_SUPPORT parameter is not valid
477 #endif
478 
479 //SHA-256 hash support
480 #ifndef IKE_SHA256_SUPPORT
481  #define IKE_SHA256_SUPPORT ENABLED
482 #elif (IKE_SHA256_SUPPORT != ENABLED && IKE_SHA256_SUPPORT != DISABLED)
483  #error IKE_SHA256_SUPPORT parameter is not valid
484 #endif
485 
486 //SHA-384 hash support
487 #ifndef IKE_SHA384_SUPPORT
488  #define IKE_SHA384_SUPPORT ENABLED
489 #elif (IKE_SHA384_SUPPORT != ENABLED && IKE_SHA384_SUPPORT != DISABLED)
490  #error IKE_SHA384_SUPPORT parameter is not valid
491 #endif
492 
493 //SHA-512 hash support
494 #ifndef IKE_SHA512_SUPPORT
495  #define IKE_SHA512_SUPPORT ENABLED
496 #elif (IKE_SHA512_SUPPORT != ENABLED && IKE_SHA512_SUPPORT != DISABLED)
497  #error IKE_SHA512_SUPPORT parameter is not valid
498 #endif
499 
500 //SHAKE128/256 hash support (experimental)
501 #ifndef IKE_SHAKE128_SUPPORT
502  #define IKE_SHAKE128_SUPPORT DISABLED
503 #elif (IKE_SHAKE128_SUPPORT != ENABLED && IKE_SHAKE128_SUPPORT != DISABLED)
504  #error IKE_SHAKE128_SUPPORT parameter is not valid
505 #endif
506 
507 //SHAKE256/512 hash support (experimental)
508 #ifndef IKE_SHAKE256_SUPPORT
509  #define IKE_SHAKE256_SUPPORT DISABLED
510 #elif (IKE_SHAKE256_SUPPORT != ENABLED && IKE_SHAKE256_SUPPORT != DISABLED)
511  #error IKE_SHAKE256_SUPPORT parameter is not valid
512 #endif
513 
514 //SM3 hash support (experimental)
515 #ifndef IKE_SM3_SUPPORT
516  #define IKE_SM3_SUPPORT DISABLED
517 #elif (IKE_SM3_SUPPORT != ENABLED && IKE_SM3_SUPPORT != DISABLED)
518  #error IKE_SM3_SUPPORT parameter is not valid
519 #endif
520 
521 //Tiger hash support
522 #ifndef IKE_TIGER_SUPPORT
523  #define IKE_TIGER_SUPPORT DISABLED
524 #elif (IKE_TIGER_SUPPORT != ENABLED && IKE_TIGER_SUPPORT != DISABLED)
525  #error IKE_TIGER_SUPPORT parameter is not valid
526 #endif
527 
528 //Diffie-Hellman key exchange support
529 #ifndef IKE_DH_KE_SUPPORT
530  #define IKE_DH_KE_SUPPORT ENABLED
531 #elif (IKE_DH_KE_SUPPORT != ENABLED && IKE_DH_KE_SUPPORT != DISABLED)
532  #error IKE_DH_KE_SUPPORT parameter is not valid
533 #endif
534 
535 //ECDH key exchange support
536 #ifndef IKE_ECDH_KE_SUPPORT
537  #define IKE_ECDH_KE_SUPPORT ENABLED
538 #elif (IKE_ECDH_KE_SUPPORT != ENABLED && IKE_ECDH_KE_SUPPORT != DISABLED)
539  #error IKE_ECDH_KE_SUPPORT parameter is not valid
540 #endif
541 
542 //RSA signature support
543 #ifndef IKE_RSA_SIGN_SUPPORT
544  #define IKE_RSA_SIGN_SUPPORT ENABLED
545 #elif (IKE_RSA_SIGN_SUPPORT != ENABLED && IKE_RSA_SIGN_SUPPORT != DISABLED)
546  #error IKE_RSA_SIGN_SUPPORT parameter is not valid
547 #endif
548 
549 //RSA-PSS signature support
550 #ifndef IKE_RSA_PSS_SIGN_SUPPORT
551  #define IKE_RSA_PSS_SIGN_SUPPORT DISABLED
552 #elif (IKE_RSA_PSS_SIGN_SUPPORT != ENABLED && IKE_RSA_PSS_SIGN_SUPPORT != DISABLED)
553  #error IKE_RSA_PSS_SIGN_SUPPORT parameter is not valid
554 #endif
555 
556 //DSA signature support
557 #ifndef IKE_DSA_SIGN_SUPPORT
558  #define IKE_DSA_SIGN_SUPPORT DISABLED
559 #elif (IKE_DSA_SIGN_SUPPORT != ENABLED && IKE_DSA_SIGN_SUPPORT != DISABLED)
560  #error IKE_DSA_SIGN_SUPPORT parameter is not valid
561 #endif
562 
563 //ECDSA signature support
564 #ifndef IKE_ECDSA_SIGN_SUPPORT
565  #define IKE_ECDSA_SIGN_SUPPORT ENABLED
566 #elif (IKE_ECDSA_SIGN_SUPPORT != ENABLED && IKE_ECDSA_SIGN_SUPPORT != DISABLED)
567  #error IKE_ECDSA_SIGN_SUPPORT parameter is not valid
568 #endif
569 
570 //SM2 signature capability (experimental)
571 #ifndef IKE_SM2_SIGN_SUPPORT
572  #define IKE_SM2_SIGN_SUPPORT DISABLED
573 #elif (IKE_SM2_SIGN_SUPPORT != ENABLED && IKE_SM2_SIGN_SUPPORT != DISABLED)
574  #error IKE_SM2_SIGN_SUPPORT parameter is not valid
575 #endif
576 
577 //Ed25519 signature support
578 #ifndef IKE_ED25519_SIGN_SUPPORT
579  #define IKE_ED25519_SIGN_SUPPORT ENABLED
580 #elif (IKE_ED25519_SIGN_SUPPORT != ENABLED && IKE_ED25519_SIGN_SUPPORT != DISABLED)
581  #error IKE_ED25519_SIGN_SUPPORT parameter is not valid
582 #endif
583 
584 //Ed448 signature support
585 #ifndef IKE_ED448_SIGN_SUPPORT
586  #define IKE_ED448_SIGN_SUPPORT DISABLED
587 #elif (IKE_ED448_SIGN_SUPPORT != ENABLED && IKE_ED448_SIGN_SUPPORT != DISABLED)
588  #error IKE_ED448_SIGN_SUPPORT parameter is not valid
589 #endif
590 
591 //NIST P-192 elliptic curve support (weak)
592 #ifndef IKE_ECP_192_SUPPORT
593  #define IKE_ECP_192_SUPPORT DISABLED
594 #elif (IKE_ECP_192_SUPPORT != ENABLED && IKE_ECP_192_SUPPORT != DISABLED)
595  #error IKE_ECP_192_SUPPORT parameter is not valid
596 #endif
597 
598 //NIST P-224 elliptic curve support
599 #ifndef IKE_ECP_224_SUPPORT
600  #define IKE_ECP_224_SUPPORT DISABLED
601 #elif (IKE_ECP_224_SUPPORT != ENABLED && IKE_ECP_224_SUPPORT != DISABLED)
602  #error IKE_ECP_224_SUPPORT parameter is not valid
603 #endif
604 
605 //NIST P-256 elliptic curve support
606 #ifndef IKE_ECP_256_SUPPORT
607  #define IKE_ECP_256_SUPPORT ENABLED
608 #elif (IKE_ECP_256_SUPPORT != ENABLED && IKE_ECP_256_SUPPORT != DISABLED)
609  #error IKE_ECP_256_SUPPORT parameter is not valid
610 #endif
611 
612 //NIST P-384 elliptic curve support
613 #ifndef IKE_ECP_384_SUPPORT
614  #define IKE_ECP_384_SUPPORT ENABLED
615 #elif (IKE_ECP_384_SUPPORT != ENABLED && IKE_ECP_384_SUPPORT != DISABLED)
616  #error IKE_ECP_384_SUPPORT parameter is not valid
617 #endif
618 
619 //NIST P-521 elliptic curve support
620 #ifndef IKE_ECP_521_SUPPORT
621  #define IKE_ECP_521_SUPPORT DISABLED
622 #elif (IKE_ECP_521_SUPPORT != ENABLED && IKE_ECP_521_SUPPORT != DISABLED)
623  #error IKE_ECP_521_SUPPORT parameter is not valid
624 #endif
625 
626 //brainpoolP224r1 elliptic curve support
627 #ifndef IKE_BRAINPOOLP224R1_SUPPORT
628  #define IKE_BRAINPOOLP224R1_SUPPORT DISABLED
629 #elif (IKE_BRAINPOOLP224R1_SUPPORT != ENABLED && IKE_BRAINPOOLP224R1_SUPPORT != DISABLED)
630  #error IKE_BRAINPOOLP224R1_SUPPORT parameter is not valid
631 #endif
632 
633 //brainpoolP256r1 elliptic curve support
634 #ifndef IKE_BRAINPOOLP256R1_SUPPORT
635  #define IKE_BRAINPOOLP256R1_SUPPORT DISABLED
636 #elif (IKE_BRAINPOOLP256R1_SUPPORT != ENABLED && IKE_BRAINPOOLP256R1_SUPPORT != DISABLED)
637  #error IKE_BRAINPOOLP256R1_SUPPORT parameter is not valid
638 #endif
639 
640 //brainpoolP384r1 elliptic curve support
641 #ifndef IKE_BRAINPOOLP384R1_SUPPORT
642  #define IKE_BRAINPOOLP384R1_SUPPORT DISABLED
643 #elif (IKE_BRAINPOOLP384R1_SUPPORT != ENABLED && IKE_BRAINPOOLP384R1_SUPPORT != DISABLED)
644  #error IKE_BRAINPOOLP384R1_SUPPORT parameter is not valid
645 #endif
646 
647 //brainpoolP512r1 elliptic curve support
648 #ifndef IKE_BRAINPOOLP512R1_SUPPORT
649  #define IKE_BRAINPOOLP512R1_SUPPORT DISABLED
650 #elif (IKE_BRAINPOOLP512R1_SUPPORT != ENABLED && IKE_BRAINPOOLP512R1_SUPPORT != DISABLED)
651  #error IKE_BRAINPOOLP512R1_SUPPORT parameter is not valid
652 #endif
653 
654 //SM2 elliptic curve support (experimental)
655 #ifndef IKE_SM2_SUPPORT
656  #define IKE_SM2_SUPPORT DISABLED
657 #elif (IKE_SM2_SUPPORT != ENABLED && IKE_SM2_SUPPORT != DISABLED)
658  #error IKE_SM2_SUPPORT parameter is not valid
659 #endif
660 
661 //Curve25519 elliptic curve support
662 #ifndef IKE_CURVE25519_SUPPORT
663  #define IKE_CURVE25519_SUPPORT ENABLED
664 #elif (IKE_CURVE25519_SUPPORT != ENABLED && IKE_CURVE25519_SUPPORT != DISABLED)
665  #error IKE_CURVE25519_SUPPORT parameter is not valid
666 #endif
667 
668 //Curve448 elliptic curve support
669 #ifndef IKE_CURVE448_SUPPORT
670  #define IKE_CURVE448_SUPPORT DISABLED
671 #elif (IKE_CURVE448_SUPPORT != ENABLED && IKE_CURVE448_SUPPORT != DISABLED)
672  #error IKE_CURVE448_SUPPORT parameter is not valid
673 #endif
674 
675 //ML-KEM-512 key encapsulation mechanism support (experimental)
676 #ifndef IKE_MLKEM512_SUPPORT
677  #define IKE_MLKEM512_SUPPORT DISABLED
678 #elif (IKE_MLKEM512_SUPPORT != ENABLED && IKE_MLKEM512_SUPPORT != DISABLED)
679  #error IKE_MLKEM512_SUPPORT parameter is not valid
680 #endif
681 
682 //ML-KEM-768 key encapsulation mechanism support (experimental)
683 #ifndef IKE_MLKEM768_SUPPORT
684  #define IKE_MLKEM768_SUPPORT DISABLED
685 #elif (IKE_MLKEM768_SUPPORT != ENABLED && IKE_MLKEM768_SUPPORT != DISABLED)
686  #error IKE_MLKEM768_SUPPORT parameter is not valid
687 #endif
688 
689 //ML-KEM-1024 key encapsulation mechanism support (experimental)
690 #ifndef IKE_MLKEM1024_SUPPORT
691  #define IKE_MLKEM1024_SUPPORT DISABLED
692 #elif (IKE_MLKEM1024_SUPPORT != ENABLED && IKE_MLKEM1024_SUPPORT != DISABLED)
693  #error IKE_MLKEM1024_SUPPORT parameter is not valid
694 #endif
695 
696 //Minimum acceptable size for Diffie-Hellman prime modulus
697 #ifndef IKE_MIN_DH_MODULUS_SIZE
698  #define IKE_MIN_DH_MODULUS_SIZE 1024
699 #elif (IKE_MIN_DH_MODULUS_SIZE < 768)
700  #error IKE_MIN_DH_MODULUS_SIZE parameter is not valid
701 #endif
702 
703 //Maximum acceptable size for Diffie-Hellman prime modulus
704 #ifndef IKE_MAX_DH_MODULUS_SIZE
705  #define IKE_MAX_DH_MODULUS_SIZE 2048
706 #elif (IKE_MAX_DH_MODULUS_SIZE < IKE_PREFERRED_DH_MODULUS_SIZE)
707  #error IKE_MAX_DH_MODULUS_SIZE parameter is not valid
708 #endif
709 
710 //Minimum acceptable size for RSA modulus
711 #ifndef IKE_MIN_RSA_MODULUS_SIZE
712  #define IKE_MIN_RSA_MODULUS_SIZE 1024
713 #elif (IKE_MIN_RSA_MODULUS_SIZE < 1024)
714  #error IKE_MIN_RSA_MODULUS_SIZE parameter is not valid
715 #endif
716 
717 //Maximum acceptable size for RSA modulus
718 #ifndef IKE_MAX_RSA_MODULUS_SIZE
719  #define IKE_MAX_RSA_MODULUS_SIZE 4096
720 #elif (IKE_MAX_RSA_MODULUS_SIZE < IKE_MIN_RSA_MODULUS_SIZE)
721  #error IKE_MAX_RSA_MODULUS_SIZE parameter is not valid
722 #endif
723 
724 //Minimum acceptable size for DSA prime modulus
725 #ifndef IKE_MIN_DSA_MODULUS_SIZE
726  #define IKE_MIN_DSA_MODULUS_SIZE 1024
727 #elif (IKE_MIN_DSA_MODULUS_SIZE < 1024)
728  #error IKE_MIN_DSA_MODULUS_SIZE parameter is not valid
729 #endif
730 
731 //Maximum acceptable size for DSA prime modulus
732 #ifndef IKE_MAX_DSA_MODULUS_SIZE
733  #define IKE_MAX_DSA_MODULUS_SIZE 4096
734 #elif (IKE_MAX_DSA_MODULUS_SIZE < IKE_MIN_DSA_MODULUS_SIZE)
735  #error IKE_MAX_DSA_MODULUS_SIZE parameter is not valid
736 #endif
737 
738 //Maximum length of IKE SA key material
739 #ifndef IKE_MAX_SA_KEY_MAT_LEN
740  #define IKE_MAX_SA_KEY_MAT_LEN 392
741 #elif (IKE_MAX_SA_KEY_MAT_LEN < 1)
742  #error IKE_MAX_SA_KEY_MAT_LEN parameter is not valid
743 #endif
744 
745 //Maximum length of Child SA key material
746 #ifndef IKE_MAX_CHILD_SA_KEY_MAT_LEN
747  #define IKE_MAX_CHILD_SA_KEY_MAT_LEN 200
748 #elif (IKE_MAX_CHILD_SA_KEY_MAT_LEN < 1)
749  #error IKE_MAX_CHILD_SA_KEY_MAT_LEN parameter is not valid
750 #endif
751 
752 //Allocate memory block
753 #ifndef ikeAllocMem
754  #define ikeAllocMem(size) osAllocMem(size)
755 #endif
756 
757 //Deallocate memory block
758 #ifndef ikeFreeMem
759  #define ikeFreeMem(p) osFreeMem(p)
760 #endif
761 
762 //Maximum digest size
763 #if (IKE_SHA512_SUPPORT == ENABLED)
764  #define IKE_MAX_DIGEST_SIZE 64
765 #elif (IKE_SHA384_SUPPORT == ENABLED)
766  #define IKE_MAX_DIGEST_SIZE 48
767 #else
768  #define IKE_MAX_DIGEST_SIZE 32
769 #endif
770 
771 //Maximum size of the ICV field
772 #if (IKE_HMAC_AUTH_SUPPORT == ENABLED && IKE_SHA512_SUPPORT == ENABLED)
773  #define IKE_MAX_ICV_SIZE 32
774 #elif (IKE_HMAC_AUTH_SUPPORT == ENABLED && IKE_SHA384_SUPPORT == ENABLED)
775  #define IKE_MAX_ICV_SIZE 24
776 #elif (IKE_HMAC_AUTH_SUPPORT == ENABLED && IKE_SHA256_SUPPORT == ENABLED)
777  #define IKE_MAX_ICV_SIZE 16
778 #else
779  #define IKE_MAX_ICV_SIZE 12
780 #endif
781 
782 //Maximum shared secret length (Diffie-Hellman key exchange)
783 #if (IKE_DH_KE_SUPPORT == ENABLED)
784  #define IKE_MAX_DH_SHARED_SECRET_LEN ((IKE_MAX_DH_MODULUS_SIZE + 7) / 8)
785 #else
786  #define IKE_MAX_DH_SHARED_SECRET_LEN 0
787 #endif
788 
789 //Maximum shared secret length (ECDH key exchange)
790 #if (IKE_ECDH_KE_SUPPORT == ENABLED && IKE_ECP_521_SUPPORT == ENABLED)
791  #define IKE_MAX_ECDH_SHARED_SECRET_LEN 66
792 #elif (IKE_ECDH_KE_SUPPORT == ENABLED && IKE_CURVE448_SUPPORT == ENABLED)
793  #define IKE_MAX_ECDH_SHARED_SECRET_LEN 56
794 #elif (IKE_ECDH_KE_SUPPORT == ENABLED && IKE_ECP_384_SUPPORT == ENABLED)
795  #define IKE_MAX_ECDH_SHARED_SECRET_LEN 48
796 #else
797  #define IKE_MAX_ECDH_SHARED_SECRET_LEN 32
798 #endif
799 
800 //Maximum shared secret length
801 #if (IKE_MAX_DH_SHARED_SECRET_LEN >= IKE_MAX_ECDH_SHARED_SECRET_LEN)
802  #define IKE_MAX_SHARED_SECRET_LEN IKE_MAX_DH_SHARED_SECRET_LEN
803 #else
804  #define IKE_MAX_SHARED_SECRET_LEN IKE_MAX_ECDH_SHARED_SECRET_LEN
805 #endif
806 
807 //Major version of the IKE protocol
808 #define IKE_MAJOR_VERSION 2
809 //Minor version of the IKE protocol
810 #define IKE_MINOR_VERSION 0
811 
812 //UDP port number used by IKE
813 #define IKE_PORT 500
814 
815 //IKE prefix size
816 #define IKE_PREFIX_SIZE 4
817 //IKE prefix value
818 #define IKE_PREFIX_VALUE 0
819 
820 //NAT-keepalive packet size
821 #define IKE_NAT_KEEPALIVE_PACKET_SIZE 1
822 //NAT-keepalive packet value
823 #define IKE_NAT_KEEPALIVE_PACKET_VALUE 0xFF
824 
825 //IKE SPI size
826 #define IKE_SPI_SIZE 8
827 //SHA-1 digest size
828 #define IKE_SHA1_DIGEST_SIZE 20
829 
830 //Forward declaration of IkeContext structure
831 struct _IkeContext;
832 #define IkeContext struct _IkeContext
833 
834 //Forward declaration of IkeSaEntry structure
835 struct _IkeSaEntry;
836 #define IkeSaEntry struct _IkeSaEntry
837 
838 //Forward declaration of IkeChildSaEntry structure
839 struct _IkeChildSaEntry;
840 #define IkeChildSaEntry struct _IkeChildSaEntry
841 
842 //C++ guard
843 #ifdef __cplusplus
844 extern "C" {
845 #endif
846 
847 
848 /**
849  * @brief Exchange types
850  **/
851 
852 typedef enum
853 {
854  IKE_EXCHANGE_TYPE_IKE_SA_INIT = 34, ///<IKE_SA_INIT
855  IKE_EXCHANGE_TYPE_IKE_AUTH = 35, ///<IKE_AUTH
856  IKE_EXCHANGE_TYPE_CREATE_CHILD_SA = 36, ///<CREATE_CHILD_SA
857  IKE_EXCHANGE_TYPE_INFORMATIONAL = 37, ///<INFORMATIONAL
858  IKE_EXCHANGE_TYPE_IKE_SESSION_RESUME = 38, ///<IKE_SESSION_RESUME
859  IKE_EXCHANGE_TYPE_GSA_AUTH = 39, ///<GSA_AUTH
860  IKE_EXCHANGE_TYPE_GSA_REGISTRATION = 40, ///<GSA_REGISTRATION
861  IKE_EXCHANGE_TYPE_GSA_REKEY = 41, ///<GSA_REKEY
862  IKE_EXCHANGE_TYPE_GSA_INBAND_REKEY = 42, ///<GSA_INBAND_REKEY
863  IKE_EXCHANGE_TYPE_IKE_INTERMEDIATE = 43, ///<IKE_INTERMEDIATE
864  IKE_EXCHANGE_TYPE_IKE_FOLLOWUP_KE = 44 ///<IKE_FOLLOWUP_KE
866 
867 
868 /**
869  * @brief Flags
870  **/
871 
872 typedef enum
873 {
874  IKE_FLAGS_R = 0x20, ///<Response flag
875  IKE_FLAGS_V = 0x10, ///<Version flag
876  IKE_FLAGS_I = 0x08 ///<Initiator flag
878 
879 
880 /**
881  * @brief Payload types
882  **/
883 
884 typedef enum
885 {
886  IKE_PAYLOAD_TYPE_LAST = 0, ///<No Next Payload
887  IKE_PAYLOAD_TYPE_SA = 33, ///<Security Association
888  IKE_PAYLOAD_TYPE_KE = 34, ///<Key Exchange
889  IKE_PAYLOAD_TYPE_IDI = 35, ///<Identification - Initiator
890  IKE_PAYLOAD_TYPE_IDR = 36, ///<Identification - Responder
891  IKE_PAYLOAD_TYPE_CERT = 37, ///<Certificate
892  IKE_PAYLOAD_TYPE_CERTREQ = 38, ///<Certificate Request
893  IKE_PAYLOAD_TYPE_AUTH = 39, ///<Authentication
894  IKE_PAYLOAD_TYPE_NONCE = 40, ///<Nonce
895  IKE_PAYLOAD_TYPE_N = 41, ///<Notify
896  IKE_PAYLOAD_TYPE_D = 42, ///<Delete
897  IKE_PAYLOAD_TYPE_V = 43, ///<Vendor ID
898  IKE_PAYLOAD_TYPE_TSI = 44, ///<Traffic Selector - Initiator
899  IKE_PAYLOAD_TYPE_TSR = 45, ///<Traffic Selector - Responder
900  IKE_PAYLOAD_TYPE_SK = 46, ///<Encrypted and Authenticated
901  IKE_PAYLOAD_TYPE_CP = 47, ///<Configuration
902  IKE_PAYLOAD_TYPE_EAP = 48, ///<Extensible Authentication
903  IKE_PAYLOAD_TYPE_GSPM = 49, ///<Generic Secure Password Method
904  IKE_PAYLOAD_TYPE_IDG = 50, ///<Group Identification
905  IKE_PAYLOAD_TYPE_GSA = 51, ///<Group Security Association
906  IKE_PAYLOAD_TYPE_KD = 52, ///<Key Download
907  IKE_PAYLOAD_TYPE_SKF = 53, ///<Encrypted and Authenticated Fragment
908  IKE_PAYLOAD_TYPE_PS = 54 ///<Puzzle Solution
910 
911 
912 /**
913  * @brief Last Substruc values
914  **/
915 
916 typedef enum
917 {
918  IKE_LAST_SUBSTRUC_LAST = 0, ///<Last proposal/transform substructure
919  IKE_LAST_SUBSTRUC_MORE_PROPOSALS = 2, ///<More proposal substructures
920  IKE_LAST_SUBSTRUC_MORE_TRANSFORMS = 3 ///<More transform substructures
922 
923 
924 /**
925  * @brief Protocol IDs
926  **/
927 
928 typedef enum
929 {
930  IKE_PROTOCOL_ID_IKE = 1, ///<IKE
931  IKE_PROTOCOL_ID_AH = 2, ///<AH
932  IKE_PROTOCOL_ID_ESP = 3, ///<ESP
933  IKE_PROTOCOL_ID_FC_ESP_HEADER = 4, ///<FC_ESP_HEADER
934  IKE_PROTOCOL_ID_FC_CT_AUTHENTICATION = 5, ///<FC_CT_AUTHENTICATION
935  IKE_PROTOCOL_ID_GIKE_UPDATE = 6 ///<GIKE_UPDATE
937 
938 
939 /**
940  * @brief Transform types
941  **/
942 
943 typedef enum
944 {
945  IKE_TRANSFORM_TYPE_ENCR = 1, ///<Encryption Algorithm
946  IKE_TRANSFORM_TYPE_PRF = 2, ///<Pseudorandom Function
947  IKE_TRANSFORM_TYPE_INTEG = 3, ///<Integrity Algorithm
948  IKE_TRANSFORM_TYPE_KE = 4, ///<Key Exchange Method
949  IKE_TRANSFORM_TYPE_ESN = 5, ///<Extended Sequence Numbers
950  IKE_TRANSFORM_TYPE_ADDKE1 = 6, ///<Additional Key Exchange 1
951  IKE_TRANSFORM_TYPE_ADDKE2 = 7, ///<Additional Key Exchange 2
952  IKE_TRANSFORM_TYPE_ADDKE3 = 8, ///<Additional Key Exchange 3
953  IKE_TRANSFORM_TYPE_ADDKE4 = 9, ///<Additional Key Exchange 4
954  IKE_TRANSFORM_TYPE_ADDKE5 = 10, ///<Additional Key Exchange 5
955  IKE_TRANSFORM_TYPE_ADDKE6 = 11, ///<Additional Key Exchange 6
956  IKE_TRANSFORM_TYPE_ADDKE7 = 12, ///<Additional Key Exchange 7
957  IKE_TRANSFORM_TYPE_KWA = 13, ///<Key Wrap Algorithm
958  IKE_TRANSFORM_TYPE_GCAUTH = 14 ///<Group Controller Authentication Method
960 
961 
962 /**
963  * @brief Transform IDs (Encryption Algorithm)
964  **/
965 
966 typedef enum
967 {
1002 
1003 
1004 /**
1005  * @brief Transform IDs (Pseudorandom Function)
1006  **/
1007 
1008 typedef enum
1009 {
1021 
1022 
1023 /**
1024  * @brief Transform IDs (Integrity Algorithm)
1025  **/
1026 
1027 typedef enum
1028 {
1045 
1046 
1047 /**
1048  * @brief Transform IDs (Key Exchange Methods)
1049  **/
1050 
1051 typedef enum
1052 {
1054  IKE_TRANSFORM_ID_KE_MODP_768 = 1, ///<768-bit MODP Group
1055  IKE_TRANSFORM_ID_KE_MODP_1024 = 2, ///<1024-bit MODP Group
1056  IKE_TRANSFORM_ID_KE_MODP_1536 = 5, ///<1536-bit MODP Group
1057  IKE_TRANSFORM_ID_KE_MODP_2048 = 14, ///<2048-bit MODP Group
1058  IKE_TRANSFORM_ID_KE_MODP_3072 = 15, ///<3072-bit MODP Group
1059  IKE_TRANSFORM_ID_KE_MODP_4096 = 16, ///<4096-bit MODP Group
1060  IKE_TRANSFORM_ID_KE_MODP_6144 = 17, ///<6144-bit MODP Group
1061  IKE_TRANSFORM_ID_KE_MODP_8192 = 18, ///<8192-bit MODP Group
1062  IKE_TRANSFORM_ID_KE_ECP_256 = 19, ///<256-bit Random ECP Group
1063  IKE_TRANSFORM_ID_KE_ECP_384 = 20, ///<384-bit Random ECP Group
1064  IKE_TRANSFORM_ID_KE_ECP_521 = 21, ///<521-bit Random ECP Group
1065  IKE_TRANSFORM_ID_KE_MODP_1024_160 = 22, ///<1024-bit MODP Group with 160-bit Prime Order Subgroup
1066  IKE_TRANSFORM_ID_KE_MODP_2048_224 = 23, ///<2048-bit MODP Group with 224-bit Prime Order Subgroup
1067  IKE_TRANSFORM_ID_KE_MODP_2048_256 = 24, ///<2048-bit MODP Group with 256-bit Prime Order Subgroup
1068  IKE_TRANSFORM_ID_KE_ECP_192 = 25, ///<192-bit Random ECP Group
1069  IKE_TRANSFORM_ID_KE_ECP_224 = 26, ///<224-bit Random ECP Group
1070  IKE_TRANSFORM_ID_KE_BRAINPOOLP224R1 = 27, ///<224-bit Brainpool ECP Group
1071  IKE_TRANSFORM_ID_KE_BRAINPOOLP256R1 = 28, ///<256-bit Brainpool ECP Group
1072  IKE_TRANSFORM_ID_KE_BRAINPOOLP384R1 = 29, ///<384-bit Brainpool ECP Group
1073  IKE_TRANSFORM_ID_KE_BRAINPOOLP512R1 = 30, ///<512-bit Brainpool ECP Group
1074  IKE_TRANSFORM_ID_KE_CURVE25519 = 31, ///<curve25519
1075  IKE_TRANSFORM_ID_KE_CURVE448 = 32, ///<curve448
1076  IKE_TRANSFORM_ID_KE_GOST3410_2012_256 = 33, ///<GOST3410_2012_256
1077  IKE_TRANSFORM_ID_KE_GOST3410_2012_512 = 34, ///<GOST3410_2012_512
1078  IKE_TRANSFORM_ID_KE_ML_KEM_512 = 35, ///<ML-KEM-512
1079  IKE_TRANSFORM_ID_KE_ML_KEM_768 = 36, ///<ML-KEM-768
1080  IKE_TRANSFORM_ID_KE_ML_KEM_1024 = 37, ///<ML-KEM-1024
1082 
1083 
1084 /**
1085  * @brief Transform IDs (Extended Sequence Numbers)
1086  **/
1087 
1088 typedef enum
1089 {
1090  IKE_TRANSFORM_ID_ESN_NO = 0, ///<No Extended Sequence Numbers
1091  IKE_TRANSFORM_ID_ESN_YES = 1 ///<Extended Sequence Numbers
1093 
1094 
1095 /**
1096  * @brief Transform attribute format
1097  **/
1098 
1099 typedef enum
1100 {
1101  IKE_ATTR_FORMAT_TLV = 0x0000, ///<Type/Length/Value format
1102  IKE_ATTR_FORMAT_TV = 0x8000 ///<shortened Type/Value format
1104 
1105 
1106 /**
1107  * @brief Transform attribute types
1108  **/
1109 
1110 typedef enum
1111 {
1112  IKE_TRANSFORM_ATTR_TYPE_KEY_LEN = 14 ///<Key Length (in bits)
1114 
1115 
1116 /**
1117  * @brief ID types
1118  **/
1119 
1120 typedef enum
1121 {
1131  IKE_ID_TYPE_NULL = 13
1133 
1134 
1135 /**
1136  * @brief Certificate encodings
1137  **/
1138 
1139 typedef enum
1140 {
1141  IKE_CERT_ENCODING_PKCS7_X509_CERT = 1, ///<PKCS #7 wrapped X.509 certificate
1142  IKE_CERT_ENCODING_PGP_CERT = 2, ///<PGP certificate
1143  IKE_CERT_ENCODING_DNS_SIGNED_KEY = 3, ///<DNS signed key
1144  IKE_CERT_ENCODING_X509_CERT_SIGN = 4, ///<X.509 certificate - signature
1145  IKE_CERT_ENCODING_KERBEROS_TOKEN = 6, ///<Kerberos token
1146  IKE_CERT_ENCODING_CRL = 7, ///<Certificate revocation list
1147  IKE_CERT_ENCODING_ARL = 8, ///<Authority revocation list
1148  IKE_CERT_ENCODING_SPKI_CERT = 9, ///<SPKI certificate
1149  IKE_CERT_ENCODING_X509_CERT_ATTR = 10, ///<X.509 certificate - attribute
1150  IKE_CERT_ENCODING_RAW_RSA_KEY = 11, ///<Raw RSA key (deprecated)
1151  IKE_CERT_ENCODING_HASH_URL_X509_CERT = 12, ///<Hash and URL of X.509 certificate
1152  IKE_CERT_ENCODING_HASH_URL_X509_BUNDLE = 13, ///<Hash and URL of X.509 bundle
1153  IKE_CERT_ENCODING_OCSP_CONTENT = 14, ///<OCSP Content
1154  IKE_CERT_ENCODING_RAW_PUBLIC_KEY = 15 ///<Raw Public Key
1156 
1157 
1158 /**
1159  * @brief Authentication methods
1160  **/
1161 
1162 typedef enum
1163 {
1164  IKE_AUTH_METHOD_RSA = 1, ///<RSA Digital Signature
1165  IKE_AUTH_METHOD_SHARED_KEY = 2, ///<Shared Key Message Integrity Code
1166  IKE_AUTH_METHOD_DSS = 3, ///<DSS Digital Signature
1167  IKE_AUTH_METHOD_ECDSA_P256_SHA256 = 9, ///<ECDSA with SHA-256 on the P-256 curve
1168  IKE_AUTH_METHOD_ECDSA_P384_SHA384 = 10, ///<ECDSA with SHA-384 on the P-384 curve
1169  IKE_AUTH_METHOD_ECDSA_P521_SHA512 = 11, ///<ECDSA with SHA-512 on the P-521 curve
1170  IKE_AUTH_METHOD_GSPAM = 12, ///<Generic Secure Password Authentication Method
1171  IKE_AUTH_METHOD_NULL = 13, ///<NULL Authentication
1172  IKE_AUTH_METHOD_DIGITAL_SIGN = 14 ///<Digital Signature
1174 
1175 
1176 /**
1177  * @brief Notify message types
1178  **/
1179 
1180 typedef enum
1181 {
1214  IKE_NOTIFY_MSG_TYPE_COOKIE = 16390, //RFC 7296
1217  IKE_NOTIFY_MSG_TYPE_REKEY_SA = 16393, //RFC 7296
1225  IKE_NOTIFY_MSG_TYPE_COOKIE2 = 16401, //RFC 4555
1231  IKE_NOTIFY_MSG_TYPE_REDIRECT = 16407, //RFC 5685
1238  IKE_NOTIFY_MSG_TYPE_LINK_ID = 16414, //RFC 5739
1258  IKE_NOTIFY_MSG_TYPE_PUZZLE = 16434, //RFC 8019
1259  IKE_NOTIFY_MSG_TYPE_USE_PPK = 16435, //RFC 8784
1270  IKE_NOTIFY_MSG_TYPE_PPK_IDENTITY_KEY = 16446 //RFC 9867
1272 
1273 
1274 /**
1275  * @brief Traffic selector types
1276  **/
1277 
1278 typedef enum
1279 {
1280  IKE_TS_TYPE_IPV4_ADDR_RANGE = 7, ///<TS_IPV4_ADDR_RANGE
1281  IKE_TS_TYPE_IPV6_ADDR_RANGE = 8, ///<TS_IPV6_ADDR_RANGE
1282  IKE_TS_TYPE_FC_ADDR_RANGE = 9, ///<TS_FC_ADDR_RANGE
1283  IKE_TS_TYPE_SECLABEL = 10 ///<TS_SECLABEL
1285 
1286 
1287 /**
1288  * @brief IP protocol IDs
1289  **/
1290 
1291 typedef enum
1292 {
1297 } IkeIpProtocolId;
1298 
1299 
1300 /**
1301  * @brief Configuration types
1302  **/
1303 
1304 typedef enum
1305 {
1311 
1312 
1313 /**
1314  * @brief Configuration attribute types
1315  **/
1316 
1317 typedef enum
1318 {
1346 
1347 
1348 /**
1349  * @brief IKE Security Association state
1350  **/
1351 
1352 typedef enum
1353 {
1376 
1377 
1378 /**
1379  * @brief Child Security Association state
1380  **/
1381 
1382 typedef enum
1383 {
1391 
1392 
1393 /**
1394  * @brief Hash algorithms
1395  **/
1396 
1397 typedef enum
1398 {
1406 } IkeHashAlgo;
1407 
1408 
1409 /**
1410  * @brief Certificate types
1411  **/
1412 
1413 typedef enum
1414 {
1427  IKE_CERT_TYPE_ED448 = 12
1429 
1430 
1431 //CC-RX, CodeWarrior or Win32 compiler?
1432 #if defined(__CCRX__)
1433  #pragma pack
1434 #elif defined(__CWCC__) || defined(_WIN32)
1435  #pragma pack(push, 1)
1436 #endif
1437 
1438 
1439 /**
1440  * @brief IKE header
1441  **/
1442 
1444 {
1445  uint8_t initiatorSpi[IKE_SPI_SIZE]; //0-7
1446  uint8_t responderSpi[IKE_SPI_SIZE]; //8-15
1447  uint8_t nextPayload; //16
1448 #if defined(_CPU_BIG_ENDIAN) && !defined(__ICCRX__)
1449  uint8_t majorVersion : 4; //17
1450  uint8_t minorVersion : 4;
1451 #else
1452  uint8_t minorVersion : 4; //17
1453  uint8_t majorVersion : 4;
1454 #endif
1455  uint8_t exchangeType; //18
1456  uint8_t flags; //19
1457  uint32_t messageId; //20-23
1458  uint32_t length; //24-27
1460 
1461 
1462 /**
1463  * @brief Generic payload header
1464  **/
1465 
1466 typedef __packed_struct
1467 {
1468  uint8_t nextPayload; //0
1469 #if defined(_CPU_BIG_ENDIAN) && !defined(__ICCRX__)
1470  uint8_t critical : 1; //1
1471  uint8_t reserved : 7;
1472 #else
1473  uint8_t reserved : 7; //1
1474  uint8_t critical : 1;
1475 #endif
1476  uint16_t payloadLength; //2-3
1478 
1479 
1480 /**
1481  * @brief Security Association payload
1482  **/
1483 
1484 typedef __packed_struct
1485 {
1486  IkePayloadHeader header; //0-3
1487  uint8_t proposals[]; //4
1489 
1490 
1491 /**
1492  * @brief Proposal substructure
1493  **/
1494 
1495 typedef __packed_struct
1496 {
1497  uint8_t lastSubstruc; //0
1498  uint8_t reserved; //1
1499  uint16_t proposalLength; //2-3
1500  uint8_t proposalNum; //4
1501  uint8_t protocolId; //5
1502  uint8_t spiSize; //6
1503  uint8_t numTransforms; //7
1504  uint8_t spi[]; //8
1506 
1507 
1508 /**
1509  * @brief Transform substructure
1510  **/
1511 
1512 typedef __packed_struct
1513 {
1514  uint8_t lastSubstruc; //0
1515  uint8_t reserved1; //1
1516  uint16_t transformLength; //2-3
1517  uint8_t transformType; //4
1518  uint8_t reserved2; //5
1519  uint16_t transformId; //6-7
1520  uint8_t transformAttr[]; //8
1522 
1523 
1524 /**
1525  * @brief Transform attribute
1526  **/
1527 
1528 typedef __packed_struct
1529 {
1530  uint16_t type; //0-1
1531  uint16_t length; //2-3
1532  uint8_t value[]; //4
1534 
1535 
1536 /**
1537  * @brief Key Exchange payload
1538  **/
1539 
1540 typedef __packed_struct
1541 {
1542  IkePayloadHeader header; //0-3
1543  uint16_t keyExchangeMethod; //4-5
1544  uint16_t reserved; //6-7
1545  uint8_t keyExchangeData[]; //8
1547 
1548 
1549 /**
1550  * @brief Identification payload
1551  **/
1552 
1553 typedef __packed_struct
1554 {
1555  IkePayloadHeader header; //0-3
1556  uint8_t idType; //4
1557  uint8_t reserved[3]; //5-7
1558  uint8_t idData[]; //8
1560 
1561 
1562 /**
1563  * @brief Certificate payload
1564  **/
1565 
1566 typedef __packed_struct
1567 {
1568  IkePayloadHeader header; //0-3
1569  uint8_t certEncoding; //4
1570  uint8_t certData[]; //5
1572 
1573 
1574 /**
1575  * @brief Certificate Request payload
1576  **/
1577 
1578 typedef __packed_struct
1579 {
1580  IkePayloadHeader header; //0-3
1581  uint8_t certEncoding; //4
1582  uint8_t certAuthority[]; //5
1584 
1585 
1586 /**
1587  * @brief Authentication payload
1588  **/
1589 
1590 typedef __packed_struct
1591 {
1592  IkePayloadHeader header; //0-3
1593  uint8_t authMethod; //4
1594  uint8_t reserved[3]; //4-7
1595  uint8_t authData[]; //8
1597 
1598 
1599 /**
1600  * @brief Authentication data for digital signatures
1601  **/
1602 
1603 typedef __packed_struct
1604 {
1605  uint8_t algoIdLen; //0
1606  uint8_t algoId[]; //1
1608 
1609 
1610 /**
1611  * @brief Nonce payload
1612  **/
1613 
1614 typedef __packed_struct
1615 {
1616  IkePayloadHeader header; //0-3
1617  uint8_t nonceData[]; //4
1619 
1620 
1621 /**
1622  * @brief Notify payload
1623  **/
1624 
1625 typedef __packed_struct
1626 {
1627  IkePayloadHeader header; //0-3
1628  uint8_t protocolId; //4
1629  uint8_t spiSize; //5
1630  uint16_t notifyMsgType; //6-7
1631  uint8_t spi[]; //8
1633 
1634 
1635 /**
1636  * @brief Delete payload
1637  **/
1638 
1639 typedef __packed_struct
1640 {
1641  IkePayloadHeader header; //0-3
1642  uint8_t protocolId; //4
1643  uint8_t spiSize; //5
1644  uint16_t numSpi; //6-7
1645  uint8_t spi[]; //8
1647 
1648 
1649 /**
1650  * @brief Vendor ID payload
1651  **/
1652 
1653 typedef __packed_struct
1654 {
1655  IkePayloadHeader header; //0-3
1656  uint8_t vid[]; //4
1658 
1659 
1660 /**
1661  * @brief Traffic Selector payload
1662  **/
1663 
1664 typedef __packed_struct
1665 {
1666  IkePayloadHeader header; //0-3
1667  uint8_t numTs; //4
1668  uint8_t reserved[3]; //5-7
1669  uint8_t trafficSelectors[]; //8
1671 
1672 
1673 /**
1674  * @brief Traffic selector
1675  **/
1676 
1677 typedef __packed_struct
1678 {
1679  uint8_t tsType; //0
1680  uint8_t ipProtocolId; //1
1681  uint16_t selectorLength; //2-3
1682  uint16_t startPort; //4-5
1683  uint16_t endPort; //6-7
1684  uint8_t startAddr[]; //8
1686 
1687 
1688 /**
1689  * @brief Encrypted payload
1690  **/
1691 
1692 typedef __packed_struct
1693 {
1694  IkePayloadHeader header; //0-3
1695  uint8_t iv[]; //4
1697 
1698 
1699 /**
1700  * @brief Configuration payload
1701  **/
1702 
1703 typedef __packed_struct
1704 {
1705  IkePayloadHeader header; //0-3
1706  uint8_t configType; //4
1707  uint8_t reserved[3]; //5-7
1708  uint8_t configAttributes[]; //8
1710 
1711 
1712 /**
1713  * @brief Configuration attribute
1714  **/
1715 
1716 typedef __packed_struct
1717 {
1718  uint16_t type; //0-1
1719  uint16_t length; //2-3
1720  uint8_t value[]; //4
1722 
1723 
1724 /**
1725  * @brief EAP payload
1726  **/
1727 
1728 typedef __packed_struct
1729 {
1730  IkePayloadHeader header; //0-3
1731  uint8_t eapMessage[]; //4
1733 
1734 
1735 /**
1736  * @brief EAP message
1737  **/
1738 
1739 typedef __packed_struct
1740 {
1741  uint8_t code; //0
1742  uint8_t identifier; //1
1743  uint16_t length; //2-3
1744  uint8_t type; //4
1745  uint8_t data[]; //5
1747 
1748 
1749 /**
1750  * @brief Encrypted Fragment payload
1751  **/
1752 
1753 typedef __packed_struct
1754 {
1755  IkePayloadHeader header; //0-3
1756  uint16_t fragNum; //4-5
1757  uint16_t totalFrags; //6-7
1758  uint8_t iv[]; //8
1760 
1761 
1762 //CC-RX, CodeWarrior or Win32 compiler?
1763 #if defined(__CCRX__)
1764  #pragma unpack
1765 #elif defined(__CWCC__) || defined(_WIN32)
1766  #pragma pack(pop)
1767 #endif
1768 
1769 
1770 /**
1771  * @brief Certificate verification callback function
1772  **/
1773 
1775  const X509CertInfo *certInfo, uint_t pathLen);
1776 
1777 
1778 /**
1779  * @brief Cookie generation callback function
1780  **/
1781 
1783  const IpAddr *ipAddr, const uint8_t *spi, const uint8_t *nonce,
1784  size_t nonceLen, uint8_t *cookie, size_t *cookieLen);
1785 
1786 
1787 /**
1788  * @brief Cookie verification callback function
1789  **/
1790 
1792  const IpAddr *ipAddr, const uint8_t *spi, const uint8_t *nonce,
1793  size_t nonceLen, const uint8_t *cookie, size_t cookieLen);
1794 
1795 
1796 /**
1797  * @brief Traffic selector entry
1798  **/
1799 
1800 typedef struct
1801 {
1804  uint8_t ipProtocolId;
1805  uint16_t startPort;
1806  uint16_t endPort;
1807 } IkeTsEntry;
1808 
1809 
1810 /**
1811  * @brief Key exchange context
1812  **/
1813 
1814 typedef struct
1815 {
1816  uint16_t groupNum; ///<Key exchange method
1817 #if (IKE_DH_KE_SUPPORT == ENABLED)
1818  DhContext dhContext; ///<Diffie-Hellman context
1819 #endif
1820 #if (IKE_ECDH_KE_SUPPORT == ENABLED)
1821  EcdhContext ecdhContext; ///<ECDH context
1822 #endif
1823 } IkeKeContext;
1824 
1825 
1826 /**
1827  * @brief IKE Security Association entry
1828  **/
1829 
1831 {
1832  IkeSaState state; ///<IKE SA state
1833  IkeContext *context; ///<IKE context
1834  IkeChildSaEntry *childSa1; ///<Child SA (created by the host)
1835  IkeChildSaEntry *childSa2; ///<Child SA (created by the peer)
1836 #if (IKE_CREATE_CHILD_SA_SUPPORT == ENABLED)
1837  IkeSaEntry *newSa1; ///<New IKE SA (created by the host)
1838  IkeSaEntry *newSa2; ///<New IKE SA (created by the peer)
1839 #endif
1840 #if (IKE_REAUTH_SUPPORT == ENABLED)
1841  IkeSaEntry *oldSa; ///<Old IKE SA
1842 #endif
1843  IpAddr remoteIpAddr; ///<Remote IP address
1844  bool_t originalInitiator; ///<Original initiator of the IKE SA
1846  systime_t lifetime; ///<Lifetime of the IKE SA
1847 #if (IKE_REAUTH_SUPPORT == ENABLED)
1848  systime_t reauthPeriod; ///<Reauthentication period
1849 #endif
1850 #if (IKE_DPD_SUPPORT == ENABLED)
1851  systime_t dpdTimestamp; ///<Timestamp to manage dead peer detection
1852  systime_t dpdPeriod; ///<Dead peer detection period
1853 #endif
1857  uint32_t txMessageId;
1858  uint32_t rxMessageId;
1859  uint8_t cookie[IKE_MAX_COOKIE_SIZE]; ///<Cookie
1860  size_t cookieLen; ///<Length of the cookie, in bytes
1861 
1862  uint8_t initiatorSpi[IKE_SPI_SIZE]; ///<Initiator SPI
1863  uint8_t responderSpi[IKE_SPI_SIZE]; ///<Responder SPI
1864 
1869 
1870  IkeIdType peerIdType; ///<Peer ID type
1871  uint8_t peerId[IKE_MAX_ID_LEN]; ///<Peer ID
1872  size_t peerIdLen; ///<Length of the peer ID, in bytes
1873 
1877  uint8_t notifySpi[4];
1878 
1879  uint16_t encAlgoId; ///<Encryption algorithm
1880  uint16_t prfAlgoId; ///<Pseudorandom function
1881  uint16_t authAlgoId; ///<Integrity algorithm
1882  uint8_t acceptedProposalNum; ///<Number of the accepted proposal
1883 
1884  uint16_t preferredGroupNum; ///<Preferred key exchange method
1885  IkeKeContext keContext; ///<Key exchange context
1886  uint8_t sharedSecret[IKE_MAX_SHARED_SECRET_LEN]; ///<Shared secret
1887  size_t sharedSecretLen; ///<Length of the shared secret, in bytes
1888 
1889  uint8_t keyMaterial[IKE_MAX_SA_KEY_MAT_LEN]; ///<Keying material
1890  const uint8_t *skd; ///<Key used for deriving new keys for Child SAs
1891  const uint8_t *skai; ///<Integrity protection key (initiator)
1892  const uint8_t *skar; ///<Integrity protection key (responder)
1893  const uint8_t *skei; ///<Encryption key (initiator)
1894  const uint8_t *sker; ///<Encryption key (responder)
1895  const uint8_t *skpi; ///<Key used for generating AUTH payload (initiator)
1896  const uint8_t *skpr; ///<Key used for generating AUTH payload (responder)
1897 
1898  CipherMode cipherMode; ///<Cipher mode of operation
1899  const CipherAlgo *cipherAlgo; ///<Cipher algorithm
1900  CipherContext cipherContext; ///<Cipher context
1901  MacAlgo authMacAlgo; ///<MAC algorithm for integrity calculations
1902  const HashAlgo *authHashAlgo; ///<Hash algorithm for HMAC-based integrity calculations
1903  const CipherAlgo *authCipherAlgo; ///<Cipher algorithm for CMAC-based integrity calculations
1904  MacAlgo prfMacAlgo; ///<MAC algorithm for PRF calculations
1905  const HashAlgo *prfHashAlgo; ///<Hash algorithm for HMAC-based PRF calculations
1906  const CipherAlgo *prfCipherAlgo; ///<Cipher algorithm for CMAC-based PRF calculations
1907  size_t encKeyLen; ///<Size of the encryption key, in bytes
1908  size_t authKeyLen; ///<Size of the integrity protection key, in bytes
1909  size_t prfKeyLen; ///<Preferred size of the PRF key, in bytes
1910  size_t saltLen; ///<Length of the salt, in bytes
1911  size_t ivLen; ///<Length of the initialization vector, in bytes
1912  size_t icvLen; ///<Length of the ICV tag, in bytes
1913  uint8_t iv[8]; ///<Initialization vector
1914 
1915  const uint8_t *initiatorSaInit; ///<Pointer to the IKE_SA_INIT request
1916  size_t initiatorSaInitLen; ///<Length of the IKE_SA_INIT request, in bytes
1917  const uint8_t *responderSaInit; ///<Pointer to the IKE_SA_INIT response
1918  size_t responderSaInitLen; ///<Length of the IKE_SA_INIT response, in bytes
1919 
1920  uint8_t request[IKE_MAX_MSG_SIZE]; ///<Request message
1921  size_t requestLen; ///<Length of the request message, in bytes
1922  uint8_t response[IKE_MAX_MSG_SIZE]; ///<Response message
1923  size_t responseLen; ///<Length of the response message, in bytes
1924 
1925 #if (IKE_CREATE_CHILD_SA_SUPPORT == ENABLED)
1926  bool_t rekeyRequest; ///<IKE SA rekey request
1927 #endif
1928 #if (IKE_REAUTH_SUPPORT == ENABLED)
1929  bool_t reauthRequest; ///<IKE SA reauthentication request
1930  bool_t reauthPending; ///<Reauthentication process is on-going
1931 #endif
1932  bool_t deleteRequest; ///<IKE SA delete request
1934  bool_t noAdditionalSas; ///<NO_ADDITIONAL_SAS notification received
1935 #if (IKE_INITIAL_CONTACT_SUPPORT == ENABLED)
1936  bool_t initialContact; ///<INITIAL_CONTACT notification received
1937 #endif
1938 #if (IKE_SIGN_HASH_ALGOS_SUPPORT == ENABLED)
1939  uint32_t signHashAlgos; ///<List of hash algorithms supported by the peer
1940 #endif
1941 #if (IKE_NAT_TRAVERSAL_SUPPORT == ENABLED)
1942  bool_t natDetectSrcIp; ///<NAT_DETECTION_SOURCE_IP notification received
1943  bool_t natDetectDestIp; ///<NAT_DETECTION_DESTINATION_IP notification received
1944  bool_t localNat; ///<The local host is behind a NAT
1945  bool_t remoteNat; ///<The remote host is behind a NAT
1946  systime_t natKeepAliveTimestamp; ///<Timestamp to manage NAT keepalive transmission
1947 #endif
1948 };
1949 
1950 
1951 /**
1952  * @brief Child Security Association entry
1953  **/
1954 
1956 {
1957  IkeChildSaState state; ///<Child SA state
1958  IkeContext *context; ///<IKE context
1959  IkeSaEntry *sa; ///<IKE SA entry
1960  IkeChildSaEntry *oldChildSa; ///<Old Child SA
1961  IpAddr remoteIpAddr; ///<IP address of the peer
1962  IpsecMode mode; ///<IPsec mode (tunnel or transport)
1963  IpsecProtocol protocol; ///<Security protocol (AH or ESP)
1964  bool_t initiator; ///<Initiator of the CREATE_CHILD_SA exchange
1966 
1967  uint8_t localSpi[4]; ///<Initiator SPI
1968  uint8_t remoteSpi[4]; ///<Responder SPI
1969 
1970  uint8_t initiatorNonce[IKE_MAX_NONCE_SIZE]; ///<Initiator nonce
1971  size_t initiatorNonceLen; ///<Length of the initiator nonce
1972  uint8_t responderNonce[IKE_MAX_NONCE_SIZE]; ///<Responder nonce
1973  size_t responderNonceLen; ///<Length of the responder nonce
1974 
1975  uint16_t encAlgoId; ///<Encryption algorithm
1976  uint16_t authAlgoId; ///<Integrity algorithm
1977  uint16_t esn; ///<Extended sequence numbers
1978  uint8_t acceptedProposalNum; ///<Number of the accepted proposal
1979 
1980 #if (IKE_CHILD_SA_PFS_SUPPORT == ENABLED)
1981  bool_t pfs; ///<Perfect forward secrecy
1982  IkeKeContext keContext; ///<Key exchange context
1983  uint8_t sharedSecret[IKE_MAX_SHARED_SECRET_LEN]; ///<Shared secret
1984  size_t sharedSecretLen; ///<Length of the shared secret, in bytes
1985 #endif
1986 
1987  uint8_t keyMaterial[IKE_MAX_CHILD_SA_KEY_MAT_LEN]; ///<Keying material
1988  const uint8_t *skai; ///<Integrity protection key (initiator)
1989  const uint8_t *skar; ///<Integrity protection key (responder)
1990  const uint8_t *skei; ///<Encryption key (initiator)
1991  const uint8_t *sker; ///<Encryption key (responder)
1992 
1993  CipherMode cipherMode; ///<Cipher mode of operation
1994  const CipherAlgo *cipherAlgo; ///<Cipher algorithm
1995  MacAlgo authMacAlgo; ///<MAC algorithm for integrity calculations
1996  const HashAlgo *authHashAlgo; ///<Hash algorithm for HMAC-based integrity calculations
1997  const CipherAlgo *authCipherAlgo; ///<Cipher algorithm for CMAC-based integrity calculations
1998  size_t encKeyLen; ///<Length of the encryption key, in bytes
1999  size_t authKeyLen; ///<Length of the integrity protection key, in bytes
2000  size_t saltLen; ///<Length of the salt, in bytes
2001  size_t ivLen; ///<Length of the initialization vector, in bytes
2002  size_t icvLen; ///<Length of the ICV tag, in bytes
2003  uint8_t iv[8]; ///<Initialization vector
2004 
2005  IpsecPacketInfo packetInfo; ///<Triggering packet
2006  IpsecSelector selector; ///<Selector parameters
2007 
2008 #if (IKE_CREATE_CHILD_SA_SUPPORT == ENABLED)
2009  bool_t rekeyRequest; ///<Child SA rekey request
2010 #endif
2011  bool_t deleteRequest; ///<Child SA delete request
2013 
2014  int_t inboundSa; ///<Inbound SAD entry
2015  int_t outboundSa; ///<Outbound SAD entry
2016 };
2017 
2018 
2019 /**
2020  * @brief IKE settings
2021  **/
2022 
2023 typedef struct
2024 {
2025  OsTaskParameters task; ///<Task parameters
2026  NetContext *netContext; ///<TCP/IP stack context
2027  NetInterface *interface; ///<Underlying network interface
2028  const PrngAlgo *prngAlgo; ///<Pseudo-random number generator to be used
2029  void *prngContext; ///<Pseudo-random number generator context
2030  IkeSaEntry *saEntries; ///<IKE SA entries
2031  uint_t numSaEntries; ///<Number of IKE SA entries
2032  IkeChildSaEntry *childSaEntries; ///<Child SA entries
2033  uint_t numChildSaEntries; ///<Number of Child SA entries
2034  systime_t saLifetime; ///<Lifetime of IKE SAs
2035  systime_t childSaLifetime; ///<Lifetime of Child SAs
2036 #if (IKE_REAUTH_SUPPORT == ENABLED)
2037  systime_t reauthPeriod; ///<Reauthentication period
2038 #endif
2039 #if (IKE_DPD_SUPPORT == ENABLED)
2040  systime_t dpdPeriod; ///<Dead peer detection period
2041 #endif
2042 #if (IKE_NAT_TRAVERSAL_SUPPORT == ENABLED)
2043  systime_t natKeepaliveInterval; ///<NAT keepalive interval
2044 #endif
2045 #if (IKE_COOKIE_SUPPORT == ENABLED)
2046  IkeCookieGenerateCallback cookieGenerateCallback; ///<Cookie generation callback function
2047  IkeCookieVerifyCallback cookieVerifyCallback; ///<Cookie verification callback function
2048 #endif
2049 #if (IKE_CERT_AUTH_SUPPORT == ENABLED)
2050  IkeCertVerifyCallback certVerifyCallback; ///<Certificate verification callback function
2051 #endif
2052 } IkeSettings;
2053 
2054 
2055 /**
2056  * @brief IKE context
2057  **/
2058 
2060 {
2061  bool_t running; ///<Operational state of IKEv2
2062  bool_t stop; ///<Stop request
2063  OsEvent event; ///<Event object used to poll the underlying socket
2064  OsTaskParameters taskParams; ///<Task parameters
2065  OsTaskId taskId; ///<Task identifier
2066  NetContext *netContext; ///<TCP/IP stack context
2067  NetInterface *interface; ///<Underlying network interface
2068  const PrngAlgo *prngAlgo; ///<Pseudo-random number generator to be used
2069  void *prngContext; ///<Pseudo-random number generator context
2070  systime_t saLifetime; ///<Lifetime of IKE SAs
2071  systime_t childSaLifetime; ///<Lifetime of Child SAs
2072 #if (IKE_REAUTH_SUPPORT == ENABLED)
2073  systime_t reauthPeriod; ///<Reauthentication period
2074 #endif
2075 #if (IKE_DPD_SUPPORT == ENABLED)
2076  systime_t dpdPeriod; ///<Dead peer detection period
2077 #endif
2078  uint16_t preferredGroupNum; ///<Preferred key exchange method
2079  IkeIdType idType; ///<ID type
2080  uint8_t id[IKE_MAX_ID_LEN]; ///<ID
2081  size_t idLen; ///<Length of the ID, in bytes
2082  uint8_t psk[IKE_MAX_PSK_LEN]; ///<Pre-shared key
2083  size_t pskLen; ///<Length of the pre-shared key, in bytes
2084  IkeCertType certType; ///<Certificate type
2085  const char_t *certChain; ///<Entity's certificate chain (PEM format)
2086  size_t certChainLen; ///<Length of the certificate chain
2087  const char_t *privateKey; ///<Entity's private key (PEM format)
2088  size_t privateKeyLen; ///<Length of the private key
2089  char_t password[IKE_MAX_PASSWORD_LEN + 1]; ///<Password used to decrypt the private key
2090 
2091  Socket *socket; ///<Underlying UDP socket (port 500)
2092 #if (IKE_NAT_TRAVERSAL_SUPPORT == ENABLED)
2093  Socket *altSocket; ///<Underlying UDP socket (port 4500)
2094  systime_t natKeepaliveInterval; ///<NAT keepalive interval
2095 #endif
2096  NetInterface *localInterface; ///<Network interface the IKE message was received on
2097  IpAddr localIpAddr; ///<Destination IP address of the received IKE message
2098  uint16_t localPort; ///<Destination port of the received IKE message
2099  IpAddr remoteIpAddr; ///<Source IP address of the received IKE message
2100  uint16_t remotePort; ///<Source port of the received IKE message
2101  IkeSaEntry *sa; ///<IKE SA entries
2102  uint_t numSaEntries; ///<Number of IKE SA entries
2103  IkeChildSaEntry *childSa; ///<Child SA entries
2104  uint_t numChildSaEntries; ///<Number of Child SA entries
2105  uint8_t message[IKE_MAX_MSG_SIZE]; ///<Incoming IKE message
2106  size_t messageLen; ///<Length of the incoming IKE message, in bytes
2107 
2108  MacContext macContext; ///<MAC context
2109 
2110 #if (IKE_COOKIE_SUPPORT == ENABLED)
2111  IkeCookieGenerateCallback cookieGenerateCallback; ///<Cookie generation callback function
2112  IkeCookieVerifyCallback cookieVerifyCallback; ///<Cookie verification callback function
2113 #endif
2114 #if (IKE_CERT_AUTH_SUPPORT == ENABLED)
2115  IkeCertVerifyCallback certVerifyCallback; ///<Certificate verification callback function
2116 #endif
2117 };
2118 
2119 
2120 //IKEv2 related functions
2121 void ikeGetDefaultSettings(IkeSettings *settings);
2122 
2123 error_t ikeInit(IkeContext *context, const IkeSettings *settings);
2124 error_t ikeStart(IkeContext *context);
2125 error_t ikeStop(IkeContext *context);
2126 
2127 error_t ikeSetPreferredGroup(IkeContext *context, uint16_t groupNum);
2128 
2129 error_t ikeSetId(IkeContext *context, IkeIdType idType, const void *id,
2130  size_t idLen);
2131 
2132 error_t ikeSetPsk(IkeContext *context, const uint8_t *psk, size_t pskLen);
2133 
2134 error_t ikeSetCertificate(IkeContext *context, const char_t *certChain,
2135  size_t certChainLen, const char_t *privateKey, size_t privateKeyLen,
2136  const char_t *password);
2137 
2138 error_t ikeCreateSa(IkeContext *context, const IpAddr *remoteIpAddr);
2141 
2142 error_t ikeCreateChildSa(IkeContext *context, const IpsecPacketInfo *packet);
2145 
2146 void ikeTask(IkeContext *context);
2147 
2148 void ikeDeinit(IkeContext *context);
2149 
2150 //C++ guard
2151 #ifdef __cplusplus
2152 }
2153 #endif
2154 
2155 #endif
IkeSaState
IKE Security Association state.
Definition: ike.h:1353
@ IKE_TRANSFORM_ID_ENCR_AES_GCM_8
Definition: ike.h:984
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_DNSSEC_TA
Definition: ike.h:1341
@ IKE_CHILD_SA_STATE_DELETE
Definition: ike.h:1389
@ IKE_TRANSFORM_ID_AUTH_AES_CMAC_96
Definition: ike.h:1037
@ IKE_TRANSFORM_ID_ENCR_RESERVED
Definition: ike.h:968
@ IKE_NOTIFY_MSG_TYPE_PSK_CONFIRM
Definition: ike.h:1250
@ IKE_ID_TYPE_FC_NAME
Definition: ike.h:1130
uint8_t reserved2
Definition: ike.h:1518
size_t encKeyLen
Size of the encryption key, in bytes.
Definition: ike.h:1907
@ IKE_TRANSFORM_ID_KE_MODP_1024
1024-bit MODP Group
Definition: ike.h:1055
@ IKE_CONFIG_TYPE_REPLY
Definition: ike.h:1307
IkeCertType
Certificate types.
Definition: ike.h:1414
IkeTransformIdEncr
Transform IDs (Encryption Algorithm)
Definition: ike.h:967
X.509 common definitions.
IkeCookieVerifyCallback cookieVerifyCallback
Cookie verification callback function.
Definition: ike.h:2112
@ IKE_CONFIG_ATTR_TYPE_HOME_AGENT_ADDRESS
Definition: ike.h:1334
uint16_t localPort
Destination port of the received IKE message.
Definition: ike.h:2098
IpsecSelector selector
Selector parameters.
Definition: ike.h:2006
@ IKE_TRANSFORM_ID_AUTH_HMAC_SHA2_384_192
Definition: ike.h:1042
#define IKE_MAX_MSG_SIZE
Definition: ike.h:201
Collection of key exchange algorithms.
size_t responderNonceLen
Length of the responder nonce.
Definition: ike.h:1973
#define NetContext
Definition: net.h:36
uint8_t acceptedProposalNum
Number of the accepted proposal.
Definition: ike.h:1882
IkeAuthData
Definition: ike.h:1607
size_t saltLen
Length of the salt, in bytes.
Definition: ike.h:2000
@ IKE_NOTIFY_MSG_TYPE_CLONE_IKE_SA
Definition: ike.h:1257
@ IKE_NOTIFY_MSG_TYPE_PPK_IDENTITY_KEY
Definition: ike.h:1270
@ IKE_TRANSFORM_ID_AUTH_HMAC_SHA1_96
Definition: ike.h:1031
@ IKE_TS_TYPE_IPV4_ADDR_RANGE
TS_IPV4_ADDR_RANGE.
Definition: ike.h:1280
uint8_t initiatorNonce[IKE_MAX_NONCE_SIZE]
Definition: ike.h:1865
IpsecMode
IPsec protocol modes.
Definition: ipsec.h:209
uint8_t code
Definition: coap_common.h:179
int bool_t
Definition: compiler_port.h:63
@ IKE_TRANSFORM_ID_PRF_AES128_CMAC
Definition: ike.h:1018
IkeContext * context
IKE context.
Definition: ike.h:1958
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP4_SUBNET
Definition: ike.h:1328
@ IKE_TRANSFORM_ID_ENCR_AES_CCM_16
Definition: ike.h:983
@ IKE_TRANSFORM_ID_KE_ML_KEM_1024
ML-KEM-1024.
Definition: ike.h:1080
@ IKE_NOTIFY_MSG_TYPE_IPCOMP_SUPPORTED
Definition: ike.h:1211
@ IKE_TRANSFORM_ID_ENCR_KUZNYECHIK_MGM_KTREE
Definition: ike.h:997
IkeCertReqPayload
Definition: ike.h:1583
uint8_t startAddr[]
Definition: ike.h:1684
MacContext macContext
MAC context.
Definition: ike.h:2108
uint16_t payloadLength
Definition: ike.h:1476
@ IKE_NOTIFY_MSG_TYPE_INVALID_MESSAGE_ID
Definition: ike.h:1187
@ IKE_TRANSFORM_ID_ENCR_AES_CTR
Definition: ike.h:980
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP384R1
Definition: ike.h:1423
@ IKE_NOTIFY_MSG_TYPE_ERX_SUPPORTED
Definition: ike.h:1251
uint8_t flags
Definition: ike.h:1456
uint16_t endPort
Definition: ike.h:1806
@ IKE_NOTIFY_MSG_TYPE_REGISTRATION_FAILED
Definition: ike.h:1207
@ IKE_NOTIFY_MSG_TYPE_IKEV2_FRAGMENTATION_SUPPORTED
Definition: ike.h:1254
IkeVendorIdPayload
Definition: ike.h:1657
@ IKE_HASH_ALGO_SHA256
Definition: ike.h:1400
@ IKE_NOTIFY_MSG_TYPE_INVALID_SPI
Definition: ike.h:1188
@ IKE_CERT_ENCODING_RAW_RSA_KEY
Raw RSA key (deprecated)
Definition: ike.h:1150
@ IKE_NOTIFY_MSG_TYPE_SET_WINDOW_SIZE
Definition: ike.h:1209
@ IKE_IP_PROTOCOL_ID_ICMP
Definition: ike.h:1293
@ IKE_IP_PROTOCOL_ID_TCP
Definition: ike.h:1294
error_t(* IkeCookieVerifyCallback)(IkeContext *context, const IpAddr *ipAddr, const uint8_t *spi, const uint8_t *nonce, size_t nonceLen, const uint8_t *cookie, size_t cookieLen)
Cookie verification callback function.
Definition: ike.h:1791
size_t initiatorNonceLen
Definition: ike.h:1866
uint16_t fragNum
Definition: ike.h:1756
typedef __packed_struct
IKE header.
Definition: ike.h:1444
signed int int_t
Definition: compiler_port.h:56
IkeCookieGenerateCallback cookieGenerateCallback
Cookie generation callback function.
Definition: ike.h:2111
systime_t saLifetime
Lifetime of IKE SAs.
Definition: ike.h:2070
@ IKE_ID_TYPE_NULL
Definition: ike.h:1131
@ IKE_NOTIFY_MSG_TYPE_REKEY_SA
Definition: ike.h:1217
@ IKE_NOTIFY_MSG_TYPE_CHILD_SA_NOT_FOUND
Definition: ike.h:1202
#define IKE_MAX_SA_KEY_MAT_LEN
Definition: ike.h:740
IPsec selector.
Definition: ipsec.h:309
uint8_t certEncoding
Definition: ike.h:1569
IP network address.
Definition: ip.h:94
uint16_t authAlgoId
Integrity algorithm.
Definition: ike.h:1976
bool_t stop
Stop request.
Definition: ike.h:2062
size_t responseLen
Length of the response message, in bytes.
Definition: ike.h:1923
@ IKE_TRANSFORM_ID_AUTH_HMAC_SHA1_160
Definition: ike.h:1036
const HashAlgo * authHashAlgo
Hash algorithm for HMAC-based integrity calculations.
Definition: ike.h:1902
Traffic selector entry.
Definition: ike.h:1801
@ IKE_NOTIFY_MSG_TYPE_ADDITIONAL_TS_POSSIBLE
Definition: ike.h:1210
@ IKE_HASH_ALGO_SHA1
Definition: ike.h:1399
uint8_t keyExchangeData[]
Definition: ike.h:1545
#define PrngAlgo
Definition: crypto.h:1140
@ IKE_ID_TYPE_IPV4_ADDR
Definition: ike.h:1123
IkeIdType idType
ID type.
Definition: ike.h:2079
@ IKE_NOTIFY_MSG_TYPE_NO_PROPOSAL_CHOSEN
Definition: ike.h:1189
error_t ikeSetCertificate(IkeContext *context, const char_t *certChain, size_t certChainLen, const char_t *privateKey, size_t privateKeyLen, const char_t *password)
Load entity's certificate.
Definition: ike.c:516
@ IKE_PAYLOAD_TYPE_CP
Configuration.
Definition: ike.h:901
@ IKE_NOTIFY_MSG_TYPE_ADDITIONAL_IP6_ADDRESS
Definition: ike.h:1222
NetInterface * interface
Underlying network interface.
Definition: ike.h:2067
const char_t * certChain
Entity's certificate chain (PEM format)
Definition: ike.h:2085
IkeTransformAttrFormat
Transform attribute format.
Definition: ike.h:1100
const CipherAlgo * cipherAlgo
Cipher algorithm.
Definition: ike.h:1994
IkeKePayload
Definition: ike.h:1546
@ IKE_TRANSFORM_ID_ENCR_CAMELLIA_CBC
Definition: ike.h:988
@ IKE_ID_TYPE_DER_ASN1_DN
Definition: ike.h:1127
@ IKE_HASH_ALGO_STREEBOG_256
Definition: ike.h:1404
@ IKE_CERT_TYPE_RSA_PSS
Definition: ike.h:1417
@ IKE_TRANSFORM_ID_ENCR_IDEA
Definition: ike.h:973
@ IKE_TRANSFORM_ID_AUTH_AES_128_GMAC
Definition: ike.h:1038
@ IKE_TRANSFORM_ID_AUTH_HMAC_MD5_96
Definition: ike.h:1030
@ IKE_SA_STATE_DELETE_REQ
Definition: ike.h:1365
IkeConfigPayload
Definition: ike.h:1709
@ IKE_CONFIG_TYPE_REQUEST
Definition: ike.h:1306
error_t ikeSetPsk(IkeContext *context, const uint8_t *psk, size_t pskLen)
Set entity's pre-shared key.
Definition: ike.c:478
uint16_t proposalLength
Definition: ike.h:1499
@ IKE_CERT_ENCODING_DNS_SIGNED_KEY
DNS signed key.
Definition: ike.h:1143
@ IKE_LAST_SUBSTRUC_MORE_TRANSFORMS
More transform substructures.
Definition: ike.h:920
@ IKE_AUTH_METHOD_ECDSA_P521_SHA512
ECDSA with SHA-512 on the P-521 curve.
Definition: ike.h:1169
Collection of cipher algorithms.
size_t peerIdLen
Length of the peer ID, in bytes.
Definition: ike.h:1872
@ IKE_NOTIFY_MSG_TYPE_USE_PPK_INT
Definition: ike.h:1269
uint8_t reserved
Definition: ike.h:1473
IpsecMode mode
IPsec mode (tunnel or transport)
Definition: ike.h:1962
uint8_t idData[]
Definition: ike.h:1558
@ IKE_NOTIFY_MSG_TYPE_PUZZLE
Definition: ike.h:1258
IkeKeContext keContext
Key exchange context.
Definition: ike.h:1885
@ IKE_CONFIG_ATTR_TYPE_SUPPORTED_ATTRIBUTES
Definition: ike.h:1329
Event object.
int_t inboundSa
Inbound SAD entry.
Definition: ike.h:2014
Generic cipher algorithm context.
uint32_t signHashAlgos
List of hash algorithms supported by the peer.
Definition: ike.h:1939
IkeNotifyPayload
Definition: ike.h:1632
@ IKE_TRANSFORM_ID_KE_MODP_2048_224
2048-bit MODP Group with 224-bit Prime Order Subgroup
Definition: ike.h:1066
@ IKE_NOTIFY_MSG_TYPE_SA_RESOURCE_INFO
Definition: ike.h:1268
uint8_t numTransforms
Definition: ike.h:1503
IpsecPacketInfo packetInfo
Triggering packet.
Definition: ike.h:2005
@ IKE_TRANSFORM_ID_ESN_NO
No Extended Sequence Numbers.
Definition: ike.h:1090
size_t encKeyLen
Length of the encryption key, in bytes.
Definition: ike.h:1998
@ IKE_TRANSFORM_TYPE_ADDKE2
Additional Key Exchange 2.
Definition: ike.h:951
@ IKE_AUTH_METHOD_GSPAM
Generic Secure Password Authentication Method.
Definition: ike.h:1170
uint_t numChildSaEntries
Number of Child SA entries.
Definition: ike.h:2033
@ IKE_NOTIFY_MSG_TYPE_UPDATE_SA_ADDRESSES
Definition: ike.h:1224
systime_t dpdPeriod
Dead peer detection period.
Definition: ike.h:2076
@ IKE_TRANSFORM_ID_ENCR_CAST
Definition: ike.h:974
@ IKE_TRANSFORM_ID_KE_ML_KEM_512
ML-KEM-512.
Definition: ike.h:1078
size_t responderNonceLen
Definition: ike.h:1868
IpAddr remoteIpAddr
Source IP address of the received IKE message.
Definition: ike.h:2099
@ IKE_AUTH_METHOD_RSA
RSA Digital Signature.
Definition: ike.h:1164
@ IKE_TRANSFORM_ID_KE_BRAINPOOLP256R1
256-bit Brainpool ECP Group
Definition: ike.h:1071
@ IKE_TRANSFORM_ID_KE_ECP_192
192-bit Random ECP Group
Definition: ike.h:1068
@ IKE_PROTOCOL_ID_AH
AH.
Definition: ike.h:931
@ IKE_CONFIG_ATTR_TYPE_ENCDNS_DIGEST_INFO
Definition: ike.h:1344
@ IKE_TRANSFORM_ID_ENCR_CAMELLIA_CCM_8
Definition: ike.h:990
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP6_LINK
Definition: ike.h:1332
@ IKE_EXCHANGE_TYPE_IKE_SESSION_RESUME
IKE_SESSION_RESUME.
Definition: ike.h:858
uint8_t configType
Definition: ike.h:1706
@ IKE_LAST_SUBSTRUC_LAST
Last proposal/transform substructure.
Definition: ike.h:918
uint8_t keyMaterial[IKE_MAX_CHILD_SA_KEY_MAT_LEN]
Keying material.
Definition: ike.h:1987
@ IKE_EXCHANGE_TYPE_GSA_INBAND_REKEY
GSA_INBAND_REKEY.
Definition: ike.h:862
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP6_ADDRESS
Definition: ike.h:1325
@ IKE_NOTIFY_MSG_TYPE_USE_WESP_MODE
Definition: ike.h:1239
size_t icvLen
Length of the ICV tag, in bytes.
Definition: ike.h:1912
@ IKE_TRANSFORM_ID_KE_MODP_768
768-bit MODP Group
Definition: ike.h:1054
@ IKE_CONFIG_ATTR_TYPE_P_CSCF_IP4_ADDRESS
Definition: ike.h:1335
IkePayloadHeader
Definition: ike.h:1477
IkeNotifyMsgType notifyMsgType
Definition: ike.h:1874
@ IKE_PAYLOAD_TYPE_CERTREQ
Certificate Request.
Definition: ike.h:892
error_t ikeRekeyChildSa(IkeChildSaEntry *childSa)
Rekey a Child SA.
Definition: ike.c:884
uint8_t value[]
Definition: ike.h:1532
IkeContext * context
IKE context.
Definition: ike.h:1833
@ IKE_TRANSFORM_ID_ENCR_CAMELLIA_CCM_16
Definition: ike.h:992
IkeIdType peerIdType
Peer ID type.
Definition: ike.h:1870
size_t prfKeyLen
Preferred size of the PRF key, in bytes.
Definition: ike.h:1909
@ IKE_TRANSFORM_ID_ENCR_MAGMA_MGM_MAC_KTREE
Definition: ike.h:1000
uint8_t protocolId
Definition: ike.h:1501
systime_t reauthPeriod
Reauthentication period.
Definition: ike.h:1848
systime_t timestamp
Definition: ike.h:1854
IkeSaEntry * sa
IKE SA entries.
Definition: ike.h:2101
@ IKE_TRANSFORM_ID_AUTH_AES_192_GMAC
Definition: ike.h:1039
@ IKE_NOTIFY_MSG_TYPE_IFOM_CAPABILITY
Definition: ike.h:1252
error_t ikeRekeySa(IkeSaEntry *sa)
Rekey an IKE SA.
Definition: ike.c:701
@ IKE_TRANSFORM_TYPE_GCAUTH
Group Controller Authentication Method.
Definition: ike.h:958
@ IKE_NOTIFY_MSG_TYPE_ROHC_SUPPORTED
Definition: ike.h:1240
bool_t remoteNat
The remote host is behind a NAT.
Definition: ike.h:1945
bool_t rekeyRequest
Child SA rekey request.
Definition: ike.h:2009
IkeIdType
ID types.
Definition: ike.h:1121
@ IKE_NOTIFY_MSG_TYPE_TICKET_NACK
Definition: ike.h:1236
@ IKE_TRANSFORM_ID_KE_MODP_2048_256
2048-bit MODP Group with 256-bit Prime Order Subgroup
Definition: ike.h:1067
@ IKE_TRANSFORM_ID_ENCR_CHACHA20_POLY1305_IIV
Definition: ike.h:996
@ IKE_IP_PROTOCOL_ID_UDP
Definition: ike.h:1295
uint8_t iv[8]
Initialization vector.
Definition: ike.h:1913
error_t ikeSetPreferredGroup(IkeContext *context, uint16_t groupNum)
Specify the preferred key exchange method.
Definition: ike.c:422
@ IKE_TRANSFORM_ID_ENCR_DES_IV64
Definition: ike.h:969
@ IKE_TRANSFORM_ID_ENCR_AES_GCM_16_IIV
Definition: ike.h:995
IkePayloadType
Payload types.
Definition: ike.h:885
@ IKE_CERT_ENCODING_HASH_URL_X509_BUNDLE
Hash and URL of X.509 bundle.
Definition: ike.h:1152
const HashAlgo * prfHashAlgo
Hash algorithm for HMAC-based PRF calculations.
Definition: ike.h:1905
uint16_t remotePort
Source port of the received IKE message.
Definition: ike.h:2100
const uint8_t * skd
Key used for deriving new keys for Child SAs.
Definition: ike.h:1890
@ IKE_CERT_TYPE_ECDSA_P384
Definition: ike.h:1420
void ikeTask(IkeContext *context)
IKE task.
Definition: ike.c:957
@ IKE_TRANSFORM_ID_KE_ECP_224
224-bit Random ECP Group
Definition: ike.h:1069
uint32_t messageId
Definition: ike.h:1457
@ IKE_TRANSFORM_TYPE_KWA
Key Wrap Algorithm.
Definition: ike.h:957
systime_t timeout
Definition: ike.h:1855
@ IKE_AUTH_METHOD_NULL
NULL Authentication.
Definition: ike.h:1171
IkeTransform
Definition: ike.h:1521
const uint8_t * skei
Encryption key (initiator)
Definition: ike.h:1990
uint8_t response[IKE_MAX_MSG_SIZE]
Response message.
Definition: ike.h:1922
@ IKE_TS_TYPE_SECLABEL
TS_SECLABEL.
Definition: ike.h:1283
uint8_t initiatorNonce[IKE_MAX_NONCE_SIZE]
Initiator nonce.
Definition: ike.h:1970
char_t password[IKE_MAX_PASSWORD_LEN+1]
Password used to decrypt the private key.
Definition: ike.h:2089
uint8_t proposals[]
Definition: ike.h:1487
@ IKE_NOTIFY_MSG_TYPE_SIGNATURE_HASH_ALGORITHMS
Definition: ike.h:1255
@ IKE_TRANSFORM_ID_ENCR_CHACHA20_POLY1305
Definition: ike.h:993
@ IKE_TRANSFORM_ID_KE_ECP_384
384-bit Random ECP Group
Definition: ike.h:1063
@ IKE_TRANSFORM_TYPE_ADDKE7
Additional Key Exchange 7.
Definition: ike.h:956
IkeCertType certType
Certificate type.
Definition: ike.h:2084
@ IKE_ATTR_FORMAT_TV
shortened Type/Value format
Definition: ike.h:1102
@ IKE_TRANSFORM_ID_AUTH_AES_XCBC_96
Definition: ike.h:1034
CipherMode cipherMode
Cipher mode of operation.
Definition: ike.h:1898
uint16_t startPort
Definition: ike.h:1805
IkeChildSaEntry * childSa2
Child SA (created by the peer)
Definition: ike.h:1835
uint8_t responderNonce[IKE_MAX_NONCE_SIZE]
Responder nonce.
Definition: ike.h:1972
@ IKE_SA_STATE_CLOSED
Definition: ike.h:1354
bool_t noAdditionalSas
NO_ADDITIONAL_SAS notification received.
Definition: ike.h:1934
@ IKE_CONFIG_ATTR_TYPE_ENCDNS_IP6
Definition: ike.h:1343
@ IKE_TRANSFORM_ID_PRF_HMAC_SHA2_384
Definition: ike.h:1016
bool_t initialContact
INITIAL_CONTACT notification received.
Definition: ike.h:1936
@ IKE_CHILD_SA_STATE_REKEY
Definition: ike.h:1388
@ IKE_NOTIFY_MSG_TYPE_USE_AGGFRAG
Definition: ike.h:1266
@ IKE_NOTIFY_MSG_TYPE_NAT_DETECTION_SOURCE_IP
Definition: ike.h:1212
IkeAuthMethod
Authentication methods.
Definition: ike.h:1163
@ IKE_SA_STATE_REKEY_REQ
Definition: ike.h:1363
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP256R1
Definition: ike.h:1422
@ IKE_TRANSFORM_ID_KE_MODP_3072
3072-bit MODP Group
Definition: ike.h:1058
error_t ikeCreateChildSa(IkeContext *context, const IpsecPacketInfo *packet)
Create a new Child SA.
Definition: ike.c:776
uint8_t identifier
Definition: ike.h:1742
@ IKE_CONFIG_TYPE_ACK
Definition: ike.h:1309
@ IKE_TRANSFORM_TYPE_ESN
Extended Sequence Numbers.
Definition: ike.h:949
@ IKE_NOTIFY_MSG_TYPE_TS_UNACCEPTABLE
Definition: ike.h:1196
size_t saltLen
Length of the salt, in bytes.
Definition: ike.h:1910
IkeCertVerifyCallback certVerifyCallback
Certificate verification callback function.
Definition: ike.h:2050
size_t sharedSecretLen
Length of the shared secret, in bytes.
Definition: ike.h:1984
#define IKE_MAX_SHARED_SECRET_LEN
Definition: ike.h:802
IkeCertVerifyCallback certVerifyCallback
Certificate verification callback function.
Definition: ike.h:2115
@ IKE_NOTIFY_MSG_TYPE_LINK_ID
Definition: ike.h:1238
systime_t dpdPeriod
Dead peer detection period.
Definition: ike.h:1852
IpsecProtocol protocol
Security protocol (AH or ESP)
Definition: ike.h:1963
@ IKE_NOTIFY_MSG_TYPE_NAT_DETECTION_DESTINATION_IP
Definition: ike.h:1213
@ IKE_TRANSFORM_ID_ENCR_AES_CBC
Definition: ike.h:979
@ IKE_PAYLOAD_TYPE_EAP
Extensible Authentication.
Definition: ike.h:902
@ IKE_ID_TYPE_DER_ASN1_GN
Definition: ike.h:1128
@ IKE_CONFIG_ATTR_TYPE_EXTERNAL_SOURCE_IP4_NAT_INFO
Definition: ike.h:1338
@ IKE_TRANSFORM_ATTR_TYPE_KEY_LEN
Key Length (in bits)
Definition: ike.h:1112
uint8_t spi[]
Definition: ike.h:1504
uint8_t majorVersion
Definition: ike.h:1453
const char_t * privateKey
Entity's private key (PEM format)
Definition: ike.h:2087
const uint8_t * skar
Integrity protection key (responder)
Definition: ike.h:1892
#define IkeContext
Definition: ike.h:832
bool_t pfs
Perfect forward secrecy.
Definition: ike.h:1981
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP4_NETMASK
Definition: ike.h:1320
IkeAuthPayload
Definition: ike.h:1596
uint_t numSaEntries
Number of IKE SA entries.
Definition: ike.h:2031
@ IKE_NOTIFY_MSG_TYPE_FAILED_CP_REQUIRED
Definition: ike.h:1195
size_t icvLen
Length of the ICV tag, in bytes.
Definition: ike.h:2002
@ IKE_NOTIFY_MSG_TYPE_IPSEC_REPLAY_COUNTER_SYNC
Definition: ike.h:1247
@ IKE_EXCHANGE_TYPE_IKE_AUTH
IKE_AUTH.
Definition: ike.h:855
@ IKE_SA_STATE_DELETE_CHILD_RESP
Definition: ike.h:1372
OsTaskParameters taskParams
Task parameters.
Definition: ike.h:2064
@ IKE_ID_TYPE_IPV6_ADDR
Definition: ike.h:1126
size_t requestLen
Length of the request message, in bytes.
Definition: ike.h:1921
@ IKE_NOTIFY_MSG_TYPE_CHILDLESS_IKEV2_SUPPORTED
Definition: ike.h:1242
uint8_t psk[IKE_MAX_PSK_LEN]
Pre-shared key.
Definition: ike.h:2082
Diffie-Hellman context.
Definition: dh.h:60
IkeConfigAttrType
Configuration attribute types.
Definition: ike.h:1318
uint16_t authAlgoId
Integrity algorithm.
Definition: ike.h:1881
@ IKE_NOTIFY_MSG_TYPE_INVALID_SELECTORS
Definition: ike.h:1197
@ IKE_TRANSFORM_ID_KE_BRAINPOOLP224R1
224-bit Brainpool ECP Group
Definition: ike.h:1070
IKE context.
Definition: ike.h:2060
@ IKE_NOTIFY_MSG_TYPE_ANOTHER_AUTH_FOLLOWS
Definition: ike.h:1229
@ IKE_ATTR_FORMAT_TLV
Type/Length/Value format.
Definition: ike.h:1101
uint16_t notifyMsgType
Definition: ike.h:1630
systime_t reauthPeriod
Reauthentication period.
Definition: ike.h:2073
@ IKE_CONFIG_ATTR_TYPE_FTT_KAT
Definition: ike.h:1337
IkeHashAlgo
Hash algorithms.
Definition: ike.h:1398
@ IKE_TRANSFORM_ID_KE_MODP_6144
6144-bit MODP Group
Definition: ike.h:1060
systime_t childSaLifetime
Lifetime of Child SAs.
Definition: ike.h:2071
bool_t natDetectSrcIp
NAT_DETECTION_SOURCE_IP notification received.
Definition: ike.h:1942
@ IKE_NOTIFY_MSG_TYPE_IP4_ALLOWED
Definition: ike.h:1263
@ IKE_TRANSFORM_ID_KE_BRAINPOOLP384R1
384-bit Brainpool ECP Group
Definition: ike.h:1072
uint16_t prfAlgoId
Pseudorandom function.
Definition: ike.h:1880
@ IKE_SA_STATE_RESERVED
Definition: ike.h:1355
@ IKE_TRANSFORM_TYPE_ADDKE3
Additional Key Exchange 3.
Definition: ike.h:952
X.509 certificate.
Definition: x509_common.h:1194
IkeSaState state
IKE SA state.
Definition: ike.h:1832
systime_t dpdPeriod
Dead peer detection period.
Definition: ike.h:2040
@ IKE_FLAGS_I
Initiator flag.
Definition: ike.h:876
@ IKE_SA_STATE_OPEN
Definition: ike.h:1360
error_t
Error codes.
Definition: error.h:43
@ IKE_CERT_TYPE_INVALID
Definition: ike.h:1415
uint8_t notifyProtocolId
Definition: ike.h:1876
OsEvent event
Event object used to poll the underlying socket.
Definition: ike.h:2063
@ IKE_EXCHANGE_TYPE_IKE_FOLLOWUP_KE
IKE_FOLLOWUP_KE.
Definition: ike.h:864
IkeChildSaEntry * childSa
Child SA entries.
Definition: ike.h:2103
@ IKE_PAYLOAD_TYPE_SK
Encrypted and Authenticated.
Definition: ike.h:900
IkeIdPayload
Definition: ike.h:1559
uint8_t algoId[]
Definition: ike.h:1606
DhContext dhContext
Diffie-Hellman context.
Definition: ike.h:1818
@ IKE_SA_STATE_AUTH_FAILURE_RESP
Definition: ike.h:1374
@ IKE_TRANSFORM_ID_PRF_RESERVED
Definition: ike.h:1010
systime_t lifetimeStart
Definition: ike.h:1965
@ IKE_PAYLOAD_TYPE_AUTH
Authentication.
Definition: ike.h:893
@ IKE_TRANSFORM_ID_ENCR_NULL
Definition: ike.h:978
bool_t originalInitiator
Original initiator of the IKE SA.
Definition: ike.h:1844
@ IKE_PAYLOAD_TYPE_CERT
Certificate.
Definition: ike.h:891
bool_t deleteRequest
IKE SA delete request.
Definition: ike.h:1932
uint8_t spiSize
Definition: ike.h:1502
@ IKE_SA_STATE_REKEY_CHILD_REQ
Definition: ike.h:1369
IkeTsPayload
Definition: ike.h:1670
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP6_PREFIX
Definition: ike.h:1333
size_t ivLen
Length of the initialization vector, in bytes.
Definition: ike.h:2001
@ IKE_AUTH_METHOD_DIGITAL_SIGN
Digital Signature.
Definition: ike.h:1172
bool_t reauthPending
Reauthentication process is on-going.
Definition: ike.h:1930
size_t idLen
Length of the ID, in bytes.
Definition: ike.h:2081
@ IKE_TS_TYPE_FC_ADDR_RANGE
TS_FC_ADDR_RANGE.
Definition: ike.h:1282
@ IKE_TRANSFORM_ID_KE_MODP_1536
1536-bit MODP Group
Definition: ike.h:1056
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP6_SUBNET
Definition: ike.h:1330
IpAddr startAddr
Definition: ike.h:1802
size_t certChainLen
Length of the certificate chain.
Definition: ike.h:2086
@ IKE_EXCHANGE_TYPE_IKE_INTERMEDIATE
IKE_INTERMEDIATE.
Definition: ike.h:863
IkeLastSubstruc
Last Substruc values.
Definition: ike.h:917
@ IKE_NOTIFY_MSG_TYPE_NO_NATS_ALLOWED
Definition: ike.h:1226
@ IKE_TRANSFORM_ID_KE_MODP_4096
4096-bit MODP Group
Definition: ike.h:1059
const CipherAlgo * authCipherAlgo
Cipher algorithm for CMAC-based integrity calculations.
Definition: ike.h:1997
systime_t lifetimeStart
Definition: ike.h:1845
@ IKE_CONFIG_ATTR_TYPE_MIP6_HOME_PREFIX
Definition: ike.h:1331
@ IKE_TRANSFORM_TYPE_ADDKE5
Additional Key Exchange 5.
Definition: ike.h:954
systime_t natKeepaliveInterval
NAT keepalive interval.
Definition: ike.h:2043
uint16_t encAlgoId
Encryption algorithm.
Definition: ike.h:1975
const PrngAlgo * prngAlgo
Pseudo-random number generator to be used.
Definition: ike.h:2068
const uint8_t * sker
Encryption key (responder)
Definition: ike.h:1894
uint8_t proposalNum
Definition: ike.h:1500
bool_t natDetectDestIp
NAT_DETECTION_DESTINATION_IP notification received.
Definition: ike.h:1943
@ IKE_TRANSFORM_ID_ENCR_KUZNYECHIK_MGM_MAC_KTREE
Definition: ike.h:999
#define IKE_SPI_SIZE
Definition: ike.h:826
@ IKE_HASH_ALGO_SHA512
Definition: ike.h:1402
uint8_t ipProtocolId
Definition: ike.h:1804
IkeChildSaState
Child Security Association state.
Definition: ike.h:1383
NetInterface * interface
Underlying network interface.
Definition: ike.h:2027
@ IKE_SA_STATE_INIT_REQ
Definition: ike.h:1356
const PrngAlgo * prngAlgo
Pseudo-random number generator to be used.
Definition: ike.h:2028
systime_t natKeepaliveInterval
NAT keepalive interval.
Definition: ike.h:2094
@ IKE_SA_STATE_AUTH_REQ
Definition: ike.h:1358
@ IKE_PROTOCOL_ID_ESP
ESP.
Definition: ike.h:932
IkeSaEntry * newSa2
New IKE SA (created by the peer)
Definition: ike.h:1838
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP6_DNS
Definition: ike.h:1326
error_t ikeStart(IkeContext *context)
Start IKE service.
Definition: ike.c:247
#define IKE_MAX_NONCE_SIZE
Definition: ike.h:236
size_t ivLen
Length of the initialization vector, in bytes.
Definition: ike.h:1911
#define NetInterface
Definition: net.h:40
@ IKE_NOTIFY_MSG_TYPE_NO_PPK_AUTH
Definition: ike.h:1261
IpAddr remoteIpAddr
Remote IP address.
Definition: ike.h:1843
@ IKE_TRANSFORM_ID_PRF_HMAC_MD5
Definition: ike.h:1011
@ IKE_NOTIFY_MSG_TYPE_PPK_IDENTITY
Definition: ike.h:1260
@ IKE_NOTIFY_MSG_TYPE_QUICK_CRASH_DETECTION
Definition: ike.h:1243
#define IKE_MAX_PASSWORD_LEN
Definition: ike.h:257
error_t ikeStop(IkeContext *context)
Stop IKE service.
Definition: ike.c:368
uint8_t localSpi[4]
Initiator SPI.
Definition: ike.h:1967
@ IKE_TRANSFORM_ID_KE_ECP_256
256-bit Random ECP Group
Definition: ike.h:1062
@ IKE_CERT_ENCODING_PGP_CERT
PGP certificate.
Definition: ike.h:1142
const uint8_t * skai
Integrity protection key (initiator)
Definition: ike.h:1891
#define IKE_MAX_ID_LEN
Definition: ike.h:243
@ IKE_IP_PROTOCOL_ID_ICMPV6
Definition: ike.h:1296
IkeExchangeType
Exchange types.
Definition: ike.h:853
uint32_t txMessageId
Definition: ike.h:1857
uint8_t iv[8]
Initialization vector.
Definition: ike.h:2003
uint16_t startPort
Definition: ike.h:1682
uint8_t exchangeType
Definition: ike.h:1455
uint8_t ipProtocolId
Definition: ike.h:1680
@ IKE_TRANSFORM_ID_PRF_HMAC_SHA1
Definition: ike.h:1012
error_t ikeCreateSa(IkeContext *context, const IpAddr *remoteIpAddr)
Create a new IKE SA.
Definition: ike.c:639
@ IKE_CERT_ENCODING_X509_CERT_ATTR
X.509 certificate - attribute.
Definition: ike.h:1149
@ IKE_NOTIFY_MSG_TYPE_MOBIKE_SUPPORTED
Definition: ike.h:1220
#define IKE_MAX_PSK_LEN
Definition: ike.h:250
uint16_t endPort
Definition: ike.h:1683
@ IKE_TRANSFORM_ID_ENCR_AES_GCM_12
Definition: ike.h:985
@ IKE_CHILD_SA_STATE_INIT
Definition: ike.h:1386
IkeCookieGenerateCallback cookieGenerateCallback
Cookie generation callback function.
Definition: ike.h:2046
IkeTransformAttr
Definition: ike.h:1533
@ IKE_CERT_ENCODING_OCSP_CONTENT
OCSP Content.
Definition: ike.h:1153
@ IKE_TRANSFORM_ID_ENCR_AES_CCM_8_IIV
Definition: ike.h:994
@ IKE_PAYLOAD_TYPE_V
Vendor ID.
Definition: ike.h:897
uint8_t certAuthority[]
Definition: ike.h:1582
@ IKE_TRANSFORM_TYPE_ADDKE1
Additional Key Exchange 1.
Definition: ike.h:950
uint8_t authMethod
Definition: ike.h:1593
uint8_t iv[]
Definition: ike.h:1695
uint8_t idType
Definition: ike.h:1556
@ IKE_TRANSFORM_ID_ENCR_MAGMA_MGM_KTREE
Definition: ike.h:998
uint8_t transformType
Definition: ike.h:1517
@ IKE_PAYLOAD_TYPE_IDI
Identification - Initiator.
Definition: ike.h:889
@ IKE_NOTIFY_MSG_TYPE_REDIRECTED_FROM
Definition: ike.h:1232
error_t(* IkeCertVerifyCallback)(IkeSaEntry *sa, const X509CertInfo *certInfo, uint_t pathLen)
Certificate verification callback function.
Definition: ike.h:1774
Task parameters.
void * prngContext
Pseudo-random number generator context.
Definition: ike.h:2029
bool_t initiator
Initiator of the CREATE_CHILD_SA exchange.
Definition: ike.h:1964
uint8_t sharedSecret[IKE_MAX_SHARED_SECRET_LEN]
Shared secret.
Definition: ike.h:1983
@ IKE_TRANSFORM_ID_ENCR_BLOWFISH
Definition: ike.h:975
@ IKE_CERT_TYPE_SM2
Definition: ike.h:1425
@ IKE_TRANSFORM_TYPE_ENCR
Encryption Algorithm.
Definition: ike.h:945
@ IKE_TRANSFORM_ID_ENCR_DES_IV32
Definition: ike.h:977
@ IKE_TRANSFORM_ID_KE_MODP_1024_160
1024-bit MODP Group with 160-bit Prime Order Subgroup
Definition: ike.h:1065
@ IKE_TRANSFORM_ID_PRF_AES128_XCBC
Definition: ike.h:1014
@ IKE_TRANSFORM_ID_AUTH_HMAC_MD5_128
Definition: ike.h:1035
uint8_t transformAttr[]
Definition: ike.h:1520
uint16_t numSpi
Definition: ike.h:1644
@ IKE_CERT_ENCODING_HASH_URL_X509_CERT
Hash and URL of X.509 certificate.
Definition: ike.h:1151
systime_t lifetime
Lifetime of the IKE SA.
Definition: ike.h:1846
IkeHeader
Definition: ike.h:1459
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP4_DNS
Definition: ike.h:1321
IkeIpProtocolId
IP protocol IDs.
Definition: ike.h:1292
@ IKE_NOTIFY_MSG_TYPE_USE_PPK
Definition: ike.h:1259
@ IKE_NOTIFY_MSG_TYPE_IP6_ALLOWED
Definition: ike.h:1264
@ IKE_EXCHANGE_TYPE_CREATE_CHILD_SA
CREATE_CHILD_SA.
Definition: ike.h:856
uint16_t transformLength
Definition: ike.h:1516
@ IKE_NOTIFY_MSG_TYPE_TICKET_OPAQUE
Definition: ike.h:1237
IkeSaEntry * sa
IKE SA entry.
Definition: ike.h:1959
error_t ikeDeleteSa(IkeSaEntry *sa)
Delete an IKE SA.
Definition: ike.c:741
@ IKE_NOTIFY_MSG_TYPE_UNEXPECTED_NAT_DETECTED
Definition: ike.h:1199
@ IKE_AUTH_METHOD_SHARED_KEY
Shared Key Message Integrity Code.
Definition: ike.h:1165
IkeTransformType
Transform types.
Definition: ike.h:944
@ IKE_CERT_TYPE_DSA
Definition: ike.h:1418
@ IKE_NOTIFY_MSG_TYPE_HTTP_CERT_LOOKUP_SUPPORTED
Definition: ike.h:1216
IkeCertEncoding
Certificate encodings.
Definition: ike.h:1140
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP4_NBNS
Definition: ike.h:1322
@ IKE_TRANSFORM_ID_PRF_HMAC_SHA2_256
Definition: ike.h:1015
@ IKE_NOTIFY_MSG_TYPE_ESP_TFC_PADDING_NOT_SUPPORTED
Definition: ike.h:1218
@ IKE_CHILD_SA_STATE_CLOSED
Definition: ike.h:1384
error_t(* IkeCookieGenerateCallback)(IkeContext *context, const IpAddr *ipAddr, const uint8_t *spi, const uint8_t *nonce, size_t nonceLen, uint8_t *cookie, size_t *cookieLen)
Cookie generation callback function.
Definition: ike.h:1782
IkeEncryptedPayload
Definition: ike.h:1696
@ IKE_CERT_ENCODING_CRL
Certificate revocation list.
Definition: ike.h:1146
Socket * altSocket
Underlying UDP socket (port 4500)
Definition: ike.h:2093
uint8_t eapMessage[]
Definition: ike.h:1731
IpsecProtocol
Security protocols.
Definition: ipsec.h:197
uint8_t configAttributes[]
Definition: ike.h:1708
@ IKE_NOTIFY_MSG_TYPE_STATE_NOT_FOUND
Definition: ike.h:1205
NetContext * netContext
TCP/IP stack context.
Definition: ike.h:2026
@ IKE_NOTIFY_MSG_TYPE_GROUP_SENDER
Definition: ike.h:1253
@ IKE_CERT_TYPE_RSA
Definition: ike.h:1416
@ IKE_NOTIFY_MSG_TYPE_NON_FIRST_FRAGMENTS_ALSO
Definition: ike.h:1219
@ IKE_CERT_TYPE_ECDSA_BRAINPOOLP512R1
Definition: ike.h:1424
@ IKE_EXCHANGE_TYPE_GSA_AUTH
GSA_AUTH.
Definition: ike.h:859
@ IKE_TRANSFORM_ID_AUTH_HMAC_SHA2_256_128
Definition: ike.h:1041
size_t authKeyLen
Size of the integrity protection key, in bytes.
Definition: ike.h:1908
IkeDeletePayload
Definition: ike.h:1646
#define IKE_MAX_COOKIE_SIZE
Definition: ike.h:215
@ IKE_NOTIFY_MSG_TYPE_TS_MAX_QUEUE
Definition: ike.h:1206
uint16_t encAlgoId
Encryption algorithm.
Definition: ike.h:1879
@ IKE_TRANSFORM_ID_ENCR_DES
Definition: ike.h:970
size_t privateKeyLen
Length of the private key.
Definition: ike.h:2088
bool_t deleteReceived
Definition: ike.h:2012
@ IKE_CERT_TYPE_ED25519
Definition: ike.h:1426
@ IKE_CERT_TYPE_ED448
Definition: ike.h:1427
bool_t deleteRequest
Child SA delete request.
Definition: ike.h:2011
uint8_t unsupportedCriticalPayload
Definition: ike.h:1875
IkeKeContext keContext
Key exchange context.
Definition: ike.h:1982
uint8_t numTs
Definition: ike.h:1667
@ IKE_NOTIFY_MSG_TYPE_AUTHORIZATION_FAILED
Definition: ike.h:1204
uint32_t systime_t
System time.
@ IKE_TRANSFORM_ID_AUTH_KPDK_MD5
Definition: ike.h:1033
@ IKE_TRANSFORM_ID_KE_NONE
None.
Definition: ike.h:1053
@ IKE_TRANSFORM_ID_AUTH_AES_256_GMAC
Definition: ike.h:1040
const uint8_t * skai
Integrity protection key (initiator)
Definition: ike.h:1988
IkeTs
Definition: ike.h:1685
MacAlgo prfMacAlgo
MAC algorithm for PRF calculations.
Definition: ike.h:1904
@ IKE_TRANSFORM_ID_ENCR_NULL_AUTH_AES_GMAC
Definition: ike.h:987
uint8_t message[IKE_MAX_MSG_SIZE]
Incoming IKE message.
Definition: ike.h:2105
@ IKE_TRANSFORM_ID_KE_MODP_2048
2048-bit MODP Group
Definition: ike.h:1057
@ IKE_CONFIG_TYPE_SET
Definition: ike.h:1308
@ IKE_TRANSFORM_ID_KE_ECP_521
521-bit Random ECP Group
Definition: ike.h:1064
IkeProposal
Definition: ike.h:1505
@ IKE_SA_STATE_CREATE_CHILD_REQ
Definition: ike.h:1367
@ IKE_CONFIG_ATTR_TYPE_P_CSCF_IP6_ADDRESS
Definition: ike.h:1336
@ IKE_HASH_ALGO_STREEBOG_512
Definition: ike.h:1405
char char_t
Definition: compiler_port.h:55
@ IKE_CERT_ENCODING_PKCS7_X509_CERT
PKCS #7 wrapped X.509 certificate.
Definition: ike.h:1141
@ IKE_PAYLOAD_TYPE_PS
Puzzle Solution.
Definition: ike.h:908
uint16_t preferredGroupNum
Preferred key exchange method.
Definition: ike.h:2078
@ IKE_TRANSFORM_TYPE_KE
Key Exchange Method.
Definition: ike.h:948
@ IKE_EXCHANGE_TYPE_IKE_SA_INIT
IKE_SA_INIT.
Definition: ike.h:854
@ IKE_PAYLOAD_TYPE_NONCE
Nonce.
Definition: ike.h:894
@ IKE_NOTIFY_MSG_TYPE_INVALID_KE_PAYLOAD
Definition: ike.h:1190
uint8_t initiatorSpi[IKE_SPI_SIZE]
Initiator SPI.
Definition: ike.h:1862
size_t messageLen
Length of the incoming IKE message, in bytes.
Definition: ike.h:2106
IKE settings.
Definition: ike.h:2024
@ IKE_TRANSFORM_ID_PRF_HMAC_STREEBOG_512
Definition: ike.h:1019
#define IkeSaEntry
Definition: ike.h:836
uint8_t minorVersion
Definition: ike.h:1452
bool_t rekeyRequest
IKE SA rekey request.
Definition: ike.h:1926
uint16_t keyExchangeMethod
Definition: ike.h:1543
EcdhContext ecdhContext
ECDH context.
Definition: ike.h:1821
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP4_ADDRESS
Definition: ike.h:1319
@ IKE_TRANSFORM_ID_ENCR_3DES
Definition: ike.h:971
int_t outboundSa
Outbound SAD entry.
Definition: ike.h:2015
@ IKE_TRANSFORM_ID_ENCR_AES_GCM_16
Definition: ike.h:986
IkeSaEntry * oldSa
Old IKE SA.
Definition: ike.h:1841
@ IKE_NOTIFY_MSG_TYPE_INTERMEDIATE_EXCHANGE_SUPPORTED
Definition: ike.h:1262
@ IKE_NOTIFY_MSG_TYPE_NO_ADDITIONAL_SAS
Definition: ike.h:1193
void ikeDeinit(IkeContext *context)
Release IKE context.
Definition: ike.c:1073
IkeChildSaEntry * oldChildSa
Old Child SA.
Definition: ike.h:1960
@ IKE_NOTIFY_MSG_TYPE_UNSUPPORTED_CRITICAL_PAYLOAD
Definition: ike.h:1183
CipherMode cipherMode
Cipher mode of operation.
Definition: ike.h:1993
@ IKE_NOTIFY_MSG_TYPE_SUPPORTED_AUTH_METHODS
Definition: ike.h:1267
IkeConfigAttr
Definition: ike.h:1721
IPsec (IP security)
@ IKE_TRANSFORM_ID_KE_CURVE25519
curve25519
Definition: ike.h:1074
@ IKE_PAYLOAD_TYPE_IDG
Group Identification.
Definition: ike.h:904
systime_t childSaLifetime
Lifetime of Child SAs.
Definition: ike.h:2035
@ IKE_CONFIG_ATTR_TYPE_ENCDNS_IP4
Definition: ike.h:1342
@ IKE_TRANSFORM_ID_PRF_HMAC_TIGER
Definition: ike.h:1013
uint8_t responderSpi[IKE_SPI_SIZE]
Definition: ike.h:1446
@ IKE_NOTIFY_MSG_TYPE_NONE
Definition: ike.h:1182
uint8_t peerId[IKE_MAX_ID_LEN]
Peer ID.
Definition: ike.h:1871
@ IKE_PAYLOAD_TYPE_SKF
Encrypted and Authenticated Fragment.
Definition: ike.h:907
uint8_t trafficSelectors[]
Definition: ike.h:1669
@ IKE_TRANSFORM_ID_KE_ML_KEM_768
ML-KEM-768.
Definition: ike.h:1079
@ IKE_SA_STATE_REKEY_CHILD_RESP
Definition: ike.h:1370
IkeCertPayload
Definition: ike.h:1571
error_t ikeInit(IkeContext *context, const IkeSettings *settings)
IKE service initialization.
Definition: ike.c:121
IkeEapMessage
Definition: ike.h:1746
uint8_t request[IKE_MAX_MSG_SIZE]
Request message.
Definition: ike.h:1920
size_t initiatorSaInitLen
Length of the IKE_SA_INIT request, in bytes.
Definition: ike.h:1916
error_t ikeSetId(IkeContext *context, IkeIdType idType, const void *id, size_t idLen)
Set entity's ID.
Definition: ike.c:449
IkeChildSaEntry * childSaEntries
Child SA entries.
Definition: ike.h:2032
@ IKE_CONFIG_ATTR_TYPE_APPLICATION_VERSION
Definition: ike.h:1324
uint8_t notifySpi[4]
Definition: ike.h:1877
IP packet information.
Definition: ipsec.h:323
uint8_t data[]
Definition: ike.h:1745
@ IKE_TRANSFORM_ID_ENCR_AES_CCM_12
Definition: ike.h:982
OsTaskParameters task
Task parameters.
Definition: ike.h:2025
const uint8_t * skei
Encryption key (initiator)
Definition: ike.h:1893
@ IKE_TRANSFORM_TYPE_PRF
Pseudorandom Function.
Definition: ike.h:946
@ IKE_TRANSFORM_ID_ESN_YES
Extended Sequence Numbers.
Definition: ike.h:1091
const HashAlgo * authHashAlgo
Hash algorithm for HMAC-based integrity calculations.
Definition: ike.h:1996
@ IKE_PAYLOAD_TYPE_KD
Key Download.
Definition: ike.h:906
@ IKE_NOTIFY_MSG_TYPE_TICKET_LT_OPAQUE
Definition: ike.h:1233
IpAddr localIpAddr
Destination IP address of the received IKE message.
Definition: ike.h:2097
const uint8_t * sker
Encryption key (responder)
Definition: ike.h:1991
MacAlgo authMacAlgo
MAC algorithm for integrity calculations.
Definition: ike.h:1995
IkeEncryptedFragPayload
Definition: ike.h:1759
const uint8_t * skpr
Key used for generating AUTH payload (responder)
Definition: ike.h:1896
MacAlgo authMacAlgo
MAC algorithm for integrity calculations.
Definition: ike.h:1901
const CipherAlgo * cipherAlgo
Cipher algorithm.
Definition: ike.h:1899
const uint8_t * initiatorSaInit
Pointer to the IKE_SA_INIT request.
Definition: ike.h:1915
@ IKE_NOTIFY_MSG_TYPE_SECURE_PASSWORD_METHODS
Definition: ike.h:1248
uint32_t length
Definition: ike.h:1458
@ IKE_TRANSFORM_ID_ENCR_CAMELLIA_CTR
Definition: ike.h:989
@ IKE_TRANSFORM_ID_KE_GOST3410_2012_256
GOST3410_2012_256.
Definition: ike.h:1076
#define Socket
Definition: socket.h:36
@ IKE_CERT_ENCODING_ARL
Authority revocation list.
Definition: ike.h:1147
bool_t reauthRequest
IKE SA reauthentication request.
Definition: ike.h:1929
@ IKE_SA_STATE_DPD_REQ
Definition: ike.h:1361
Socket * socket
Underlying UDP socket (port 500)
Definition: ike.h:2091
@ IKE_NOTIFY_MSG_TYPE_USE_ASSIGNED_HOA
Definition: ike.h:1200
uint16_t esn
Extended sequence numbers.
Definition: ike.h:1977
@ IKE_PROTOCOL_ID_FC_CT_AUTHENTICATION
FC_CT_AUTHENTICATION.
Definition: ike.h:934
IkeTransformIdDhGroup
Transform IDs (Key Exchange Methods)
Definition: ike.h:1052
void ikeGetDefaultSettings(IkeSettings *settings)
Initialize settings with default values.
Definition: ike.c:56
@ IKE_ID_TYPE_RFC822_ADDR
Definition: ike.h:1125
@ IKE_SA_STATE_DELETE_RESP
Definition: ike.h:1366
#define IKE_MAX_CHILD_SA_KEY_MAT_LEN
Definition: ike.h:747
uint16_t transformId
Definition: ike.h:1519
@ IKE_PROTOCOL_ID_IKE
IKE.
Definition: ike.h:930
@ IKE_ID_TYPE_INVALID
Definition: ike.h:1122
bool_t deleteReceived
Definition: ike.h:1933
size_t cookieLen
Length of the cookie, in bytes.
Definition: ike.h:1860
@ IKE_AUTH_METHOD_DSS
DSS Digital Signature.
Definition: ike.h:1166
@ IKE_NOTIFY_MSG_TYPE_AUTH_FAILED
Definition: ike.h:1191
@ IKE_NOTIFY_MSG_TYPE_TEMPORARY_FAILURE
Definition: ike.h:1201
systime_t saLifetime
Lifetime of IKE SAs.
Definition: ike.h:2034
@ IKE_TRANSFORM_ID_ENCR_3IDEA
Definition: ike.h:976
IkeSaEntry * newSa1
New IKE SA (created by the host)
Definition: ike.h:1837
@ IKE_SA_STATE_AUTH_RESP
Definition: ike.h:1359
Common interface for encryption algorithms.
Definition: crypto.h:1285
size_t authKeyLen
Length of the integrity protection key, in bytes.
Definition: ike.h:1999
@ IKE_EXCHANGE_TYPE_INFORMATIONAL
INFORMATIONAL.
Definition: ike.h:857
@ IKE_PAYLOAD_TYPE_LAST
No Next Payload.
Definition: ike.h:886
uint8_t critical
Definition: ike.h:1474
uint8_t cookie[IKE_MAX_COOKIE_SIZE]
Cookie.
Definition: ike.h:1859
IkeNotifyMsgType
Notify message types.
Definition: ike.h:1181
@ IKE_LAST_SUBSTRUC_MORE_PROPOSALS
More proposal substructures.
Definition: ike.h:919
@ IKE_NOTIFY_MSG_TYPE_TICKET_REQUEST
Definition: ike.h:1234
@ IKE_SA_STATE_INIT_RESP
Definition: ike.h:1357
const CipherAlgo * authCipherAlgo
Cipher algorithm for CMAC-based integrity calculations.
Definition: ike.h:1903
IkeCookieVerifyCallback cookieVerifyCallback
Cookie verification callback function.
Definition: ike.h:2047
uint8_t cookie[]
Definition: dtls_misc.h:211
@ IKE_CERT_ENCODING_SPKI_CERT
SPKI certificate.
Definition: ike.h:1148
@ IKE_NOTIFY_MSG_TYPE_INITIAL_CONTACT
Definition: ike.h:1208
uint8_t acceptedProposalNum
Number of the accepted proposal.
Definition: ike.h:1978
@ IKE_NOTIFY_MSG_TYPE_INTERNAL_ADDRESS_FAILURE
Definition: ike.h:1194
@ IKE_PAYLOAD_TYPE_KE
Key Exchange.
Definition: ike.h:888
IkeProtocolId
Protocol IDs.
Definition: ike.h:929
CipherContext cipherContext
Cipher context.
Definition: ike.h:1900
size_t responderSaInitLen
Length of the IKE_SA_INIT response, in bytes.
Definition: ike.h:1918
Child Security Association entry.
Definition: ike.h:1956
@ IKE_NOTIFY_MSG_TYPE_IKEV2_MESSAGE_ID_SYNC_SUPPORTED
Definition: ike.h:1244
@ IKE_SA_STATE_AUTH_FAILURE_REQ
Definition: ike.h:1373
@ IKE_NOTIFY_MSG_TYPE_REDIRECT
Definition: ike.h:1231
uint32_t rxMessageId
Definition: ike.h:1858
@ IKE_NOTIFY_MSG_TYPE_AUTH_LIFETIME
Definition: ike.h:1227
NetInterface * localInterface
Network interface the IKE message was received on.
Definition: ike.h:2096
uint8_t nextPayload
Definition: ike.h:1447
@ IKE_AUTH_METHOD_ECDSA_P256_SHA256
ECDSA with SHA-256 on the P-256 curve.
Definition: ike.h:1167
@ IKE_NOTIFY_MSG_TYPE_COOKIE
Definition: ike.h:1214
@ IKE_ID_TYPE_KEY_ID
Definition: ike.h:1129
systime_t reauthPeriod
Reauthentication period.
Definition: ike.h:2037
@ IKE_NOTIFY_MSG_TYPE_IPSEC_REPLAY_COUNTER_SYNC_SUPPORTED
Definition: ike.h:1245
@ IKE_FLAGS_R
Response flag.
Definition: ike.h:874
@ IKE_PAYLOAD_TYPE_TSI
Traffic Selector - Initiator.
Definition: ike.h:898
@ IKE_NOTIFY_MSG_TYPE_USE_TRANSPORT_MODE
Definition: ike.h:1215
@ IKE_PROTOCOL_ID_FC_ESP_HEADER
FC_ESP_HEADER.
Definition: ike.h:933
@ IKE_SA_STATE_REKEY_RESP
Definition: ike.h:1364
uint8_t sharedSecret[IKE_MAX_SHARED_SECRET_LEN]
Shared secret.
Definition: ike.h:1886
@ IKE_CERT_ENCODING_X509_CERT_SIGN
X.509 certificate - signature.
Definition: ike.h:1144
Ipv4Addr ipAddr
Definition: ipcp.h:105
IkeNoncePayload
Definition: ike.h:1618
@ IKE_TRANSFORM_TYPE_ADDKE6
Additional Key Exchange 6.
Definition: ike.h:955
size_t sharedSecretLen
Length of the shared secret, in bytes.
Definition: ike.h:1887
uint8_t keyMaterial[IKE_MAX_SA_KEY_MAT_LEN]
Keying material.
Definition: ike.h:1889
uint8_t reserved1
Definition: ike.h:1515
Common interface for hash algorithms.
Definition: crypto.h:1243
IkeChildSaEntry * childSa1
Child SA (created by the host)
Definition: ike.h:1834
@ IKE_NOTIFY_MSG_TYPE_SINGLE_PAIR_REQUIRED
Definition: ike.h:1192
@ IKE_TRANSFORM_ID_AUTH_DES_MAC
Definition: ike.h:1032
@ IKE_SA_STATE_CREATE_CHILD_RESP
Definition: ike.h:1368
@ IKE_SA_STATE_DPD_RESP
Definition: ike.h:1362
uint8_t type
Definition: ike.h:1744
@ IKE_TRANSFORM_ID_KE_MODP_8192
8192-bit MODP Group
Definition: ike.h:1061
uint8_t certData[]
Definition: ike.h:1570
thread_t * OsTaskId
Task identifier.
@ IKE_CERT_TYPE_ECDSA_P521
Definition: ike.h:1421
@ IKE_NOTIFY_MSG_TYPE_TICKET_ACK
Definition: ike.h:1235
const uint8_t * skpi
Key used for generating AUTH payload (initiator)
Definition: ike.h:1895
@ IKE_NOTIFY_MSG_TYPE_REDIRECT_SUPPORTED
Definition: ike.h:1230
@ IKE_EXCHANGE_TYPE_GSA_REKEY
GSA_REKEY.
Definition: ike.h:861
void * prngContext
Pseudo-random number generator context.
Definition: ike.h:2069
bool_t running
Operational state of IKEv2.
Definition: ike.h:2061
@ IKE_TRANSFORM_ID_KE_BRAINPOOLP512R1
512-bit Brainpool ECP Group
Definition: ike.h:1073
IpAddr endAddr
Definition: ike.h:1803
@ IKE_EXCHANGE_TYPE_GSA_REGISTRATION
GSA_REGISTRATION.
Definition: ike.h:860
@ IKE_NOTIFY_MSG_TYPE_MULTIPLE_AUTH_SUPPORTED
Definition: ike.h:1228
uint16_t groupNum
Key exchange method.
Definition: ike.h:1816
@ IKE_PAYLOAD_TYPE_IDR
Identification - Responder.
Definition: ike.h:890
const uint8_t * responderSaInit
Pointer to the IKE_SA_INIT response.
Definition: ike.h:1917
@ IKE_PROTOCOL_ID_GIKE_UPDATE
GIKE_UPDATE.
Definition: ike.h:935
OsTaskId taskId
Task identifier.
Definition: ike.h:2065
uint_t numSaEntries
Number of IKE SA entries.
Definition: ike.h:2102
systime_t dpdTimestamp
Timestamp to manage dead peer detection.
Definition: ike.h:1851
const CipherAlgo * prfCipherAlgo
Cipher algorithm for CMAC-based PRF calculations.
Definition: ike.h:1906
Key exchange context.
Definition: ike.h:1815
@ IKE_NOTIFY_MSG_TYPE_ADDITIONAL_KEY_EXCHANGE
Definition: ike.h:1265
uint8_t vid[]
Definition: ike.h:1656
@ IKE_TRANSFORM_ID_AUTH_HMAC_SHA2_512_256
Definition: ike.h:1043
uint8_t responderNonce[IKE_MAX_NONCE_SIZE]
Definition: ike.h:1867
unsigned int uint_t
Definition: compiler_port.h:57
@ IKE_PAYLOAD_TYPE_D
Delete.
Definition: ike.h:896
@ IKE_NOTIFY_MSG_TYPE_EAP_ONLY_AUTHENTICATION
Definition: ike.h:1241
@ IKE_NOTIFY_MSG_TYPE_COOKIE2
Definition: ike.h:1225
uint8_t authData[]
Definition: ike.h:1595
@ IKE_TRANSFORM_ID_KE_GOST3410_2012_512
GOST3410_2012_512.
Definition: ike.h:1077
MacAlgo
MAC algorithms.
@ IKE_PAYLOAD_TYPE_SA
Security Association.
Definition: ike.h:887
@ IKE_NOTIFY_MSG_TYPE_INVALID_GROUP_ID
Definition: ike.h:1203
@ IKE_TRANSFORM_TYPE_ADDKE4
Additional Key Exchange 4.
Definition: ike.h:953
IKE Security Association entry.
Definition: ike.h:1831
@ IKE_TRANSFORM_ID_AUTH_NONE
Definition: ike.h:1029
IpAddr remoteIpAddr
IP address of the peer.
Definition: ike.h:1961
IkeEapPayload
Definition: ike.h:1732
IkeSaEntry * saEntries
IKE SA entries.
Definition: ike.h:2030
uint8_t responderSpi[IKE_SPI_SIZE]
Responder SPI.
Definition: ike.h:1863
uint8_t nonceData[]
Definition: ike.h:1617
@ IKE_FLAGS_V
Version flag.
Definition: ike.h:875
@ IKE_NOTIFY_MSG_TYPE_PSK_PERSIST
Definition: ike.h:1249
IkeTransformIdPrf
Transform IDs (Pseudorandom Function)
Definition: ike.h:1009
@ IKE_NOTIFY_MSG_TYPE_INVALID_MAJOR_VERSION
Definition: ike.h:1185
@ IKE_CERT_ENCODING_KERBEROS_TOKEN
Kerberos token.
Definition: ike.h:1145
@ IKE_NOTIFY_MSG_TYPE_IKEV2_MESSAGE_ID_SYNC
Definition: ike.h:1246
IkeFlags
Flags.
Definition: ike.h:873
@ IKE_NOTIFY_MSG_TYPE_NO_ADDITIONAL_ADDRESSES
Definition: ike.h:1223
@ IKE_NOTIFY_MSG_TYPE_INVALID_IKE_SPI
Definition: ike.h:1184
@ IKE_NOTIFY_MSG_TYPE_UNACCEPTABLE_ADDRESSES
Definition: ike.h:1198
IkeTransformIdAuth
Transform IDs (Integrity Algorithm)
Definition: ike.h:1028
systime_t natKeepAliveTimestamp
Timestamp to manage NAT keepalive transmission.
Definition: ike.h:1946
@ IKE_NOTIFY_MSG_TYPE_CLONE_IKE_SA_SUPPORTED
Definition: ike.h:1256
#define IkeChildSaEntry
Definition: ike.h:840
uint16_t totalFrags
Definition: ike.h:1757
@ IKE_AUTH_METHOD_ECDSA_P384_SHA384
ECDSA with SHA-384 on the P-384 curve.
Definition: ike.h:1168
uint8_t remoteSpi[4]
Responder SPI.
Definition: ike.h:1968
IkeTransformAttrType
Transform attribute types.
Definition: ike.h:1111
@ IKE_TRANSFORM_ID_ENCR_RC5
Definition: ike.h:972
@ IKE_HASH_ALGO_SHA384
Definition: ike.h:1401
@ IKE_NOTIFY_MSG_TYPE_ADDITIONAL_IP4_ADDRESS
Definition: ike.h:1221
NetContext * netContext
TCP/IP stack context.
Definition: ike.h:2066
size_t initiatorNonceLen
Length of the initiator nonce.
Definition: ike.h:1971
Generic MAC algorithm context.
@ IKE_HASH_ALGO_IDENTITY
Definition: ike.h:1403
IkeTransformIdEsn
Transform IDs (Extended Sequence Numbers)
Definition: ike.h:1089
@ IKE_PAYLOAD_TYPE_N
Notify.
Definition: ike.h:895
@ IKE_CHILD_SA_STATE_RESERVED
Definition: ike.h:1385
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_DNS_DOMAIN
Definition: ike.h:1340
uint_t numChildSaEntries
Number of Child SA entries.
Definition: ike.h:2104
@ IKE_CONFIG_ATTR_TYPE_TIMEOUT_PERIOD_FOR_LIVENESS_CHECK
Definition: ike.h:1339
size_t pskLen
Length of the pre-shared key, in bytes.
Definition: ike.h:2083
ECDH context.
Definition: ecdh.h:60
uint8_t nonce[]
Definition: ntp_common.h:239
@ IKE_TRANSFORM_ID_PRF_HMAC_SHA2_512
Definition: ike.h:1017
uint_t retransmitCount
Definition: ike.h:1856
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP4_DHCP
Definition: ike.h:1323
const uint8_t * skar
Integrity protection key (responder)
Definition: ike.h:1989
uint16_t preferredGroupNum
Preferred key exchange method.
Definition: ike.h:1884
@ IKE_TS_TYPE_IPV6_ADDR_RANGE
TS_IPV6_ADDR_RANGE.
Definition: ike.h:1281
IkeConfigType
Configuration types.
Definition: ike.h:1305
@ IKE_ID_TYPE_FQDN
Definition: ike.h:1124
uint16_t selectorLength
Definition: ike.h:1681
IkeTsType
Traffic selector types.
Definition: ike.h:1279
IkeSaPayload
Definition: ike.h:1488
@ IKE_SA_STATE_DELETE_CHILD_REQ
Definition: ike.h:1371
@ IKE_CERT_ENCODING_RAW_PUBLIC_KEY
Raw Public Key.
Definition: ike.h:1154
@ IKE_CONFIG_ATTR_TYPE_INTERNAL_IP6_DHCP
Definition: ike.h:1327
@ IKE_PAYLOAD_TYPE_GSA
Group Security Association.
Definition: ike.h:905
@ IKE_PAYLOAD_TYPE_GSPM
Generic Secure Password Method.
Definition: ike.h:903
@ IKE_TRANSFORM_ID_KE_CURVE448
curve448
Definition: ike.h:1075
@ IKE_PAYLOAD_TYPE_TSR
Traffic Selector - Responder.
Definition: ike.h:899
error_t ikeDeleteChildSa(IkeChildSaEntry *childSa)
Delete a Child SA.
Definition: ike.c:924
IkeChildSaState state
Child SA state.
Definition: ike.h:1957
@ IKE_NOTIFY_MSG_TYPE_INVALID_SYNTAX
Definition: ike.h:1186
@ IKE_TRANSFORM_ID_ENCR_CAMELLIA_CCM_12
Definition: ike.h:991
@ IKE_CHILD_SA_STATE_OPEN
Definition: ike.h:1387
@ IKE_TRANSFORM_ID_ENCR_AES_CCM_8
Definition: ike.h:981
@ IKE_CERT_TYPE_ECDSA_P256
Definition: ike.h:1419
CipherMode
Cipher operation modes.
Definition: cipher_modes.h:78
@ IKE_TRANSFORM_TYPE_INTEG
Integrity Algorithm.
Definition: ike.h:947
bool_t localNat
The local host is behind a NAT.
Definition: ike.h:1944