Fix SSL_OP_SINGLE_ECDH_USE

Don't require a public key in tls1_set_ec_id if compression status is
not needed. This fixes a bug where SSL_OP_SINGLE_ECDH_USE wouldn't work.
This commit is contained in:
Piotr Sikora 2013-11-01 21:35:46 +00:00 committed by Dr. Stephen Henson
parent f14a4a861d
commit 5ff68e8f6d

View File

@ -590,14 +590,12 @@ static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id,
{ {
int is_prime, id; int is_prime, id;
const EC_GROUP *grp; const EC_GROUP *grp;
const EC_POINT *pt;
const EC_METHOD *meth; const EC_METHOD *meth;
if (!ec) if (!ec)
return 0; return 0;
/* Determine if it is a prime field */ /* Determine if it is a prime field */
grp = EC_KEY_get0_group(ec); grp = EC_KEY_get0_group(ec);
pt = EC_KEY_get0_public_key(ec); if (!grp)
if (!grp || !pt)
return 0; return 0;
meth = EC_GROUP_method_of(grp); meth = EC_GROUP_method_of(grp);
if (!meth) if (!meth)
@ -625,6 +623,8 @@ static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id,
} }
if (comp_id) if (comp_id)
{ {
if (EC_KEY_get0_public_key(ec) == NULL)
return 0;
if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED)
{ {
if (is_prime) if (is_prime)