diff options
Diffstat (limited to 'src/libstrongswan/plugins/ntru/ntru_ke.c')
-rw-r--r-- | src/libstrongswan/plugins/ntru/ntru_ke.c | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/libstrongswan/plugins/ntru/ntru_ke.c b/src/libstrongswan/plugins/ntru/ntru_ke.c index 633245a58..a23991b27 100644 --- a/src/libstrongswan/plugins/ntru/ntru_ke.c +++ b/src/libstrongswan/plugins/ntru/ntru_ke.c @@ -14,7 +14,7 @@ */ #include "ntru_ke.h" -#include "ntru_plugin.h" +#include "ntru_drbg.h" #include "ntru_crypto/ntru_crypto.h" @@ -120,9 +120,14 @@ struct private_ntru_ke_t { bool computed; /** + * True Random Generator + */ + rng_t *entropy; + + /** * Deterministic Random Bit Generator */ - DRBG_HANDLE drbg; + ntru_drbg_t *drbg; }; METHOD(diffie_hellman_t, get_my_public_value, void, @@ -246,8 +251,8 @@ METHOD(diffie_hellman_t, set_other_public_value, void, this->shared_secret = chunk_alloc(2 * this->strength / BITS_PER_BYTE); /* generate the random shared secret */ - if (ntru_crypto_drbg_generate(this->drbg, this->strength, - this->shared_secret.len, this->shared_secret.ptr) != DRBG_OK) + if (!this->drbg->generate(this->drbg, this->strength, + this->shared_secret.len, this->shared_secret.ptr)) { DBG1(DBG_LIB, "generation of shared secret failed"); chunk_free(&this->shared_secret); @@ -289,10 +294,8 @@ METHOD(diffie_hellman_t, get_dh_group, diffie_hellman_group_t, METHOD(diffie_hellman_t, destroy, void, private_ntru_ke_t *this) { - if (ntru_crypto_drbg_uninstantiate(this->drbg) != DRBG_OK) - { - DBG1(DBG_LIB, "error uninstantiating DRBG"); - } + this->drbg->destroy(this->drbg); + this->entropy->destroy(this->entropy); chunk_free(&this->pub_key); chunk_free(&this->ciphertext); chunk_clear(&this->priv_key); @@ -306,9 +309,9 @@ METHOD(diffie_hellman_t, destroy, void, ntru_ke_t *ntru_ke_create(diffie_hellman_group_t group, chunk_t g, chunk_t p) { private_ntru_ke_t *this; - char personalization_str[] = "strongSwan NTRU-KE"; param_set_t *param_sets, *param_set; - DRBG_HANDLE drbg; + rng_t *entropy; + ntru_drbg_t *drbg; char *parameter_set; u_int32_t strength; @@ -356,11 +359,18 @@ ntru_ke_t *ntru_ke_create(diffie_hellman_group_t group, chunk_t g, chunk_t p) DBG1(DBG_LIB, "%u bit %s NTRU parameter set %s selected", strength, parameter_set, param_set->name); - if (ntru_crypto_drbg_instantiate(strength, - personalization_str, strlen(personalization_str), - (ENTROPY_FN) &ntru_plugin_get_entropy, &drbg) != DRBG_OK) + entropy = lib->crypto->create_rng(lib->crypto, RNG_TRUE); + if (!entropy) + { + DBG1(DBG_LIB, "could not attach entropy source for DRBG"); + return NULL; + } + + drbg = ntru_drbg_create(strength, chunk_from_str("IKE NTRU-KE"), entropy); + if (!drbg) { - DBG1(DBG_LIB, "error instantiating DRBG at %u bit security", strength); + DBG1(DBG_LIB, "could not instantiate DRBG at %u bit security", strength); + entropy->destroy(entropy); return NULL; } @@ -377,6 +387,7 @@ ntru_ke_t *ntru_ke_create(diffie_hellman_group_t group, chunk_t g, chunk_t p) .group = group, .param_set = param_set, .strength = strength, + .entropy = entropy, .drbg = drbg, ); |