Added support for MODP_CUSTOM to openssl plugin

This commit is contained in:
Martin Willi
2010-09-03 09:33:15 +02:00
parent 6deeacd965
commit 42b1ac91c4
3 changed files with 20 additions and 6 deletions
@@ -138,7 +138,8 @@ METHOD(diffie_hellman_t, destroy, void,
/*
* Described in header.
*/
openssl_diffie_hellman_t *openssl_diffie_hellman_create(diffie_hellman_group_t group)
openssl_diffie_hellman_t *openssl_diffie_hellman_create(
diffie_hellman_group_t group, chunk_t g, chunk_t p)
{
private_openssl_diffie_hellman_t *this;
@@ -166,11 +167,19 @@ openssl_diffie_hellman_t *openssl_diffie_hellman_create(diffie_hellman_group_t g
this->pub_key = BN_new();
this->shared_secret = chunk_empty;
/* find a modulus according to group */
if (set_modulus(this) != SUCCESS)
if (group == MODP_CUSTOM)
{
destroy(this);
return NULL;
this->dh->p = BN_bin2bn(p.ptr, p.len, NULL);
this->dh->g = BN_bin2bn(g.ptr, g.len, NULL);
}
else
{
/* find a modulus according to group */
if (set_modulus(this) != SUCCESS)
{
destroy(this);
return NULL;
}
}
/* generate my public and private values */
@@ -40,9 +40,12 @@ struct openssl_diffie_hellman_t {
* Creates a new openssl_diffie_hellman_t object.
*
* @param group Diffie Hellman group number to use
* @param g custom generator, if MODP_CUSTOM
* @param p custom prime, if MODP_CUSTOM
* @return openssl_diffie_hellman_t object, NULL if not supported
*/
openssl_diffie_hellman_t *openssl_diffie_hellman_create(diffie_hellman_group_t group);
openssl_diffie_hellman_t *openssl_diffie_hellman_create(
diffie_hellman_group_t group, chunk_t g, chunk_t p);
#endif /** OPENSSL_DIFFIE_HELLMAN_H_ @}*/
@@ -349,6 +349,8 @@ plugin_t *openssl_plugin_create()
(dh_constructor_t)openssl_diffie_hellman_create);
lib->crypto->add_dh(lib->crypto, MODP_768_BIT,
(dh_constructor_t)openssl_diffie_hellman_create);
lib->crypto->add_dh(lib->crypto, MODP_CUSTOM,
(dh_constructor_t)openssl_diffie_hellman_create);
/* rsa */
lib->creds->add_builder(lib->creds, CRED_PRIVATE_KEY, KEY_RSA,