RT3065: ec_private_key_dont_crash
This change saves several EC routines from crashing when an EC_KEY is missing a public key. The public key is optional in the EC private key format and, without this patch, running the following through `openssl ec` causes a crash: -----BEGIN EC PRIVATE KEY----- MBkCAQEECAECAwQFBgcIoAoGCCqGSM49AwEH -----END EC PRIVATE KEY----- Reviewed-by: Dr Stephen Henson <steve@openssl.org> (cherry picked from commit b391570bdeb386d4fd325917c248d593d3c43930)
This commit is contained in:
parent
dc5c3d7370
commit
1f2b943254
2 changed files with 10 additions and 7 deletions
|
@ -457,14 +457,16 @@ static int do_EC_KEY_print(BIO *bp, const EC_KEY *x, int off, int ktype)
|
||||||
if (ktype > 0)
|
if (ktype > 0)
|
||||||
{
|
{
|
||||||
public_key = EC_KEY_get0_public_key(x);
|
public_key = EC_KEY_get0_public_key(x);
|
||||||
if ((pub_key = EC_POINT_point2bn(group, public_key,
|
if (public_key != NULL)
|
||||||
EC_KEY_get_conv_form(x), NULL, ctx)) == NULL)
|
|
||||||
{
|
{
|
||||||
reason = ERR_R_EC_LIB;
|
if ((pub_key = EC_POINT_point2bn(group, public_key,
|
||||||
goto err;
|
EC_KEY_get_conv_form(x), NULL, ctx)) == NULL)
|
||||||
}
|
{
|
||||||
if (pub_key)
|
reason = ERR_R_EC_LIB;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
buf_len = (size_t)BN_num_bytes(pub_key);
|
buf_len = (size_t)BN_num_bytes(pub_key);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ktype == 2)
|
if (ktype == 2)
|
||||||
|
|
|
@ -1230,7 +1230,8 @@ int i2d_ECPrivateKey(EC_KEY *a, unsigned char **out)
|
||||||
size_t buf_len=0, tmp_len;
|
size_t buf_len=0, tmp_len;
|
||||||
EC_PRIVATEKEY *priv_key=NULL;
|
EC_PRIVATEKEY *priv_key=NULL;
|
||||||
|
|
||||||
if (a == NULL || a->group == NULL || a->priv_key == NULL)
|
if (a == NULL || a->group == NULL || a->priv_key == NULL ||
|
||||||
|
(!(a->enc_flag & EC_PKEY_NO_PUBKEY) && a->pub_key == NULL))
|
||||||
{
|
{
|
||||||
ECerr(EC_F_I2D_ECPRIVATEKEY,
|
ECerr(EC_F_I2D_ECPRIVATEKEY,
|
||||||
ERR_R_PASSED_NULL_PARAMETER);
|
ERR_R_PASSED_NULL_PARAMETER);
|
||||||
|
|
Loading…
Reference in a new issue