diff options
author | markus <> | 2002-09-05 12:51:50 +0000 |
---|---|---|
committer | markus <> | 2002-09-05 12:51:50 +0000 |
commit | 15b5d84f9da2ce4bfae8580e56e34a859f74ad71 (patch) | |
tree | bf939e82d7fd73cc8a01cf6959002209972091bc /src/lib/libcrypto/evp/p_open.c | |
parent | 027351f729b9e837200dae6e1520cda6577ab930 (diff) | |
download | openbsd-15b5d84f9da2ce4bfae8580e56e34a859f74ad71.tar.gz openbsd-15b5d84f9da2ce4bfae8580e56e34a859f74ad71.tar.bz2 openbsd-15b5d84f9da2ce4bfae8580e56e34a859f74ad71.zip |
import openssl-0.9.7-beta1
Diffstat (limited to 'src/lib/libcrypto/evp/p_open.c')
-rw-r--r-- | src/lib/libcrypto/evp/p_open.c | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/src/lib/libcrypto/evp/p_open.c b/src/lib/libcrypto/evp/p_open.c index 28a8e02252..6976f2a867 100644 --- a/src/lib/libcrypto/evp/p_open.c +++ b/src/lib/libcrypto/evp/p_open.c | |||
@@ -56,64 +56,68 @@ | |||
56 | * [including the GNU Public Licence.] | 56 | * [including the GNU Public Licence.] |
57 | */ | 57 | */ |
58 | 58 | ||
59 | #ifndef OPENSSL_NO_RSA | ||
59 | #include <stdio.h> | 60 | #include <stdio.h> |
60 | #include "cryptlib.h" | 61 | #include "cryptlib.h" |
61 | #include "evp.h" | 62 | #include <openssl/evp.h> |
62 | #include "objects.h" | 63 | #include <openssl/objects.h> |
63 | #include "x509.h" | 64 | #include <openssl/x509.h> |
64 | 65 | ||
65 | int EVP_OpenInit(ctx,type,ek,ekl,iv,priv) | 66 | int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type, unsigned char *ek, |
66 | EVP_CIPHER_CTX *ctx; | 67 | int ekl, unsigned char *iv, EVP_PKEY *priv) |
67 | EVP_CIPHER *type; | ||
68 | unsigned char *ek; | ||
69 | int ekl; | ||
70 | unsigned char *iv; | ||
71 | EVP_PKEY *priv; | ||
72 | { | 68 | { |
73 | unsigned char *key=NULL; | 69 | unsigned char *key=NULL; |
74 | int i,size=0,ret=0; | 70 | int i,size=0,ret=0; |
75 | 71 | ||
72 | if(type) { | ||
73 | EVP_CIPHER_CTX_init(ctx); | ||
74 | if(!EVP_DecryptInit_ex(ctx,type,NULL, NULL,NULL)) return 0; | ||
75 | } | ||
76 | |||
77 | if(!priv) return 1; | ||
78 | |||
76 | if (priv->type != EVP_PKEY_RSA) | 79 | if (priv->type != EVP_PKEY_RSA) |
77 | { | 80 | { |
78 | EVPerr(EVP_F_EVP_OPENINIT,EVP_R_PUBLIC_KEY_NOT_RSA); | 81 | EVPerr(EVP_F_EVP_OPENINIT,EVP_R_PUBLIC_KEY_NOT_RSA); |
79 | ret= -1; | ||
80 | goto err; | 82 | goto err; |
81 | } | 83 | } |
82 | 84 | ||
83 | size=RSA_size(priv->pkey.rsa); | 85 | size=RSA_size(priv->pkey.rsa); |
84 | key=(unsigned char *)Malloc(size+2); | 86 | key=(unsigned char *)OPENSSL_malloc(size+2); |
85 | if (key == NULL) | 87 | if (key == NULL) |
86 | { | 88 | { |
87 | /* ERROR */ | 89 | /* ERROR */ |
88 | EVPerr(EVP_F_EVP_OPENINIT,ERR_R_MALLOC_FAILURE); | 90 | EVPerr(EVP_F_EVP_OPENINIT,ERR_R_MALLOC_FAILURE); |
89 | ret= -1; | ||
90 | goto err; | 91 | goto err; |
91 | } | 92 | } |
92 | 93 | ||
93 | i=EVP_PKEY_decrypt(key,ek,ekl,priv); | 94 | i=EVP_PKEY_decrypt(key,ek,ekl,priv); |
94 | if (i != type->key_len) | 95 | if ((i <= 0) || !EVP_CIPHER_CTX_set_key_length(ctx, i)) |
95 | { | 96 | { |
96 | /* ERROR */ | 97 | /* ERROR */ |
97 | goto err; | 98 | goto err; |
98 | } | 99 | } |
100 | if(!EVP_DecryptInit_ex(ctx,NULL,NULL,key,iv)) goto err; | ||
99 | 101 | ||
100 | EVP_CIPHER_CTX_init(ctx); | ||
101 | EVP_DecryptInit(ctx,type,key,iv); | ||
102 | ret=1; | 102 | ret=1; |
103 | err: | 103 | err: |
104 | if (key != NULL) memset(key,0,size); | 104 | if (key != NULL) memset(key,0,size); |
105 | Free(key); | 105 | OPENSSL_free(key); |
106 | return(ret); | 106 | return(ret); |
107 | } | 107 | } |
108 | 108 | ||
109 | int EVP_OpenFinal(ctx,out,outl) | 109 | int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl) |
110 | EVP_CIPHER_CTX *ctx; | ||
111 | unsigned char *out; | ||
112 | int *outl; | ||
113 | { | 110 | { |
114 | int i; | 111 | int i; |
115 | 112 | ||
116 | i=EVP_DecryptFinal(ctx,out,outl); | 113 | i=EVP_DecryptFinal_ex(ctx,out,outl); |
117 | EVP_DecryptInit(ctx,NULL,NULL,NULL); | 114 | EVP_DecryptInit_ex(ctx,NULL,NULL,NULL,NULL); |
118 | return(i); | 115 | return(i); |
119 | } | 116 | } |
117 | #else /* !OPENSSL_NO_RSA */ | ||
118 | |||
119 | # ifdef PEDANTIC | ||
120 | static void *dummy=&dummy; | ||
121 | # endif | ||
122 | |||
123 | #endif | ||