Annotation of embedaddon/strongswan/src/libcharon/sa/ikev1/phase1.h, revision 1.1.1.1

1.1       misho       1: /*
                      2:  * Copyright (C) 2012 Martin Willi
                      3:  * Copyright (C) 2012 revosec AG
                      4:  *
                      5:  * This program is free software; you can redistribute it and/or modify it
                      6:  * under the terms of the GNU General Public License as published by the
                      7:  * Free Software Foundation; either version 2 of the License, or (at your
                      8:  * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
                      9:  *
                     10:  * This program is distributed in the hope that it will be useful, but
                     11:  * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
                     12:  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
                     13:  * for more details.
                     14:  */
                     15: 
                     16: /**
                     17:  * @defgroup phase1 phase1
                     18:  * @{ @ingroup ikev1
                     19:  */
                     20: 
                     21: #ifndef PHASE1_H_
                     22: #define PHASE1_H_
                     23: 
                     24: typedef struct phase1_t phase1_t;
                     25: 
                     26: #include <sa/ike_sa.h>
                     27: #include <crypto/diffie_hellman.h>
                     28: 
                     29: /**
                     30:  * Common phase 1 helper for main and aggressive mode.
                     31:  */
                     32: struct phase1_t {
                     33: 
                     34:        /**
                     35:         * Create keymat hasher.
                     36:         *
                     37:         * @return                              TRUE if hasher created
                     38:         */
                     39:        bool (*create_hasher)(phase1_t *this);
                     40: 
                     41:        /**
                     42:         * Create DH object using SA keymat.
                     43:         *
                     44:         * @param group                 negotiated DH group
                     45:         * @return                              TRUE if group supported
                     46:         */
                     47:        bool (*create_dh)(phase1_t *this, diffie_hellman_group_t group);
                     48: 
                     49:        /**
                     50:         * Derive key material.
                     51:         *
                     52:         * @param peer_cfg              peer config to look up shared key for, or NULL
                     53:         * @param method                negotiated authenticated method
                     54:         * @return                              TRUE if successful
                     55:         */
                     56:        bool (*derive_keys)(phase1_t *this, peer_cfg_t *peer_cfg,
                     57:                                                auth_method_t method);
                     58:        /**
                     59:         * Verify a HASH or SIG payload in message.
                     60:         *
                     61:         * @param method                negotiated auth method
                     62:         * @param message               message containing HASH or SIG payload
                     63:         * @param id_data               encoded identity, including protocol/port fields
                     64:         * @return                              TRUE if verified successfully
                     65:         */
                     66:        bool (*verify_auth)(phase1_t *this, auth_method_t method,
                     67:                                                message_t *message, chunk_t id_data);
                     68: 
                     69:        /**
                     70:         * Build a HASH or SIG payload and add it to message.
                     71:         *
                     72:         * @param method                negotiated auth method
                     73:         * @param message               message to add payload to
                     74:         * @param id_data               encoded identity, including protocol/port fields
                     75:         * @return                              TRUE if built successfully
                     76:         */
                     77:        bool (*build_auth)(phase1_t *this, auth_method_t method,
                     78:                                           message_t *message, chunk_t id_data);
                     79: 
                     80:        /**
                     81:         * Get the IKEv1 authentication method defined by peer config.
                     82:         *
                     83:         * @param peer_cfg              peer config to get auth method from
                     84:         * @return                              auth method, or AUTH_NONE
                     85:         */
                     86:        auth_method_t (*get_auth_method)(phase1_t *this, peer_cfg_t *peer_cfg);
                     87: 
                     88:        /**
                     89:         * Select a peer config as responder.
                     90:         *
                     91:         * If called after the first successful call the next alternative config
                     92:         * is returned, if any.
                     93:         *
                     94:         * @param method                used authentication method
                     95:         * @param aggressive    TRUE to get an aggressive mode config
                     96:         * @param id                    initiator identity
                     97:         * @return                              selected peer config, NULL if none found
                     98:         */
                     99:        peer_cfg_t* (*select_config)(phase1_t *this, auth_method_t method,
                    100:                                                                 bool aggressive, identification_t *id);
                    101: 
                    102:        /**
                    103:         * Get configured identity from peer config.
                    104:         *
                    105:         * @param peer_cfg              peer config to get identity from
                    106:         * @param local                 TRUE to get own identity, FALSE for remote
                    107:         * @return                              identity, pointing to internal config data
                    108:         */
                    109:        identification_t* (*get_id)(phase1_t *this, peer_cfg_t *peer_cfg, bool local);
                    110: 
                    111:        /**
                    112:         * Check if peer config has virtual IPs pool assigned.
                    113:         *
                    114:         * @param peer_cfg              peer_config to check
                    115:         * @return                              TRUE if peer config contains at least one pool
                    116:         */
                    117:        bool (*has_pool)(phase1_t *this, peer_cfg_t *peer_cfg);
                    118: 
                    119:        /**
                    120:         * Check if peer config has virtual IPs to request
                    121:         *
                    122:         * @param peer_cfg              peer_config to check
                    123:         * @return                              TRUE if peer config contains at least one virtual IP
                    124:         */
                    125:        bool (*has_virtual_ip)(phase1_t *this, peer_cfg_t *peer_cfg);
                    126: 
                    127:        /**
                    128:         * Extract and store SA payload bytes from encoded message.
                    129:         *
                    130:         * @param message               message to extract SA payload bytes from
                    131:         * @return                              TRUE if SA payload found
                    132:         */
                    133:        bool (*save_sa_payload)(phase1_t *this, message_t *message);
                    134: 
                    135:        /**
                    136:         * Add Nonce and KE payload to message.
                    137:         *
                    138:         * @param message               message to add payloads
                    139:         * @return                              TRUE if payloads added successfully
                    140:         */
                    141:        bool (*add_nonce_ke)(phase1_t *this, message_t *message);
                    142: 
                    143:        /**
                    144:         * Extract Nonce and KE payload from message.
                    145:         *
                    146:         * @param message               message to get payloads from
                    147:         * @return                              TRUE if payloads extracted successfully
                    148:         */
                    149:        bool (*get_nonce_ke)(phase1_t *this, message_t *message);
                    150: 
                    151:        /**
                    152:         * Destroy a phase1_t.
                    153:         */
                    154:        void (*destroy)(phase1_t *this);
                    155: };
                    156: 
                    157: /**
                    158:  * Create a phase1 instance.
                    159:  *
                    160:  * @param ike_sa               IKE_SA to set up
                    161:  * @param initiator            TRUE if initiating actively
                    162:  * @return                             Phase 1 helper
                    163:  */
                    164: phase1_t *phase1_create(ike_sa_t *ike_sa, bool initiator);
                    165: 
                    166: #endif /** PHASE1_H_ @}*/

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