mirror of https://github.com/wolfSSL/wolfssl.git
Thumb2 AES ASM: don't assume alignment on key
Fix AES_set_encrypt_key to not assume a word alignment on key.pull/7301/head
parent
ee39a8f17f
commit
d057f10d58
|
@ -714,15 +714,19 @@ AES_set_encrypt_key:
|
|||
#else
|
||||
BEQ.W L_AES_set_encrypt_key_start_192
|
||||
#endif
|
||||
LDRD r4, r5, [r0]
|
||||
LDRD r6, r7, [r0, #8]
|
||||
LDR r4, [r0]
|
||||
LDR r5, [r0, #4]
|
||||
LDR r6, [r0, #8]
|
||||
LDR r7, [r0, #12]
|
||||
REV r4, r4
|
||||
REV r5, r5
|
||||
REV r6, r6
|
||||
REV r7, r7
|
||||
STM r2!, {r4, r5, r6, r7}
|
||||
LDRD r4, r5, [r0, #16]
|
||||
LDRD r6, r7, [r0, #24]
|
||||
LDR r4, [r0, #16]
|
||||
LDR r5, [r0, #20]
|
||||
LDR r6, [r0, #24]
|
||||
LDR r7, [r0, #28]
|
||||
REV r4, r4
|
||||
REV r5, r5
|
||||
REV r6, r6
|
||||
|
@ -805,9 +809,12 @@ L_AES_set_encrypt_key_loop_256:
|
|||
B.N L_AES_set_encrypt_key_end
|
||||
#endif
|
||||
L_AES_set_encrypt_key_start_192:
|
||||
LDRD r4, r5, [r0]
|
||||
LDRD r6, r7, [r0, #8]
|
||||
LDRD r8, r9, [r0, #16]
|
||||
LDR r4, [r0]
|
||||
LDR r5, [r0, #4]
|
||||
LDR r6, [r0, #8]
|
||||
LDR r7, [r0, #12]
|
||||
LDR r8, [r0, #16]
|
||||
LDR r9, [r0, #20]
|
||||
REV r4, r4
|
||||
REV r5, r5
|
||||
REV r6, r6
|
||||
|
@ -871,8 +878,10 @@ L_AES_set_encrypt_key_loop_192:
|
|||
B.N L_AES_set_encrypt_key_end
|
||||
#endif
|
||||
L_AES_set_encrypt_key_start_128:
|
||||
LDRD r4, r5, [r0]
|
||||
LDRD r6, r7, [r0, #8]
|
||||
LDR r4, [r0]
|
||||
LDR r5, [r0, #4]
|
||||
LDR r6, [r0, #8]
|
||||
LDR r7, [r0, #12]
|
||||
REV r4, r4
|
||||
REV r5, r5
|
||||
REV r6, r6
|
||||
|
@ -907,7 +916,7 @@ L_AES_set_encrypt_key_loop_128:
|
|||
#endif
|
||||
L_AES_set_encrypt_key_end:
|
||||
POP {r4, r5, r6, r7, r8, r9, r10, pc}
|
||||
/* Cycle Count = 331 */
|
||||
/* Cycle Count = 340 */
|
||||
.size AES_set_encrypt_key,.-AES_set_encrypt_key
|
||||
.text
|
||||
.align 4
|
||||
|
|
|
@ -357,15 +357,19 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||
#else
|
||||
"BEQ.W L_AES_set_encrypt_key_start_192\n\t"
|
||||
#endif
|
||||
"LDRD r4, r5, [%[key]]\n\t"
|
||||
"LDRD r6, r7, [%[key], #8]\n\t"
|
||||
"LDR r4, [%[key]]\n\t"
|
||||
"LDR r5, [%[key], #4]\n\t"
|
||||
"LDR r6, [%[key], #8]\n\t"
|
||||
"LDR r7, [%[key], #12]\n\t"
|
||||
"REV r4, r4\n\t"
|
||||
"REV r5, r5\n\t"
|
||||
"REV r6, r6\n\t"
|
||||
"REV r7, r7\n\t"
|
||||
"STM %[ks]!, {r4, r5, r6, r7}\n\t"
|
||||
"LDRD r4, r5, [%[key], #16]\n\t"
|
||||
"LDRD r6, r7, [%[key], #24]\n\t"
|
||||
"LDR r4, [%[key], #16]\n\t"
|
||||
"LDR r5, [%[key], #20]\n\t"
|
||||
"LDR r6, [%[key], #24]\n\t"
|
||||
"LDR r7, [%[key], #28]\n\t"
|
||||
"REV r4, r4\n\t"
|
||||
"REV r5, r5\n\t"
|
||||
"REV r6, r6\n\t"
|
||||
|
@ -450,9 +454,12 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||
#endif
|
||||
"\n"
|
||||
"L_AES_set_encrypt_key_start_192:\n\t"
|
||||
"LDRD r4, r5, [%[key]]\n\t"
|
||||
"LDRD r6, r7, [%[key], #8]\n\t"
|
||||
"LDRD r8, r9, [%[key], #16]\n\t"
|
||||
"LDR r4, [%[key]]\n\t"
|
||||
"LDR r5, [%[key], #4]\n\t"
|
||||
"LDR r6, [%[key], #8]\n\t"
|
||||
"LDR r7, [%[key], #12]\n\t"
|
||||
"LDR r8, [%[key], #16]\n\t"
|
||||
"LDR r9, [%[key], #20]\n\t"
|
||||
"REV r4, r4\n\t"
|
||||
"REV r5, r5\n\t"
|
||||
"REV r6, r6\n\t"
|
||||
|
@ -518,8 +525,10 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
|
|||
#endif
|
||||
"\n"
|
||||
"L_AES_set_encrypt_key_start_128:\n\t"
|
||||
"LDRD r4, r5, [%[key]]\n\t"
|
||||
"LDRD r6, r7, [%[key], #8]\n\t"
|
||||
"LDR r4, [%[key]]\n\t"
|
||||
"LDR r5, [%[key], #4]\n\t"
|
||||
"LDR r6, [%[key], #8]\n\t"
|
||||
"LDR r7, [%[key], #12]\n\t"
|
||||
"REV r4, r4\n\t"
|
||||
"REV r5, r5\n\t"
|
||||
"REV r6, r6\n\t"
|
||||
|
|
Loading…
Reference in New Issue