Annotation of embedaddon/ipsec-tools/src/racoon/ipsec_doi.h, revision 1.1.1.1

1.1       misho       1: /*     $NetBSD: ipsec_doi.h,v 1.12 2009/03/12 10:57:26 tteras Exp $    */
                      2: 
                      3: /* Id: ipsec_doi.h,v 1.15 2006/08/11 16:06:30 vanhu Exp */
                      4: 
                      5: /*
                      6:  * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
                      7:  * All rights reserved.
                      8:  * 
                      9:  * Redistribution and use in source and binary forms, with or without
                     10:  * modification, are permitted provided that the following conditions
                     11:  * are met:
                     12:  * 1. Redistributions of source code must retain the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer.
                     14:  * 2. Redistributions in binary form must reproduce the above copyright
                     15:  *    notice, this list of conditions and the following disclaimer in the
                     16:  *    documentation and/or other materials provided with the distribution.
                     17:  * 3. Neither the name of the project nor the names of its contributors
                     18:  *    may be used to endorse or promote products derived from this software
                     19:  *    without specific prior written permission.
                     20:  * 
                     21:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
                     22:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     23:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     24:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
                     25:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     26:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     27:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     28:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     29:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     30:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     31:  * SUCH DAMAGE.
                     32:  */
                     33: 
                     34: #ifndef _IPSEC_DOI_H
                     35: #define _IPSEC_DOI_H
                     36: 
                     37: #include "isakmp.h"
                     38: 
                     39: /* refered to RFC2407 */
                     40: 
                     41: #define IPSEC_DOI 1
                     42: 
                     43: /* 4.2 IPSEC Situation Definition */
                     44: #define IPSECDOI_SIT_IDENTITY_ONLY           0x00000001
                     45: #define IPSECDOI_SIT_SECRECY                 0x00000002
                     46: #define IPSECDOI_SIT_INTEGRITY               0x00000004
                     47: 
                     48: /* 4.4.1 IPSEC Security Protocol Identifiers */
                     49:   /* 4.4.2 IPSEC ISAKMP Transform Values */
                     50: #define IPSECDOI_PROTO_ISAKMP                        1
                     51: #define   IPSECDOI_KEY_IKE                             1
                     52: 
                     53: /* 4.4.1 IPSEC Security Protocol Identifiers */
                     54: #define IPSECDOI_PROTO_IPSEC_AH                      2
                     55:   /* 4.4.3 IPSEC AH Transform Values */
                     56: #define   IPSECDOI_AH_MD5                              2
                     57: #define   IPSECDOI_AH_SHA                              3
                     58: #define   IPSECDOI_AH_DES                              4
                     59: #define   IPSECDOI_AH_SHA256                           5
                     60: #define   IPSECDOI_AH_SHA384                           6
                     61: #define   IPSECDOI_AH_SHA512                           7
                     62: 
                     63: /* 4.4.1 IPSEC Security Protocol Identifiers */
                     64: #define IPSECDOI_PROTO_IPSEC_ESP                     3
                     65:   /* 4.4.4 IPSEC ESP Transform Identifiers */
                     66: #define   IPSECDOI_ESP_DES_IV64                                1
                     67: #define   IPSECDOI_ESP_DES                             2
                     68: #define   IPSECDOI_ESP_3DES                            3
                     69: #define   IPSECDOI_ESP_RC5                             4
                     70: #define   IPSECDOI_ESP_IDEA                            5
                     71: #define   IPSECDOI_ESP_CAST                            6
                     72: #define   IPSECDOI_ESP_BLOWFISH                                7
                     73: #define   IPSECDOI_ESP_3IDEA                           8
                     74: #define   IPSECDOI_ESP_DES_IV32                                9
                     75: #define   IPSECDOI_ESP_RC4                             10
                     76: #define   IPSECDOI_ESP_NULL                            11
                     77: #define   IPSECDOI_ESP_AES                             12
                     78: #define   IPSECDOI_ESP_CAMELLIA                                22
                     79: #if 1
                     80:   /* draft-ietf-ipsec-ciph-aes-cbc-00.txt */
                     81: #define   IPSECDOI_ESP_TWOFISH                         253
                     82: #else
                     83:   /* SSH uses these value for now */
                     84: #define   IPSECDOI_ESP_TWOFISH                         250
                     85: #endif
                     86: 
                     87: /* 4.4.1 IPSEC Security Protocol Identifiers */
                     88: #define IPSECDOI_PROTO_IPCOMP                        4
                     89:   /* 4.4.5 IPSEC IPCOMP Transform Identifiers */
                     90: #define   IPSECDOI_IPCOMP_OUI                          1
                     91: #define   IPSECDOI_IPCOMP_DEFLATE                      2
                     92: #define   IPSECDOI_IPCOMP_LZS                          3
                     93: 
                     94: /* 4.5 IPSEC Security Association Attributes */
                     95: /* NOTE: default value is not included in a packet. */
                     96: #define IPSECDOI_ATTR_SA_LD_TYPE              1 /* B */
                     97: #define   IPSECDOI_ATTR_SA_LD_TYPE_DEFAULT      1
                     98: #define   IPSECDOI_ATTR_SA_LD_TYPE_SEC          1
                     99: #define   IPSECDOI_ATTR_SA_LD_TYPE_KB           2
                    100: #define   IPSECDOI_ATTR_SA_LD_TYPE_MAX          3
                    101: #define IPSECDOI_ATTR_SA_LD                   2 /* V */
                    102: #define   IPSECDOI_ATTR_SA_LD_SEC_DEFAULT      28800 /* 8 hours */
                    103: #define   IPSECDOI_ATTR_SA_LD_KB_MAX  (~(1 << ((sizeof(int) << 3) - 1)))
                    104: #define IPSECDOI_ATTR_GRP_DESC                3 /* B */
                    105: #define IPSECDOI_ATTR_ENC_MODE                4 /* B */
                    106:        /* default value: host dependent */
                    107: #define   IPSECDOI_ATTR_ENC_MODE_ANY            0      /* NOTE:internal use */
                    108: #define   IPSECDOI_ATTR_ENC_MODE_TUNNEL         1
                    109: #define   IPSECDOI_ATTR_ENC_MODE_TRNS           2
                    110: 
                    111: /* NAT-T draft-ietf-ipsec-nat-t-ike-05 and later */
                    112: #define   IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC 3
                    113: #define   IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC   4
                    114: 
                    115: /* NAT-T up to draft-ietf-ipsec-nat-t-ike-04 */
                    116: #define   IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT       61443
                    117: #define   IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT         61444
                    118: 
                    119: #define IPSECDOI_ATTR_AUTH                    5 /* B */
                    120:        /* 0 means not to use authentication. */
                    121: #define   IPSECDOI_ATTR_AUTH_HMAC_MD5           1
                    122: #define   IPSECDOI_ATTR_AUTH_HMAC_SHA1          2
                    123: #define   IPSECDOI_ATTR_AUTH_DES_MAC            3
                    124: #define   IPSECDOI_ATTR_AUTH_KPDK               4 /*RFC-1826(Key/Pad/Data/Key)*/
                    125: #define   IPSECDOI_ATTR_AUTH_HMAC_SHA2_256      5
                    126: #define   IPSECDOI_ATTR_AUTH_HMAC_SHA2_384      6
                    127: #define   IPSECDOI_ATTR_AUTH_HMAC_SHA2_512      7
                    128: #define   IPSECDOI_ATTR_AUTH_NONE               254    /* NOTE:internal use */
                    129:        /*
                    130:         * When negotiating ESP without authentication, the Auth
                    131:         * Algorithm attribute MUST NOT be included in the proposal.
                    132:         * When negotiating ESP without confidentiality, the Auth
                    133:         * Algorithm attribute MUST be included in the proposal and
                    134:         * the ESP transform ID must be ESP_NULL.
                    135:        */
                    136: #define IPSECDOI_ATTR_KEY_LENGTH              6 /* B */
                    137: #define IPSECDOI_ATTR_KEY_ROUNDS              7 /* B */
                    138: #define IPSECDOI_ATTR_COMP_DICT_SIZE          8 /* B */
                    139: #define IPSECDOI_ATTR_COMP_PRIVALG            9 /* V */
                    140: 
                    141: #ifdef HAVE_SECCTX
                    142: #define IPSECDOI_ATTR_SECCTX                10 /* V */
                    143: #endif
                    144: 
                    145: /* 4.6.1 Security Association Payload */
                    146: struct ipsecdoi_pl_sa {
                    147:        struct isakmp_gen h;
                    148:        struct ipsecdoi_sa_b {
                    149:                u_int32_t doi; /* Domain of Interpretation */
                    150:                u_int32_t sit; /* Situation */
                    151:        } b;
                    152:        /* followed by Leveled Domain Identifier and so on. */
                    153: } __attribute__((__packed__));
                    154: 
                    155: struct ipsecdoi_secrecy_h {
                    156:        u_int16_t len;
                    157:        u_int16_t reserved;
                    158:        /* followed by the value */
                    159: } __attribute__((__packed__));
                    160: 
                    161: /* 4.6.2 Identification Payload Content */
                    162: struct ipsecdoi_pl_id {
                    163:        struct isakmp_gen h;
                    164:        struct ipsecdoi_id_b {
                    165:                u_int8_t type;          /* ID Type */
                    166:                u_int8_t proto_id;      /* Protocol ID */
                    167:                u_int16_t port;         /* Port */
                    168:        } b;
                    169:        /* followed by Identification Data */
                    170: } __attribute__((__packed__));
                    171: 
                    172: #define IPSECDOI_ID_IPV4_ADDR                        1
                    173: #define IPSECDOI_ID_FQDN                             2
                    174: #define IPSECDOI_ID_USER_FQDN                        3
                    175: #define IPSECDOI_ID_IPV4_ADDR_SUBNET                 4
                    176: #define IPSECDOI_ID_IPV6_ADDR                        5
                    177: #define IPSECDOI_ID_IPV6_ADDR_SUBNET                 6
                    178: #define IPSECDOI_ID_IPV4_ADDR_RANGE                  7
                    179: #define IPSECDOI_ID_IPV6_ADDR_RANGE                  8
                    180: #define IPSECDOI_ID_DER_ASN1_DN                      9
                    181: #define IPSECDOI_ID_DER_ASN1_GN                      10
                    182: #define IPSECDOI_ID_KEY_ID                           11
                    183: 
                    184: /* compressing doi type, it's internal use. */
                    185: #define IDTYPE_UNDEFINED       0
                    186: #define IDTYPE_FQDN            1
                    187: #define IDTYPE_USERFQDN                2
                    188: #define IDTYPE_KEYID           3
                    189: #define IDTYPE_ADDRESS         4
                    190: #define IDTYPE_ASN1DN          5
                    191: #define IDTYPE_SUBNET          6
                    192: 
                    193: /* qualifiers for KEYID (and maybe others) */
                    194: #define IDQUAL_UNSPEC          0
                    195: #define IDQUAL_FILE            1
                    196: #define IDQUAL_TAG             2
                    197: 
                    198: /* The use for checking proposal payload. This is not exchange type. */
                    199: #define IPSECDOI_TYPE_PH1      0
                    200: #define IPSECDOI_TYPE_PH2      1
                    201: 
                    202: /*
                    203:  * Prefix that will make ipsecdoi_sockaddr2id() generate address type
                    204:  * identities without knowning the exact length of address.
                    205:  */
                    206: #define IPSECDOI_PREFIX_HOST   0xff
                    207: 
                    208: struct isakmpsa;
                    209: struct ipsecdoi_pl_sa;
                    210: struct saprop;
                    211: struct saproto;
                    212: struct satrns;
                    213: struct prop_pair;
                    214: 
                    215: extern int ipsecdoi_checkph1proposal __P((vchar_t *, struct ph1handle *));
                    216: extern int ipsecdoi_selectph2proposal __P((struct ph2handle *));
                    217: extern int ipsecdoi_checkph2proposal __P((struct ph2handle *));
                    218: 
                    219: extern struct prop_pair **get_proppair __P((vchar_t *, int));
                    220: extern vchar_t *get_sabyproppair __P((u_int32_t, u_int32_t, struct prop_pair *));
                    221: extern int ipsecdoi_updatespi __P((struct ph2handle *iph2));
                    222: extern vchar_t *get_sabysaprop __P((struct saprop *, vchar_t *));
                    223: extern int ipsecdoi_chkcmpids( const vchar_t *, const vchar_t *, int );
                    224: extern int ipsecdoi_checkid1 __P((struct ph1handle *));
                    225: extern int ipsecdoi_setid1 __P((struct ph1handle *));
                    226: extern int set_identifier __P((vchar_t **, int, vchar_t *));
                    227: extern int set_identifier_qual __P((vchar_t **, int, vchar_t *, int));
                    228: extern int ipsecdoi_setid2 __P((struct ph2handle *));
                    229: extern vchar_t *ipsecdoi_sockaddr2id __P((struct sockaddr *, u_int, u_int));
                    230: extern int ipsecdoi_id2sockaddr __P((vchar_t *, struct sockaddr *,
                    231:        u_int8_t *, u_int16_t *));
                    232: extern char *ipsecdoi_id2str __P((const vchar_t *));
                    233: extern vchar_t *ipsecdoi_sockrange2id __P((    struct sockaddr *,
                    234:        struct sockaddr *, u_int));
                    235: 
                    236: extern vchar_t *ipsecdoi_setph1proposal __P((struct remoteconf *,
                    237:                                             struct isakmpsa *));
                    238: extern int ipsecdoi_setph2proposal __P((struct ph2handle *));
                    239: extern int ipsecdoi_transportmode __P((struct saprop *));
                    240: extern int ipsecdoi_get_defaultlifetime __P((void));
                    241: extern int ipsecdoi_checkalgtypes __P((int, int, int, int));
                    242: extern int ipproto2doi __P((int));
                    243: extern int doi2ipproto __P((int));
                    244: 
                    245: extern int ipsecdoi_t2satrns __P((struct isakmp_pl_t *,
                    246:        struct saprop *, struct saproto *, struct satrns *));
                    247: extern int ipsecdoi_authalg2trnsid __P((int));
                    248: extern int idtype2doi __P((int));
                    249: extern int doi2idtype __P((int));
                    250: 
                    251: extern int ipsecdoi_parse_responder_lifetime __P((struct isakmp_pl_n *notify,
                    252:        u_int32_t *lifetime_sec, u_int32_t *liftime_kb));
                    253: 
                    254: 
                    255: #endif /* _IPSEC_DOI_H */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>