aboutsummaryrefslogtreecommitdiffstats
path: root/Source/charon/encodings/encodings.h
diff options
context:
space:
mode:
Diffstat (limited to 'Source/charon/encodings/encodings.h')
-rw-r--r--Source/charon/encodings/encodings.h331
1 files changed, 331 insertions, 0 deletions
diff --git a/Source/charon/encodings/encodings.h b/Source/charon/encodings/encodings.h
new file mode 100644
index 000000000..14fb73ff6
--- /dev/null
+++ b/Source/charon/encodings/encodings.h
@@ -0,0 +1,331 @@
+/**
+ * @file encodings.h
+ *
+ * @brief Type definitions for parser and generator,
+ * also payload types are defined here.
+ *
+ * Header is parsed like a payload and gets its one payload_id
+ * from PRIVATE USE space. Also the substructures
+ * of specific payload types get their own payload_id
+ * from PRIVATE_USE space. See RFC for mor informations.
+ *
+ */
+
+/*
+ * Copyright (C) 2005 Jan Hutter, Martin Willi
+ * Hochschule fuer Technik Rapperswil
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * for more details.
+ */
+
+#ifndef ENCODINGS_H_
+#define ENCODINGS_H_
+
+#include "../types.h"
+#include "../definitions.h"
+
+
+/**
+ * @brief All different kinds of encoding types.
+ *
+ * Each field of an IKEv2-Message (in header or payload)
+ * which has to be parsed or generated differently has its own
+ * type defined here.
+ */
+typedef enum encoding_type_e encoding_type_t;
+
+enum encoding_type_e{
+ /**
+ * Representing a 4 Bit unsigned int value
+ *
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 4 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 4 bit forward afterwards.
+ */
+ U_INT_4,
+ /**
+ * Representing a 8 Bit unsigned int value
+ *
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 8 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 8 bit forward afterwards.
+ */
+ U_INT_8,
+ /**
+ * Representing a 16 Bit unsigned int value
+ *
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 16 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 16 bit forward afterwards.
+ */
+ U_INT_16,
+ /**
+ * Representing a 32 Bit unsigned int value
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 32 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 32 bit forward afterwards.
+ */
+
+ U_INT_32,
+ /**
+ * Representing a 64 Bit unsigned int value
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 64 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 64 bit forward afterwards.
+ */
+ U_INT_64,
+ /**
+ * @brief represents a RESERVED_BIT used in FLAG-Bytes
+ *
+ * When generating, the next bit is set to zero and the current write
+ * position is moved one bit forward.
+ * No value is read from the associated data struct.
+ * The current write position is moved 1 bit forward afterwards.
+ *
+ * When parsing, the current read pointer is moved one bit forward.
+ * No value is written to the associated data struct.
+ * The current read pointer is moved 1 bit forward afterwards.
+ */
+ RESERVED_BIT,
+ /**
+ * @brief represents a RESERVED_BYTE
+ *
+ * When generating, the next byte is set to zero and the current write
+ * position is moved one byte forward.
+ * No value is read from the associated data struct.
+ * The current write position is moved 1 byte forward afterwards.
+ *
+ * When parsing, the current read pointer is moved one byte forward.
+ * No value is written to the associated data struct.
+ * The current read pointer is moved 1 byte forward afterwards.
+ */
+ RESERVED_BYTE,
+ /**
+ * Representing a 1 Bit flag.
+ *
+ * When generation, the next bit is set to 1 if the associated value
+ * in the data struct is TRUE, 0 otherwise. The current write position
+ * is moved 1 bit forward afterwards.
+ *
+ * When parsing, the next bit is read and stored in the associated data
+ * struct. 0 means FALSE, 1 means TRUE, The current read pointer
+ * is moved 1 bit forward afterwards
+ */
+ FLAG,
+ /**
+ * Representating a length field
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 32 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 32 bit forward afterwards.
+ */
+ LENGTH,
+ /**
+ * Representating a spi size field
+ *
+ * When generating it must be changed from host to network order.
+ * The value is read from the associated data struct.
+ * The current write position is moved 32 bit forward afterwards.
+ *
+ * When parsing it must be changed from network to host order.
+ * The value is written to the associated data struct.
+ * The current read pointer is moved 32 bit forward afterwards.
+ */
+ SPI_SIZE
+};
+
+/**
+ * An encoding rule is a mapping of a specific encoding type to
+ * a location in the data struct where the current field is stored to
+ * or read from.
+ *
+ * For examples see directory encodings/.
+ *
+ * This rules are used by parser and generator.
+ */
+typedef struct encoding_rule_s encoding_rule_t;
+
+struct encoding_rule_s{
+ /**
+ * Encoding type
+ */
+ encoding_type_t type;
+ /**
+ * Offset in the data struct
+ *
+ * When parsing, data are written to this offset of the
+ * data struct.
+ *
+ * When generating, data are read from this offset in the
+ * data struct.
+ */
+ u_int32_t offset;
+};
+
+
+/**
+ * Payload-Types of a IKEv2-Message
+ *
+ *
+ * Header and substructures are also defined as
+ * payload types with values from PRIVATE USE space.
+ */
+typedef enum payload_type_e payload_type_t;
+
+enum payload_type_e{
+
+ /**
+ * NO_PAYLOAD
+ */
+ NO_PAYLOAD = 0,
+
+ /**
+ * SA
+ */
+ SECURITY_ASSOCIATION = 33,
+ /**
+ * KE
+ */
+ KEY_EXCHANGE = 34,
+ /**
+ * IDi
+ */
+ ID_INITIATOR = 35,
+ /**
+ * IDr
+ */
+ ID_RESPONDER = 36,
+ /**
+ * CERT
+ */
+ CERTIFICATE = 37,
+ /**
+ * CERTREQ
+ */
+ CERTIFICATE_REQUEST = 38,
+ /**
+ * AUTH
+ */
+ AUTHENTICATION = 39,
+ /**
+ * Ni, Nr
+ */
+ NONCE = 40,
+ /**
+ * N
+ */
+ NOTIFY = 41,
+ /**
+ * D
+ */
+ DELETE = 42,
+ /**
+ * V
+ */
+ VENDOR_ID = 43,
+ /**
+ * TSi
+ */
+ TRAFFIC_SELECTOR_INITIATOR = 44,
+ /**
+ * TSr
+ */
+ TRAFFIC_SELECTOR_RESPONDER = 45,
+ /**
+ * E
+ */
+ ENCRYPTED = 46,
+ /**
+ * CP
+ */
+ CONFIGURATION = 47,
+ /**
+ * EAP
+ */
+ EXTENSIBLE_AUTHENTICATION = 48,
+
+ /**
+ * Header has value 140 of PRIVATE USE space
+ *
+ * This payload type is not send over wire and just
+ * used internally to handle IKEv2-Header like a payload.
+ */
+ HEADER = 140
+};
+
+
+/*
+ * build string mapping array for payload_type_t
+ */
+extern mapping_t payload_type_t_mappings[];
+
+/**
+ * Information of a specific payload are stored in this struct
+ *
+ * The following informations are needed for each payload
+ * - payload type
+ * - length of its associated data struct in bytes
+ * - encoding rules array
+ * - encoding rules count
+ */
+typedef struct payload_info_s payload_info_t;
+
+struct payload_info_s{
+ /**
+ * Type of payload
+ */
+ payload_type_t payload_type;
+ /**
+ * Length of associated data struct in bytes
+ */
+ size_t data_struct_length;
+
+ /**
+ * Pointer to the encoding rules array
+ */
+ encoding_rule_t *ecoding_rules;
+
+ /**
+ * Number of encoding rules for the specific payload_type
+ */
+ size_t encoding_rules_count;
+};
+
+#endif /*ENCODINGS_H_*/