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

1.1       misho       1: /*
                      2:  * Copyright (C) 2011 Tobias Brunner
                      3:  * HSR Hochschule fuer Technik Rapperswil
                      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 keymat_v1 keymat_v1
                     18:  * @{ @ingroup ikev1
                     19:  */
                     20: 
                     21: #ifndef KEYMAT_V1_H_
                     22: #define KEYMAT_V1_H_
                     23: 
                     24: #include <sa/keymat.h>
                     25: #include <sa/authenticator.h>
                     26: 
                     27: typedef struct keymat_v1_t keymat_v1_t;
                     28: 
                     29: /**
                     30:  * Derivation and management of sensitive keying material, IKEv1 variant.
                     31:  */
                     32: struct keymat_v1_t {
                     33: 
                     34:        /**
                     35:         * Implements keymat_t.
                     36:         */
                     37:        keymat_t keymat;
                     38: 
                     39:        /**
                     40:         * Derive keys for the IKE_SA.
                     41:         *
                     42:         * These keys are not handed out, but are used by the associated signers,
                     43:         * crypters and authentication functions.
                     44:         *
                     45:         * @param proposal              selected algorithms
                     46:         * @param dh                    diffie hellman key allocated by create_dh()
                     47:         * @param dh_other              public DH value from other peer
                     48:         * @param nonce_i               initiators nonce value
                     49:         * @param nonce_r               responders nonce value
                     50:         * @param id                    IKE_SA identifier
                     51:         * @param auth                  authentication method
                     52:         * @param shared_key    PSK in case of AUTH_CLASS_PSK, NULL otherwise
                     53:         * @return                              TRUE on success
                     54:         */
                     55:        bool (*derive_ike_keys)(keymat_v1_t *this, proposal_t *proposal,
                     56:                                                        diffie_hellman_t *dh, chunk_t dh_other,
                     57:                                                        chunk_t nonce_i, chunk_t nonce_r, ike_sa_id_t *id,
                     58:                                                        auth_method_t auth, shared_key_t *shared_key);
                     59: 
                     60:        /**
                     61:         * Derive keys for the CHILD_SA.
                     62:         *
                     63:         * @param proposal              selected algorithms
                     64:         * @param dh                    diffie hellman key, NULL if none used
                     65:         * @param spi_i                 SPI chosen by initiator
                     66:         * @param spi_r                 SPI chosen by responder
                     67:         * @param nonce_i               quick mode initiator nonce
                     68:         * @param nonce_r               quick mode responder nonce
                     69:         * @param encr_i                allocated initiators encryption key
                     70:         * @param integ_i               allocated initiators integrity key
                     71:         * @param encr_r                allocated responders encryption key
                     72:         * @param integ_r               allocated responders integrity key
                     73:         */
                     74:        bool (*derive_child_keys)(keymat_v1_t *this, proposal_t *proposal,
                     75:                                                diffie_hellman_t *dh, uint32_t spi_i, uint32_t spi_r,
                     76:                                                chunk_t nonce_i, chunk_t nonce_r,
                     77:                                                chunk_t *encr_i, chunk_t *integ_i,
                     78:                                                chunk_t *encr_r, chunk_t *integ_r);
                     79: 
                     80:        /**
                     81:         * Create the negotiated hasher.
                     82:         *
                     83:         * @param proposal              selected algorithms
                     84:         * @return                              TRUE, if creation was successful
                     85:         */
                     86:        bool (*create_hasher)(keymat_v1_t *this, proposal_t *proposal);
                     87: 
                     88:        /**
                     89:         * Get the negotiated hasher.
                     90:         *
                     91:         * @return                              allocated hasher or NULL
                     92:         */
                     93:        hasher_t *(*get_hasher)(keymat_v1_t *this);
                     94: 
                     95:        /**
                     96:         * Get HASH data for authentication.
                     97:         *
                     98:         * @param initiator             TRUE to create HASH_I, FALSE for HASH_R
                     99:         * @param dh                    public DH value of peer to create HASH for
                    100:         * @param dh_other              others public DH value
                    101:         * @param ike_sa_id             IKE_SA identifier
                    102:         * @param sa_i                  encoded SA payload of initiator
                    103:         * @param id                    encoded IDii payload for HASH_I (IDir for HASH_R)
                    104:         * @param hash                  chunk receiving allocated HASH data
                    105:         * @param scheme                pointer to signature scheme in case it needs to be
                    106:         *                                              modified by the keymat implementation
                    107:         * @return                              TRUE if hash allocated successfully
                    108:         */
                    109:        bool (*get_hash)(keymat_v1_t *this, bool initiator,
                    110:                                                chunk_t dh, chunk_t dh_other, ike_sa_id_t *ike_sa_id,
                    111:                                                chunk_t sa_i, chunk_t id, chunk_t *hash,
                    112:                                                signature_scheme_t *scheme);
                    113: 
                    114:        /**
                    115:         * Get HASH data for integrity/authentication in Phase 2 exchanges.
                    116:         *
                    117:         * @param message               message to generate the HASH data for
                    118:         * @param hash                  chunk receiving allocated hash data
                    119:         * @return                              TRUE if hash allocated successfully
                    120:         */
                    121:        bool (*get_hash_phase2)(keymat_v1_t *this, message_t *message, chunk_t *hash);
                    122: 
                    123:        /**
                    124:         * @see iv_manager_t.get_iv
                    125:         */
                    126:        bool (*get_iv)(keymat_v1_t *this, uint32_t mid, chunk_t *iv);
                    127: 
                    128:        /**
                    129:         * @see iv_manager_t.update_iv
                    130:         */
                    131:        bool (*update_iv)(keymat_v1_t *this, uint32_t mid, chunk_t last_block);
                    132: 
                    133:        /**
                    134:         * @see iv_manager_t.confirm_iv
                    135:         */
                    136:        bool (*confirm_iv)(keymat_v1_t *this, uint32_t mid);
                    137: };
                    138: 
                    139: /**
                    140:  * Create a keymat instance.
                    141:  *
                    142:  * @param initiator                    TRUE if we are the initiator
                    143:  * @return                                     keymat instance
                    144:  */
                    145: keymat_v1_t *keymat_v1_create(bool initiator);
                    146: 
                    147: #endif /** KEYMAT_V1_H_ @}*/

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