openssl: Add helper to map ECDH groups to curve NIDs
This commit is contained in:
@@ -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_ @}*/
|
||||||
|
|||||||
Reference in New Issue
Block a user