Commit 511306b2 authored by Eric Biggers's avatar Eric Biggers Committed by Herbert Xu

crypto: arm/aes-ce - update IV after partial final CTR block

Make the arm ctr-aes-ce algorithm update the IV buffer to contain the
next counter after processing a partial final block, rather than leave
it as the last counter.  This makes ctr-aes-ce pass the updated AES-CTR
tests.  This change also makes the code match the arm64 version in
arch/arm64/crypto/aes-modes.S more closely.
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent fa5fd3af
...@@ -317,25 +317,27 @@ ENTRY(ce_aes_ctr_encrypt) ...@@ -317,25 +317,27 @@ ENTRY(ce_aes_ctr_encrypt)
.Lctrloop: .Lctrloop:
vmov q0, q6 vmov q0, q6
bl aes_encrypt bl aes_encrypt
subs r4, r4, #1
bmi .Lctrtailblock @ blocks < 0 means tail block
vld1.8 {q3}, [r1]!
veor q3, q0, q3
vst1.8 {q3}, [r0]!
adds r6, r6, #1 @ increment BE ctr adds r6, r6, #1 @ increment BE ctr
rev ip, r6 rev ip, r6
vmov s27, ip vmov s27, ip
bcs .Lctrcarry bcs .Lctrcarry
teq r4, #0
.Lctrcarrydone:
subs r4, r4, #1
bmi .Lctrtailblock @ blocks < 0 means tail block
vld1.8 {q3}, [r1]!
veor q3, q0, q3
vst1.8 {q3}, [r0]!
bne .Lctrloop bne .Lctrloop
.Lctrout: .Lctrout:
vst1.8 {q6}, [r5] vst1.8 {q6}, [r5] @ return next CTR value
pop {r4-r6, pc} pop {r4-r6, pc}
.Lctrtailblock: .Lctrtailblock:
vst1.8 {q0}, [r0, :64] @ return just the key stream vst1.8 {q0}, [r0, :64] @ return the key stream
pop {r4-r6, pc} b .Lctrout
.Lctrcarry: .Lctrcarry:
.irp sreg, s26, s25, s24 .irp sreg, s26, s25, s24
...@@ -344,11 +346,9 @@ ENTRY(ce_aes_ctr_encrypt) ...@@ -344,11 +346,9 @@ ENTRY(ce_aes_ctr_encrypt)
adds ip, ip, #1 adds ip, ip, #1
rev ip, ip rev ip, ip
vmov \sreg, ip vmov \sreg, ip
bcc 0f bcc .Lctrcarrydone
.endr .endr
0: teq r4, #0 b .Lctrcarrydone
beq .Lctrout
b .Lctrloop
ENDPROC(ce_aes_ctr_encrypt) ENDPROC(ce_aes_ctr_encrypt)
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment