Added a note about DH/keymat lifecycle for custom implementations
[strongswan.git] / src / libcharon / sa / keymat.h
index e51709e..6c2b5d4 100644 (file)
@@ -24,8 +24,7 @@
 #include <library.h>
 #include <utils/identification.h>
 #include <crypto/prfs/prf.h>
 #include <library.h>
 #include <utils/identification.h>
 #include <crypto/prfs/prf.h>
-#include <crypto/crypters/crypter.h>
-#include <crypto/signers/signer.h>
+#include <crypto/aead.h>
 #include <config/proposal.h>
 #include <sa/ike_sa_id.h>
 
 #include <config/proposal.h>
 #include <sa/ike_sa_id.h>
 
@@ -41,7 +40,12 @@ struct keymat_t {
         *
         * The diffie hellman is either for IKE negotiation/rekeying or
         * CHILD_SA rekeying (using PFS). The resulting DH object must be passed
         *
         * The diffie hellman is either for IKE negotiation/rekeying or
         * CHILD_SA rekeying (using PFS). The resulting DH object must be passed
-        * to derive_keys or to derive_child_keys and destroyed after use
+        * to derive_keys or to derive_child_keys and destroyed after use.
+        *
+        * Only DH objects allocated through this method are passed to other
+        * keymat_t methods, allowing private DH implementations. In some cases
+        * (such as retrying with a COOKIE), a DH object allocated from a different
+        * keymat_t instance may be passed to other methods.
         *
         * @param group                 diffie hellman group
         * @return                              DH object, NULL if group not supported
         *
         * @param group                 diffie hellman group
         * @return                              DH object, NULL if group not supported
@@ -99,21 +103,13 @@ struct keymat_t {
         */
        pseudo_random_function_t (*get_skd)(keymat_t *this, chunk_t *skd);
 
         */
        pseudo_random_function_t (*get_skd)(keymat_t *this, chunk_t *skd);
 
-       /**
-        * Get a signer to sign/verify IKE messages.
-        *
-        * @param in            TRUE for inbound (verify), FALSE for outbound (sign)
-        * @return                      signer
-        */
-       signer_t* (*get_signer)(keymat_t *this, bool in);
-
        /*
        /*
-        * Get a crypter to en-/decrypt IKE messages.
+        * Get a AEAD transform to en-/decrypt and sign/verify IKE messages.
         *
         * @param in            TRUE for inbound (decrypt), FALSE for outbound (encrypt)
         * @return                      crypter
         */
         *
         * @param in            TRUE for inbound (decrypt), FALSE for outbound (encrypt)
         * @return                      crypter
         */
-       crypter_t* (*get_crypter)(keymat_t *this, bool in);
+       aead_t* (*get_aead)(keymat_t *this, bool in);
 
        /**
         * Generate octets to use for authentication procedure (RFC4306 2.15).
 
        /**
         * Generate octets to use for authentication procedure (RFC4306 2.15).
@@ -126,10 +122,12 @@ struct keymat_t {
         * @param ike_sa_init   encoded ike_sa_init message
         * @param nonce                 nonce value
         * @param id                    identity
         * @param ike_sa_init   encoded ike_sa_init message
         * @param nonce                 nonce value
         * @param id                    identity
+        * @param reserved              reserved bytes of id_payload
         * @return                              authentication octets
         */
        chunk_t (*get_auth_octets)(keymat_t *this, bool verify, chunk_t ike_sa_init,
         * @return                              authentication octets
         */
        chunk_t (*get_auth_octets)(keymat_t *this, bool verify, chunk_t ike_sa_init,
-                                                          chunk_t nonce, identification_t *id);
+                                                          chunk_t nonce, identification_t *id,
+                                                          char reserved[3]);
        /**
         * Build the shared secret signature used for PSK and EAP authentication.
         *
        /**
         * Build the shared secret signature used for PSK and EAP authentication.
         *
@@ -142,10 +140,12 @@ struct keymat_t {
         * @param nonce                 nonce value
         * @param secret                optional secret to include into signature
         * @param id                    identity
         * @param nonce                 nonce value
         * @param secret                optional secret to include into signature
         * @param id                    identity
+        * @param reserved              reserved bytes of id_payload
         * @return                              signature octets
         */
        chunk_t (*get_psk_sig)(keymat_t *this, bool verify, chunk_t ike_sa_init,
         * @return                              signature octets
         */
        chunk_t (*get_psk_sig)(keymat_t *this, bool verify, chunk_t ike_sa_init,
-                                                  chunk_t nonce, chunk_t secret, identification_t *id);
+                                                  chunk_t nonce, chunk_t secret,
+                                                  identification_t *id, char reserved[3]);
        /**
         * Destroy a keymat_t.
         */
        /**
         * Destroy a keymat_t.
         */