| Index: third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
|
| diff --git a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S b/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
|
| index cbc32fb57f6ae729a5ce65bbc93b97aabbf170b5..0feeab0b1d65c9ddb04d0f90b6d52b9209bc8d9c 100644
|
| --- a/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
|
| +++ b/third_party/boringssl/linux-arm/crypto/aes/bsaes-armv7.S
|
| @@ -60,135 +60,141 @@
|
| # define BSAES_ASM_EXTENDED_KEY
|
| # define XTS_CHAIN_TWEAK
|
| # define __ARM_ARCH__ __LINUX_ARM_ARCH__
|
| +# define __ARM_MAX_ARCH__ 7
|
| #endif
|
|
|
| #ifdef __thumb__
|
| # define adrl adr
|
| #endif
|
|
|
| -#if __ARM_ARCH__>=7
|
| +#if __ARM_MAX_ARCH__>=7
|
| +.arch armv7-a
|
| +.fpu neon
|
| +
|
| .text
|
| .syntax unified @ ARMv7-capable assembler is expected to handle this
|
| -#ifdef __thumb2__
|
| +#if defined(__thumb2__) && !defined(__APPLE__)
|
| .thumb
|
| #else
|
| -.code 32
|
| +.code 32
|
| #endif
|
|
|
| -.fpu neon
|
| -
|
| .type _bsaes_decrypt8,%function
|
| .align 4
|
| _bsaes_decrypt8:
|
| adr r6,_bsaes_decrypt8
|
| vldmia r4!, {q9} @ round 0 key
|
| +#ifdef __APPLE__
|
| + adr r6,.LM0ISR
|
| +#else
|
| add r6,r6,#.LM0ISR-_bsaes_decrypt8
|
| +#endif
|
|
|
| vldmia r6!, {q8} @ .LM0ISR
|
| veor q10, q0, q9 @ xor with round0 key
|
| veor q11, q1, q9
|
| - vtbl.8 d0, {q10}, d16
|
| - vtbl.8 d1, {q10}, d17
|
| + vtbl.8 d0, {q10}, d16
|
| + vtbl.8 d1, {q10}, d17
|
| veor q12, q2, q9
|
| - vtbl.8 d2, {q11}, d16
|
| - vtbl.8 d3, {q11}, d17
|
| + vtbl.8 d2, {q11}, d16
|
| + vtbl.8 d3, {q11}, d17
|
| veor q13, q3, q9
|
| - vtbl.8 d4, {q12}, d16
|
| - vtbl.8 d5, {q12}, d17
|
| + vtbl.8 d4, {q12}, d16
|
| + vtbl.8 d5, {q12}, d17
|
| veor q14, q4, q9
|
| - vtbl.8 d6, {q13}, d16
|
| - vtbl.8 d7, {q13}, d17
|
| + vtbl.8 d6, {q13}, d16
|
| + vtbl.8 d7, {q13}, d17
|
| veor q15, q5, q9
|
| - vtbl.8 d8, {q14}, d16
|
| - vtbl.8 d9, {q14}, d17
|
| + vtbl.8 d8, {q14}, d16
|
| + vtbl.8 d9, {q14}, d17
|
| veor q10, q6, q9
|
| - vtbl.8 d10, {q15}, d16
|
| - vtbl.8 d11, {q15}, d17
|
| + vtbl.8 d10, {q15}, d16
|
| + vtbl.8 d11, {q15}, d17
|
| veor q11, q7, q9
|
| - vtbl.8 d12, {q10}, d16
|
| - vtbl.8 d13, {q10}, d17
|
| - vtbl.8 d14, {q11}, d16
|
| - vtbl.8 d15, {q11}, d17
|
| + vtbl.8 d12, {q10}, d16
|
| + vtbl.8 d13, {q10}, d17
|
| + vtbl.8 d14, {q11}, d16
|
| + vtbl.8 d15, {q11}, d17
|
| vmov.i8 q8,#0x55 @ compose .LBS0
|
| vmov.i8 q9,#0x33 @ compose .LBS1
|
| vshr.u64 q10, q6, #1
|
| - vshr.u64 q11, q4, #1
|
| - veor q10, q10, q7
|
| - veor q11, q11, q5
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q4, #1
|
| + veor q10, q10, q7
|
| + veor q11, q11, q5
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q5, q5, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q6, q6, q10
|
| - veor q4, q4, q11
|
| + veor q5, q5, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q6, q6, q10
|
| + veor q4, q4, q11
|
| vshr.u64 q10, q2, #1
|
| - vshr.u64 q11, q0, #1
|
| - veor q10, q10, q3
|
| - veor q11, q11, q1
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q3, q3, q10
|
| + vshr.u64 q11, q0, #1
|
| + veor q10, q10, q3
|
| + veor q11, q11, q1
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q3, q3, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q1, q1, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q2, q2, q10
|
| - veor q0, q0, q11
|
| + veor q1, q1, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q2, q2, q10
|
| + veor q0, q0, q11
|
| vmov.i8 q8,#0x0f @ compose .LBS2
|
| vshr.u64 q10, q5, #2
|
| - vshr.u64 q11, q4, #2
|
| - veor q10, q10, q7
|
| - veor q11, q11, q6
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q4, #2
|
| + veor q10, q10, q7
|
| + veor q11, q11, q6
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q6, q6, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q5, q5, q10
|
| - veor q4, q4, q11
|
| + veor q6, q6, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q5, q5, q10
|
| + veor q4, q4, q11
|
| vshr.u64 q10, q1, #2
|
| - vshr.u64 q11, q0, #2
|
| - veor q10, q10, q3
|
| - veor q11, q11, q2
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q3, q3, q10
|
| + vshr.u64 q11, q0, #2
|
| + veor q10, q10, q3
|
| + veor q11, q11, q2
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q3, q3, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q2, q2, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q2, q2, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| vshr.u64 q10, q3, #4
|
| - vshr.u64 q11, q2, #4
|
| - veor q10, q10, q7
|
| - veor q11, q11, q6
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q2, #4
|
| + veor q10, q10, q7
|
| + veor q11, q11, q6
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q6, q6, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q3, q3, q10
|
| - veor q2, q2, q11
|
| + veor q6, q6, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q3, q3, q10
|
| + veor q2, q2, q11
|
| vshr.u64 q10, q1, #4
|
| - vshr.u64 q11, q0, #4
|
| - veor q10, q10, q5
|
| - veor q11, q11, q4
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q0, #4
|
| + veor q10, q10, q5
|
| + veor q11, q11, q4
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q4, q4, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q4, q4, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| sub r5,r5,#1
|
| b .Ldec_sbox
|
| .align 4
|
| .Ldec_loop:
|
| - vldmia r4!, {q8-q11}
|
| + vldmia r4!, {q8,q9,q10,q11}
|
| veor q8, q8, q0
|
| veor q9, q9, q1
|
| vtbl.8 d0, {q8}, d24
|
| @@ -218,17 +224,17 @@ _bsaes_decrypt8:
|
| vtbl.8 d14, {q11}, d24
|
| vtbl.8 d15, {q11}, d25
|
| .Ldec_sbox:
|
| - veor q1, q1, q4
|
| + veor q1, q1, q4
|
| veor q3, q3, q4
|
|
|
| veor q4, q4, q7
|
| - veor q1, q1, q6
|
| + veor q1, q1, q6
|
| veor q2, q2, q7
|
| veor q6, q6, q4
|
|
|
| veor q0, q0, q1
|
| veor q2, q2, q5
|
| - veor q7, q7, q6
|
| + veor q7, q7, q6
|
| veor q3, q3, q0
|
| veor q5, q5, q0
|
| veor q1, q1, q3
|
| @@ -236,7 +242,7 @@ _bsaes_decrypt8:
|
| veor q10, q7, q4
|
| veor q9, q1, q6
|
| veor q13, q4, q0
|
| - vmov q8, q10
|
| + vmov q8, q10
|
| veor q12, q5, q2
|
|
|
| vorr q10, q10, q9
|
| @@ -293,7 +299,7 @@ _bsaes_decrypt8:
|
| veor q14, q14, q11
|
| veor q12, q5, q2
|
| veor q8, q1, q6
|
| - veor q10, q15, q14
|
| + veor q10, q15, q14
|
| vand q10, q10, q5
|
| veor q5, q5, q1
|
| vand q11, q1, q15
|
| @@ -303,19 +309,19 @@ _bsaes_decrypt8:
|
| veor q15, q15, q13
|
| veor q14, q14, q9
|
| veor q11, q15, q14
|
| - veor q10, q13, q9
|
| + veor q10, q13, q9
|
| vand q11, q11, q12
|
| - vand q10, q10, q2
|
| + vand q10, q10, q2
|
| veor q12, q12, q8
|
| - veor q2, q2, q6
|
| + veor q2, q2, q6
|
| vand q8, q8, q15
|
| - vand q6, q6, q13
|
| + vand q6, q6, q13
|
| vand q12, q12, q14
|
| - vand q2, q2, q9
|
| + vand q2, q2, q9
|
| veor q8, q8, q12
|
| - veor q2, q2, q6
|
| + veor q2, q2, q6
|
| veor q12, q12, q11
|
| - veor q6, q6, q10
|
| + veor q6, q6, q10
|
| veor q5, q5, q12
|
| veor q2, q2, q12
|
| veor q1, q1, q8
|
| @@ -324,22 +330,22 @@ _bsaes_decrypt8:
|
| veor q12, q3, q0
|
| veor q8, q7, q4
|
| veor q11, q15, q14
|
| - veor q10, q13, q9
|
| + veor q10, q13, q9
|
| vand q11, q11, q12
|
| - vand q10, q10, q0
|
| + vand q10, q10, q0
|
| veor q12, q12, q8
|
| - veor q0, q0, q4
|
| + veor q0, q0, q4
|
| vand q8, q8, q15
|
| - vand q4, q4, q13
|
| + vand q4, q4, q13
|
| vand q12, q12, q14
|
| - vand q0, q0, q9
|
| + vand q0, q0, q9
|
| veor q8, q8, q12
|
| - veor q0, q0, q4
|
| + veor q0, q0, q4
|
| veor q12, q12, q11
|
| - veor q4, q4, q10
|
| + veor q4, q4, q10
|
| veor q15, q15, q13
|
| veor q14, q14, q9
|
| - veor q10, q15, q14
|
| + veor q10, q15, q14
|
| vand q10, q10, q3
|
| veor q3, q3, q7
|
| vand q11, q7, q15
|
| @@ -357,10 +363,10 @@ _bsaes_decrypt8:
|
| veor q2, q2, q7
|
| veor q5, q5, q7
|
| veor q4, q4, q2
|
| - veor q7, q7, q0
|
| + veor q7, q7, q0
|
| veor q4, q4, q5
|
| - veor q3, q3, q6
|
| - veor q6, q6, q1
|
| + veor q3, q3, q6
|
| + veor q6, q6, q1
|
| veor q3, q3, q4
|
|
|
| veor q4, q4, q0
|
| @@ -385,58 +391,58 @@ _bsaes_decrypt8:
|
| veor q12, q12, q2
|
| veor q13, q13, q7
|
|
|
| - veor q0, q0, q14
|
| - veor q1, q1, q14
|
| - veor q6, q6, q8
|
| - veor q2, q2, q10
|
| - veor q4, q4, q9
|
| - veor q1, q1, q15
|
| - veor q6, q6, q15
|
| - veor q2, q2, q14
|
| - veor q7, q7, q11
|
| - veor q4, q4, q14
|
| - veor q3, q3, q12
|
| - veor q2, q2, q15
|
| - veor q7, q7, q15
|
| - veor q5, q5, q13
|
| + veor q0, q0, q14
|
| + veor q1, q1, q14
|
| + veor q6, q6, q8
|
| + veor q2, q2, q10
|
| + veor q4, q4, q9
|
| + veor q1, q1, q15
|
| + veor q6, q6, q15
|
| + veor q2, q2, q14
|
| + veor q7, q7, q11
|
| + veor q4, q4, q14
|
| + veor q3, q3, q12
|
| + veor q2, q2, q15
|
| + veor q7, q7, q15
|
| + veor q5, q5, q13
|
| vext.8 q8, q0, q0, #12 @ x0 <<< 32
|
| vext.8 q9, q1, q1, #12
|
| - veor q0, q0, q8 @ x0 ^ (x0 <<< 32)
|
| + veor q0, q0, q8 @ x0 ^ (x0 <<< 32)
|
| vext.8 q10, q6, q6, #12
|
| - veor q1, q1, q9
|
| + veor q1, q1, q9
|
| vext.8 q11, q4, q4, #12
|
| - veor q6, q6, q10
|
| + veor q6, q6, q10
|
| vext.8 q12, q2, q2, #12
|
| - veor q4, q4, q11
|
| + veor q4, q4, q11
|
| vext.8 q13, q7, q7, #12
|
| - veor q2, q2, q12
|
| + veor q2, q2, q12
|
| vext.8 q14, q3, q3, #12
|
| - veor q7, q7, q13
|
| + veor q7, q7, q13
|
| vext.8 q15, q5, q5, #12
|
| - veor q3, q3, q14
|
| + veor q3, q3, q14
|
|
|
| veor q9, q9, q0
|
| - veor q5, q5, q15
|
| - vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64)
|
| + veor q5, q5, q15
|
| + vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64)
|
| veor q10, q10, q1
|
| veor q8, q8, q5
|
| veor q9, q9, q5
|
| - vext.8 q1, q1, q1, #8
|
| + vext.8 q1, q1, q1, #8
|
| veor q13, q13, q2
|
| - veor q0, q0, q8
|
| + veor q0, q0, q8
|
| veor q14, q14, q7
|
| - veor q1, q1, q9
|
| - vext.8 q8, q2, q2, #8
|
| + veor q1, q1, q9
|
| + vext.8 q8, q2, q2, #8
|
| veor q12, q12, q4
|
| - vext.8 q9, q7, q7, #8
|
| + vext.8 q9, q7, q7, #8
|
| veor q15, q15, q3
|
| - vext.8 q2, q4, q4, #8
|
| + vext.8 q2, q4, q4, #8
|
| veor q11, q11, q6
|
| - vext.8 q7, q5, q5, #8
|
| + vext.8 q7, q5, q5, #8
|
| veor q12, q12, q5
|
| - vext.8 q4, q3, q3, #8
|
| + vext.8 q4, q3, q3, #8
|
| veor q11, q11, q5
|
| - vext.8 q3, q6, q6, #8
|
| + vext.8 q3, q6, q6, #8
|
| veor q5, q9, q13
|
| veor q11, q11, q2
|
| veor q7, q7, q15
|
| @@ -456,78 +462,78 @@ _bsaes_decrypt8:
|
| vmov.i8 q8,#0x55 @ compose .LBS0
|
| vmov.i8 q9,#0x33 @ compose .LBS1
|
| vshr.u64 q10, q3, #1
|
| - vshr.u64 q11, q2, #1
|
| - veor q10, q10, q5
|
| - veor q11, q11, q7
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q2, #1
|
| + veor q10, q10, q5
|
| + veor q11, q11, q7
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q7, q7, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q3, q3, q10
|
| - veor q2, q2, q11
|
| + veor q7, q7, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q3, q3, q10
|
| + veor q2, q2, q11
|
| vshr.u64 q10, q6, #1
|
| - vshr.u64 q11, q0, #1
|
| - veor q10, q10, q4
|
| - veor q11, q11, q1
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q4, q4, q10
|
| + vshr.u64 q11, q0, #1
|
| + veor q10, q10, q4
|
| + veor q11, q11, q1
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q4, q4, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q1, q1, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q6, q6, q10
|
| - veor q0, q0, q11
|
| + veor q1, q1, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q6, q6, q10
|
| + veor q0, q0, q11
|
| vmov.i8 q8,#0x0f @ compose .LBS2
|
| vshr.u64 q10, q7, #2
|
| - vshr.u64 q11, q2, #2
|
| - veor q10, q10, q5
|
| - veor q11, q11, q3
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q2, #2
|
| + veor q10, q10, q5
|
| + veor q11, q11, q3
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q3, q3, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q7, q7, q10
|
| - veor q2, q2, q11
|
| + veor q3, q3, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q7, q7, q10
|
| + veor q2, q2, q11
|
| vshr.u64 q10, q1, #2
|
| - vshr.u64 q11, q0, #2
|
| - veor q10, q10, q4
|
| - veor q11, q11, q6
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q4, q4, q10
|
| + vshr.u64 q11, q0, #2
|
| + veor q10, q10, q4
|
| + veor q11, q11, q6
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q4, q4, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q6, q6, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q6, q6, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| vshr.u64 q10, q4, #4
|
| - vshr.u64 q11, q6, #4
|
| - veor q10, q10, q5
|
| - veor q11, q11, q3
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q6, #4
|
| + veor q10, q10, q5
|
| + veor q11, q11, q3
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q3, q3, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q4, q4, q10
|
| - veor q6, q6, q11
|
| + veor q3, q3, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q4, q4, q10
|
| + veor q6, q6, q11
|
| vshr.u64 q10, q1, #4
|
| - vshr.u64 q11, q0, #4
|
| - veor q10, q10, q7
|
| - veor q11, q11, q2
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q0, #4
|
| + veor q10, q10, q7
|
| + veor q11, q11, q2
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q2, q2, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q2, q2, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| vldmia r4, {q8} @ last round key
|
| veor q6, q6, q8
|
| veor q4, q4, q8
|
| @@ -543,23 +549,24 @@ _bsaes_decrypt8:
|
| .type _bsaes_const,%object
|
| .align 6
|
| _bsaes_const:
|
| -.LM0ISR: @ InvShiftRows constants
|
| - .quad 0x0a0e0206070b0f03, 0x0004080c0d010509
|
| +.LM0ISR:@ InvShiftRows constants
|
| +.quad 0x0a0e0206070b0f03, 0x0004080c0d010509
|
| .LISR:
|
| - .quad 0x0504070602010003, 0x0f0e0d0c080b0a09
|
| +.quad 0x0504070602010003, 0x0f0e0d0c080b0a09
|
| .LISRM0:
|
| - .quad 0x01040b0e0205080f, 0x0306090c00070a0d
|
| -.LM0SR: @ ShiftRows constants
|
| - .quad 0x0a0e02060f03070b, 0x0004080c05090d01
|
| +.quad 0x01040b0e0205080f, 0x0306090c00070a0d
|
| +.LM0SR:@ ShiftRows constants
|
| +.quad 0x0a0e02060f03070b, 0x0004080c05090d01
|
| .LSR:
|
| - .quad 0x0504070600030201, 0x0f0e0d0c0a09080b
|
| +.quad 0x0504070600030201, 0x0f0e0d0c0a09080b
|
| .LSRM0:
|
| - .quad 0x0304090e00050a0f, 0x01060b0c0207080d
|
| +.quad 0x0304090e00050a0f, 0x01060b0c0207080d
|
| .LM0:
|
| - .quad 0x02060a0e03070b0f, 0x0004080c0105090d
|
| +.quad 0x02060a0e03070b0f, 0x0004080c0105090d
|
| .LREVM0SR:
|
| - .quad 0x090d01050c000408, 0x03070b0f060a0e02
|
| -.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by <appro@openssl.org>"
|
| +.quad 0x090d01050c000408, 0x03070b0f060a0e02
|
| +.byte 66,105,116,45,115,108,105,99,101,100,32,65,69,83,32,102,111,114,32,78,69,79,78,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
|
| +.align 2
|
| .align 6
|
| .size _bsaes_const,.-_bsaes_const
|
|
|
| @@ -568,115 +575,119 @@ _bsaes_const:
|
| _bsaes_encrypt8:
|
| adr r6,_bsaes_encrypt8
|
| vldmia r4!, {q9} @ round 0 key
|
| +#ifdef __APPLE__
|
| + adr r6,.LM0SR
|
| +#else
|
| sub r6,r6,#_bsaes_encrypt8-.LM0SR
|
| +#endif
|
|
|
| vldmia r6!, {q8} @ .LM0SR
|
| _bsaes_encrypt8_alt:
|
| veor q10, q0, q9 @ xor with round0 key
|
| veor q11, q1, q9
|
| - vtbl.8 d0, {q10}, d16
|
| - vtbl.8 d1, {q10}, d17
|
| + vtbl.8 d0, {q10}, d16
|
| + vtbl.8 d1, {q10}, d17
|
| veor q12, q2, q9
|
| - vtbl.8 d2, {q11}, d16
|
| - vtbl.8 d3, {q11}, d17
|
| + vtbl.8 d2, {q11}, d16
|
| + vtbl.8 d3, {q11}, d17
|
| veor q13, q3, q9
|
| - vtbl.8 d4, {q12}, d16
|
| - vtbl.8 d5, {q12}, d17
|
| + vtbl.8 d4, {q12}, d16
|
| + vtbl.8 d5, {q12}, d17
|
| veor q14, q4, q9
|
| - vtbl.8 d6, {q13}, d16
|
| - vtbl.8 d7, {q13}, d17
|
| + vtbl.8 d6, {q13}, d16
|
| + vtbl.8 d7, {q13}, d17
|
| veor q15, q5, q9
|
| - vtbl.8 d8, {q14}, d16
|
| - vtbl.8 d9, {q14}, d17
|
| + vtbl.8 d8, {q14}, d16
|
| + vtbl.8 d9, {q14}, d17
|
| veor q10, q6, q9
|
| - vtbl.8 d10, {q15}, d16
|
| - vtbl.8 d11, {q15}, d17
|
| + vtbl.8 d10, {q15}, d16
|
| + vtbl.8 d11, {q15}, d17
|
| veor q11, q7, q9
|
| - vtbl.8 d12, {q10}, d16
|
| - vtbl.8 d13, {q10}, d17
|
| - vtbl.8 d14, {q11}, d16
|
| - vtbl.8 d15, {q11}, d17
|
| + vtbl.8 d12, {q10}, d16
|
| + vtbl.8 d13, {q10}, d17
|
| + vtbl.8 d14, {q11}, d16
|
| + vtbl.8 d15, {q11}, d17
|
| _bsaes_encrypt8_bitslice:
|
| vmov.i8 q8,#0x55 @ compose .LBS0
|
| vmov.i8 q9,#0x33 @ compose .LBS1
|
| vshr.u64 q10, q6, #1
|
| - vshr.u64 q11, q4, #1
|
| - veor q10, q10, q7
|
| - veor q11, q11, q5
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q4, #1
|
| + veor q10, q10, q7
|
| + veor q11, q11, q5
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q5, q5, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q6, q6, q10
|
| - veor q4, q4, q11
|
| + veor q5, q5, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q6, q6, q10
|
| + veor q4, q4, q11
|
| vshr.u64 q10, q2, #1
|
| - vshr.u64 q11, q0, #1
|
| - veor q10, q10, q3
|
| - veor q11, q11, q1
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q3, q3, q10
|
| + vshr.u64 q11, q0, #1
|
| + veor q10, q10, q3
|
| + veor q11, q11, q1
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q3, q3, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q1, q1, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q2, q2, q10
|
| - veor q0, q0, q11
|
| + veor q1, q1, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q2, q2, q10
|
| + veor q0, q0, q11
|
| vmov.i8 q8,#0x0f @ compose .LBS2
|
| vshr.u64 q10, q5, #2
|
| - vshr.u64 q11, q4, #2
|
| - veor q10, q10, q7
|
| - veor q11, q11, q6
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q4, #2
|
| + veor q10, q10, q7
|
| + veor q11, q11, q6
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q6, q6, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q5, q5, q10
|
| - veor q4, q4, q11
|
| + veor q6, q6, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q5, q5, q10
|
| + veor q4, q4, q11
|
| vshr.u64 q10, q1, #2
|
| - vshr.u64 q11, q0, #2
|
| - veor q10, q10, q3
|
| - veor q11, q11, q2
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q3, q3, q10
|
| + vshr.u64 q11, q0, #2
|
| + veor q10, q10, q3
|
| + veor q11, q11, q2
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q3, q3, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q2, q2, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q2, q2, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| vshr.u64 q10, q3, #4
|
| - vshr.u64 q11, q2, #4
|
| - veor q10, q10, q7
|
| - veor q11, q11, q6
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q2, #4
|
| + veor q10, q10, q7
|
| + veor q11, q11, q6
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q6, q6, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q3, q3, q10
|
| - veor q2, q2, q11
|
| + veor q6, q6, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q3, q3, q10
|
| + veor q2, q2, q11
|
| vshr.u64 q10, q1, #4
|
| - vshr.u64 q11, q0, #4
|
| - veor q10, q10, q5
|
| - veor q11, q11, q4
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q0, #4
|
| + veor q10, q10, q5
|
| + veor q11, q11, q4
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q4, q4, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q4, q4, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| sub r5,r5,#1
|
| b .Lenc_sbox
|
| .align 4
|
| .Lenc_loop:
|
| - vldmia r4!, {q8-q11}
|
| + vldmia r4!, {q8,q9,q10,q11}
|
| veor q8, q8, q0
|
| veor q9, q9, q1
|
| vtbl.8 d0, {q8}, d24
|
| @@ -725,7 +736,7 @@ _bsaes_encrypt8_bitslice:
|
| veor q10, q1, q2
|
| veor q9, q5, q3
|
| veor q13, q2, q4
|
| - vmov q8, q10
|
| + vmov q8, q10
|
| veor q12, q6, q0
|
|
|
| vorr q10, q10, q9
|
| @@ -782,7 +793,7 @@ _bsaes_encrypt8_bitslice:
|
| veor q14, q14, q11
|
| veor q12, q6, q0
|
| veor q8, q5, q3
|
| - veor q10, q15, q14
|
| + veor q10, q15, q14
|
| vand q10, q10, q6
|
| veor q6, q6, q5
|
| vand q11, q5, q15
|
| @@ -792,19 +803,19 @@ _bsaes_encrypt8_bitslice:
|
| veor q15, q15, q13
|
| veor q14, q14, q9
|
| veor q11, q15, q14
|
| - veor q10, q13, q9
|
| + veor q10, q13, q9
|
| vand q11, q11, q12
|
| - vand q10, q10, q0
|
| + vand q10, q10, q0
|
| veor q12, q12, q8
|
| - veor q0, q0, q3
|
| + veor q0, q0, q3
|
| vand q8, q8, q15
|
| - vand q3, q3, q13
|
| + vand q3, q3, q13
|
| vand q12, q12, q14
|
| - vand q0, q0, q9
|
| + vand q0, q0, q9
|
| veor q8, q8, q12
|
| - veor q0, q0, q3
|
| + veor q0, q0, q3
|
| veor q12, q12, q11
|
| - veor q3, q3, q10
|
| + veor q3, q3, q10
|
| veor q6, q6, q12
|
| veor q0, q0, q12
|
| veor q5, q5, q8
|
| @@ -813,22 +824,22 @@ _bsaes_encrypt8_bitslice:
|
| veor q12, q7, q4
|
| veor q8, q1, q2
|
| veor q11, q15, q14
|
| - veor q10, q13, q9
|
| + veor q10, q13, q9
|
| vand q11, q11, q12
|
| - vand q10, q10, q4
|
| + vand q10, q10, q4
|
| veor q12, q12, q8
|
| - veor q4, q4, q2
|
| + veor q4, q4, q2
|
| vand q8, q8, q15
|
| - vand q2, q2, q13
|
| + vand q2, q2, q13
|
| vand q12, q12, q14
|
| - vand q4, q4, q9
|
| + vand q4, q4, q9
|
| veor q8, q8, q12
|
| - veor q4, q4, q2
|
| + veor q4, q4, q2
|
| veor q12, q12, q11
|
| - veor q2, q2, q10
|
| + veor q2, q2, q10
|
| veor q15, q15, q13
|
| veor q14, q14, q9
|
| - veor q10, q15, q14
|
| + veor q10, q15, q14
|
| vand q10, q10, q7
|
| veor q7, q7, q1
|
| vand q11, q1, q15
|
| @@ -856,42 +867,42 @@ _bsaes_encrypt8_bitslice:
|
| bcc .Lenc_done
|
| vext.8 q8, q0, q0, #12 @ x0 <<< 32
|
| vext.8 q9, q1, q1, #12
|
| - veor q0, q0, q8 @ x0 ^ (x0 <<< 32)
|
| + veor q0, q0, q8 @ x0 ^ (x0 <<< 32)
|
| vext.8 q10, q4, q4, #12
|
| - veor q1, q1, q9
|
| + veor q1, q1, q9
|
| vext.8 q11, q6, q6, #12
|
| - veor q4, q4, q10
|
| + veor q4, q4, q10
|
| vext.8 q12, q3, q3, #12
|
| - veor q6, q6, q11
|
| + veor q6, q6, q11
|
| vext.8 q13, q7, q7, #12
|
| - veor q3, q3, q12
|
| + veor q3, q3, q12
|
| vext.8 q14, q2, q2, #12
|
| - veor q7, q7, q13
|
| + veor q7, q7, q13
|
| vext.8 q15, q5, q5, #12
|
| - veor q2, q2, q14
|
| + veor q2, q2, q14
|
|
|
| veor q9, q9, q0
|
| - veor q5, q5, q15
|
| - vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64)
|
| + veor q5, q5, q15
|
| + vext.8 q0, q0, q0, #8 @ (x0 ^ (x0 <<< 32)) <<< 64)
|
| veor q10, q10, q1
|
| veor q8, q8, q5
|
| veor q9, q9, q5
|
| - vext.8 q1, q1, q1, #8
|
| + vext.8 q1, q1, q1, #8
|
| veor q13, q13, q3
|
| - veor q0, q0, q8
|
| + veor q0, q0, q8
|
| veor q14, q14, q7
|
| - veor q1, q1, q9
|
| - vext.8 q8, q3, q3, #8
|
| + veor q1, q1, q9
|
| + vext.8 q8, q3, q3, #8
|
| veor q12, q12, q6
|
| - vext.8 q9, q7, q7, #8
|
| + vext.8 q9, q7, q7, #8
|
| veor q15, q15, q2
|
| - vext.8 q3, q6, q6, #8
|
| + vext.8 q3, q6, q6, #8
|
| veor q11, q11, q4
|
| - vext.8 q7, q5, q5, #8
|
| + vext.8 q7, q5, q5, #8
|
| veor q12, q12, q5
|
| - vext.8 q6, q2, q2, #8
|
| + vext.8 q6, q2, q2, #8
|
| veor q11, q11, q5
|
| - vext.8 q2, q4, q4, #8
|
| + vext.8 q2, q4, q4, #8
|
| veor q5, q9, q13
|
| veor q4, q8, q12
|
| veor q3, q3, q11
|
| @@ -911,78 +922,78 @@ _bsaes_encrypt8_bitslice:
|
| vmov.i8 q8,#0x55 @ compose .LBS0
|
| vmov.i8 q9,#0x33 @ compose .LBS1
|
| vshr.u64 q10, q2, #1
|
| - vshr.u64 q11, q3, #1
|
| - veor q10, q10, q5
|
| - veor q11, q11, q7
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q3, #1
|
| + veor q10, q10, q5
|
| + veor q11, q11, q7
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q7, q7, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q2, q2, q10
|
| - veor q3, q3, q11
|
| + veor q7, q7, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q2, q2, q10
|
| + veor q3, q3, q11
|
| vshr.u64 q10, q4, #1
|
| - vshr.u64 q11, q0, #1
|
| - veor q10, q10, q6
|
| - veor q11, q11, q1
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q6, q6, q10
|
| + vshr.u64 q11, q0, #1
|
| + veor q10, q10, q6
|
| + veor q11, q11, q1
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q6, q6, q10
|
| vshl.u64 q10, q10, #1
|
| - veor q1, q1, q11
|
| - vshl.u64 q11, q11, #1
|
| - veor q4, q4, q10
|
| - veor q0, q0, q11
|
| + veor q1, q1, q11
|
| + vshl.u64 q11, q11, #1
|
| + veor q4, q4, q10
|
| + veor q0, q0, q11
|
| vmov.i8 q8,#0x0f @ compose .LBS2
|
| vshr.u64 q10, q7, #2
|
| - vshr.u64 q11, q3, #2
|
| - veor q10, q10, q5
|
| - veor q11, q11, q2
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q3, #2
|
| + veor q10, q10, q5
|
| + veor q11, q11, q2
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q2, q2, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q7, q7, q10
|
| - veor q3, q3, q11
|
| + veor q2, q2, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q7, q7, q10
|
| + veor q3, q3, q11
|
| vshr.u64 q10, q1, #2
|
| - vshr.u64 q11, q0, #2
|
| - veor q10, q10, q6
|
| - veor q11, q11, q4
|
| - vand q10, q10, q9
|
| - vand q11, q11, q9
|
| - veor q6, q6, q10
|
| + vshr.u64 q11, q0, #2
|
| + veor q10, q10, q6
|
| + veor q11, q11, q4
|
| + vand q10, q10, q9
|
| + vand q11, q11, q9
|
| + veor q6, q6, q10
|
| vshl.u64 q10, q10, #2
|
| - veor q4, q4, q11
|
| - vshl.u64 q11, q11, #2
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q4, q4, q11
|
| + vshl.u64 q11, q11, #2
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| vshr.u64 q10, q6, #4
|
| - vshr.u64 q11, q4, #4
|
| - veor q10, q10, q5
|
| - veor q11, q11, q2
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q5, q5, q10
|
| + vshr.u64 q11, q4, #4
|
| + veor q10, q10, q5
|
| + veor q11, q11, q2
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q5, q5, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q2, q2, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q6, q6, q10
|
| - veor q4, q4, q11
|
| + veor q2, q2, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q6, q6, q10
|
| + veor q4, q4, q11
|
| vshr.u64 q10, q1, #4
|
| - vshr.u64 q11, q0, #4
|
| - veor q10, q10, q7
|
| - veor q11, q11, q3
|
| - vand q10, q10, q8
|
| - vand q11, q11, q8
|
| - veor q7, q7, q10
|
| + vshr.u64 q11, q0, #4
|
| + veor q10, q10, q7
|
| + veor q11, q11, q3
|
| + vand q10, q10, q8
|
| + vand q11, q11, q8
|
| + veor q7, q7, q10
|
| vshl.u64 q10, q10, #4
|
| - veor q3, q3, q11
|
| - vshl.u64 q11, q11, #4
|
| - veor q1, q1, q10
|
| - veor q0, q0, q11
|
| + veor q3, q3, q11
|
| + vshl.u64 q11, q11, #4
|
| + veor q1, q1, q10
|
| + veor q0, q0, q11
|
| vldmia r4, {q8} @ last round key
|
| veor q4, q4, q8
|
| veor q6, q6, q8
|
| @@ -999,7 +1010,11 @@ _bsaes_encrypt8_bitslice:
|
| _bsaes_key_convert:
|
| adr r6,_bsaes_key_convert
|
| vld1.8 {q7}, [r4]! @ load round 0 key
|
| +#ifdef __APPLE__
|
| + adr r6,.LM0
|
| +#else
|
| sub r6,r6,#_bsaes_key_convert-.LM0
|
| +#endif
|
| vld1.8 {q15}, [r4]! @ load round 1 key
|
|
|
| vmov.i8 q8, #0x01 @ bit masks
|
| @@ -1042,17 +1057,17 @@ _bsaes_key_convert:
|
| vrev32.8 q15, q15
|
| #endif
|
| subs r5,r5,#1
|
| - vstmia r12!,{q0-q7} @ write bit-sliced round key
|
| + vstmia r12!,{q0,q1,q2,q3,q4,q5,q6,q7} @ write bit-sliced round key
|
| bne .Lkey_loop
|
|
|
| vmov.i8 q7,#0x63 @ compose .L63
|
| @ don't save last round key
|
| bx lr
|
| .size _bsaes_key_convert,.-_bsaes_key_convert
|
| -.extern AES_cbc_encrypt
|
| -.extern AES_decrypt
|
|
|
| -.global bsaes_cbc_encrypt
|
| +
|
| +
|
| +.globl bsaes_cbc_encrypt
|
| .hidden bsaes_cbc_encrypt
|
| .type bsaes_cbc_encrypt,%function
|
| .align 5
|
| @@ -1071,7 +1086,7 @@ bsaes_cbc_encrypt:
|
| @ it is up to the caller to make sure we are called with enc == 0
|
|
|
| mov ip, sp
|
| - stmdb sp!, {r4-r10, lr}
|
| + stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr}
|
| VFP_ABI_PUSH
|
| ldr r8, [ip] @ IV is 1st arg on the stack
|
| mov r2, r2, lsr#4 @ len in 16 byte blocks
|
| @@ -1111,7 +1126,7 @@ bsaes_cbc_encrypt:
|
| vstmia r4, {q7}
|
|
|
| .align 2
|
| -0:
|
| +
|
| #endif
|
|
|
| vld1.8 {q15}, [r8] @ load IV
|
| @@ -1122,33 +1137,33 @@ bsaes_cbc_encrypt:
|
| subs r2, r2, #0x8
|
| bmi .Lcbc_dec_loop_finish
|
|
|
| - vld1.8 {q0-q1}, [r0]! @ load input
|
| - vld1.8 {q2-q3}, [r0]!
|
| + vld1.8 {q0,q1}, [r0]! @ load input
|
| + vld1.8 {q2,q3}, [r0]!
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| mov r4, sp @ pass the key
|
| #else
|
| add r4, r3, #248
|
| #endif
|
| - vld1.8 {q4-q5}, [r0]!
|
| + vld1.8 {q4,q5}, [r0]!
|
| mov r5, r10
|
| - vld1.8 {q6-q7}, [r0]
|
| + vld1.8 {q6,q7}, [r0]
|
| sub r0, r0, #0x60
|
| vstmia r9, {q15} @ put aside IV
|
|
|
| bl _bsaes_decrypt8
|
|
|
| vldmia r9, {q14} @ reload IV
|
| - vld1.8 {q8-q9}, [r0]! @ reload input
|
| + vld1.8 {q8,q9}, [r0]! @ reload input
|
| veor q0, q0, q14 @ ^= IV
|
| - vld1.8 {q10-q11}, [r0]!
|
| + vld1.8 {q10,q11}, [r0]!
|
| veor q1, q1, q8
|
| veor q6, q6, q9
|
| - vld1.8 {q12-q13}, [r0]!
|
| + vld1.8 {q12,q13}, [r0]!
|
| veor q4, q4, q10
|
| veor q2, q2, q11
|
| - vld1.8 {q14-q15}, [r0]!
|
| + vld1.8 {q14,q15}, [r0]!
|
| veor q7, q7, q12
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| veor q3, q3, q13
|
| vst1.8 {q6}, [r1]!
|
| veor q5, q5, q14
|
| @@ -1192,17 +1207,17 @@ bsaes_cbc_encrypt:
|
| bl _bsaes_decrypt8
|
|
|
| vldmia r9, {q14} @ reload IV
|
| - vld1.8 {q8-q9}, [r0]! @ reload input
|
| + vld1.8 {q8,q9}, [r0]! @ reload input
|
| veor q0, q0, q14 @ ^= IV
|
| - vld1.8 {q10-q11}, [r0]!
|
| + vld1.8 {q10,q11}, [r0]!
|
| veor q1, q1, q8
|
| veor q6, q6, q9
|
| - vld1.8 {q12-q13}, [r0]!
|
| + vld1.8 {q12,q13}, [r0]!
|
| veor q4, q4, q10
|
| veor q2, q2, q11
|
| vld1.8 {q15}, [r0]!
|
| veor q7, q7, q12
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| veor q3, q3, q13
|
| vst1.8 {q6}, [r1]!
|
| vst1.8 {q4}, [r1]!
|
| @@ -1215,9 +1230,9 @@ bsaes_cbc_encrypt:
|
| sub r0, r0, #0x60
|
| bl _bsaes_decrypt8
|
| vldmia r9,{q14} @ reload IV
|
| - vld1.8 {q8-q9}, [r0]! @ reload input
|
| + vld1.8 {q8,q9}, [r0]! @ reload input
|
| veor q0, q0, q14 @ ^= IV
|
| - vld1.8 {q10-q11}, [r0]!
|
| + vld1.8 {q10,q11}, [r0]!
|
| veor q1, q1, q8
|
| veor q6, q6, q9
|
| vld1.8 {q12}, [r0]!
|
| @@ -1225,7 +1240,7 @@ bsaes_cbc_encrypt:
|
| veor q2, q2, q11
|
| vld1.8 {q15}, [r0]!
|
| veor q7, q7, q12
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| vst1.8 {q6}, [r1]!
|
| vst1.8 {q4}, [r1]!
|
| vst1.8 {q2}, [r1]!
|
| @@ -1236,14 +1251,14 @@ bsaes_cbc_encrypt:
|
| sub r0, r0, #0x50
|
| bl _bsaes_decrypt8
|
| vldmia r9, {q14} @ reload IV
|
| - vld1.8 {q8-q9}, [r0]! @ reload input
|
| + vld1.8 {q8,q9}, [r0]! @ reload input
|
| veor q0, q0, q14 @ ^= IV
|
| - vld1.8 {q10-q11}, [r0]!
|
| + vld1.8 {q10,q11}, [r0]!
|
| veor q1, q1, q8
|
| veor q6, q6, q9
|
| vld1.8 {q15}, [r0]!
|
| veor q4, q4, q10
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| veor q2, q2, q11
|
| vst1.8 {q6}, [r1]!
|
| vst1.8 {q4}, [r1]!
|
| @@ -1254,14 +1269,14 @@ bsaes_cbc_encrypt:
|
| sub r0, r0, #0x40
|
| bl _bsaes_decrypt8
|
| vldmia r9, {q14} @ reload IV
|
| - vld1.8 {q8-q9}, [r0]! @ reload input
|
| + vld1.8 {q8,q9}, [r0]! @ reload input
|
| veor q0, q0, q14 @ ^= IV
|
| vld1.8 {q10}, [r0]!
|
| veor q1, q1, q8
|
| veor q6, q6, q9
|
| vld1.8 {q15}, [r0]!
|
| veor q4, q4, q10
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| vst1.8 {q6}, [r1]!
|
| vst1.8 {q4}, [r1]!
|
| b .Lcbc_dec_done
|
| @@ -1270,12 +1285,12 @@ bsaes_cbc_encrypt:
|
| sub r0, r0, #0x30
|
| bl _bsaes_decrypt8
|
| vldmia r9, {q14} @ reload IV
|
| - vld1.8 {q8-q9}, [r0]! @ reload input
|
| + vld1.8 {q8,q9}, [r0]! @ reload input
|
| veor q0, q0, q14 @ ^= IV
|
| vld1.8 {q15}, [r0]!
|
| veor q1, q1, q8
|
| veor q6, q6, q9
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| vst1.8 {q6}, [r1]!
|
| b .Lcbc_dec_done
|
| .align 4
|
| @@ -1287,7 +1302,7 @@ bsaes_cbc_encrypt:
|
| veor q0, q0, q14 @ ^= IV
|
| vld1.8 {q15}, [r0]! @ reload input
|
| veor q1, q1, q8
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| b .Lcbc_dec_done
|
| .align 4
|
| .Lcbc_dec_one:
|
| @@ -1307,20 +1322,20 @@ bsaes_cbc_encrypt:
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| vmov.i32 q0, #0
|
| vmov.i32 q1, #0
|
| -.Lcbc_dec_bzero: @ wipe key schedule [if any]
|
| - vstmia sp!, {q0-q1}
|
| - cmp sp, r9
|
| - bne .Lcbc_dec_bzero
|
| +.Lcbc_dec_bzero:@ wipe key schedule [if any]
|
| + vstmia sp!, {q0,q1}
|
| + cmp sp, r9
|
| + bne .Lcbc_dec_bzero
|
| #endif
|
|
|
| mov sp, r9
|
| add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb
|
| vst1.8 {q15}, [r8] @ return IV
|
| VFP_ABI_POP
|
| - ldmia sp!, {r4-r10, pc}
|
| + ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc}
|
| .size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
|
| -.extern AES_encrypt
|
| -.global bsaes_ctr32_encrypt_blocks
|
| +
|
| +.globl bsaes_ctr32_encrypt_blocks
|
| .hidden bsaes_ctr32_encrypt_blocks
|
| .type bsaes_ctr32_encrypt_blocks,%function
|
| .align 5
|
| @@ -1329,7 +1344,7 @@ bsaes_ctr32_encrypt_blocks:
|
| blo .Lctr_enc_short @ small sizes
|
|
|
| mov ip, sp
|
| - stmdb sp!, {r4-r10, lr}
|
| + stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr}
|
| VFP_ABI_PUSH
|
| ldr r8, [ip] @ ctr is 1st arg on the stack
|
| sub sp, sp, #0x10 @ scratch space to carry over the ctr
|
| @@ -1350,7 +1365,12 @@ bsaes_ctr32_encrypt_blocks:
|
| vstmia r12, {q7} @ save last round key
|
|
|
| vld1.8 {q0}, [r8] @ load counter
|
| +#ifdef __APPLE__
|
| + mov r8, #.LREVM0SR-.LM0
|
| + add r8, r6, r8
|
| +#else
|
| add r8, r6, #.LREVM0SR-.LM0 @ borrow r8
|
| +#endif
|
| vldmia sp, {q4} @ load round0 key
|
| #else
|
| ldr r12, [r3, #244]
|
| @@ -1367,7 +1387,7 @@ bsaes_ctr32_encrypt_blocks:
|
| vstmia r12, {q7} @ save last round key
|
|
|
| .align 2
|
| -0: add r12, r3, #248
|
| + add r12, r3, #248
|
| vld1.8 {q0}, [r8] @ load counter
|
| adrl r8, .LREVM0SR @ borrow r8
|
| vldmia r12, {q4} @ load round0 key
|
| @@ -1375,9 +1395,9 @@ bsaes_ctr32_encrypt_blocks:
|
| #endif
|
|
|
| vmov.i32 q8,#1 @ compose 1<<96
|
| - veor q9,q9,q9
|
| + veor q9,q9,q9
|
| vrev32.8 q0,q0
|
| - vext.8 q8,q9,q8,#4
|
| + vext.8 q8,q9,q8,#4
|
| vrev32.8 q4,q4
|
| vadd.u32 q9,q8,q8 @ compose 2<<96
|
| vstmia sp, {q4} @ save adjusted round0 key
|
| @@ -1398,117 +1418,122 @@ bsaes_ctr32_encrypt_blocks:
|
| @ Borrow prologue from _bsaes_encrypt8 to use the opportunity
|
| @ to flip byte order in 32-bit counter
|
|
|
| - vldmia sp, {q9} @ load round0 key
|
| + vldmia sp, {q9} @ load round0 key
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x10 @ pass next round key
|
| + add r4, sp, #0x10 @ pass next round key
|
| #else
|
| - add r4, r3, #264
|
| + add r4, r3, #264
|
| #endif
|
| - vldmia r8, {q8} @ .LREVM0SR
|
| - mov r5, r10 @ pass rounds
|
| - vstmia r9, {q10} @ save next counter
|
| - sub r6, r8, #.LREVM0SR-.LSR @ pass constants
|
| -
|
| - bl _bsaes_encrypt8_alt
|
| -
|
| - subs r2, r2, #8
|
| - blo .Lctr_enc_loop_done
|
| -
|
| - vld1.8 {q8-q9}, [r0]! @ load input
|
| - vld1.8 {q10-q11}, [r0]!
|
| - veor q0, q8
|
| - veor q1, q9
|
| - vld1.8 {q12-q13}, [r0]!
|
| - veor q4, q10
|
| - veor q6, q11
|
| - vld1.8 {q14-q15}, [r0]!
|
| - veor q3, q12
|
| - vst1.8 {q0-q1}, [r1]! @ write output
|
| - veor q7, q13
|
| - veor q2, q14
|
| - vst1.8 {q4}, [r1]!
|
| - veor q5, q15
|
| - vst1.8 {q6}, [r1]!
|
| + vldmia r8, {q8} @ .LREVM0SR
|
| + mov r5, r10 @ pass rounds
|
| + vstmia r9, {q10} @ save next counter
|
| +#ifdef __APPLE__
|
| + mov r6, #.LREVM0SR-.LSR
|
| + sub r6, r8, r6
|
| +#else
|
| + sub r6, r8, #.LREVM0SR-.LSR @ pass constants
|
| +#endif
|
| +
|
| + bl _bsaes_encrypt8_alt
|
| +
|
| + subs r2, r2, #8
|
| + blo .Lctr_enc_loop_done
|
| +
|
| + vld1.8 {q8,q9}, [r0]! @ load input
|
| + vld1.8 {q10,q11}, [r0]!
|
| + veor q0, q8
|
| + veor q1, q9
|
| + vld1.8 {q12,q13}, [r0]!
|
| + veor q4, q10
|
| + veor q6, q11
|
| + vld1.8 {q14,q15}, [r0]!
|
| + veor q3, q12
|
| + vst1.8 {q0,q1}, [r1]! @ write output
|
| + veor q7, q13
|
| + veor q2, q14
|
| + vst1.8 {q4}, [r1]!
|
| + veor q5, q15
|
| + vst1.8 {q6}, [r1]!
|
| vmov.i32 q8, #1 @ compose 1<<96
|
| - vst1.8 {q3}, [r1]!
|
| - veor q9, q9, q9
|
| - vst1.8 {q7}, [r1]!
|
| - vext.8 q8, q9, q8, #4
|
| - vst1.8 {q2}, [r1]!
|
| + vst1.8 {q3}, [r1]!
|
| + veor q9, q9, q9
|
| + vst1.8 {q7}, [r1]!
|
| + vext.8 q8, q9, q8, #4
|
| + vst1.8 {q2}, [r1]!
|
| vadd.u32 q9,q8,q8 @ compose 2<<96
|
| - vst1.8 {q5}, [r1]!
|
| - vldmia r9, {q0} @ load counter
|
| + vst1.8 {q5}, [r1]!
|
| + vldmia r9, {q0} @ load counter
|
|
|
| - bne .Lctr_enc_loop
|
| - b .Lctr_enc_done
|
| + bne .Lctr_enc_loop
|
| + b .Lctr_enc_done
|
|
|
| .align 4
|
| .Lctr_enc_loop_done:
|
| - add r2, r2, #8
|
| - vld1.8 {q8}, [r0]! @ load input
|
| - veor q0, q8
|
| - vst1.8 {q0}, [r1]! @ write output
|
| - cmp r2, #2
|
| - blo .Lctr_enc_done
|
| - vld1.8 {q9}, [r0]!
|
| - veor q1, q9
|
| - vst1.8 {q1}, [r1]!
|
| - beq .Lctr_enc_done
|
| - vld1.8 {q10}, [r0]!
|
| - veor q4, q10
|
| - vst1.8 {q4}, [r1]!
|
| - cmp r2, #4
|
| - blo .Lctr_enc_done
|
| - vld1.8 {q11}, [r0]!
|
| - veor q6, q11
|
| - vst1.8 {q6}, [r1]!
|
| - beq .Lctr_enc_done
|
| - vld1.8 {q12}, [r0]!
|
| - veor q3, q12
|
| - vst1.8 {q3}, [r1]!
|
| - cmp r2, #6
|
| - blo .Lctr_enc_done
|
| - vld1.8 {q13}, [r0]!
|
| - veor q7, q13
|
| - vst1.8 {q7}, [r1]!
|
| - beq .Lctr_enc_done
|
| - vld1.8 {q14}, [r0]
|
| - veor q2, q14
|
| - vst1.8 {q2}, [r1]!
|
| + add r2, r2, #8
|
| + vld1.8 {q8}, [r0]! @ load input
|
| + veor q0, q8
|
| + vst1.8 {q0}, [r1]! @ write output
|
| + cmp r2, #2
|
| + blo .Lctr_enc_done
|
| + vld1.8 {q9}, [r0]!
|
| + veor q1, q9
|
| + vst1.8 {q1}, [r1]!
|
| + beq .Lctr_enc_done
|
| + vld1.8 {q10}, [r0]!
|
| + veor q4, q10
|
| + vst1.8 {q4}, [r1]!
|
| + cmp r2, #4
|
| + blo .Lctr_enc_done
|
| + vld1.8 {q11}, [r0]!
|
| + veor q6, q11
|
| + vst1.8 {q6}, [r1]!
|
| + beq .Lctr_enc_done
|
| + vld1.8 {q12}, [r0]!
|
| + veor q3, q12
|
| + vst1.8 {q3}, [r1]!
|
| + cmp r2, #6
|
| + blo .Lctr_enc_done
|
| + vld1.8 {q13}, [r0]!
|
| + veor q7, q13
|
| + vst1.8 {q7}, [r1]!
|
| + beq .Lctr_enc_done
|
| + vld1.8 {q14}, [r0]
|
| + veor q2, q14
|
| + vst1.8 {q2}, [r1]!
|
|
|
| .Lctr_enc_done:
|
| vmov.i32 q0, #0
|
| vmov.i32 q1, #0
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| -.Lctr_enc_bzero: @ wipe key schedule [if any]
|
| - vstmia sp!, {q0-q1}
|
| - cmp sp, r9
|
| - bne .Lctr_enc_bzero
|
| +.Lctr_enc_bzero:@ wipe key schedule [if any]
|
| + vstmia sp!, {q0,q1}
|
| + cmp sp, r9
|
| + bne .Lctr_enc_bzero
|
| #else
|
| - vstmia sp, {q0-q1}
|
| + vstmia sp, {q0,q1}
|
| #endif
|
|
|
| mov sp, r9
|
| add sp, #0x10 @ add sp,r9,#0x10 is no good for thumb
|
| VFP_ABI_POP
|
| - ldmia sp!, {r4-r10, pc} @ return
|
| + ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return
|
|
|
| .align 4
|
| .Lctr_enc_short:
|
| ldr ip, [sp] @ ctr pointer is passed on stack
|
| - stmdb sp!, {r4-r8, lr}
|
| + stmdb sp!, {r4,r5,r6,r7,r8, lr}
|
|
|
| mov r4, r0 @ copy arguments
|
| mov r5, r1
|
| mov r6, r2
|
| mov r7, r3
|
| - ldr r8, [ip, #12] @ load counter LSW
|
| + ldr r8, [ip, #12] @ load counter .LSW
|
| vld1.8 {q1}, [ip] @ load whole counter value
|
| #ifdef __ARMEL__
|
| rev r8, r8
|
| #endif
|
| sub sp, sp, #0x10
|
| - vst1.8 {q1}, [sp,:64] @ copy counter value
|
| + vst1.8 {q1}, [sp] @ copy counter value
|
| sub sp, sp, #0x10
|
|
|
| .Lctr_enc_short_loop:
|
| @@ -1519,7 +1544,7 @@ bsaes_ctr32_encrypt_blocks:
|
| bl AES_encrypt
|
|
|
| vld1.8 {q0}, [r4]! @ load input
|
| - vld1.8 {q1}, [sp,:64] @ load encrypted counter
|
| + vld1.8 {q1}, [sp] @ load encrypted counter
|
| add r8, r8, #1
|
| #ifdef __ARMEL__
|
| rev r0, r8
|
| @@ -1534,9 +1559,9 @@ bsaes_ctr32_encrypt_blocks:
|
|
|
| vmov.i32 q0, #0
|
| vmov.i32 q1, #0
|
| - vstmia sp!, {q0-q1}
|
| + vstmia sp!, {q0,q1}
|
|
|
| - ldmia sp!, {r4-r8, pc}
|
| + ldmia sp!, {r4,r5,r6,r7,r8, pc}
|
| .size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
|
| .globl bsaes_xts_encrypt
|
| .hidden bsaes_xts_encrypt
|
| @@ -1544,7 +1569,7 @@ bsaes_ctr32_encrypt_blocks:
|
| .align 4
|
| bsaes_xts_encrypt:
|
| mov ip, sp
|
| - stmdb sp!, {r4-r10, lr} @ 0x20
|
| + stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} @ 0x20
|
| VFP_ABI_PUSH
|
| mov r6, sp @ future r3
|
|
|
| @@ -1598,7 +1623,7 @@ bsaes_xts_encrypt:
|
| vstmia r12, {q7}
|
|
|
| .align 2
|
| -0: sub sp, #0x90 @ place for tweak[9]
|
| + sub sp, #0x90 @ place for tweak[9]
|
| #endif
|
|
|
| vld1.8 {q8}, [r0] @ initial tweak
|
| @@ -1610,422 +1635,422 @@ bsaes_xts_encrypt:
|
|
|
| .align 4
|
| .Lxts_enc_loop:
|
| - vldmia r2, {q5} @ load XTS magic
|
| + vldmia r2, {q5} @ load XTS magic
|
| vshr.s64 q6, q8, #63
|
| - mov r0, sp
|
| - vand q6, q6, q5
|
| + mov r0, sp
|
| + vand q6, q6, q5
|
| vadd.u64 q9, q8, q8
|
| - vst1.64 {q8}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q8}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q9, #63
|
| - veor q9, q9, q6
|
| - vand q7, q7, q5
|
| + veor q9, q9, q6
|
| + vand q7, q7, q5
|
| vadd.u64 q10, q9, q9
|
| - vst1.64 {q9}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q9}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q10, #63
|
| - veor q10, q10, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q0}, [r7]!
|
| + veor q10, q10, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q0}, [r7]!
|
| vadd.u64 q11, q10, q10
|
| - vst1.64 {q10}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q10}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q11, #63
|
| - veor q11, q11, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q1}, [r7]!
|
| - veor q0, q0, q8
|
| + veor q11, q11, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q1}, [r7]!
|
| + veor q0, q0, q8
|
| vadd.u64 q12, q11, q11
|
| - vst1.64 {q11}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q11}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q12, #63
|
| - veor q12, q12, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q2}, [r7]!
|
| - veor q1, q1, q9
|
| + veor q12, q12, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q2}, [r7]!
|
| + veor q1, q1, q9
|
| vadd.u64 q13, q12, q12
|
| - vst1.64 {q12}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q12}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q13, #63
|
| - veor q13, q13, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q3}, [r7]!
|
| - veor q2, q2, q10
|
| + veor q13, q13, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q3}, [r7]!
|
| + veor q2, q2, q10
|
| vadd.u64 q14, q13, q13
|
| - vst1.64 {q13}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q13}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q14, #63
|
| - veor q14, q14, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q4}, [r7]!
|
| - veor q3, q3, q11
|
| + veor q14, q14, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q4}, [r7]!
|
| + veor q3, q3, q11
|
| vadd.u64 q15, q14, q14
|
| - vst1.64 {q14}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q14}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q15, #63
|
| - veor q15, q15, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q5}, [r7]!
|
| - veor q4, q4, q12
|
| + veor q15, q15, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q5}, [r7]!
|
| + veor q4, q4, q12
|
| vadd.u64 q8, q15, q15
|
| - vst1.64 {q15}, [r0,:128]!
|
| - vswp d15,d14
|
| - veor q8, q8, q7
|
| - vst1.64 {q8}, [r0,:128] @ next round tweak
|
| + vst1.64 {q15}, [r0,:128]!
|
| + vswp d15,d14
|
| + veor q8, q8, q7
|
| + vst1.64 {q8}, [r0,:128] @ next round tweak
|
|
|
| - vld1.8 {q6-q7}, [r7]!
|
| - veor q5, q5, q13
|
| + vld1.8 {q6,q7}, [r7]!
|
| + veor q5, q5, q13
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q6, q6, q14
|
| - mov r5, r1 @ pass rounds
|
| - veor q7, q7, q15
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_encrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12-q13}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q4, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q6, q11
|
| - vld1.64 {q14-q15}, [r0,:128]!
|
| - veor q10, q3, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - veor q11, q7, q13
|
| - veor q12, q2, q14
|
| - vst1.8 {q10-q11}, [r8]!
|
| - veor q13, q5, q15
|
| - vst1.8 {q12-q13}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| -
|
| - subs r9, #0x80
|
| - bpl .Lxts_enc_loop
|
| + veor q6, q6, q14
|
| + mov r5, r1 @ pass rounds
|
| + veor q7, q7, q15
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_encrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12,q13}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q4, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q6, q11
|
| + vld1.64 {q14,q15}, [r0,:128]!
|
| + veor q10, q3, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + veor q11, q7, q13
|
| + veor q12, q2, q14
|
| + vst1.8 {q10,q11}, [r8]!
|
| + veor q13, q5, q15
|
| + vst1.8 {q12,q13}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| +
|
| + subs r9, #0x80
|
| + bpl .Lxts_enc_loop
|
|
|
| .Lxts_enc_short:
|
| - adds r9, #0x70
|
| - bmi .Lxts_enc_done
|
| + adds r9, #0x70
|
| + bmi .Lxts_enc_done
|
|
|
| - vldmia r2, {q5} @ load XTS magic
|
| + vldmia r2, {q5} @ load XTS magic
|
| vshr.s64 q7, q8, #63
|
| - mov r0, sp
|
| - vand q7, q7, q5
|
| + mov r0, sp
|
| + vand q7, q7, q5
|
| vadd.u64 q9, q8, q8
|
| - vst1.64 {q8}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q8}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q9, #63
|
| - veor q9, q9, q7
|
| - vand q6, q6, q5
|
| + veor q9, q9, q7
|
| + vand q6, q6, q5
|
| vadd.u64 q10, q9, q9
|
| - vst1.64 {q9}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q9}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q10, #63
|
| - veor q10, q10, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q0}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_enc_1
|
| + veor q10, q10, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q0}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_enc_1
|
| vadd.u64 q11, q10, q10
|
| - vst1.64 {q10}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q10}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q11, #63
|
| - veor q11, q11, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q1}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_enc_2
|
| - veor q0, q0, q8
|
| + veor q11, q11, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q1}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_enc_2
|
| + veor q0, q0, q8
|
| vadd.u64 q12, q11, q11
|
| - vst1.64 {q11}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q11}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q12, #63
|
| - veor q12, q12, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q2}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_enc_3
|
| - veor q1, q1, q9
|
| + veor q12, q12, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q2}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_enc_3
|
| + veor q1, q1, q9
|
| vadd.u64 q13, q12, q12
|
| - vst1.64 {q12}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q12}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q13, #63
|
| - veor q13, q13, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q3}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_enc_4
|
| - veor q2, q2, q10
|
| + veor q13, q13, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q3}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_enc_4
|
| + veor q2, q2, q10
|
| vadd.u64 q14, q13, q13
|
| - vst1.64 {q13}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q13}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q14, #63
|
| - veor q14, q14, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q4}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_enc_5
|
| - veor q3, q3, q11
|
| + veor q14, q14, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q4}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_enc_5
|
| + veor q3, q3, q11
|
| vadd.u64 q15, q14, q14
|
| - vst1.64 {q14}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q14}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q15, #63
|
| - veor q15, q15, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q5}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_enc_6
|
| - veor q4, q4, q12
|
| - sub r9, #0x10
|
| - vst1.64 {q15}, [r0,:128] @ next round tweak
|
| -
|
| - vld1.8 {q6}, [r7]!
|
| - veor q5, q5, q13
|
| + veor q15, q15, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q5}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_enc_6
|
| + veor q4, q4, q12
|
| + sub r9, #0x10
|
| + vst1.64 {q15}, [r0,:128] @ next round tweak
|
| +
|
| + vld1.8 {q6}, [r7]!
|
| + veor q5, q5, q13
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q6, q6, q14
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_encrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12-q13}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q4, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q6, q11
|
| - vld1.64 {q14}, [r0,:128]!
|
| - veor q10, q3, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - veor q11, q7, q13
|
| - veor q12, q2, q14
|
| - vst1.8 {q10-q11}, [r8]!
|
| - vst1.8 {q12}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_enc_done
|
| + veor q6, q6, q14
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_encrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12,q13}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q4, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q6, q11
|
| + vld1.64 {q14}, [r0,:128]!
|
| + veor q10, q3, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + veor q11, q7, q13
|
| + veor q12, q2, q14
|
| + vst1.8 {q10,q11}, [r8]!
|
| + vst1.8 {q12}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_enc_done
|
| .align 4
|
| .Lxts_enc_6:
|
| - vst1.64 {q14}, [r0,:128] @ next round tweak
|
| + vst1.64 {q14}, [r0,:128] @ next round tweak
|
|
|
| - veor q4, q4, q12
|
| + veor q4, q4, q12
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q5, q5, q13
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_encrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12-q13}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q4, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q6, q11
|
| - veor q10, q3, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - veor q11, q7, q13
|
| - vst1.8 {q10-q11}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_enc_done
|
| + veor q5, q5, q13
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_encrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12,q13}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q4, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q6, q11
|
| + veor q10, q3, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + veor q11, q7, q13
|
| + vst1.8 {q10,q11}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_enc_done
|
|
|
| @ put this in range for both ARM and Thumb mode adr instructions
|
| .align 5
|
| .Lxts_magic:
|
| - .quad 1, 0x87
|
| +.quad 1, 0x87
|
|
|
| .align 5
|
| .Lxts_enc_5:
|
| - vst1.64 {q13}, [r0,:128] @ next round tweak
|
| + vst1.64 {q13}, [r0,:128] @ next round tweak
|
|
|
| - veor q3, q3, q11
|
| + veor q3, q3, q11
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q4, q4, q12
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_encrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q4, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q6, q11
|
| - veor q10, q3, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - vst1.8 {q10}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_enc_done
|
| + veor q4, q4, q12
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_encrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q4, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q6, q11
|
| + veor q10, q3, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + vst1.8 {q10}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_enc_done
|
| .align 4
|
| .Lxts_enc_4:
|
| - vst1.64 {q12}, [r0,:128] @ next round tweak
|
| + vst1.64 {q12}, [r0,:128] @ next round tweak
|
|
|
| - veor q2, q2, q10
|
| + veor q2, q2, q10
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q3, q3, q11
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_encrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - veor q1, q1, q9
|
| - veor q8, q4, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q6, q11
|
| - vst1.8 {q8-q9}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_enc_done
|
| + veor q3, q3, q11
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_encrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + veor q1, q1, q9
|
| + veor q8, q4, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q6, q11
|
| + vst1.8 {q8,q9}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_enc_done
|
| .align 4
|
| .Lxts_enc_3:
|
| - vst1.64 {q11}, [r0,:128] @ next round tweak
|
| + vst1.64 {q11}, [r0,:128] @ next round tweak
|
|
|
| - veor q1, q1, q9
|
| + veor q1, q1, q9
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q2, q2, q10
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_encrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - veor q1, q1, q9
|
| - veor q8, q4, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - vst1.8 {q8}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_enc_done
|
| + veor q2, q2, q10
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_encrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + veor q1, q1, q9
|
| + veor q8, q4, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + vst1.8 {q8}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_enc_done
|
| .align 4
|
| .Lxts_enc_2:
|
| - vst1.64 {q10}, [r0,:128] @ next round tweak
|
| + vst1.64 {q10}, [r0,:128] @ next round tweak
|
|
|
| - veor q0, q0, q8
|
| + veor q0, q0, q8
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q1, q1, q9
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| + veor q1, q1, q9
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
|
|
| - bl _bsaes_encrypt8
|
| + bl _bsaes_encrypt8
|
|
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - veor q1, q1, q9
|
| - vst1.8 {q0-q1}, [r8]!
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + veor q1, q1, q9
|
| + vst1.8 {q0,q1}, [r8]!
|
|
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_enc_done
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_enc_done
|
| .align 4
|
| .Lxts_enc_1:
|
| - mov r0, sp
|
| - veor q0, q8
|
| - mov r1, sp
|
| - vst1.8 {q0}, [sp,:128]
|
| - mov r2, r10
|
| - mov r4, r3 @ preserve fp
|
| + mov r0, sp
|
| + veor q0, q8
|
| + mov r1, sp
|
| + vst1.8 {q0}, [sp,:128]
|
| + mov r2, r10
|
| + mov r4, r3 @ preserve fp
|
|
|
| - bl AES_encrypt
|
| + bl AES_encrypt
|
|
|
| - vld1.8 {q0}, [sp,:128]
|
| - veor q0, q0, q8
|
| - vst1.8 {q0}, [r8]!
|
| - mov r3, r4
|
| + vld1.8 {q0}, [sp,:128]
|
| + veor q0, q0, q8
|
| + vst1.8 {q0}, [r8]!
|
| + mov r3, r4
|
|
|
| - vmov q8, q9 @ next round tweak
|
| + vmov q8, q9 @ next round tweak
|
|
|
| .Lxts_enc_done:
|
| #ifndef XTS_CHAIN_TWEAK
|
| - adds r9, #0x10
|
| - beq .Lxts_enc_ret
|
| - sub r6, r8, #0x10
|
| + adds r9, #0x10
|
| + beq .Lxts_enc_ret
|
| + sub r6, r8, #0x10
|
|
|
| .Lxts_enc_steal:
|
| - ldrb r0, [r7], #1
|
| - ldrb r1, [r8, #-0x10]
|
| - strb r0, [r8, #-0x10]
|
| - strb r1, [r8], #1
|
| -
|
| - subs r9, #1
|
| - bhi .Lxts_enc_steal
|
| -
|
| - vld1.8 {q0}, [r6]
|
| - mov r0, sp
|
| - veor q0, q0, q8
|
| - mov r1, sp
|
| - vst1.8 {q0}, [sp,:128]
|
| - mov r2, r10
|
| - mov r4, r3 @ preserve fp
|
| -
|
| - bl AES_encrypt
|
| -
|
| - vld1.8 {q0}, [sp,:128]
|
| - veor q0, q0, q8
|
| - vst1.8 {q0}, [r6]
|
| - mov r3, r4
|
| + ldrb r0, [r7], #1
|
| + ldrb r1, [r8, #-0x10]
|
| + strb r0, [r8, #-0x10]
|
| + strb r1, [r8], #1
|
| +
|
| + subs r9, #1
|
| + bhi .Lxts_enc_steal
|
| +
|
| + vld1.8 {q0}, [r6]
|
| + mov r0, sp
|
| + veor q0, q0, q8
|
| + mov r1, sp
|
| + vst1.8 {q0}, [sp,:128]
|
| + mov r2, r10
|
| + mov r4, r3 @ preserve fp
|
| +
|
| + bl AES_encrypt
|
| +
|
| + vld1.8 {q0}, [sp,:128]
|
| + veor q0, q0, q8
|
| + vst1.8 {q0}, [r6]
|
| + mov r3, r4
|
| #endif
|
|
|
| .Lxts_enc_ret:
|
| - bic r0, r3, #0xf
|
| + bic r0, r3, #0xf
|
| vmov.i32 q0, #0
|
| vmov.i32 q1, #0
|
| #ifdef XTS_CHAIN_TWEAK
|
| - ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak
|
| + ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak
|
| #endif
|
| -.Lxts_enc_bzero: @ wipe key schedule [if any]
|
| - vstmia sp!, {q0-q1}
|
| - cmp sp, r0
|
| - bne .Lxts_enc_bzero
|
| +.Lxts_enc_bzero:@ wipe key schedule [if any]
|
| + vstmia sp!, {q0,q1}
|
| + cmp sp, r0
|
| + bne .Lxts_enc_bzero
|
|
|
| - mov sp, r3
|
| + mov sp, r3
|
| #ifdef XTS_CHAIN_TWEAK
|
| - vst1.8 {q8}, [r1]
|
| + vst1.8 {q8}, [r1]
|
| #endif
|
| VFP_ABI_POP
|
| - ldmia sp!, {r4-r10, pc} @ return
|
| + ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return
|
|
|
| .size bsaes_xts_encrypt,.-bsaes_xts_encrypt
|
|
|
| @@ -2035,7 +2060,7 @@ bsaes_xts_encrypt:
|
| .align 4
|
| bsaes_xts_decrypt:
|
| mov ip, sp
|
| - stmdb sp!, {r4-r10, lr} @ 0x20
|
| + stmdb sp!, {r4,r5,r6,r7,r8,r9,r10, lr} @ 0x20
|
| VFP_ABI_PUSH
|
| mov r6, sp @ future r3
|
|
|
| @@ -2095,14 +2120,16 @@ bsaes_xts_decrypt:
|
| vstmia r4, {q7}
|
|
|
| .align 2
|
| -0: sub sp, #0x90 @ place for tweak[9]
|
| + sub sp, #0x90 @ place for tweak[9]
|
| #endif
|
| vld1.8 {q8}, [r0] @ initial tweak
|
| adr r2, .Lxts_magic
|
|
|
| +#ifndef XTS_CHAIN_TWEAK
|
| tst r9, #0xf @ if not multiple of 16
|
| it ne @ Thumb2 thing, sanity check in ARM
|
| subne r9, #0x10 @ subtract another 16 bytes
|
| +#endif
|
| subs r9, #0x80
|
|
|
| blo .Lxts_dec_short
|
| @@ -2110,440 +2137,440 @@ bsaes_xts_decrypt:
|
|
|
| .align 4
|
| .Lxts_dec_loop:
|
| - vldmia r2, {q5} @ load XTS magic
|
| + vldmia r2, {q5} @ load XTS magic
|
| vshr.s64 q6, q8, #63
|
| - mov r0, sp
|
| - vand q6, q6, q5
|
| + mov r0, sp
|
| + vand q6, q6, q5
|
| vadd.u64 q9, q8, q8
|
| - vst1.64 {q8}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q8}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q9, #63
|
| - veor q9, q9, q6
|
| - vand q7, q7, q5
|
| + veor q9, q9, q6
|
| + vand q7, q7, q5
|
| vadd.u64 q10, q9, q9
|
| - vst1.64 {q9}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q9}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q10, #63
|
| - veor q10, q10, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q0}, [r7]!
|
| + veor q10, q10, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q0}, [r7]!
|
| vadd.u64 q11, q10, q10
|
| - vst1.64 {q10}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q10}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q11, #63
|
| - veor q11, q11, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q1}, [r7]!
|
| - veor q0, q0, q8
|
| + veor q11, q11, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q1}, [r7]!
|
| + veor q0, q0, q8
|
| vadd.u64 q12, q11, q11
|
| - vst1.64 {q11}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q11}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q12, #63
|
| - veor q12, q12, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q2}, [r7]!
|
| - veor q1, q1, q9
|
| + veor q12, q12, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q2}, [r7]!
|
| + veor q1, q1, q9
|
| vadd.u64 q13, q12, q12
|
| - vst1.64 {q12}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q12}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q13, #63
|
| - veor q13, q13, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q3}, [r7]!
|
| - veor q2, q2, q10
|
| + veor q13, q13, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q3}, [r7]!
|
| + veor q2, q2, q10
|
| vadd.u64 q14, q13, q13
|
| - vst1.64 {q13}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q13}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q14, #63
|
| - veor q14, q14, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q4}, [r7]!
|
| - veor q3, q3, q11
|
| + veor q14, q14, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q4}, [r7]!
|
| + veor q3, q3, q11
|
| vadd.u64 q15, q14, q14
|
| - vst1.64 {q14}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q14}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q15, #63
|
| - veor q15, q15, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q5}, [r7]!
|
| - veor q4, q4, q12
|
| + veor q15, q15, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q5}, [r7]!
|
| + veor q4, q4, q12
|
| vadd.u64 q8, q15, q15
|
| - vst1.64 {q15}, [r0,:128]!
|
| - vswp d15,d14
|
| - veor q8, q8, q7
|
| - vst1.64 {q8}, [r0,:128] @ next round tweak
|
| + vst1.64 {q15}, [r0,:128]!
|
| + vswp d15,d14
|
| + veor q8, q8, q7
|
| + vst1.64 {q8}, [r0,:128] @ next round tweak
|
|
|
| - vld1.8 {q6-q7}, [r7]!
|
| - veor q5, q5, q13
|
| + vld1.8 {q6,q7}, [r7]!
|
| + veor q5, q5, q13
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q6, q6, q14
|
| - mov r5, r1 @ pass rounds
|
| - veor q7, q7, q15
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_decrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12-q13}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q6, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q4, q11
|
| - vld1.64 {q14-q15}, [r0,:128]!
|
| - veor q10, q2, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - veor q11, q7, q13
|
| - veor q12, q3, q14
|
| - vst1.8 {q10-q11}, [r8]!
|
| - veor q13, q5, q15
|
| - vst1.8 {q12-q13}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| -
|
| - subs r9, #0x80
|
| - bpl .Lxts_dec_loop
|
| + veor q6, q6, q14
|
| + mov r5, r1 @ pass rounds
|
| + veor q7, q7, q15
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_decrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12,q13}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q6, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q4, q11
|
| + vld1.64 {q14,q15}, [r0,:128]!
|
| + veor q10, q2, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + veor q11, q7, q13
|
| + veor q12, q3, q14
|
| + vst1.8 {q10,q11}, [r8]!
|
| + veor q13, q5, q15
|
| + vst1.8 {q12,q13}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| +
|
| + subs r9, #0x80
|
| + bpl .Lxts_dec_loop
|
|
|
| .Lxts_dec_short:
|
| - adds r9, #0x70
|
| - bmi .Lxts_dec_done
|
| + adds r9, #0x70
|
| + bmi .Lxts_dec_done
|
|
|
| - vldmia r2, {q5} @ load XTS magic
|
| + vldmia r2, {q5} @ load XTS magic
|
| vshr.s64 q7, q8, #63
|
| - mov r0, sp
|
| - vand q7, q7, q5
|
| + mov r0, sp
|
| + vand q7, q7, q5
|
| vadd.u64 q9, q8, q8
|
| - vst1.64 {q8}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q8}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q9, #63
|
| - veor q9, q9, q7
|
| - vand q6, q6, q5
|
| + veor q9, q9, q7
|
| + vand q6, q6, q5
|
| vadd.u64 q10, q9, q9
|
| - vst1.64 {q9}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q9}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q10, #63
|
| - veor q10, q10, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q0}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_dec_1
|
| + veor q10, q10, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q0}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_dec_1
|
| vadd.u64 q11, q10, q10
|
| - vst1.64 {q10}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q10}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q11, #63
|
| - veor q11, q11, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q1}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_dec_2
|
| - veor q0, q0, q8
|
| + veor q11, q11, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q1}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_dec_2
|
| + veor q0, q0, q8
|
| vadd.u64 q12, q11, q11
|
| - vst1.64 {q11}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q11}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q12, #63
|
| - veor q12, q12, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q2}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_dec_3
|
| - veor q1, q1, q9
|
| + veor q12, q12, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q2}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_dec_3
|
| + veor q1, q1, q9
|
| vadd.u64 q13, q12, q12
|
| - vst1.64 {q12}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q12}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q13, #63
|
| - veor q13, q13, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q3}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_dec_4
|
| - veor q2, q2, q10
|
| + veor q13, q13, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q3}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_dec_4
|
| + veor q2, q2, q10
|
| vadd.u64 q14, q13, q13
|
| - vst1.64 {q13}, [r0,:128]!
|
| - vswp d13,d12
|
| + vst1.64 {q13}, [r0,:128]!
|
| + vswp d13,d12
|
| vshr.s64 q7, q14, #63
|
| - veor q14, q14, q6
|
| - vand q7, q7, q5
|
| - vld1.8 {q4}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_dec_5
|
| - veor q3, q3, q11
|
| + veor q14, q14, q6
|
| + vand q7, q7, q5
|
| + vld1.8 {q4}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_dec_5
|
| + veor q3, q3, q11
|
| vadd.u64 q15, q14, q14
|
| - vst1.64 {q14}, [r0,:128]!
|
| - vswp d15,d14
|
| + vst1.64 {q14}, [r0,:128]!
|
| + vswp d15,d14
|
| vshr.s64 q6, q15, #63
|
| - veor q15, q15, q7
|
| - vand q6, q6, q5
|
| - vld1.8 {q5}, [r7]!
|
| - subs r9, #0x10
|
| - bmi .Lxts_dec_6
|
| - veor q4, q4, q12
|
| - sub r9, #0x10
|
| - vst1.64 {q15}, [r0,:128] @ next round tweak
|
| -
|
| - vld1.8 {q6}, [r7]!
|
| - veor q5, q5, q13
|
| + veor q15, q15, q7
|
| + vand q6, q6, q5
|
| + vld1.8 {q5}, [r7]!
|
| + subs r9, #0x10
|
| + bmi .Lxts_dec_6
|
| + veor q4, q4, q12
|
| + sub r9, #0x10
|
| + vst1.64 {q15}, [r0,:128] @ next round tweak
|
| +
|
| + vld1.8 {q6}, [r7]!
|
| + veor q5, q5, q13
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q6, q6, q14
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_decrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12-q13}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q6, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q4, q11
|
| - vld1.64 {q14}, [r0,:128]!
|
| - veor q10, q2, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - veor q11, q7, q13
|
| - veor q12, q3, q14
|
| - vst1.8 {q10-q11}, [r8]!
|
| - vst1.8 {q12}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_dec_done
|
| + veor q6, q6, q14
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_decrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12,q13}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q6, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q4, q11
|
| + vld1.64 {q14}, [r0,:128]!
|
| + veor q10, q2, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + veor q11, q7, q13
|
| + veor q12, q3, q14
|
| + vst1.8 {q10,q11}, [r8]!
|
| + vst1.8 {q12}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_dec_done
|
| .align 4
|
| .Lxts_dec_6:
|
| - vst1.64 {q14}, [r0,:128] @ next round tweak
|
| + vst1.64 {q14}, [r0,:128] @ next round tweak
|
|
|
| - veor q4, q4, q12
|
| + veor q4, q4, q12
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q5, q5, q13
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_decrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12-q13}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q6, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q4, q11
|
| - veor q10, q2, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - veor q11, q7, q13
|
| - vst1.8 {q10-q11}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_dec_done
|
| + veor q5, q5, q13
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_decrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12,q13}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q6, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q4, q11
|
| + veor q10, q2, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + veor q11, q7, q13
|
| + vst1.8 {q10,q11}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_dec_done
|
| .align 4
|
| .Lxts_dec_5:
|
| - vst1.64 {q13}, [r0,:128] @ next round tweak
|
| + vst1.64 {q13}, [r0,:128] @ next round tweak
|
|
|
| - veor q3, q3, q11
|
| + veor q3, q3, q11
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q4, q4, q12
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_decrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - vld1.64 {q12}, [r0,:128]!
|
| - veor q1, q1, q9
|
| - veor q8, q6, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q4, q11
|
| - veor q10, q2, q12
|
| - vst1.8 {q8-q9}, [r8]!
|
| - vst1.8 {q10}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_dec_done
|
| + veor q4, q4, q12
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_decrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + vld1.64 {q12}, [r0,:128]!
|
| + veor q1, q1, q9
|
| + veor q8, q6, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q4, q11
|
| + veor q10, q2, q12
|
| + vst1.8 {q8,q9}, [r8]!
|
| + vst1.8 {q10}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_dec_done
|
| .align 4
|
| .Lxts_dec_4:
|
| - vst1.64 {q12}, [r0,:128] @ next round tweak
|
| + vst1.64 {q12}, [r0,:128] @ next round tweak
|
|
|
| - veor q2, q2, q10
|
| + veor q2, q2, q10
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q3, q3, q11
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_decrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10-q11}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - veor q1, q1, q9
|
| - veor q8, q6, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - veor q9, q4, q11
|
| - vst1.8 {q8-q9}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_dec_done
|
| + veor q3, q3, q11
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_decrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10,q11}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + veor q1, q1, q9
|
| + veor q8, q6, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + veor q9, q4, q11
|
| + vst1.8 {q8,q9}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_dec_done
|
| .align 4
|
| .Lxts_dec_3:
|
| - vst1.64 {q11}, [r0,:128] @ next round tweak
|
| + vst1.64 {q11}, [r0,:128] @ next round tweak
|
|
|
| - veor q1, q1, q9
|
| + veor q1, q1, q9
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q2, q2, q10
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| -
|
| - bl _bsaes_decrypt8
|
| -
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - vld1.64 {q10}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - veor q1, q1, q9
|
| - veor q8, q6, q10
|
| - vst1.8 {q0-q1}, [r8]!
|
| - vst1.8 {q8}, [r8]!
|
| -
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_dec_done
|
| + veor q2, q2, q10
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
| +
|
| + bl _bsaes_decrypt8
|
| +
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + vld1.64 {q10}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + veor q1, q1, q9
|
| + veor q8, q6, q10
|
| + vst1.8 {q0,q1}, [r8]!
|
| + vst1.8 {q8}, [r8]!
|
| +
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_dec_done
|
| .align 4
|
| .Lxts_dec_2:
|
| - vst1.64 {q10}, [r0,:128] @ next round tweak
|
| + vst1.64 {q10}, [r0,:128] @ next round tweak
|
|
|
| - veor q0, q0, q8
|
| + veor q0, q0, q8
|
| #ifndef BSAES_ASM_EXTENDED_KEY
|
| - add r4, sp, #0x90 @ pass key schedule
|
| + add r4, sp, #0x90 @ pass key schedule
|
| #else
|
| - add r4, r10, #248 @ pass key schedule
|
| + add r4, r10, #248 @ pass key schedule
|
| #endif
|
| - veor q1, q1, q9
|
| - mov r5, r1 @ pass rounds
|
| - mov r0, sp
|
| + veor q1, q1, q9
|
| + mov r5, r1 @ pass rounds
|
| + mov r0, sp
|
|
|
| - bl _bsaes_decrypt8
|
| + bl _bsaes_decrypt8
|
|
|
| - vld1.64 {q8-q9}, [r0,:128]!
|
| - veor q0, q0, q8
|
| - veor q1, q1, q9
|
| - vst1.8 {q0-q1}, [r8]!
|
| + vld1.64 {q8,q9}, [r0,:128]!
|
| + veor q0, q0, q8
|
| + veor q1, q1, q9
|
| + vst1.8 {q0,q1}, [r8]!
|
|
|
| - vld1.64 {q8}, [r0,:128] @ next round tweak
|
| - b .Lxts_dec_done
|
| + vld1.64 {q8}, [r0,:128] @ next round tweak
|
| + b .Lxts_dec_done
|
| .align 4
|
| .Lxts_dec_1:
|
| - mov r0, sp
|
| - veor q0, q8
|
| - mov r1, sp
|
| - vst1.8 {q0}, [sp,:128]
|
| - mov r2, r10
|
| - mov r4, r3 @ preserve fp
|
| - mov r5, r2 @ preserve magic
|
| + mov r0, sp
|
| + veor q0, q8
|
| + mov r1, sp
|
| + vst1.8 {q0}, [sp,:128]
|
| + mov r2, r10
|
| + mov r4, r3 @ preserve fp
|
| + mov r5, r2 @ preserve magic
|
|
|
| - bl AES_decrypt
|
| + bl AES_decrypt
|
|
|
| - vld1.8 {q0}, [sp,:128]
|
| - veor q0, q0, q8
|
| - vst1.8 {q0}, [r8]!
|
| - mov r3, r4
|
| - mov r2, r5
|
| + vld1.8 {q0}, [sp,:128]
|
| + veor q0, q0, q8
|
| + vst1.8 {q0}, [r8]!
|
| + mov r3, r4
|
| + mov r2, r5
|
|
|
| - vmov q8, q9 @ next round tweak
|
| + vmov q8, q9 @ next round tweak
|
|
|
| .Lxts_dec_done:
|
| #ifndef XTS_CHAIN_TWEAK
|
| - adds r9, #0x10
|
| - beq .Lxts_dec_ret
|
| + adds r9, #0x10
|
| + beq .Lxts_dec_ret
|
|
|
| @ calculate one round of extra tweak for the stolen ciphertext
|
| - vldmia r2, {q5}
|
| + vldmia r2, {q5}
|
| vshr.s64 q6, q8, #63
|
| - vand q6, q6, q5
|
| + vand q6, q6, q5
|
| vadd.u64 q9, q8, q8
|
| - vswp d13,d12
|
| - veor q9, q9, q6
|
| + vswp d13,d12
|
| + veor q9, q9, q6
|
|
|
| @ perform the final decryption with the last tweak value
|
| - vld1.8 {q0}, [r7]!
|
| - mov r0, sp
|
| - veor q0, q0, q9
|
| - mov r1, sp
|
| - vst1.8 {q0}, [sp,:128]
|
| - mov r2, r10
|
| - mov r4, r3 @ preserve fp
|
| + vld1.8 {q0}, [r7]!
|
| + mov r0, sp
|
| + veor q0, q0, q9
|
| + mov r1, sp
|
| + vst1.8 {q0}, [sp,:128]
|
| + mov r2, r10
|
| + mov r4, r3 @ preserve fp
|
|
|
| - bl AES_decrypt
|
| + bl AES_decrypt
|
|
|
| - vld1.8 {q0}, [sp,:128]
|
| - veor q0, q0, q9
|
| - vst1.8 {q0}, [r8]
|
| + vld1.8 {q0}, [sp,:128]
|
| + veor q0, q0, q9
|
| + vst1.8 {q0}, [r8]
|
|
|
| - mov r6, r8
|
| + mov r6, r8
|
| .Lxts_dec_steal:
|
| - ldrb r1, [r8]
|
| - ldrb r0, [r7], #1
|
| - strb r1, [r8, #0x10]
|
| - strb r0, [r8], #1
|
| -
|
| - subs r9, #1
|
| - bhi .Lxts_dec_steal
|
| -
|
| - vld1.8 {q0}, [r6]
|
| - mov r0, sp
|
| - veor q0, q8
|
| - mov r1, sp
|
| - vst1.8 {q0}, [sp,:128]
|
| - mov r2, r10
|
| -
|
| - bl AES_decrypt
|
| -
|
| - vld1.8 {q0}, [sp,:128]
|
| - veor q0, q0, q8
|
| - vst1.8 {q0}, [r6]
|
| - mov r3, r4
|
| + ldrb r1, [r8]
|
| + ldrb r0, [r7], #1
|
| + strb r1, [r8, #0x10]
|
| + strb r0, [r8], #1
|
| +
|
| + subs r9, #1
|
| + bhi .Lxts_dec_steal
|
| +
|
| + vld1.8 {q0}, [r6]
|
| + mov r0, sp
|
| + veor q0, q8
|
| + mov r1, sp
|
| + vst1.8 {q0}, [sp,:128]
|
| + mov r2, r10
|
| +
|
| + bl AES_decrypt
|
| +
|
| + vld1.8 {q0}, [sp,:128]
|
| + veor q0, q0, q8
|
| + vst1.8 {q0}, [r6]
|
| + mov r3, r4
|
| #endif
|
|
|
| .Lxts_dec_ret:
|
| - bic r0, r3, #0xf
|
| + bic r0, r3, #0xf
|
| vmov.i32 q0, #0
|
| vmov.i32 q1, #0
|
| #ifdef XTS_CHAIN_TWEAK
|
| - ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak
|
| + ldr r1, [r3, #0x20+VFP_ABI_FRAME] @ chain tweak
|
| #endif
|
| -.Lxts_dec_bzero: @ wipe key schedule [if any]
|
| - vstmia sp!, {q0-q1}
|
| - cmp sp, r0
|
| - bne .Lxts_dec_bzero
|
| +.Lxts_dec_bzero:@ wipe key schedule [if any]
|
| + vstmia sp!, {q0,q1}
|
| + cmp sp, r0
|
| + bne .Lxts_dec_bzero
|
|
|
| - mov sp, r3
|
| + mov sp, r3
|
| #ifdef XTS_CHAIN_TWEAK
|
| - vst1.8 {q8}, [r1]
|
| + vst1.8 {q8}, [r1]
|
| #endif
|
| VFP_ABI_POP
|
| - ldmia sp!, {r4-r10, pc} @ return
|
| + ldmia sp!, {r4,r5,r6,r7,r8,r9,r10, pc} @ return
|
|
|
| .size bsaes_xts_decrypt,.-bsaes_xts_decrypt
|
| #endif
|
|
|