eng_aesni.c: switch to CRYPTO_ctr128_encrypt_ctr32.
authorAndy Polyakov <appro@openssl.org>
Mon, 26 Jul 2010 21:50:39 +0000 (21:50 +0000)
committerAndy Polyakov <appro@openssl.org>
Mon, 26 Jul 2010 21:50:39 +0000 (21:50 +0000)
crypto/engine/eng_aesni.c

index 26c2e073ff06bde12a887727883ef5df6b9e6b47..112375826175f52eb037ec05000c8dda0dc04455 100644 (file)
@@ -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;
 }