Skip to content

Commit d057f10

Browse files
committed
Thumb2 AES ASM: don't assume alignment on key
Fix AES_set_encrypt_key to not assume a word alignment on key.
1 parent ee39a8f commit d057f10

2 files changed

Lines changed: 37 additions & 19 deletions

File tree

wolfcrypt/src/port/arm/thumb2-aes-asm.S

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -714,15 +714,19 @@ AES_set_encrypt_key:
714714
#else
715715
BEQ.W L_AES_set_encrypt_key_start_192
716716
#endif
717-
LDRD r4, r5, [r0]
718-
LDRD r6, r7, [r0, #8]
717+
LDR r4, [r0]
718+
LDR r5, [r0, #4]
719+
LDR r6, [r0, #8]
720+
LDR r7, [r0, #12]
719721
REV r4, r4
720722
REV r5, r5
721723
REV r6, r6
722724
REV r7, r7
723725
STM r2!, {r4, r5, r6, r7}
724-
LDRD r4, r5, [r0, #16]
725-
LDRD r6, r7, [r0, #24]
726+
LDR r4, [r0, #16]
727+
LDR r5, [r0, #20]
728+
LDR r6, [r0, #24]
729+
LDR r7, [r0, #28]
726730
REV r4, r4
727731
REV r5, r5
728732
REV r6, r6
@@ -805,9 +809,12 @@ L_AES_set_encrypt_key_loop_256:
805809
B.N L_AES_set_encrypt_key_end
806810
#endif
807811
L_AES_set_encrypt_key_start_192:
808-
LDRD r4, r5, [r0]
809-
LDRD r6, r7, [r0, #8]
810-
LDRD r8, r9, [r0, #16]
812+
LDR r4, [r0]
813+
LDR r5, [r0, #4]
814+
LDR r6, [r0, #8]
815+
LDR r7, [r0, #12]
816+
LDR r8, [r0, #16]
817+
LDR r9, [r0, #20]
811818
REV r4, r4
812819
REV r5, r5
813820
REV r6, r6
@@ -871,8 +878,10 @@ L_AES_set_encrypt_key_loop_192:
871878
B.N L_AES_set_encrypt_key_end
872879
#endif
873880
L_AES_set_encrypt_key_start_128:
874-
LDRD r4, r5, [r0]
875-
LDRD r6, r7, [r0, #8]
881+
LDR r4, [r0]
882+
LDR r5, [r0, #4]
883+
LDR r6, [r0, #8]
884+
LDR r7, [r0, #12]
876885
REV r4, r4
877886
REV r5, r5
878887
REV r6, r6
@@ -907,7 +916,7 @@ L_AES_set_encrypt_key_loop_128:
907916
#endif
908917
L_AES_set_encrypt_key_end:
909918
POP {r4, r5, r6, r7, r8, r9, r10, pc}
910-
/* Cycle Count = 331 */
919+
/* Cycle Count = 340 */
911920
.size AES_set_encrypt_key,.-AES_set_encrypt_key
912921
.text
913922
.align 4

wolfcrypt/src/port/arm/thumb2-aes-asm_c.c

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -357,15 +357,19 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
357357
#else
358358
"BEQ.W L_AES_set_encrypt_key_start_192\n\t"
359359
#endif
360-
"LDRD r4, r5, [%[key]]\n\t"
361-
"LDRD r6, r7, [%[key], #8]\n\t"
360+
"LDR r4, [%[key]]\n\t"
361+
"LDR r5, [%[key], #4]\n\t"
362+
"LDR r6, [%[key], #8]\n\t"
363+
"LDR r7, [%[key], #12]\n\t"
362364
"REV r4, r4\n\t"
363365
"REV r5, r5\n\t"
364366
"REV r6, r6\n\t"
365367
"REV r7, r7\n\t"
366368
"STM %[ks]!, {r4, r5, r6, r7}\n\t"
367-
"LDRD r4, r5, [%[key], #16]\n\t"
368-
"LDRD r6, r7, [%[key], #24]\n\t"
369+
"LDR r4, [%[key], #16]\n\t"
370+
"LDR r5, [%[key], #20]\n\t"
371+
"LDR r6, [%[key], #24]\n\t"
372+
"LDR r7, [%[key], #28]\n\t"
369373
"REV r4, r4\n\t"
370374
"REV r5, r5\n\t"
371375
"REV r6, r6\n\t"
@@ -450,9 +454,12 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
450454
#endif
451455
"\n"
452456
"L_AES_set_encrypt_key_start_192:\n\t"
453-
"LDRD r4, r5, [%[key]]\n\t"
454-
"LDRD r6, r7, [%[key], #8]\n\t"
455-
"LDRD r8, r9, [%[key], #16]\n\t"
457+
"LDR r4, [%[key]]\n\t"
458+
"LDR r5, [%[key], #4]\n\t"
459+
"LDR r6, [%[key], #8]\n\t"
460+
"LDR r7, [%[key], #12]\n\t"
461+
"LDR r8, [%[key], #16]\n\t"
462+
"LDR r9, [%[key], #20]\n\t"
456463
"REV r4, r4\n\t"
457464
"REV r5, r5\n\t"
458465
"REV r6, r6\n\t"
@@ -518,8 +525,10 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len, unsigned char* ks
518525
#endif
519526
"\n"
520527
"L_AES_set_encrypt_key_start_128:\n\t"
521-
"LDRD r4, r5, [%[key]]\n\t"
522-
"LDRD r6, r7, [%[key], #8]\n\t"
528+
"LDR r4, [%[key]]\n\t"
529+
"LDR r5, [%[key], #4]\n\t"
530+
"LDR r6, [%[key], #8]\n\t"
531+
"LDR r7, [%[key], #12]\n\t"
523532
"REV r4, r4\n\t"
524533
"REV r5, r5\n\t"
525534
"REV r6, r6\n\t"

0 commit comments

Comments
 (0)