1 #define __ARM_ARCH__ __LINUX_ARM_ARCH__
3 #include <linux/linkage.h>
9 # AES assembly implementation for ARMv8 AArch32
12 # - private_AES_set_encrypt_key
13 # - private_AES_set_decrypt_key
15 # void AES_encrypt(const unsigned char *in, unsigned char *out,
16 # const AES_KEY *key) {
19 vld1.8 {d24-d25}, [r2]!
22 vld1.8 {d26-d27}, [r2]!
26 vld1.8 {d28-d29}, [r2]!
31 vld1.8 {d26-d27}, [r2]!
34 vld1.8 {d28-d29}, [r2]!
42 # void AES_decrypt(const unsigned char *in, unsigned char *out,
43 # const AES_KEY *key) {
46 vld1.8 {d24-d25}, [r2]!
49 vld1.8 {d26-d27}, [r2]!
53 vld1.8 {d28-d29}, [r2]!
58 vld1.8 {d26-d27}, [r2]!
61 vld1.8 {d28-d29}, [r2]!
72 .long 0x00000001,0x00000001,0x00000001,0x00000001
73 .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
74 .long 0x0000001b,0x0000001b,0x0000001b,0x0000001b
77 # int private_AES_set_encrypt_key(const unsigned char *userKey, const int bits,
80 ENTRY(private_AES_set_encrypt_key)
87 beq .LPrivateExpandEnc192
88 bgt .LPrivateExpandEnc256
89 .LPrivateExpandEnc128:
94 vext.8 q14, q0, q8, #12
96 vext.8 q14, q0, q14, #12
98 vext.8 q14, q0, q14, #12
105 bne .LPrivateLoopEnc128
110 vext.8 q14, q0, q8, #12
112 vext.8 q14, q0, q14, #12
114 vext.8 q14, q0, q14, #12
123 vext.8 q14, q0, q8, #12
125 vext.8 q14, q0, q14, #12
127 vext.8 q14, q0, q14, #12
140 .LPrivateExpandEnc192:
146 vext.8 q14, q0, q8, #12
150 vext.8 q14, q0, q14, #12
152 vext.8 q14, q0, q14, #12
161 vext.8 q14, q0, q9, #12
167 vext.8 q14, q0, q8, #12
171 vext.8 q14, q0, q14, #12
173 vext.8 q14, q0, q14, #12
182 vext.8 q14, q0, q9, #12
187 vext.8 q14, q0, q10, #12
191 vext.8 q14, q0, q14, #12
193 vext.8 q14, q0, q14, #12
201 vext.8 q14, q0, q11, #12
206 bne .LPrivateLoopEnc192
207 vext.8 q14, q0, q8, #12
211 vext.8 q14, q0, q14, #12
213 vext.8 q14, q0, q14, #12
226 .LPrivateExpandEnc256:
230 vext.8 q14, q0, q8, #12
236 vext.8 q14, q0, q14, #12
238 vext.8 q14, q0, q14, #12
245 vext.8 q14, q0, q9, #12
248 vext.8 q14, q0, q14, #12
250 vext.8 q14, q0, q14, #12
254 bne .LPrivateLoopEnc256
259 vext.8 q14, q0, q8, #12
261 vext.8 q14, q0, q14, #12
263 vext.8 q14, q0, q14, #12
273 ENDPROC(private_AES_set_encrypt_key)
276 # int private_AES_set_decrypt_key(const unsigned char *userKey, const int bits,
279 ENTRY(private_AES_set_decrypt_key)
285 vld1.32 {q1,q2},[r3]!
286 beq .LPrivateExpandDec192
287 bgt .LPrivateExpandDec256
288 .LPrivateExpandDec128:
292 vext.8 q14, q0, q8, #12
294 vext.8 q14, q0, q14, #12
296 vext.8 q14, q0, q14, #12
309 vext.8 q14, q0, q8, #12
311 vext.8 q14, q0, q14, #12
313 vext.8 q14, q0, q14, #12
322 bne .LPrivateLoopDec128
327 vext.8 q14, q0, q8, #12
329 vext.8 q14, q0, q14, #12
331 vext.8 q14, q0, q14, #12
342 vext.8 q14, q0, q8, #12
344 vext.8 q14, q0, q14, #12
346 vext.8 q14, q0, q14, #12
360 .LPrivateExpandDec192:
368 vext.8 q14, q0, q8, #12
372 vext.8 q14, q0, q14, #12
374 vext.8 q14, q0, q14, #12
386 vext.8 q14, q0, q9, #12
393 vext.8 q14, q0, q8, #12
400 vext.8 q14, q0, q14, #12
402 vext.8 q14, q0, q14, #12
412 vext.8 q14, q0, q9, #12
417 vext.8 q14, q0, q10, #12
421 vext.8 q14, q0, q14, #12
423 vext.8 q14, q0, q14, #12
435 vext.8 q14, q0, q11, #12
441 bne .LPrivateLoopDec192
442 vext.8 q14, q0, q8, #12
449 vext.8 q14, q0, q14, #12
451 vext.8 q14, q0, q14, #12
464 .LPrivateExpandDec256:
473 vext.8 q14, q0, q8, #12
482 vext.8 q14, q0, q14, #12
484 vext.8 q14, q0, q14, #12
491 vext.8 q14, q0, q9, #12
495 vext.8 q14, q0, q14, #12
497 vext.8 q14, q0, q14, #12
501 bne .LPrivateLoopDec256
509 vext.8 q14, q0, q8, #12
511 vext.8 q14, q0, q14, #12
513 vext.8 q14, q0, q14, #12
521 ENDPROC(private_AES_set_decrypt_key)