Index: openssl/crypto/evp/e_xcbc_d.c |
=================================================================== |
--- openssl/crypto/evp/e_xcbc_d.c (revision 105093) |
+++ openssl/crypto/evp/e_xcbc_d.c (working copy) |
@@ -63,12 +63,13 @@ |
#include <openssl/evp.h> |
#include <openssl/objects.h> |
+#include "evp_locl.h" |
#include <openssl/des.h> |
static int desx_cbc_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
const unsigned char *iv,int enc); |
static int desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl); |
+ const unsigned char *in, size_t inl); |
typedef struct |
@@ -113,13 +114,25 @@ |
} |
static int desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_xcbc_encrypt(in,out,inl,&data(ctx)->ks, |
+ while (inl>=EVP_MAXCHUNK) |
+ { |
+ DES_xcbc_encrypt(in,out,(long)EVP_MAXCHUNK,&data(ctx)->ks, |
(DES_cblock *)&(ctx->iv[0]), |
&data(ctx)->inw, |
&data(ctx)->outw, |
ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_xcbc_encrypt(in,out,(long)inl,&data(ctx)->ks, |
+ (DES_cblock *)&(ctx->iv[0]), |
+ &data(ctx)->inw, |
+ &data(ctx)->outw, |
+ ctx->encrypt); |
return 1; |
} |
#endif |