]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
ike-cfg: Generalize get_ke_method() method
authorTobias Brunner <tobias@strongswan.org>
Thu, 19 Jul 2018 14:53:01 +0000 (16:53 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Sun, 29 Mar 2020 11:45:40 +0000 (13:45 +0200)
src/libcharon/config/ike_cfg.c
src/libcharon/config/ike_cfg.h
src/libcharon/sa/ikev1/tasks/aggressive_mode.c
src/libcharon/sa/ikev2/tasks/ike_init.c

index 589b41905c1e35c7f1f6ed1b1cc524686191c934..349aa44a83e5050b9cddbe4862138a688cc35ac6 100644 (file)
@@ -347,24 +347,23 @@ METHOD(ike_cfg_t, select_proposal, proposal_t*,
        return proposal_select(this->proposals, proposals, flags);
 }
 
-METHOD(ike_cfg_t, get_ke_method, key_exchange_method_t,
-       private_ike_cfg_t *this)
+METHOD(ike_cfg_t, get_algorithm, uint16_t,
+       private_ike_cfg_t *this, transform_type_t type)
 {
        enumerator_t *enumerator;
        proposal_t *proposal;
-       uint16_t method = MODP_NONE;
+       uint16_t alg = 0;
 
        enumerator = this->proposals->create_enumerator(this->proposals);
        while (enumerator->enumerate(enumerator, &proposal))
        {
-               if (proposal->get_algorithm(proposal, KEY_EXCHANGE_METHOD, &method,
-                                                                       NULL))
+               if (proposal->get_algorithm(proposal, type, &alg, NULL))
                {
                        break;
                }
        }
        enumerator->destroy(enumerator);
-       return method;
+       return alg;
 }
 
 METHOD(ike_cfg_t, equals, bool,
@@ -603,7 +602,7 @@ ike_cfg_t *ike_cfg_create(ike_cfg_create_t *data)
                        .get_proposals = _get_proposals,
                        .select_proposal = _select_proposal,
                        .has_proposal = _has_proposal,
-                       .get_ke_method = _get_ke_method,
+                       .get_algorithm = _get_algorithm,
                        .equals = _equals,
                        .get_ref = _get_ref,
                        .destroy = _destroy,
index ce32e756d66d75eb6aedd40c62eaa355a7ad5e49..1752c88ca7712455383ad85cc822af16d34db22c 100644 (file)
@@ -34,7 +34,6 @@ typedef struct ike_cfg_create_t ike_cfg_create_t;
 #include <collections/linked_list.h>
 #include <utils/identification.h>
 #include <crypto/proposal/proposal.h>
-#include <crypto/key_exchange.h>
 
 /**
  * IKE version.
@@ -230,11 +229,16 @@ struct ike_cfg_t {
        childless_t (*childless)(ike_cfg_t *this);
 
        /**
-        * Get the key exchange method to use for IKE_SA setup.
+        * Get the first algorithm of a certain transform type that's contained in
+        * any of the configured proposals.
         *
-        * @return                              key exchange method to use for initialization
+        * For instance, use with KEY_EXCHANGE_METHOD to get the KE metho to use
+        * for the IKE_SA initiation.
+        *
+        * @param type                  transform type to look for
+        * @return                              algorithm identifier (0 for none)
         */
-       key_exchange_method_t (*get_ke_method)(ike_cfg_t *this);
+       uint16_t (*get_algorithm)(ike_cfg_t *this, transform_type_t type);
 
        /**
         * Check if two IKE configs are equal.
index f303305f58b3c61a29496ac2a7d77f263d3cea21..fdbeda6b3747fc1e24189347642703ee2becac88 100644 (file)
@@ -253,8 +253,9 @@ METHOD(task_t, build_i, status_t,
 
                        message->add_payload(message, &sa_payload->payload_interface);
 
-                       group = this->ike_cfg->get_ke_method(this->ike_cfg);
-                       if (group == MODP_NONE)
+                       group = this->ike_cfg->get_algorithm(this->ike_cfg,
+                                                                                                KEY_EXCHANGE_METHOD);
+                       if (!group)
                        {
                                DBG1(DBG_IKE, "DH group selection failed");
                                return FAILED;
index f71df314eea8616234bc4cec321d48bdf396ba2f..e3ee9d7892e2e957c8e80ea1c6fee04a804efdce 100644 (file)
@@ -673,12 +673,14 @@ METHOD(task_t, build_i, status_t,
                        }
                        else
                        {       /* this shouldn't happen, but let's be safe */
-                               this->dh_group = ike_cfg->get_ke_method(ike_cfg);
+                               this->dh_group = ike_cfg->get_algorithm(ike_cfg,
+                                                                                                               KEY_EXCHANGE_METHOD);
                        }
                }
                else
                {
-                       this->dh_group = ike_cfg->get_ke_method(ike_cfg);
+                       this->dh_group = ike_cfg->get_algorithm(ike_cfg,
+                                                                                                       KEY_EXCHANGE_METHOD);
                }
                this->dh = this->keymat->keymat.create_ke(&this->keymat->keymat,
                                                                                                  this->dh_group);