projects
/
openssl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d1fff48
)
e_aes.c: fix aes_cfb1_cipher.
author
Andy Polyakov
<appro@openssl.org>
Mon, 30 May 2011 10:10:05 +0000
(10:10 +0000)
committer
Andy Polyakov
<appro@openssl.org>
Mon, 30 May 2011 10:10:05 +0000
(10:10 +0000)
crypto/evp/e_aes.c
patch
|
blob
|
history
diff --git
a/crypto/evp/e_aes.c
b/crypto/evp/e_aes.c
index 93d6d973e0e7d1fe5068bc4fb672738208f7b248..00bb519cfb60b9c9017128fff65ae30f6ef8b14d 100644
(file)
--- a/
crypto/evp/e_aes.c
+++ b/
crypto/evp/e_aes.c
@@
-196,14
+196,30
@@
static int aes_cfb8_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
return 1;
}
return 1;
}
+#define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4))
+
static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
const unsigned char *in,size_t len)
{
static int aes_cfb1_cipher(EVP_CIPHER_CTX *ctx,unsigned char *out,
const unsigned char *in,size_t len)
{
- CRYPTO_cfb128_1_encrypt(in,out,len,ctx->cipher_data,
- ctx->iv,&ctx->num,ctx->encrypt,
- OPENSSL_ia32cap_P[1]&AESNI_CAPABLE ?
+ block128_f block = OPENSSL_ia32cap_P[1]&AESNI_CAPABLE ?
(block128_f)aesni_encrypt :
(block128_f)AES_encrypt);
(block128_f)aesni_encrypt :
(block128_f)AES_encrypt);
+
+ if (ctx->flags&EVP_CIPH_FLAG_LENGTH_BITS) {
+ CRYPTO_cfb128_1_encrypt(in,out,len,ctx->cipher_data,
+ ctx->iv,&ctx->num,ctx->encrypt,block);
+ return 1;
+ }
+
+ while (len>=MAXBITCHUNK) {
+ CRYPTO_cfb128_1_encrypt(in,out,MAXBITCHUNK*8,ctx->cipher_data,
+ ctx->iv,&ctx->num,ctx->encrypt,block);
+ len-=MAXBITCHUNK;
+ }
+ if (len)
+ CRYPTO_cfb128_1_encrypt(in,out,len*8,ctx->cipher_data,
+ ctx->iv,&ctx->num,ctx->encrypt,block);
+
return 1;
}
return 1;
}