]> git.ipfire.org Git - thirdparty/strongswan.git/blobdiff - src/libstrongswan/crypto/proposal/proposal.c
Fixed some typos, courtesy of codespell
[thirdparty/strongswan.git] / src / libstrongswan / crypto / proposal / proposal.c
index 221375f7b8faa71456f883873282fe63b85ec402..bc9b2037a4093ed0495c219739cb8e047f182914 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (C) 2008-2016 Tobias Brunner
+ * Copyright (C) 2008-2018 Tobias Brunner
  * Copyright (C) 2006-2010 Martin Willi
  * Copyright (C) 2013-2015 Andreas Steffen
- * Hochschule fuer Technik Rapperswil
+ * HSR Hochschule fuer Technik Rapperswil
  *
  * This program is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
@@ -171,6 +171,36 @@ METHOD(proposal_t, has_dh_group, bool,
        return found;
 }
 
+METHOD(proposal_t, promote_dh_group, bool,
+       private_proposal_t *this, diffie_hellman_group_t group)
+{
+       enumerator_t *enumerator;
+       entry_t *entry;
+       bool found = FALSE;
+
+       enumerator = array_create_enumerator(this->transforms);
+       while (enumerator->enumerate(enumerator, &entry))
+       {
+               if (entry->type == DIFFIE_HELLMAN_GROUP &&
+                       entry->alg == group)
+               {
+                       array_remove_at(this->transforms, enumerator);
+                       found = TRUE;
+               }
+       }
+       enumerator->destroy(enumerator);
+
+       if (found)
+       {
+               entry_t entry = {
+                       .type = DIFFIE_HELLMAN_GROUP,
+                       .alg = group,
+               };
+               array_insert(this->transforms, ARRAY_HEAD, &entry);
+       }
+       return found;
+}
+
 METHOD(proposal_t, strip_dh, void,
        private_proposal_t *this, diffie_hellman_group_t keep)
 {
@@ -667,7 +697,7 @@ int proposal_printf_hook(printf_hook_data_t *data, printf_hook_spec_t *spec,
        {
                enumerator = list->create_enumerator(list);
                while (enumerator->enumerate(enumerator, &this))
-               {       /* call recursivly */
+               {       /* call recursively */
                        if (first)
                        {
                                written += print_in_hook(data, "%P", this);
@@ -716,6 +746,7 @@ proposal_t *proposal_create(protocol_id_t protocol, u_int number)
                        .create_enumerator = _create_enumerator,
                        .get_algorithm = _get_algorithm,
                        .has_dh_group = _has_dh_group,
+                       .promote_dh_group = _promote_dh_group,
                        .strip_dh = _strip_dh,
                        .select = _select_proposal,
                        .get_protocol = _get_protocol,