openssl: Add helper to map ECDH groups to curve NIDs

This commit is contained in:
Tobias Brunner
2021-12-08 11:32:59 +01:00
parent 88e7654c6c
commit 03520a0d54
2 changed files with 47 additions and 36 deletions
@@ -328,49 +328,52 @@ METHOD(diffie_hellman_t, destroy, void,
} }
/* /*
* Described in header. * Described in header
*/
int openssl_ecdh_group_to_nid(diffie_hellman_group_t group)
{
switch (group)
{
case ECP_192_BIT:
return NID_X9_62_prime192v1;
case ECP_224_BIT:
return NID_secp224r1;
case ECP_256_BIT:
return NID_X9_62_prime256v1;
case ECP_384_BIT:
return NID_secp384r1;
case ECP_521_BIT:
return NID_secp521r1;
/* added with 1.0.2 */
#if OPENSSL_VERSION_NUMBER >= 0x10002000L
case ECP_224_BP:
return NID_brainpoolP224r1;
case ECP_256_BP:
return NID_brainpoolP256r1;
case ECP_384_BP:
return NID_brainpoolP384r1;
case ECP_512_BP:
return NID_brainpoolP512r1;
#endif
default:
return 0;
}
}
/*
* Described in header
*/ */
openssl_ec_diffie_hellman_t *openssl_ec_diffie_hellman_create(diffie_hellman_group_t group) openssl_ec_diffie_hellman_t *openssl_ec_diffie_hellman_create(diffie_hellman_group_t group)
{ {
private_openssl_ec_diffie_hellman_t *this; private_openssl_ec_diffie_hellman_t *this;
EC_KEY *key = NULL; EC_KEY *key = NULL;
int curve;
switch (group) curve = openssl_ecdh_group_to_nid(group);
if (curve)
{ {
case ECP_192_BIT: key = EC_KEY_new_by_curve_name(curve);
key = EC_KEY_new_by_curve_name(NID_X9_62_prime192v1);
break;
case ECP_224_BIT:
key = EC_KEY_new_by_curve_name(NID_secp224r1);
break;
case ECP_256_BIT:
key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
break;
case ECP_384_BIT:
key = EC_KEY_new_by_curve_name(NID_secp384r1);
break;
case ECP_521_BIT:
key = EC_KEY_new_by_curve_name(NID_secp521r1);
break;
/* added with 1.0.2 */
#if OPENSSL_VERSION_NUMBER >= 0x10002000L
case ECP_224_BP:
key = EC_KEY_new_by_curve_name(NID_brainpoolP224r1);
break;
case ECP_256_BP:
key = EC_KEY_new_by_curve_name(NID_brainpoolP256r1);
break;
case ECP_384_BP:
key = EC_KEY_new_by_curve_name(NID_brainpoolP384r1);
break;
case ECP_512_BP:
key = EC_KEY_new_by_curve_name(NID_brainpoolP512r1);
break;
#endif
default:
break;
} }
if (!key) if (!key)
{ {
return NULL; return NULL;
@@ -408,4 +411,5 @@ openssl_ec_diffie_hellman_t *openssl_ec_diffie_hellman_create(diffie_hellman_gro
} }
return &this->public; return &this->public;
} }
#endif /* OPENSSL_NO_EC */ #endif /* OPENSSL_NO_EC */
@@ -44,5 +44,12 @@ struct openssl_ec_diffie_hellman_t {
*/ */
openssl_ec_diffie_hellman_t *openssl_ec_diffie_hellman_create(diffie_hellman_group_t group); openssl_ec_diffie_hellman_t *openssl_ec_diffie_hellman_create(diffie_hellman_group_t group);
#endif /** OPENSSL_EC_DIFFIE_HELLMAN_H_ @}*/ /**
* Map ECDH groups to OpenSSL NIDs for the ECC curve.
*
* @param group ECDH group
* @return NID for the curve
*/
int openssl_ecdh_group_to_nid(diffie_hellman_group_t group);
#endif /** OPENSSL_EC_DIFFIE_HELLMAN_H_ @}*/