Fix the PKCS#8 DSA code so it works again. All the

broken formats worked but the valid didn't :-(
This commit is contained in:
Dr. Stephen Henson 2000-03-07 01:03:33 +00:00
parent 4c4d87f95f
commit 48fe0eec67
2 changed files with 15 additions and 3 deletions

View File

@ -4,6 +4,10 @@
Changes between 0.9.5 and 0.9.5a [XX XXX 2000]
*) Fix the PKCS#8 DSA private key code so it decodes keys again
and fix a memory leak.
[Steve Henson]
*) In util/mkerr.pl (which implements 'make errors'), preserve
reason strings from the previous version of the .c file, as
the default to have only downcase letters (and digits) in

View File

@ -133,7 +133,7 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
* SEQUENCE {parameters, priv_key}
* SEQUENCE {pub_key, priv_key}
*/
t1 = (ASN1_TYPE *)sk_value(ndsa, 0);
t2 = (ASN1_TYPE *)sk_value(ndsa, 1);
if(t1->type == V_ASN1_SEQUENCE) {
@ -152,7 +152,14 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
goto dsaerr;
}
privkey = t2->value.integer;
} else if (!(privkey=d2i_ASN1_INTEGER (NULL, &p, pkeylen))) {
} else {
if (!(privkey=d2i_ASN1_INTEGER (NULL, &p, pkeylen))) {
EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
goto dsaerr;
}
param = p8->pkeyalg->parameter;
}
if (!param || (param->type != V_ASN1_SEQUENCE)) {
EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR);
goto dsaerr;
}
@ -186,7 +193,8 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
EVP_PKEY_assign_DSA(pkey, dsa);
BN_CTX_free (ctx);
sk_pop_free(ndsa, ASN1_TYPE_free);
if(ndsa) sk_pop_free(ndsa, ASN1_TYPE_free);
else ASN1_INTEGER_free(privkey);
break;
dsaerr:
BN_CTX_free (ctx);