提交 3f36baa9 编写于 作者: D Dr. Stephen Henson

Correctly handle missing DSA parameters.

上级 b0e69a05
...@@ -78,12 +78,9 @@ static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey) ...@@ -78,12 +78,9 @@ static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
return 0; return 0;
X509_ALGOR_get0(NULL, &ptype, &pval, palg); X509_ALGOR_get0(NULL, &ptype, &pval, palg);
if (ptype != V_ASN1_SEQUENCE)
{
DSAerr(DSA_F_DSA_PUB_DECODE, DSA_R_PARAMETER_ENCODING_ERROR);
goto err;
}
if (ptype == V_ASN1_SEQUENCE)
{
pstr = pval; pstr = pval;
pm = pstr->data; pm = pstr->data;
pmlen = pstr->length; pmlen = pstr->length;
...@@ -94,13 +91,27 @@ static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey) ...@@ -94,13 +91,27 @@ static int dsa_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
goto err; goto err;
} }
}
else if ((ptype == V_ASN1_NULL) || (ptype == V_ASN1_UNDEF))
{
if (!(dsa = DSA_new()))
{
DSAerr(DSA_F_DSA_PUB_DECODE, ERR_R_MALLOC_FAILURE);
goto err;
}
}
else
{
DSAerr(DSA_F_DSA_PUB_DECODE, DSA_R_PARAMETER_ENCODING_ERROR);
goto err;
}
if (!(public_key=d2i_ASN1_INTEGER(NULL, &p, pklen))) if (!(public_key=d2i_ASN1_INTEGER(NULL, &p, pklen)))
{ {
DSAerr(DSA_F_DSA_PUB_DECODE, DSA_R_DECODE_ERROR); DSAerr(DSA_F_DSA_PUB_DECODE, DSA_R_DECODE_ERROR);
goto err; goto err;
} }
/* We have parameters now set public key */
if (!(dsa->pub_key = ASN1_INTEGER_to_BN(public_key, NULL))) if (!(dsa->pub_key = ASN1_INTEGER_to_BN(public_key, NULL)))
{ {
DSAerr(DSA_F_DSA_PUB_DECODE, DSA_R_BN_DECODE_ERROR); DSAerr(DSA_F_DSA_PUB_DECODE, DSA_R_BN_DECODE_ERROR);
...@@ -129,7 +140,7 @@ static int dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) ...@@ -129,7 +140,7 @@ static int dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
int penclen; int penclen;
dsa=pkey->pkey.dsa; dsa=pkey->pkey.dsa;
if (pkey->save_parameters) if (pkey->save_parameters && dsa->p && dsa->q && dsa->g)
{ {
ASN1_STRING *str; ASN1_STRING *str;
str = ASN1_STRING_new(); str = ASN1_STRING_new();
...@@ -144,6 +155,7 @@ static int dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey) ...@@ -144,6 +155,7 @@ static int dsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
} }
else else
ptype = V_ASN1_UNDEF; ptype = V_ASN1_UNDEF;
dsa->write_params=0; dsa->write_params=0;
penclen = i2d_DSAPublicKey(dsa, &penc); penclen = i2d_DSAPublicKey(dsa, &penc);
...@@ -433,11 +445,13 @@ int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype) ...@@ -433,11 +445,13 @@ int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype)
else else
ktype = "DSA-Parameters"; ktype = "DSA-Parameters";
#if 0
if (x->p == NULL) if (x->p == NULL)
{ {
DSAerr(DSA_F_DSA_PRINT,DSA_R_MISSING_PARAMETERS); DSAerr(DSA_F_DSA_PRINT,DSA_R_MISSING_PARAMETERS);
goto err; goto err;
} }
#endif
update_buflen(x->p, &buf_len); update_buflen(x->p, &buf_len);
update_buflen(x->q, &buf_len); update_buflen(x->q, &buf_len);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册