00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _HIP_PROTOCOL_H_
00026 #define _HIP_PROTOCOL_H_
00027
00028 #include <openssl/bn.h>
00029 #include <openssl/hmac.h>
00030 #include <openssl/rsa.h>
00031
00032
00033
00034
00035
00036
00037
00038 #define H_PROTO_UDP 17
00039 #define HIP_ESP_UDP_PORT 54500
00040
00041 #define HIP_PROTO_VER 1
00042 #define H_PROTO_HIP 253
00043 #define HIP_PAYLOAD_PROTOCOL 59
00044 #define STATUS_PORT 4051
00045
00046 #define SPI_RESERVED 255
00047 #define HIP_ALIGN 4
00048 #define ACCEPTABLE_R1_COUNT_RANGE 2
00049
00050 #define HIT_SIZE 16
00051 #define HIT_PREFIX_TYPE1_SHA1 0x40
00052
00053 typedef enum {
00054 UNASSOCIATED,
00055 I1_SENT,
00056 I2_SENT,
00057 R2_SENT,
00058 ESTABLISHED,
00059 REKEYING,
00060 CLOSING,
00061 CLOSED,
00062 E_FAILED
00063 } HIP_STATES;
00064
00065
00066 typedef enum {
00067 HIP_I1=1,
00068 HIP_R1,
00069 HIP_I2,
00070 HIP_R2,
00071 CER,
00072 BOS=11,
00073 UPDATE=16,
00074 NOTIFY=17,
00075 CLOSE=18,
00076 CLOSE_ACK=19,
00077 } HIP_PACKETS;
00078
00079
00080 typedef enum {
00081 CTL_ANON = 0x0001,
00082 } HIP_CONTROLS;
00083
00084
00085
00086
00087 #define PARAM_ESP_INFO 65
00088 #define PARAM_R1_COUNTER 128
00089 #define PARAM_LOCATOR 193
00090 #define PARAM_PUZZLE 257
00091 #define PARAM_SOLUTION 321
00092 #define PARAM_SEQ 385
00093 #define PARAM_ACK 449
00094 #define PARAM_DIFFIE_HELLMAN 513
00095 #define PARAM_HIP_TRANSFORM 577
00096 #define PARAM_ENCRYPTED 641
00097 #define PARAM_HOST_ID 705
00098 #define PARAM_CERT 768
00099 #define PARAM_NOTIFY 832
00100 #define PARAM_ECHO_REQUEST 897
00101 #define PARAM_REG_INFO 930
00102 #define PARAM_REG_REQUEST 932
00103 #define PARAM_REG_RESPONSE 934
00104 #define PARAM_REG_FAILED 936
00105 #define PARAM_REG_REQUIRED
00106 #define PARAM_ECHO_RESPONSE 961
00107 #define PARAM_ESP_TRANSFORM 4095
00108 #define PARAM_TRANSFORM_LOW 2048
00109 #define PARAM_TRANSFORM_HIGH 4095
00110 #define PARAM_HMAC 61505
00111 #define PARAM_HMAC_2 61569
00112 #define PARAM_HIP_SIGNATURE_2 61633
00113 #define PARAM_HIP_SIGNATURE 61697
00114 #define PARAM_ECHO_REQUEST_NOSIG 63661
00115 #define PARAM_ECHO_RESPONSE_NOSIG 63425
00116 #define PARAM_FROM 65498
00117 #define PARAM_RVS_HMAC 65500
00118 #define PARAM_VIA_RVS 65502
00119 #define PARAM_CRITICAL_BIT 0x0001
00120
00121
00122 typedef enum {
00123 RESERVED,
00124 ESP_AES_CBC_HMAC_SHA1,
00125 ESP_3DES_CBC_HMAC_SHA1,
00126 ESP_3DES_CBC_HMAC_MD5,
00127 ESP_BLOWFISH_CBC_HMAC_SHA1,
00128 ESP_NULL_HMAC_SHA1,
00129 ESP_NULL_HMAC_MD5,
00130 SUITE_ID_MAX,
00131 } SUITE_IDS;
00132 #define ENCR_NULL(a) ((a==ESP_NULL_HMAC_SHA1) || \
00133 (a==ESP_NULL_HMAC_MD5))
00134
00135
00136 #define DEFAULT_HIP_TRANS \
00137 ((1 << ESP_AES_CBC_HMAC_SHA1) | \
00138 (1 << ESP_3DES_CBC_HMAC_SHA1) | \
00139 (1 << ESP_3DES_CBC_HMAC_MD5) | \
00140 (1 << ESP_BLOWFISH_CBC_HMAC_SHA1) | \
00141 (1 << ESP_NULL_HMAC_SHA1) | \
00142 (1 << ESP_NULL_HMAC_MD5))
00143
00144 #define ESP_OFFSET 8
00145 #ifndef __CYGWIN__
00146 #define DEFAULT_ESP_TRANS \
00147 ((1 << (ESP_OFFSET + ESP_AES_CBC_HMAC_SHA1)) | \
00148 (1 << (ESP_OFFSET + ESP_3DES_CBC_HMAC_SHA1)) | \
00149 (1 << (ESP_OFFSET + ESP_3DES_CBC_HMAC_MD5)) | \
00150 (1 << (ESP_OFFSET + ESP_BLOWFISH_CBC_HMAC_SHA1)) | \
00151 (1 << (ESP_OFFSET + ESP_NULL_HMAC_SHA1)) | \
00152 (1 << (ESP_OFFSET + ESP_NULL_HMAC_MD5)))
00153 #else
00154 #define DEFAULT_ESP_TRANS \
00155 ((1 << (ESP_OFFSET + ESP_3DES_CBC_HMAC_SHA1)) | \
00156 (1 << (ESP_OFFSET + ESP_3DES_CBC_HMAC_MD5)) | \
00157 (1 << (ESP_OFFSET + ESP_NULL_HMAC_SHA1)) | \
00158 (1 << (ESP_OFFSET + ESP_NULL_HMAC_MD5)))
00159 #endif
00160
00161
00162 enum {
00163 HI_ALG_RESERVED,
00164 HI_ALG_DSA = 3,
00165 HI_ALG_RSA = 5,
00166 } HI_ALGORITHMS;
00167 #define HIP_RSA_DFT_EXP RSA_F4
00168 #define HI_TYPESTR(a) ((a==HI_ALG_DSA) ? "DSA" : \
00169 (a==HI_ALG_RSA) ? "RSA" : "UNKNOWN")
00170
00171
00172 enum {
00173 DIT_NONE,
00174 DIT_FQDN,
00175 DIT_NAI,
00176 } HI_DIT;
00177
00178 typedef enum {
00179 UNVERIFIED,
00180 ACTIVE,
00181 DEPRECATED,
00182 DELETED,
00183 } ADDRESS_STATES;
00184
00185 typedef enum {
00186 HIP_ENCRYPTION,
00187 HIP_INTEGRITY,
00188 ESP_ENCRYPTION,
00189 ESP_AUTH,
00190 } KEY_TYPES;
00191
00192 typedef enum {
00193 GL_HIP_ENCRYPTION_KEY,
00194 GL_HIP_INTEGRITY_KEY,
00195 LG_HIP_ENCRYPTION_KEY,
00196 LG_HIP_INTEGRITY_KEY,
00197 GL_ESP_ENCRYPTION_KEY,
00198 GL_ESP_AUTH_KEY,
00199 LG_ESP_ENCRYPTION_KEY,
00200 LG_ESP_AUTH_KEY
00201 } HIP_KEYMAT_KEYS;
00202
00203 typedef enum {
00204 KEY_LEN_NULL = 0,
00205 KEY_LEN_MD5 = 16,
00206 KEY_LEN_SHA1 = 20,
00207 KEY_LEN_3DES = 24,
00208 KEY_LEN_AES = 16,
00209 KEY_LEN_BLOWFISH = 16,
00210 } HIP_KEYLENS;
00211
00212
00213 typedef enum {
00214 DH_RESERVED,
00215 DH_384,
00216 DH_OAKLEY_1,
00217 DH_MODP_1536,
00218 DH_MODP_3072,
00219 DH_MODP_6144,
00220 DH_MODP_8192,
00221 DH_MAX
00222 } DH_GROUP_IDS;
00223
00224 #define DEFAULT_DH_GROUP_ID DH_MODP_1536
00225 #define DH_MAX_LEN 1024
00226
00227
00228
00229
00230 #define LOCATOR_PREFERRED 0x01
00231 #define LOCATOR_TRAFFIC_TYPE_BOTH 0x00
00232 #define LOCATOR_TRAFFIC_TYPE_SIGNALING 0x01
00233 #define LOCATOR_TRAFFIC_TYPE_DATA 0x02
00234 #define LOCATOR_TYPE_IPV6 0x00
00235 #define LOCATOR_TYPE_SPI_IPV6 0x01
00236
00237
00238
00239
00240 #define NOTIFY_UNSUPPORTED_CRITICAL_PARAMETER_TYPE 1
00241 #define NOTIFY_INVALID_SYNTAX 7
00242 #define NOTIFY_NO_DH_PROPOSAL_CHOSEN 14
00243 #define NOTIFY_INVALID_DH_CHOSEN 15
00244 #define NOTIFY_NO_HIP_PROPOSAL_CHOSEN 16
00245 #define NOTIFY_INVALID_HIP_TRANSFORM_CHOSEN 17
00246 #define NOTIFY_NO_ESP_PROPOSAL_CHOSEN 18
00247 #define NOTIFY_INVALID_ESP_TRANSFORM_CHOSEN 19
00248 #define NOTIFY_AUTHENTICATION_FAILED 24
00249 #define NOTIFY_CHECKSUM_FAILED 26
00250 #define NOTIFY_HMAC_FAILED 28
00251 #define NOTIFY_ENCRYPTION_FAILED 32
00252 #define NOTIFY_INVALID_HIT 40
00253 #define NOTIFY_BLOCKED_BY_POLICY 42
00254 #define NOTIFY_SERVER_BUSY_PLEASE_RETRY 44
00255 #define NOTIFY_I2_ACKNOWLEDGEMENT 46
00256
00257 #endif
00258
00259
00260