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