eng_aesni.c: switch to CRYPTO_ctr128_encrypt_ctr32.
This commit is contained in:
parent
058d83cfe9
commit
3d85668ba2
@ -401,55 +401,10 @@ static int aesni_counter(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
const unsigned char *in, size_t len)
|
const unsigned char *in, size_t len)
|
||||||
{
|
{
|
||||||
AES_KEY *key = AESNI_ALIGN(ctx->cipher_data);
|
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;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user