summaryrefslogtreecommitdiffstats
path: root/crypto/engine
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2010-07-26 21:50:39 +0000
committerAndy Polyakov <appro@openssl.org>2010-07-26 21:50:39 +0000
commit3d85668ba227229ad2899ed41eda4d44b60d1935 (patch)
treef846efb7dcd31281fcd0ac280a633360c3c3edf1 /crypto/engine
parent058d83cfe9eca7fb7ae0185eff70a5a6a1fe608b (diff)
eng_aesni.c: switch to CRYPTO_ctr128_encrypt_ctr32.
Diffstat (limited to 'crypto/engine')
-rw-r--r--crypto/engine/eng_aesni.c51
1 files changed, 3 insertions, 48 deletions
diff --git a/crypto/engine/eng_aesni.c b/crypto/engine/eng_aesni.c
index 26c2e073ff..1123758261 100644
--- a/crypto/engine/eng_aesni.c
+++ b/crypto/engine/eng_aesni.c
@@ -401,55 +401,10 @@ static int aesni_counter(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len)
{
AES_KEY *key = AESNI_ALIGN(ctx->cipher_data);
- u32 n, ctr32;
- n = ctx->num;
-
- while (n && len) {
- *(out++) = *(in++) ^ ctx->buf[n];
- --len;
- n = (n+1) % 16;
- }
-
- ctr32 = GETU32(ctx->iv+12);
- while (len>=16) {
- size_t blocks = len/16;
- /*
- * 1<<24 is just a not-so-small yet not-so-large number...
- */
- if (blocks > (1U<<24)) blocks = (1U<<24);
- /*
- * As aesni_ctr32 operates on 32-bit counter, caller
- * has to handle overflow. 'if' below detects the
- * overflow, which is then handled by limiting the
- * amount of blocks to the exact overflow point...
- */
- ctr32 += (u32)blocks;
- if (ctr32 < blocks) {
- blocks -= ctr32;
- ctr32 = 0;
- }
- aesni_ctr32_encrypt_blocks(in,out,blocks,key,ctx->iv);
- /* aesni_ctr32 does not update ctx->iv, caller does: */
- PUTU32(ctx->iv+12,ctr32);
- /* ... overflow was detected, propogate carry. */
- if (ctr32 == 0) ctr96_inc(ctx->iv);
- blocks *= 16;
- len -= blocks;
- out += blocks;
- in += blocks;
- }
- if (len) {
- aesni_encrypt(ctx->iv,ctx->buf,key);
- ++ctr32;
- PUTU32(ctx->iv+12,ctr32);
- if (ctr32 == 0) ctr96_inc(ctx->iv);
- while (len--) {
- out[n] = in[n] ^ ctx->buf[n];
- ++n;
- }
- }
- ctx->num = n;
+ CRYPTO_ctr128_encrypt_ctr32(in,out,len,key,
+ ctx->iv,ctx->buf,&ctx->num,
+ aesni_ctr32_encrypt_blocks);
return 1;
}