Index: openssl/crypto/evp/e_des3.c |
=================================================================== |
--- openssl/crypto/evp/e_des3.c (revision 105093) |
+++ openssl/crypto/evp/e_des3.c (working copy) |
@@ -85,7 +85,7 @@ |
/* Because of various casts and different args can't use IMPLEMENT_BLOCK_CIPHER */ |
static int des_ede_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_ecb3_encrypt((const_DES_cblock *)(in + i), |
@@ -97,48 +97,80 @@ |
} |
static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_ede3_ofb64_encrypt(in, out, (long)inl, |
+ if (inl>=EVP_MAXCHUNK) |
+ { |
+ DES_ede3_ofb64_encrypt(in, out, (long)EVP_MAXCHUNK, |
&data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, |
(DES_cblock *)ctx->iv, &ctx->num); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_ede3_ofb64_encrypt(in, out, (long)inl, |
+ &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, |
+ (DES_cblock *)ctx->iv, &ctx->num); |
+ |
return 1; |
} |
static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
#ifdef KSSL_DEBUG |
{ |
int i; |
- printf("des_ede_cbc_cipher(ctx=%lx, buflen=%d)\n", (unsigned long)ctx, ctx->buf_len); |
+ char *cp; |
+ printf("des_ede_cbc_cipher(ctx=%lx, buflen=%d)\n", ctx, ctx->buf_len); |
printf("\t iv= "); |
for(i=0;i<8;i++) |
printf("%02X",ctx->iv[i]); |
printf("\n"); |
} |
#endif /* KSSL_DEBUG */ |
- DES_ede3_cbc_encrypt(in, out, (long)inl, |
+ if (inl>=EVP_MAXCHUNK) |
+ { |
+ DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK, |
&data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, |
(DES_cblock *)ctx->iv, ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_ede3_cbc_encrypt(in, out, (long)inl, |
+ &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, |
+ (DES_cblock *)ctx->iv, ctx->encrypt); |
return 1; |
} |
static int des_ede_cfb64_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_ede3_cfb64_encrypt(in, out, (long)inl, |
+ if (inl>=EVP_MAXCHUNK) |
+ { |
+ DES_ede3_cfb64_encrypt(in, out, (long)EVP_MAXCHUNK, |
&data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, |
(DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_ede3_cfb64_encrypt(in, out, (long)inl, |
+ &data(ctx)->ks1, &data(ctx)->ks2, &data(ctx)->ks3, |
+ (DES_cblock *)ctx->iv, &ctx->num, ctx->encrypt); |
return 1; |
} |
/* Although we have a CFB-r implementation for 3-DES, it doesn't pack the right |
way, so wrap it here */ |
static int des_ede3_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; |
unsigned char c[1],d[1]; |
for(n=0 ; n < inl ; ++n) |
@@ -147,25 +179,36 @@ |
DES_ede3_cfb_encrypt(c,d,1,1, |
&data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, |
(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)); |
} |
return 1; |
} |
static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, |
- const unsigned char *in, unsigned int inl) |
+ const unsigned char *in, size_t inl) |
{ |
- DES_ede3_cfb_encrypt(in,out,8,inl, |
+ while (inl>=EVP_MAXCHUNK) |
+ { |
+ DES_ede3_cfb_encrypt(in,out,8,(long)EVP_MAXCHUNK, |
&data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, |
(DES_cblock *)ctx->iv,ctx->encrypt); |
+ inl-=EVP_MAXCHUNK; |
+ in +=EVP_MAXCHUNK; |
+ out+=EVP_MAXCHUNK; |
+ } |
+ if (inl) |
+ DES_ede3_cfb_encrypt(in,out,8,(long)inl, |
+ &data(ctx)->ks1,&data(ctx)->ks2,&data(ctx)->ks3, |
+ (DES_cblock *)ctx->iv,ctx->encrypt); |
return 1; |
} |
BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64, |
- EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, |
- des_ede_init_key, |
- NULL, NULL, NULL, |
+ EVP_CIPH_RAND_KEY, des_ede_init_key, NULL, |
+ EVP_CIPHER_set_asn1_iv, |
+ EVP_CIPHER_get_asn1_iv, |
des3_ctrl) |
#define des_ede3_cfb64_cipher des_ede_cfb64_cipher |
@@ -174,21 +217,21 @@ |
#define des_ede3_ecb_cipher des_ede_ecb_cipher |
BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64, |
- EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, |
- des_ede3_init_key, |
- NULL, NULL, NULL, |
+ EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL, |
+ EVP_CIPHER_set_asn1_iv, |
+ EVP_CIPHER_get_asn1_iv, |
des3_ctrl) |
BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,1, |
- EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, |
- des_ede3_init_key, |
- NULL, NULL, NULL, |
+ EVP_CIPH_RAND_KEY, des_ede3_init_key,NULL, |
+ EVP_CIPHER_set_asn1_iv, |
+ EVP_CIPHER_get_asn1_iv, |
des3_ctrl) |
BLOCK_CIPHER_def_cfb(des_ede3,DES_EDE_KEY,NID_des_ede3,24,8,8, |
- EVP_CIPH_RAND_KEY|EVP_CIPH_FLAG_FIPS|EVP_CIPH_FLAG_DEFAULT_ASN1, |
- des_ede3_init_key, |
- NULL, NULL, NULL, |
+ EVP_CIPH_RAND_KEY, des_ede3_init_key,NULL, |
+ EVP_CIPHER_set_asn1_iv, |
+ EVP_CIPHER_get_asn1_iv, |
des3_ctrl) |
static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key, |
@@ -215,7 +258,7 @@ |
#ifdef KSSL_DEBUG |
{ |
int i; |
- printf("des_ede3_init_key(ctx=%lx)\n", (unsigned long)ctx); |
+ printf("des_ede3_init_key(ctx=%lx)\n", ctx); |
printf("\tKEY= "); |
for(i=0;i<24;i++) printf("%02X",key[i]); printf("\n"); |
printf("\t IV= "); |