projects
/
openssl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Constify EVP_SealInit, EVP_OpenInit
[openssl.git]
/
crypto
/
evp
/
p_open.c
diff --git
a/crypto/evp/p_open.c
b/crypto/evp/p_open.c
index e6af915c01d228e41f85c3f680e7871c1db00da5..c0a50b9cd6b25e6543f04b520acb9829f88c2a11 100644
(file)
--- a/
crypto/evp/p_open.c
+++ b/
crypto/evp/p_open.c
@@
-56,48
+56,53
@@
* [including the GNU Public Licence.]
*/
* [including the GNU Public Licence.]
*/
+#ifndef OPENSSL_NO_RSA
#include <stdio.h>
#include "cryptlib.h"
#include <stdio.h>
#include "cryptlib.h"
-#include
"evp.h"
-#include
"objects.h"
-#include
"x509.h"
+#include
<openssl/evp.h>
+#include
<openssl/objects.h>
+#include
<openssl/x509.h>
-int EVP_OpenInit(EVP_CIPHER_CTX *ctx, EVP_CIPHER *type, unsigned char *ek,
+int EVP_OpenInit(EVP_CIPHER_CTX *ctx,
const
EVP_CIPHER *type, unsigned char *ek,
int ekl, unsigned char *iv, EVP_PKEY *priv)
{
unsigned char *key=NULL;
int i,size=0,ret=0;
int ekl, unsigned char *iv, EVP_PKEY *priv)
{
unsigned char *key=NULL;
int i,size=0,ret=0;
-
+
+ if(type) {
+ EVP_CIPHER_CTX_init(ctx);
+ if(!EVP_DecryptInit(ctx,type,NULL,NULL)) return 0;
+ }
+
+ if(!priv) return 1;
+
if (priv->type != EVP_PKEY_RSA)
{
EVPerr(EVP_F_EVP_OPENINIT,EVP_R_PUBLIC_KEY_NOT_RSA);
if (priv->type != EVP_PKEY_RSA)
{
EVPerr(EVP_F_EVP_OPENINIT,EVP_R_PUBLIC_KEY_NOT_RSA);
- ret= -1;
goto err;
}
size=RSA_size(priv->pkey.rsa);
goto err;
}
size=RSA_size(priv->pkey.rsa);
- key=(unsigned char *)
M
alloc(size+2);
+ key=(unsigned char *)
OPENSSL_m
alloc(size+2);
if (key == NULL)
{
/* ERROR */
EVPerr(EVP_F_EVP_OPENINIT,ERR_R_MALLOC_FAILURE);
if (key == NULL)
{
/* ERROR */
EVPerr(EVP_F_EVP_OPENINIT,ERR_R_MALLOC_FAILURE);
- ret= -1;
goto err;
}
i=EVP_PKEY_decrypt(key,ek,ekl,priv);
goto err;
}
i=EVP_PKEY_decrypt(key,ek,ekl,priv);
- if (
i != type->key_len
)
+ if (
(i <= 0) || !EVP_CIPHER_CTX_set_key_length(ctx, i)
)
{
/* ERROR */
goto err;
}
{
/* ERROR */
goto err;
}
+ if(!EVP_DecryptInit(ctx,NULL,key,iv)) goto err;
- EVP_CIPHER_CTX_init(ctx);
- EVP_DecryptInit(ctx,type,key,iv);
ret=1;
err:
if (key != NULL) memset(key,0,size);
ret=1;
err:
if (key != NULL) memset(key,0,size);
-
F
ree(key);
+
OPENSSL_f
ree(key);
return(ret);
}
return(ret);
}
@@
-109,3
+114,10
@@
int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
EVP_DecryptInit(ctx,NULL,NULL,NULL);
return(i);
}
EVP_DecryptInit(ctx,NULL,NULL,NULL);
return(i);
}
+#else /* !OPENSSL_NO_RSA */
+
+# ifdef PEDANTIC
+static void *dummy=&dummy;
+# endif
+
+#endif