Commit 48fe0eec authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

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

broken formats worked but the valid didn't :-(
parent 4c4d87f9
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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
+11 −3
Original line number Diff line number Diff line
@@ -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);