3 #if __ARM_MAX_ARCH__>=7
10 .long 0x01,0x01,0x01,0x01
11 .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d @ rotate-n-splat
12 .long 0x1b,0x1b,0x1b,0x1b
14 .globl aes_v8_set_encrypt_key
15 .type aes_v8_set_encrypt_key,%function
17 aes_v8_set_encrypt_key:
50 .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0
69 .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0
84 .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0
102 vmov.i8 q10,#8 @ borrow q10
104 vsub.i8 q2,q2,q10 @ adjust the mask
111 .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0
147 .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0
163 .byte 0x00,0x43,0xf0,0xf3 @ aese q10,q0
179 mov r0,r3 @ return value
182 .size aes_v8_set_encrypt_key,.-aes_v8_set_encrypt_key
184 .globl aes_v8_set_decrypt_key
185 .type aes_v8_set_decrypt_key,%function
187 aes_v8_set_decrypt_key:
194 sub r2,r2,#240 @ restore original r2
196 add r0,r2,r12,lsl#4 @ end of key schedule
206 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
207 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
214 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
217 eor r0,r0,r0 @ return value
220 .size aes_v8_set_decrypt_key,.-aes_v8_set_decrypt_key
221 .globl aes_v8_encrypt
222 .type aes_v8_encrypt,%function
232 .byte 0x00,0x43,0xb0,0xf3 @ aese q2,q0
234 .byte 0x84,0x43,0xb0,0xf3 @ aesmc q2,q2
236 .byte 0x02,0x43,0xb0,0xf3 @ aese q2,q1
238 .byte 0x84,0x43,0xb0,0xf3 @ aesmc q2,q2
241 .byte 0x00,0x43,0xb0,0xf3 @ aese q2,q0
243 .byte 0x84,0x43,0xb0,0xf3 @ aesmc q2,q2
244 .byte 0x02,0x43,0xb0,0xf3 @ aese q2,q1
249 .size aes_v8_encrypt,.-aes_v8_encrypt
250 .globl aes_v8_decrypt
251 .type aes_v8_decrypt,%function
261 .byte 0x40,0x43,0xb0,0xf3 @ aesd q2,q0
263 .byte 0xc4,0x43,0xb0,0xf3 @ aesimc q2,q2
265 .byte 0x42,0x43,0xb0,0xf3 @ aesd q2,q1
267 .byte 0xc4,0x43,0xb0,0xf3 @ aesimc q2,q2
270 .byte 0x40,0x43,0xb0,0xf3 @ aesd q2,q0
272 .byte 0xc4,0x43,0xb0,0xf3 @ aesimc q2,q2
273 .byte 0x42,0x43,0xb0,0xf3 @ aesd q2,q1
278 .size aes_v8_decrypt,.-aes_v8_decrypt
279 .globl aes_v8_cbc_encrypt
280 .type aes_v8_cbc_encrypt,%function
285 vstmdb sp!,{d8-d15} @ ABI specification says so
286 ldmia ip,{r4-r5} @ load remaining args
292 cmp r5,#0 @ en- or decrypting?
298 vld1.32 {q8-q9},[r3] @ load key schedule...
300 add r7,r3,r5,lsl#4 @ pointer to last 7 round keys
302 vld1.32 {q10-q11},[r7]!
303 vld1.32 {q12-q13},[r7]!
304 vld1.32 {q14-q15},[r7]!
317 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
319 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
321 .byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9
323 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
326 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
327 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
329 .byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9
330 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
332 .byte 0x24,0x03,0xb0,0xf3 @ aese q0,q10
333 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
335 .byte 0x26,0x03,0xb0,0xf3 @ aese q0,q11
336 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
338 .byte 0x28,0x03,0xb0,0xf3 @ aese q0,q12
339 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
341 .byte 0x2a,0x03,0xb0,0xf3 @ aese q0,q13
342 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
343 vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]
344 .byte 0x2c,0x03,0xb0,0xf3 @ aese q0,q14
345 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
346 .byte 0x2e,0x03,0xb0,0xf3 @ aese q0,q15
358 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
359 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
362 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
363 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
366 .byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9
367 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
369 .byte 0x04,0x03,0xb0,0xf3 @ aese q0,q2
370 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
372 .byte 0x06,0x03,0xb0,0xf3 @ aese q0,q3
373 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
374 .byte 0x24,0x03,0xb0,0xf3 @ aese q0,q10
375 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
376 .byte 0x26,0x03,0xb0,0xf3 @ aese q0,q11
377 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
379 .byte 0x28,0x03,0xb0,0xf3 @ aese q0,q12
380 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
381 .byte 0x2a,0x03,0xb0,0xf3 @ aese q0,q13
382 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
383 .byte 0x2c,0x03,0xb0,0xf3 @ aese q0,q14
384 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
386 .byte 0x2e,0x03,0xb0,0xf3 @ aese q0,q15
395 subs r2,r2,#32 @ bias
409 .byte 0x60,0x03,0xb0,0xf3 @ aesd q0,q8
410 .byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8
411 .byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8
413 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
414 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
415 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
417 .byte 0x62,0x03,0xb0,0xf3 @ aesd q0,q9
418 .byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9
419 .byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9
421 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
422 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
423 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
426 .byte 0x60,0x03,0xb0,0xf3 @ aesd q0,q8
427 .byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8
428 .byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8
430 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
431 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
432 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
434 .byte 0x62,0x03,0xb0,0xf3 @ aesd q0,q9
435 .byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9
436 .byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9
439 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
440 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
441 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
443 movlo r6,r2 @ r6, r6, is zero at this point
444 .byte 0x68,0x03,0xb0,0xf3 @ aesd q0,q12
445 .byte 0x68,0x23,0xb0,0xf3 @ aesd q1,q12
446 .byte 0x68,0x43,0xf0,0xf3 @ aesd q10,q12
447 add r0,r0,r6 @ r0 is adjusted in such way that
448 @ at exit from the loop q1-q10
449 @ are loaded with last "words"
450 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
451 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
452 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
454 .byte 0x6a,0x03,0xb0,0xf3 @ aesd q0,q13
455 .byte 0x6a,0x23,0xb0,0xf3 @ aesd q1,q13
456 .byte 0x6a,0x43,0xf0,0xf3 @ aesd q10,q13
458 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
459 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
460 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
462 .byte 0x6c,0x03,0xb0,0xf3 @ aesd q0,q14
463 .byte 0x6c,0x23,0xb0,0xf3 @ aesd q1,q14
464 .byte 0x6c,0x43,0xf0,0xf3 @ aesd q10,q14
466 .byte 0xc0,0x03,0xb0,0xf3 @ aesimc q0,q0
467 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
468 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
469 vld1.32 {q8},[r7]! @ re-pre-load rndkey[0]
470 .byte 0x6e,0x03,0xb0,0xf3 @ aesd q0,q15
471 .byte 0x6e,0x23,0xb0,0xf3 @ aesd q1,q15
472 .byte 0x6e,0x43,0xf0,0xf3 @ aesd q10,q15
478 vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]
492 .byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8
493 .byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8
495 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
496 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
498 .byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9
499 .byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9
501 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
502 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
505 .byte 0x60,0x23,0xb0,0xf3 @ aesd q1,q8
506 .byte 0x60,0x43,0xf0,0xf3 @ aesd q10,q8
507 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
508 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
509 .byte 0x62,0x23,0xb0,0xf3 @ aesd q1,q9
510 .byte 0x62,0x43,0xf0,0xf3 @ aesd q10,q9
511 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
512 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
513 .byte 0x68,0x23,0xb0,0xf3 @ aesd q1,q12
514 .byte 0x68,0x43,0xf0,0xf3 @ aesd q10,q12
515 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
516 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
518 .byte 0x6a,0x23,0xb0,0xf3 @ aesd q1,q13
519 .byte 0x6a,0x43,0xf0,0xf3 @ aesd q10,q13
520 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
521 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
523 .byte 0x6c,0x23,0xb0,0xf3 @ aesd q1,q14
524 .byte 0x6c,0x43,0xf0,0xf3 @ aesd q10,q14
525 .byte 0xc2,0x23,0xb0,0xf3 @ aesimc q1,q1
526 .byte 0xe4,0x43,0xf0,0xf3 @ aesimc q10,q10
528 .byte 0x6e,0x23,0xb0,0xf3 @ aesd q1,q15
529 .byte 0x6e,0x43,0xf0,0xf3 @ aesd q10,q15
548 .size aes_v8_cbc_encrypt,.-aes_v8_cbc_encrypt
549 .globl aes_v8_ctr32_encrypt_blocks
550 .type aes_v8_ctr32_encrypt_blocks,%function
552 aes_v8_ctr32_encrypt_blocks:
554 stmdb sp!,{r4-r10,lr}
555 vstmdb sp!,{d8-d15} @ ABI specification says so
556 ldr r4, [ip] @ load remaining arg
562 vld1.32 {q8-q9},[r3] @ load key schedule...
566 add r7,r3,r5,lsl#4 @ pointer to last 5 round keys
568 vld1.32 {q12-q13},[r7]!
569 vld1.32 {q14-q15},[r7]!
592 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
593 .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8
594 .byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8
596 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
597 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
598 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10
600 .byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9
601 .byte 0x22,0x23,0xb0,0xf3 @ aese q1,q9
602 .byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9
604 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
605 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
606 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10
609 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
610 .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8
611 .byte 0x20,0x43,0xf0,0xf3 @ aese q10,q8
613 .byte 0x80,0x83,0xb0,0xf3 @ aesmc q4,q0
615 .byte 0x82,0xa3,0xb0,0xf3 @ aesmc q5,q1
616 .byte 0xa4,0x43,0xf0,0xf3 @ aesmc q10,q10
618 .byte 0x22,0x83,0xb0,0xf3 @ aese q4,q9
620 .byte 0x22,0xa3,0xb0,0xf3 @ aese q5,q9
621 .byte 0x22,0x43,0xf0,0xf3 @ aese q10,q9
623 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4
625 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5
626 .byte 0xa4,0x23,0xf0,0xf3 @ aesmc q9,q10
629 .byte 0x28,0x83,0xb0,0xf3 @ aese q4,q12
630 .byte 0x28,0xa3,0xb0,0xf3 @ aese q5,q12
631 .byte 0x28,0x23,0xf0,0xf3 @ aese q9,q12
634 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4
635 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5
636 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9
639 .byte 0x2a,0x83,0xb0,0xf3 @ aese q4,q13
640 .byte 0x2a,0xa3,0xb0,0xf3 @ aese q5,q13
641 .byte 0x2a,0x23,0xf0,0xf3 @ aese q9,q13
644 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4
645 vld1.32 {q8},[r7]! @ re-pre-load rndkey[0]
646 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5
647 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9
650 .byte 0x2c,0x83,0xb0,0xf3 @ aese q4,q14
651 .byte 0x2c,0xa3,0xb0,0xf3 @ aese q5,q14
652 .byte 0x2c,0x23,0xf0,0xf3 @ aese q9,q14
655 .byte 0x88,0x83,0xb0,0xf3 @ aesmc q4,q4
656 .byte 0x8a,0xa3,0xb0,0xf3 @ aesmc q5,q5
657 .byte 0xa2,0x23,0xf0,0xf3 @ aesmc q9,q9
660 .byte 0x2e,0x83,0xb0,0xf3 @ aese q4,q15
661 .byte 0x2e,0xa3,0xb0,0xf3 @ aese q5,q15
662 .byte 0x2e,0x23,0xf0,0xf3 @ aese q9,q15
668 vld1.32 {q9},[r7]! @ re-pre-load rndkey[1]
681 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
682 .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8
684 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
685 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
687 .byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9
688 .byte 0x22,0x23,0xb0,0xf3 @ aese q1,q9
690 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
691 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
694 .byte 0x20,0x03,0xb0,0xf3 @ aese q0,q8
695 .byte 0x20,0x23,0xb0,0xf3 @ aese q1,q8
696 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
697 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
698 .byte 0x22,0x03,0xb0,0xf3 @ aese q0,q9
699 .byte 0x22,0x23,0xb0,0xf3 @ aese q1,q9
700 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
701 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
703 .byte 0x28,0x03,0xb0,0xf3 @ aese q0,q12
704 .byte 0x28,0x23,0xb0,0xf3 @ aese q1,q12
706 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
707 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
708 .byte 0x2a,0x03,0xb0,0xf3 @ aese q0,q13
709 .byte 0x2a,0x23,0xb0,0xf3 @ aese q1,q13
710 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
711 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
712 .byte 0x2c,0x03,0xb0,0xf3 @ aese q0,q14
713 .byte 0x2c,0x23,0xb0,0xf3 @ aese q1,q14
715 .byte 0x80,0x03,0xb0,0xf3 @ aesmc q0,q0
716 .byte 0x82,0x23,0xb0,0xf3 @ aesmc q1,q1
718 .byte 0x2e,0x03,0xb0,0xf3 @ aese q0,q15
719 .byte 0x2e,0x23,0xb0,0xf3 @ aese q1,q15
730 ldmia sp!,{r4-r10,pc}
731 .size aes_v8_ctr32_encrypt_blocks,.-aes_v8_ctr32_encrypt_blocks