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 | ||
