mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
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: Eric Biggers <ebiggers@google.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -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)
|
|||||||
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)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user