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
* 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) {
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;
}
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);