Index: openssl/crypto/evp/e_des.c |
=================================================================== |
--- openssl/crypto/evp/e_des.c (revision 105093) |
+++ openssl/crypto/evp/e_des.c (working copy) |
@@ -72,7 +72,7 @@ |
/* Because of various casts and different names can't use IMPLEMENT_BLOCK_CIPHER */ |
static int des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
BLOCK_CIPHER_ecb_loop() |
DES_ecb_encrypt((DES_cblock *)(in + i), (DES_cblock *)(out + i), ctx->cipher_data, ctx->encrypt); |
@@ -80,24 +80,52 @@ |
} |
static int des_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_ofb64_encrypt(in, out, (long)inl, ctx->cipher_data, (DES_cblock *)ctx->iv, &ctx->num); |
+ while(inl>=EVP_MAXCHUNK) |
+ { |
+ DES_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, ctx->cipher_data, |
+ (DES_cblock *)ctx->iv, &ctx->num); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_ofb64_encrypt(in, out, (long)inl, ctx->cipher_data, |
+ (DES_cblock *)ctx->iv, &ctx->num); |
return 1; |
} |
static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_ncbc_encrypt(in, out, (long)inl, ctx->cipher_data, |
- (DES_cblock *)ctx->iv, ctx->encrypt); |
+ while(inl>=EVP_MAXCHUNK) |
+ { |
+ DES_ncbc_encrypt(in, out, (long)EVP_MAXCHUNK, ctx->cipher_data, |
+ (DES_cblock *)ctx->iv, ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_ncbc_encrypt(in, out, (long)inl, ctx->cipher_data, |
+ (DES_cblock *)ctx->iv, ctx->encrypt); |
return 1; |
} |
static int des_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data, |
+ while(inl>=EVP_MAXCHUNK) |
+ { |
+ DES_cfb64_encrypt(in,out, (long)EVP_MAXCHUNK, ctx->cipher_data, |
+ (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_cfb64_encrypt(in, out, (long)inl, ctx->cipher_data, |
(DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); |
return 1; |
} |
@@ -105,45 +133,62 @@ |
/* Although we have a CFB-r implementation for DES, it doesn't pack the right |
way, so wrap it here */ |
static int des_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- unsigned int n; |
+ size_t n,chunk=EVP_MAXCHUNK/8; |
unsigned char c[1],d[1]; |
- for(n=0 ; n < inl ; ++n) |
+ if (inl<chunk) chunk=inl; |
+ |
+ while (inl && inl>=chunk) |
{ |
- c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; |
- DES_cfb_encrypt(c,d,1,1,ctx->cipher_data,(DES_cblock *)ctx->iv, |
+ for(n=0 ; n < chunk*8; ++n) |
+ { |
+ c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; |
+ DES_cfb_encrypt(c,d,1,1,ctx->cipher_data,(DES_cblock *)ctx->iv, |
ctx->encrypt); |
- out[n/8]=(out[n/8]&~(0x80 >> (n%8)))|((d[0]&0x80) >> (n%8)); |
+ out[n/8]=(out[n/8]&~(0x80 >> (unsigned int)(n%8))) | |
+ ((d[0]&0x80) >> (unsigned int)(n%8)); |
+ } |
+ inl-=chunk; |
+ in +=chunk; |
+ out+=chunk; |
+ if (inl<chunk) chunk=inl; |
} |
+ |
return 1; |
} |
static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_cfb_encrypt(in,out,8,inl,ctx->cipher_data,(DES_cblock *)ctx->iv, |
- ctx->encrypt); |
+ while (inl>=EVP_MAXCHUNK) |
+ { |
+ DES_cfb_encrypt(in,out,8,(long)EVP_MAXCHUNK,ctx->cipher_data, |
+ (DES_cblock *)ctx->iv,ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_cfb_encrypt(in,out,8,(long)inl,ctx->cipher_data, |
+ (DES_cblock *)ctx->iv,ctx->encrypt); |
return 1; |
} |
BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64, |
- EVP_CIPH_RAND_KEY, |
- des_init_key, NULL, |
+ EVP_CIPH_RAND_KEY, des_init_key, NULL, |
EVP_CIPHER_set_asn1_iv, |
EVP_CIPHER_get_asn1_iv, |
des_ctrl) |
BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,1, |
- EVP_CIPH_RAND_KEY, |
- des_init_key, NULL, |
+ EVP_CIPH_RAND_KEY, des_init_key,NULL, |
EVP_CIPHER_set_asn1_iv, |
EVP_CIPHER_get_asn1_iv,des_ctrl) |
BLOCK_CIPHER_def_cfb(des,DES_key_schedule,NID_des,8,8,8, |
- EVP_CIPH_RAND_KEY, |
- des_init_key,NULL, |
+ EVP_CIPH_RAND_KEY,des_init_key,NULL, |
EVP_CIPHER_set_asn1_iv, |
EVP_CIPHER_get_asn1_iv,des_ctrl) |