From 01b8b3c7d2d8f835257ac1cb2512273aa27bfba8 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Mon, 5 Jun 2006 11:52:46 +0000 Subject: Complete EVP_PKEY_ASN1_METHOD ENGINE support. --- crypto/asn1/d2i_pr.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'crypto/asn1/d2i_pr.c') diff --git a/crypto/asn1/d2i_pr.c b/crypto/asn1/d2i_pr.c index b4e47d4..b2791ea 100644 --- a/crypto/asn1/d2i_pr.c +++ b/crypto/asn1/d2i_pr.c @@ -61,6 +61,7 @@ #include #include #include +#include #include #include "asn1_locl.h" @@ -77,25 +78,27 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, const unsigned char **pp, return(NULL); } } - else ret= *a; - - ret->save_type=type; - ret->type=EVP_PKEY_type(type); - ret->ameth = EVP_PKEY_asn1_find(type); - if (ret->ameth) + else { - if (!ret->ameth->old_priv_decode || - !ret->ameth->old_priv_decode(ret, pp, length)) + ret= *a; + if (ret->engine) { - ASN1err(ASN1_F_D2I_PRIVATEKEY,ERR_R_ASN1_LIB); - goto err; + ENGINE_finish(ret->engine); + ret->engine = NULL; } } - else + + if (!EVP_PKEY_set_type(ret, type)) { ASN1err(ASN1_F_D2I_PRIVATEKEY,ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE); goto err; - /* break; */ + } + + if (!ret->ameth->old_priv_decode || + !ret->ameth->old_priv_decode(ret, pp, length)) + { + ASN1err(ASN1_F_D2I_PRIVATEKEY,ERR_R_ASN1_LIB); + goto err; } if (a != NULL) (*a)=ret; return(ret); -- cgit v1.1