diff options
author | beck <> | 2000-12-15 02:58:47 +0000 |
---|---|---|
committer | beck <> | 2000-12-15 02:58:47 +0000 |
commit | 9200bb13d15da4b2a23e6bc92c20e95b74aa2113 (patch) | |
tree | 5c52d628ec1e34be76e7ef2a4235d248b7c44d24 /src/lib/libcrypto/evp/p_open.c | |
parent | e131d25072e3d4197ba4b9bcc0d1b27d34d6488d (diff) | |
download | openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.gz openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.bz2 openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.zip |
openssl-engine-0.9.6 merge
Diffstat (limited to 'src/lib/libcrypto/evp/p_open.c')
-rw-r--r-- | src/lib/libcrypto/evp/p_open.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/lib/libcrypto/evp/p_open.c b/src/lib/libcrypto/evp/p_open.c index b9ca7892c2..2760c00fec 100644 --- a/src/lib/libcrypto/evp/p_open.c +++ b/src/lib/libcrypto/evp/p_open.c | |||
@@ -68,37 +68,41 @@ int EVP_OpenInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char *ek, | |||
68 | { | 68 | { |
69 | unsigned char *key=NULL; | 69 | unsigned char *key=NULL; |
70 | int i,size=0,ret=0; | 70 | int i,size=0,ret=0; |
71 | 71 | ||
72 | if(type) { | ||
73 | EVP_CIPHER_CTX_init(ctx); | ||
74 | if(!EVP_DecryptInit(ctx,type,NULL,NULL)) return 0; | ||
75 | } | ||
76 | |||
77 | if(!priv) return 1; | ||
78 | |||
72 | if (priv->type != EVP_PKEY_RSA) | 79 | if (priv->type != EVP_PKEY_RSA) |
73 | { | 80 | { |
74 | EVPerr(EVP_F_EVP_OPENINIT,EVP_R_PUBLIC_KEY_NOT_RSA); | 81 | EVPerr(EVP_F_EVP_OPENINIT,EVP_R_PUBLIC_KEY_NOT_RSA); |
75 | ret= -1; | ||
76 | goto err; | 82 | goto err; |
77 | } | 83 | } |
78 | 84 | ||
79 | size=RSA_size(priv->pkey.rsa); | 85 | size=RSA_size(priv->pkey.rsa); |
80 | key=(unsigned char *)Malloc(size+2); | 86 | key=(unsigned char *)OPENSSL_malloc(size+2); |
81 | if (key == NULL) | 87 | if (key == NULL) |
82 | { | 88 | { |
83 | /* ERROR */ | 89 | /* ERROR */ |
84 | EVPerr(EVP_F_EVP_OPENINIT,ERR_R_MALLOC_FAILURE); | 90 | EVPerr(EVP_F_EVP_OPENINIT,ERR_R_MALLOC_FAILURE); |
85 | ret= -1; | ||
86 | goto err; | 91 | goto err; |
87 | } | 92 | } |
88 | 93 | ||
89 | i=EVP_PKEY_decrypt(key,ek,ekl,priv); | 94 | i=EVP_PKEY_decrypt(key,ek,ekl,priv); |
90 | if (i != type->key_len) | 95 | if ((i <= 0) || !EVP_CIPHER_CTX_set_key_length(ctx, i)) |
91 | { | 96 | { |
92 | /* ERROR */ | 97 | /* ERROR */ |
93 | goto err; | 98 | goto err; |
94 | } | 99 | } |
100 | if(!EVP_DecryptInit(ctx,NULL,key,iv)) goto err; | ||
95 | 101 | ||
96 | EVP_CIPHER_CTX_init(ctx); | ||
97 | EVP_DecryptInit(ctx,type,key,iv); | ||
98 | ret=1; | 102 | ret=1; |
99 | err: | 103 | err: |
100 | if (key != NULL) memset(key,0,size); | 104 | if (key != NULL) memset(key,0,size); |
101 | Free(key); | 105 | OPENSSL_free(key); |
102 | return(ret); | 106 | return(ret); |
103 | } | 107 | } |
104 | 108 | ||