ike_payload_parse.h
Go to the documentation of this file.
1 /**
2  * @file ike_payload_parse.h
3  * @brief IKE payload parsing
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_PAYLOAD_PARSE_H
32 #define _IKE_PAYLOAD_PARSE_H
33 
34 //Dependencies
35 #include "ike/ike.h"
36 
37 //C++ guard
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 
43 /**
44  * @brief IKE message payloads
45  **/
46 
47 typedef struct
48 {
49  const IkeSaPayload *sa;
50  const IkeKePayload *ke;
51  const IkeIdPayload *idi;
52  const IkeIdPayload *idr;
57  const IkeTsPayload *tsi;
58  const IkeTsPayload *tsr;
61 #if (IKE_COOKIE_SUPPORT == ENABLED)
63 #endif
64 #if (IKE_INITIAL_CONTACT_SUPPORT == ENABLED)
66 #endif
67 #if (IKE_SIGN_HASH_ALGOS_SUPPORT == ENABLED)
69 #endif
70 #if (IKE_NAT_TRAVERSAL_SUPPORT == ENABLED)
73 #endif
76 
77 
78 //IKE related functions
79 void ikeParseIkeMessagePayloads(const uint8_t *message, size_t length,
80  IkeMessagePayloads *payloads);
81 
82 error_t ikeParseSaPayload(const IkeSaPayload *saPayload);
83 error_t ikeParseProposal(const IkeProposal *proposal, size_t length);
84 error_t ikeParseTransform(const IkeTransform *transform, size_t length);
85 
87  size_t *consumed);
88 
90  const IkeKePayload *kePayload);
91 
92 error_t ikeParseIdPayload(IkeSaEntry *sa, const IkeIdPayload *idPayload);
93 
95  const IkeCertReqPayload *certReqPayload);
96 
97 error_t ikeParseNoncePayload(const IkeNoncePayload *noncePayload,
98  uint8_t *nonce, size_t *nonceLen);
99 
101  const IkeNotifyPayload *notifyPayload);
102 
104  const IkeNotifyPayload *notifyPayload);
105 
107  const IkeNotifyPayload *notifyPayload);
108 
110  const uint8_t *message, size_t length);
111 
113  const IkeNotifyPayload *notifyPayload);
114 
116  const IkeDeletePayload *deletePayload, bool_t response);
117 
118 error_t ikeParseTsPayload(const IkeTsPayload *tsPayload, uint_t index,
119  IkeTsEntry *tsEntry);
120 
121 error_t ikeParseTsEntry(const IkeTs *ts, size_t length, IkeTsEntry *tsEntry);
122 
123 const IkePayloadHeader *ikeGetPayload(const uint8_t *message, size_t length,
124  uint8_t type, uint_t index);
125 
127  size_t length);
128 
130  size_t length, uint16_t type, uint_t index);
131 
132 error_t ikeCheckCriticalPayloads(const uint8_t *message, size_t length,
133  uint8_t *unsupportedCriticalPayload);
134 
135 //C++ guard
136 #ifdef __cplusplus
137 }
138 #endif
139 
140 #endif
const IkePayloadHeader * ikeGetPayload(const uint8_t *message, size_t length, uint8_t type, uint_t index)
Search an IKE message for a given payload type.
int bool_t
Definition: compiler_port.h:63
const IkeNotifyPayload * initialContactNotify
IkeCertReqPayload
Definition: ike.h:1583
const IkeNotifyPayload * natDetectSrcIpNotify
Traffic selector entry.
Definition: ike.h:1801
error_t ikeParseTransform(const IkeTransform *transform, size_t length)
Parse Transform substructure.
const IkeNotifyPayload * errorNotify
IkeKePayload
Definition: ike.h:1546
uint8_t message[]
Definition: chap.h:154
const IkeNotifyPayload * cookieNotify
IKE message payloads.
IkeNotifyPayload
Definition: ike.h:1632
const IkeNoncePayload * nonce
error_t ikeParseKePayload(IkeKeContext *keContext, const IkeKePayload *kePayload)
Parse Key Exchange payload.
const IkeTsPayload * tsr
IkePayloadHeader
Definition: ike.h:1477
uint8_t type
Definition: coap_common.h:176
const IkeCertPayload * cert
error_t ikeParseSignHashAlgosNotification(IkeSaEntry *sa, const IkeNotifyPayload *notifyPayload)
Parse SIGNATURE_HASH_ALGORITHMS notification.
IkeTransform
Definition: ike.h:1521
const IkeCertReqPayload * certReq
error_t ikeParseTsEntry(const IkeTs *ts, size_t length, IkeTsEntry *tsEntry)
Parse Traffic Selector substructure.
IkeAuthPayload
Definition: ike.h:1596
const IkeNotifyPayload * ikeGetErrorNotifyPayload(const uint8_t *message, size_t length)
Search an IKE message for an error Notify payload.
error_t ikeParseTsPayload(const IkeTsPayload *tsPayload, uint_t index, IkeTsEntry *tsEntry)
Parse Traffic Selector payload.
const IkeKePayload * ke
error_t
Error codes.
Definition: error.h:43
error_t ikeParseNatDetectSrcIpNotification(IkeSaEntry *sa, const uint8_t *message, size_t length)
Parse NAT_DETECTION_SOURCE_IP notification.
IkeIdPayload
Definition: ike.h:1559
IkeTsPayload
Definition: ike.h:1670
const IkeNotifyPayload * natDetectDestIpNotify
const IkeSaPayload * sa
IkeTransformAttr
Definition: ike.h:1533
const IkeAuthPayload * auth
uint8_t length
Definition: tcp.h:375
error_t ikeParseNatDetectDestIpNotification(IkeSaEntry *sa, const IkeNotifyPayload *notifyPayload)
Parse NAT_DETECTION_DESTINATION_IP notification.
IkeDeletePayload
Definition: ike.h:1646
error_t ikeParseIdPayload(IkeSaEntry *sa, const IkeIdPayload *idPayload)
Parse Identification payload.
error_t ikeParseCertReqPayload(IkeSaEntry *sa, const IkeCertReqPayload *certReqPayload)
Parse Certificate Request payload.
IKEv2 (Internet Key Exchange Protocol)
const IkeTsPayload * tsi
IkeTs
Definition: ike.h:1685
IkeProposal
Definition: ike.h:1505
#define IkeSaEntry
Definition: ike.h:836
error_t ikeParseCookieNotification(IkeSaEntry *sa, const IkeNotifyPayload *notifyPayload)
Parse COOKIE notification.
error_t ikeParseInvalidKePayloadNotification(IkeKeContext *keContext, const IkeNotifyPayload *notifyPayload)
Parse INVALID_KE_PAYLOAD notification.
IkeCertPayload
Definition: ike.h:1571
error_t ikeCheckCriticalPayloads(const uint8_t *message, size_t length, uint8_t *unsupportedCriticalPayload)
Check whether the message contains an unsupported critical payload.
const IkeNotifyPayload * signHashAlgosNotify
error_t ikeParseNoncePayload(const IkeNoncePayload *noncePayload, uint8_t *nonce, size_t *nonceLen)
Parse Nonce payload.
const IkeNotifyPayload * useTransportModeNotify
error_t ikeParseSaPayload(const IkeSaPayload *saPayload)
Parse Security Association payload.
IkeNoncePayload
Definition: ike.h:1618
error_t ikeParseTransformAttr(const IkeTransformAttr *attr, size_t length, size_t *consumed)
Parse transform attribute.
const IkeNotifyPayload * rekeySaNotify
Key exchange context.
Definition: ike.h:1815
void ikeParseIkeMessagePayloads(const uint8_t *message, size_t length, IkeMessagePayloads *payloads)
Parse IKE message payloads.
unsigned int uint_t
Definition: compiler_port.h:57
error_t ikeParseProposal(const IkeProposal *proposal, size_t length)
Parse Proposal substructure.
const IkeIdPayload * idi
const IkeNotifyPayload * ikeGetStatusNotifyPayload(const uint8_t *message, size_t length, uint16_t type, uint_t index)
Search an IKE message for a given status Notify payload.
uint8_t nonce[]
Definition: ntp_common.h:239
IkeSaPayload
Definition: ike.h:1488
const IkeIdPayload * idr
error_t ikeParseDeletePayload(IkeSaEntry *sa, const IkeDeletePayload *deletePayload, bool_t response)
Parse Delete payload.