diff options
author | Martin Willi <martin@strongswan.org> | 2008-11-22 16:14:55 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2008-11-22 16:14:55 +0000 |
commit | a20abb81e9ffcc7e7b6baecb971272de20a17755 (patch) | |
tree | 159ebb976de95aa64fe8e31c15850708e8af4c1d | |
parent | 8f45ece098abf2a5a970fee54bbbccc2b77d426a (diff) | |
download | strongswan-a20abb81e9ffcc7e7b6baecb971272de20a17755.tar.bz2 strongswan-a20abb81e9ffcc7e7b6baecb971272de20a17755.tar.xz |
added a MODP_NULL Diffie Hellman group to avoid calculation overhead in load-testing
-rw-r--r-- | src/charon/config/proposal.c | 7 | ||||
-rw-r--r-- | src/charon/plugins/load_tester/Makefile.am | 3 | ||||
-rw-r--r-- | src/charon/plugins/load_tester/load_tester_diffie_hellman.c | 69 | ||||
-rw-r--r-- | src/charon/plugins/load_tester/load_tester_diffie_hellman.h | 50 | ||||
-rw-r--r-- | src/charon/plugins/load_tester/load_tester_plugin.c | 6 | ||||
-rw-r--r-- | src/libstrongswan/crypto/diffie_hellman.c | 4 | ||||
-rw-r--r-- | src/libstrongswan/crypto/diffie_hellman.h | 2 |
7 files changed, 139 insertions, 2 deletions
diff --git a/src/charon/config/proposal.c b/src/charon/config/proposal.c index 11143a4a6..4ac95aaf3 100644 --- a/src/charon/config/proposal.c +++ b/src/charon/config/proposal.c @@ -739,6 +739,10 @@ static status_t add_string_algo(private_proposal_t *this, chunk_t alg) add_algorithm(this, PSEUDO_RANDOM_FUNCTION, PRF_AES128_XCBC, 0); } } + else if (strncmp(alg.ptr, "modpnull", alg.len) == 0) + { + add_algorithm(this, DIFFIE_HELLMAN_GROUP, MODP_NULL, 0); + } else if (strncmp(alg.ptr, "modp768", alg.len) == 0) { add_algorithm(this, DIFFIE_HELLMAN_GROUP, MODP_768_BIT, 0); @@ -1030,6 +1034,9 @@ static void proposal_add_supported_ike(private_proposal_t *this) { switch (group) { + case MODP_NULL: + /* only for testing purposes */ + break; case MODP_768_BIT: /* weak */ break; diff --git a/src/charon/plugins/load_tester/Makefile.am b/src/charon/plugins/load_tester/Makefile.am index 88a6b688c..121f0b080 100644 --- a/src/charon/plugins/load_tester/Makefile.am +++ b/src/charon/plugins/load_tester/Makefile.am @@ -10,7 +10,8 @@ libstrongswan_load_tester_la_SOURCES = \ load_tester_config.c load_tester_config.h \ load_tester_creds.c load_tester_creds.h \ load_tester_ipsec.c load_tester_ipsec.h \ - load_tester_listener.c load_tester_listener.h + load_tester_listener.c load_tester_listener.h \ + load_tester_diffie_hellman.c load_tester_diffie_hellman.h libstrongswan_load_tester_la_LDFLAGS = -module diff --git a/src/charon/plugins/load_tester/load_tester_diffie_hellman.c b/src/charon/plugins/load_tester/load_tester_diffie_hellman.c new file mode 100644 index 000000000..4cc9dbc48 --- /dev/null +++ b/src/charon/plugins/load_tester/load_tester_diffie_hellman.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2008 Martin Willi + * 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 + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * $Id$ + */ + +#include "load_tester_diffie_hellman.h" + +/** + * Implementation of gmp_diffie_hellman_t.get_my_public_value. + */ +static void get_my_public_value(load_tester_diffie_hellman_t *this, + chunk_t *value) +{ + *value = chunk_empty; +} + +/** + * Implementation of gmp_diffie_hellman_t.get_shared_secret. + */ +static status_t get_shared_secret(load_tester_diffie_hellman_t *this, + chunk_t *secret) +{ + *secret = chunk_empty; + return SUCCESS; +} + +/** + * Implementation of gmp_diffie_hellman_t.get_dh_group. + */ +static diffie_hellman_group_t get_dh_group(load_tester_diffie_hellman_t *this) +{ + return MODP_NULL; +} + +/** + * See header + */ +load_tester_diffie_hellman_t *load_tester_diffie_hellman_create( + diffie_hellman_group_t group) +{ + load_tester_diffie_hellman_t *this; + + if (group != MODP_NULL) + { + return NULL; + } + + this = malloc_thing(load_tester_diffie_hellman_t); + + this->dh.get_shared_secret = (status_t (*)(diffie_hellman_t *, chunk_t *))get_shared_secret; + this->dh.set_other_public_value = (void (*)(diffie_hellman_t *, chunk_t ))nop; + this->dh.get_my_public_value = (void (*)(diffie_hellman_t *, chunk_t *))get_my_public_value; + this->dh.get_dh_group = (diffie_hellman_group_t (*)(diffie_hellman_t *))get_dh_group; + this->dh.destroy = (void (*)(diffie_hellman_t *))free; + + return this; +} diff --git a/src/charon/plugins/load_tester/load_tester_diffie_hellman.h b/src/charon/plugins/load_tester/load_tester_diffie_hellman.h new file mode 100644 index 000000000..1f66e7f2b --- /dev/null +++ b/src/charon/plugins/load_tester/load_tester_diffie_hellman.h @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2008 Martin Willi + * 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 + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * for more details. + * + * $Id$ + */ + +/** + * @defgroup load_tester_diffie_hellman load_tester_diffie_hellman + * @{ @ingroup load_tester + */ + +#ifndef LOAD_TESTER_DIFFIE_HELLMAN_H_ +#define LOAD_TESTER_DIFFIE_HELLMAN_H_ + +#include <crypto/diffie_hellman.h> + +typedef struct load_tester_diffie_hellman_t load_tester_diffie_hellman_t; + +/** + * A NULL Diffie Hellman implementation to avoid calculation overhead in tests. + */ +struct load_tester_diffie_hellman_t { + + /** + * Implements diffie_hellman_t interface. + */ + diffie_hellman_t dh; +}; + +/** + * Creates a new gmp_diffie_hellman_t object. + * + * @param group Diffie Hellman group, supports MODP_NULL only + * @return gmp_diffie_hellman_t object + */ +load_tester_diffie_hellman_t *load_tester_diffie_hellman_create( + diffie_hellman_group_t group); + +#endif /* LOAD_TESTER_DIFFIE_HELLMAN_ @}*/ diff --git a/src/charon/plugins/load_tester/load_tester_plugin.c b/src/charon/plugins/load_tester/load_tester_plugin.c index aff83a9a7..a22445feb 100644 --- a/src/charon/plugins/load_tester/load_tester_plugin.c +++ b/src/charon/plugins/load_tester/load_tester_plugin.c @@ -20,6 +20,7 @@ #include "load_tester_creds.h" #include "load_tester_ipsec.h" #include "load_tester_listener.h" +#include "load_tester_diffie_hellman.h" #include <unistd.h> @@ -132,6 +133,8 @@ static void destroy(private_load_tester_plugin_t *this) this->config->destroy(this->config); this->creds->destroy(this->creds); this->listener->destroy(this->listener); + lib->crypto->remove_dh(lib->crypto, + (dh_constructor_t)load_tester_diffie_hellman_create); free(this); } @@ -145,6 +148,9 @@ plugin_t *plugin_create() this->public.plugin.destroy = (void(*)(plugin_t*))destroy; + lib->crypto->add_dh(lib->crypto, MODP_NULL, + (dh_constructor_t)load_tester_diffie_hellman_create); + this->config = load_tester_config_create(); this->creds = load_tester_creds_create(); this->listener = load_tester_listener_create(); diff --git a/src/libstrongswan/crypto/diffie_hellman.c b/src/libstrongswan/crypto/diffie_hellman.c index fb17898d0..c6e4482de 100644 --- a/src/libstrongswan/crypto/diffie_hellman.c +++ b/src/libstrongswan/crypto/diffie_hellman.c @@ -36,5 +36,7 @@ ENUM_NEXT(diffie_hellman_group_names, MODP_2048_BIT, ECP_521_BIT, MODP_1536_BIT, ENUM_NEXT(diffie_hellman_group_names, ECP_192_BIT, ECP_224_BIT, ECP_521_BIT, "ECP_192_BIT", "ECP_224_BIT"); -ENUM_END(diffie_hellman_group_names, ECP_224_BIT); +ENUM_NEXT(diffie_hellman_group_names, MODP_NULL, MODP_NULL, ECP_224_BIT, + "MODP_NULL"); +ENUM_END(diffie_hellman_group_names, MODP_NULL); diff --git a/src/libstrongswan/crypto/diffie_hellman.h b/src/libstrongswan/crypto/diffie_hellman.h index 65a6714c5..04ed9eaeb 100644 --- a/src/libstrongswan/crypto/diffie_hellman.h +++ b/src/libstrongswan/crypto/diffie_hellman.h @@ -52,6 +52,8 @@ enum diffie_hellman_group_t { ECP_521_BIT = 21, ECP_192_BIT = 25, ECP_224_BIT = 26, + /** insecure NULL diffie hellman group for testing, in PRIVATE USE */ + MODP_NULL = 1024, }; /** |