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