• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * This file is part of the openHiTLS project.
3 *
4 * openHiTLS is licensed under the Mulan PSL v2.
5 * You can use this software according to the terms and conditions of the Mulan PSL v2.
6 * You may obtain a copy of Mulan PSL v2 at:
7 *
8 *     http://license.coscl.org.cn/MulanPSL2
9 *
10 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
11 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
12 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
13 * See the Mulan PSL v2 for more details.
14 */
15
16#include "hitls_build.h"
17#ifdef HITLS_CRYPTO_AES
18
19.file    "crypt_aes_macro_armv8.s"
20.text
21.arch    armv8-a+crypto
22
23BLK0     .req    v0
24
25/*
26 * AES_ENC_1_BLKS
27 */
28.macro AES_ENC_1_BLK key blk rdk0s rdk1s rdk0 rdk1 rounds
29    ldr \rounds,[\key,#240]
30    ld1 {\rdk0s,\rdk1s},[\key],#32
31    sub \rounds,\rounds,#2
32.Loop_enc:
33    aese \blk,\rdk0
34    aesmc \blk,\blk
35    subs \rounds,\rounds,#2
36    ld1 {\rdk0s},[\key],#16
37    aese \blk,\rdk1
38    aesmc \blk,\blk
39    ld1 {\rdk1s},[\key],#16
40    b.gt .Loop_enc
41
42    aese \blk,\rdk0
43    aesmc \blk,\blk
44    ld1 {\rdk0s},[\key]
45    aese \blk,\rdk1
46    eor \blk,\blk,\rdk0
47.endm
48
49/*
50 * AES_DEC_1_BLKS
51 */
52.macro  AES_DEC_1_BLK key blk rdk0s rdk1s rdk0 rdk1 rounds
53    ldr \rounds,[\key,#240]
54    ld1 {\rdk0s,\rdk1s},[\key],#32
55    sub \rounds,\rounds,#2
56.Loop_dec:
57    aesd \blk,\rdk0
58    aesimc \blk,\blk
59    subs \rounds,\rounds,#2
60    ld1 {\rdk0s},[\key],#16
61    aesd \blk,\rdk1
62    aesimc \blk,\blk
63    ld1 {\rdk1s},[\key],#16
64    b.gt .Loop_dec
65
66    aesd \blk,\rdk0
67    aesimc \blk,\blk
68    ld1 {\rdk0s},[\key]
69    aesd \blk,\rdk1
70    eor \blk,\blk,\rdk0
71.endm
72
73.macro  SETDECKEY_LDR_9_BLOCK PTR
74    ld1 {v1.4s}, [\PTR], #16
75    ld1 {v2.4s}, [\PTR], #16
76    ld1 {v3.4s}, [\PTR], #16
77    ld1 {v4.4s}, [\PTR], #16
78    ld1 {v5.4s}, [\PTR], #16
79    ld1 {v6.4s}, [\PTR], #16
80    ld1 {v7.4s}, [\PTR], #16
81    ld1 {v8.4s}, [\PTR], #16
82    ld1 {v9.4s}, [\PTR], #16
83.endm
84
85.macro  SETDECKEY_INVMIX_9_BLOCK
86    aesimc v1.16b, v1.16b
87    aesimc v2.16b, v2.16b
88    aesimc v3.16b, v3.16b
89    aesimc v4.16b, v4.16b
90    aesimc v5.16b, v5.16b
91    aesimc v6.16b, v6.16b
92    aesimc v7.16b, v7.16b
93    aesimc v8.16b, v8.16b
94    aesimc v9.16b, v9.16b
95.endm
96
97.macro  SETDECKEY_STR_9_BLOCK PTR OFFSETREG
98    st1 {v1.4s}, [\PTR], \OFFSETREG
99    st1 {v2.4s}, [\PTR], \OFFSETREG
100    st1 {v3.4s}, [\PTR], \OFFSETREG
101    st1 {v4.4s}, [\PTR], \OFFSETREG
102    st1 {v5.4s}, [\PTR], \OFFSETREG
103    st1 {v6.4s}, [\PTR], \OFFSETREG
104    st1 {v7.4s}, [\PTR], \OFFSETREG
105    st1 {v8.4s}, [\PTR], \OFFSETREG
106    st1 {v9.4s}, [\PTR], \OFFSETREG
107.endm
108
109/*
110 * AES_ENC_2_BLKS
111 */
112.macro AES_ENC_2_BLKS key blk0 blk1 rdk0s rdk1s rdk0 rdk1 rounds
113    ldr \rounds,[\key,#240]
114    ld1 {\rdk0s,\rdk1s},[\key],#32
115    sub \rounds,\rounds,#2
116.Loop_enc_2_blks:
117    aese \blk0,\rdk0
118    aesmc \blk0,\blk0
119    aese \blk0,\rdk1
120    aesmc \blk0,\blk0
121
122    aese \blk1,\rdk0
123    aesmc \blk1,\blk1
124    aese \blk1,\rdk1
125    aesmc \blk1,\blk1
126
127    ld1 {\rdk0s,\rdk1s},[\key],#32
128    subs \rounds,\rounds,#2
129    b.gt .Loop_enc_2_blks
130
131    aese \blk0,\rdk0
132    aesmc \blk0,\blk0
133    aese \blk1,\rdk0
134    aesmc \blk1,\blk1
135    ld1 {\rdk0s},[\key]
136    aese \blk0,\rdk1
137    aese \blk1,\rdk1
138    eor \blk0,\blk0,\rdk0
139    eor \blk1,\blk1,\rdk0
140.endm
141
142/*
143 * AES_ENC_3_BLKS
144 */
145.macro AES_ENC_3_BLKS key blk0 blk1 blk2 rdk0s rdk1s rdk0 rdk1 rounds
146    ldr \rounds,[\key,#240]
147    ld1 {\rdk0s,\rdk1s},[\key],#32
148    sub \rounds,\rounds,#2
149.align 3
150.Loop_enc_3_blks:
151    aese \blk0,\rdk0
152    aesmc \blk0,\blk0
153    aese \blk0,\rdk1
154    aesmc \blk0,\blk0
155
156    aese \blk1,\rdk0
157    aesmc \blk1,\blk1
158    aese \blk1,\rdk1
159    aesmc \blk1,\blk1
160
161    aese \blk2,\rdk0
162    aesmc \blk2,\blk2
163    aese \blk2,\rdk1
164    aesmc \blk2,\blk2
165
166    ld1 {\rdk0s,\rdk1s},[\key],#32
167    subs \rounds,\rounds,#2
168    b.gt .Loop_enc_3_blks
169
170    aese \blk0,\rdk0
171    aesmc \blk0,\blk0
172    aese \blk1,\rdk0
173    aesmc \blk1,\blk1
174    aese \blk2,\rdk0
175    aesmc \blk2,\blk2
176    ld1 {\rdk0s},[\key]
177    aese \blk0,\rdk1
178    aese \blk1,\rdk1
179    aese \blk2,\rdk1
180    eor \blk0,\blk0,\rdk0
181    eor \blk1,\blk1,\rdk0
182    eor \blk2,\blk2,\rdk0
183.endm
184
185/*
186 * AES_ENC_4_BLKS
187 */
188.macro AES_ENC_4_BLKS key blk0 blk1 blk2 blk3 rdk0s rdk1s rdk0 rdk1 rounds
189    ldr \rounds,[\key,#240]
190    ld1 {\rdk0s,\rdk1s},[\key],#32
191    sub \rounds,\rounds,#2
192.Loop_enc_4_blks:
193    aese \blk0,\rdk0
194    aesmc \blk0,\blk0
195    aese \blk0,\rdk1
196    aesmc \blk0,\blk0
197
198    aese \blk1,\rdk0
199    aesmc \blk1,\blk1
200    aese \blk1,\rdk1
201    aesmc \blk1,\blk1
202
203    aese \blk2,\rdk0
204    aesmc \blk2,\blk2
205    aese \blk2,\rdk1
206    aesmc \blk2,\blk2
207
208    aese \blk3,\rdk0
209    aesmc \blk3,\blk3
210    aese \blk3,\rdk1
211    aesmc \blk3,\blk3
212
213    ld1 {\rdk0s,\rdk1s},[\key],#32
214    subs \rounds,\rounds,#2
215    b.gt .Loop_enc_4_blks
216
217    aese \blk0,\rdk0
218    aesmc \blk0,\blk0
219    aese \blk1,\rdk0
220    aesmc \blk1,\blk1
221    aese \blk2,\rdk0
222    aesmc \blk2,\blk2
223    aese \blk3,\rdk0
224    aesmc \blk3,\blk3
225    ld1 {\rdk0s},[\key]
226    aese \blk0,\rdk1
227    aese \blk1,\rdk1
228    aese \blk2,\rdk1
229    aese \blk3,\rdk1
230    eor \blk0,\blk0,\rdk0
231    eor \blk1,\blk1,\rdk0
232    eor \blk2,\blk2,\rdk0
233    eor \blk3,\blk3,\rdk0
234.endm
235
236
237/*
238 * AES_ENC_5_BLKS
239 */
240.macro AES_ENC_5_BLKS key blk0 blk1 blk2 blk3 blk4 rdk0s rdk1s rdk0 rdk1 rounds
241    ldr \rounds,[\key,#240]
242    ld1 {\rdk0s,\rdk1s},[\key],#32
243    sub \rounds,\rounds,#2
244.Loop_enc_5_blks:
245    aese \blk0,\rdk0
246    aesmc \blk0,\blk0
247    aese \blk1,\rdk0
248    aesmc \blk1,\blk1
249    aese \blk2,\rdk0
250    aesmc \blk2,\blk2
251    aese \blk3,\rdk0
252    aesmc \blk3,\blk3
253    aese \blk4,\rdk0
254    aesmc \blk4,\blk4
255    ld1 {\rdk0s},[\key],#16
256    subs \rounds,\rounds,#2
257    aese \blk0,\rdk1
258    aesmc \blk0,\blk0
259
260    aese \blk1,\rdk1
261    aesmc \blk1,\blk1
262
263    aese \blk2,\rdk1
264    aesmc \blk2,\blk2
265
266    aese \blk3,\rdk1
267    aesmc \blk3,\blk3
268
269    aese \blk4,\rdk1
270    aesmc \blk4,\blk4
271
272    ld1 {\rdk1s},[\key],#16
273    b.gt .Loop_enc_5_blks
274
275    aese \blk0,\rdk0
276    aesmc \blk0,\blk0
277    aese \blk1,\rdk0
278    aesmc \blk1,\blk1
279    aese \blk2,\rdk0
280    aesmc \blk2,\blk2
281    aese \blk3,\rdk0
282    aesmc \blk3,\blk3
283    aese \blk4,\rdk0
284    aesmc \blk4,\blk4
285    ld1 {\rdk0s},[\key]
286    aese \blk0,\rdk1
287    aese \blk1,\rdk1
288    aese \blk2,\rdk1
289    aese \blk3,\rdk1
290    aese \blk4,\rdk1
291    eor \blk0,\blk0,\rdk0
292    eor \blk1,\blk1,\rdk0
293    eor \blk2,\blk2,\rdk0
294    eor \blk3,\blk3,\rdk0
295    eor \blk4,\blk4,\rdk0
296.endm
297
298/*
299 * AES_ENC_6_BLKS
300 */
301.macro AES_ENC_6_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 rdk0s rdk1s rdk0 rdk1 rounds
302    ldr \rounds,[\key,#240]
303    ld1 {\rdk0s,\rdk1s},[\key],#32
304    sub \rounds,\rounds,#2
305.Loop_enc_6_blks:
306    aese \blk0,\rdk0
307    aesmc \blk0,\blk0
308    aese \blk0,\rdk1
309    aesmc \blk0,\blk0
310
311    aese \blk1,\rdk0
312    aesmc \blk1,\blk1
313    aese \blk1,\rdk1
314    aesmc \blk1,\blk1
315
316    aese \blk2,\rdk0
317    aesmc \blk2,\blk2
318    aese \blk2,\rdk1
319    aesmc \blk2,\blk2
320
321    aese \blk3,\rdk0
322    aesmc \blk3,\blk3
323    aese \blk3,\rdk1
324    aesmc \blk3,\blk3
325
326    aese \blk4,\rdk0
327    aesmc \blk4,\blk4
328    aese \blk4,\rdk1
329    aesmc \blk4,\blk4
330
331    aese \blk5,\rdk0
332    aesmc \blk5,\blk5
333    aese \blk5,\rdk1
334    aesmc \blk5,\blk5
335
336    ld1 {\rdk0s,\rdk1s},[\key],#32
337    subs \rounds,\rounds,#2
338    b.gt .Loop_enc_6_blks
339
340    aese \blk0,\rdk0
341    aesmc \blk0,\blk0
342    aese \blk1,\rdk0
343    aesmc \blk1,\blk1
344    aese \blk2,\rdk0
345    aesmc \blk2,\blk2
346    aese \blk3,\rdk0
347    aesmc \blk3,\blk3
348    aese \blk4,\rdk0
349    aesmc \blk4,\blk4
350    aese \blk5,\rdk0
351    aesmc \blk5,\blk5
352    ld1 {\rdk0s},[\key]
353    aese \blk0,\rdk1
354    aese \blk1,\rdk1
355    aese \blk2,\rdk1
356    aese \blk3,\rdk1
357    aese \blk4,\rdk1
358    aese \blk5,\rdk1
359    eor \blk0,\blk0,\rdk0
360    eor \blk1,\blk1,\rdk0
361    eor \blk2,\blk2,\rdk0
362    eor \blk3,\blk3,\rdk0
363    eor \blk4,\blk4,\rdk0
364    eor \blk5,\blk5,\rdk0
365.endm
366
367
368/*
369 * AES_ENC_7_BLKS
370 */
371.macro AES_ENC_7_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 rdk0s rdk1s rdk0 rdk1 rounds
372    ldr \rounds,[\key,#240]
373    ld1 {\rdk0s,\rdk1s},[\key],#32
374    sub \rounds,\rounds,#2
375.Loop_enc_7_blks:
376    aese \blk0,\rdk0
377    aesmc \blk0,\blk0
378    aese \blk0,\rdk1
379    aesmc \blk0,\blk0
380
381    aese \blk1,\rdk0
382    aesmc \blk1,\blk1
383    aese \blk1,\rdk1
384    aesmc \blk1,\blk1
385
386    aese \blk2,\rdk0
387    aesmc \blk2,\blk2
388    aese \blk2,\rdk1
389    aesmc \blk2,\blk2
390
391    aese \blk3,\rdk0
392    aesmc \blk3,\blk3
393    aese \blk3,\rdk1
394    aesmc \blk3,\blk3
395
396    aese \blk4,\rdk0
397    aesmc \blk4,\blk4
398    aese \blk4,\rdk1
399    aesmc \blk4,\blk4
400
401    aese \blk5,\rdk0
402    aesmc \blk5,\blk5
403    aese \blk5,\rdk1
404    aesmc \blk5,\blk5
405
406    aese \blk6,\rdk0
407    aesmc \blk6,\blk6
408    aese \blk6,\rdk1
409    aesmc \blk6,\blk6
410
411    ld1 {\rdk0s,\rdk1s},[\key],#32
412    subs \rounds,\rounds,#2
413    b.gt .Loop_enc_7_blks
414
415    aese \blk0,\rdk0
416    aesmc \blk0,\blk0
417    aese \blk1,\rdk0
418    aesmc \blk1,\blk1
419    aese \blk2,\rdk0
420    aesmc \blk2,\blk2
421    aese \blk3,\rdk0
422    aesmc \blk3,\blk3
423    aese \blk4,\rdk0
424    aesmc \blk4,\blk4
425    aese \blk5,\rdk0
426    aesmc \blk5,\blk5
427    aese \blk6,\rdk0
428    aesmc \blk6,\blk6
429    ld1 {\rdk0s},[\key]
430    aese \blk0,\rdk1
431    aese \blk1,\rdk1
432    aese \blk2,\rdk1
433    aese \blk3,\rdk1
434    aese \blk4,\rdk1
435    aese \blk5,\rdk1
436    aese \blk6,\rdk1
437    eor \blk0,\blk0,\rdk0
438    eor \blk1,\blk1,\rdk0
439    eor \blk2,\blk2,\rdk0
440    eor \blk3,\blk3,\rdk0
441    eor \blk4,\blk4,\rdk0
442    eor \blk5,\blk5,\rdk0
443    eor \blk6,\blk6,\rdk0
444.endm
445
446/*
447 * AES_ENC_8_BLKS
448 */
449.macro AES_ENC_8_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 rdk0s rdk1s rdk0 rdk1 rounds
450    ldr \rounds,[\key,#240]
451    ld1 {\rdk0s,\rdk1s},[\key],#32
452    sub \rounds,\rounds,#2
453.Loop_enc_8_blks:
454    aese \blk0,\rdk0
455    aesmc \blk0,\blk0
456    aese \blk0,\rdk1
457    aesmc \blk0,\blk0
458
459    aese \blk1,\rdk0
460    aesmc \blk1,\blk1
461    aese \blk1,\rdk1
462    aesmc \blk1,\blk1
463
464    aese \blk2,\rdk0
465    aesmc \blk2,\blk2
466    aese \blk2,\rdk1
467    aesmc \blk2,\blk2
468
469    aese \blk3,\rdk0
470    aesmc \blk3,\blk3
471    aese \blk3,\rdk1
472    aesmc \blk3,\blk3
473
474    aese \blk4,\rdk0
475    aesmc \blk4,\blk4
476    aese \blk4,\rdk1
477    aesmc \blk4,\blk4
478
479    aese \blk5,\rdk0
480    aesmc \blk5,\blk5
481    aese \blk5,\rdk1
482    aesmc \blk5,\blk5
483
484    aese \blk6,\rdk0
485    aesmc \blk6,\blk6
486    aese \blk6,\rdk1
487    aesmc \blk6,\blk6
488
489    aese \blk7,\rdk0
490    aesmc \blk7,\blk7
491    aese \blk7,\rdk1
492    aesmc \blk7,\blk7
493
494    ld1 {\rdk0s,\rdk1s},[\key],#32
495    subs \rounds,\rounds,#2
496    b.gt .Loop_enc_8_blks
497
498
499    aese \blk0,\rdk0
500    aesmc \blk0,\blk0
501    aese \blk1,\rdk0
502    aesmc \blk1,\blk1
503    aese \blk2,\rdk0
504    aesmc \blk2,\blk2
505    aese \blk3,\rdk0
506    aesmc \blk3,\blk3
507    aese \blk4,\rdk0
508    aesmc \blk4,\blk4
509    aese \blk5,\rdk0
510    aesmc \blk5,\blk5
511    aese \blk6,\rdk0
512    aesmc \blk6,\blk6
513    aese \blk7,\rdk0
514    aesmc \blk7,\blk7
515    ld1 {\rdk0s},[\key]
516    aese \blk0,\rdk1
517    aese \blk1,\rdk1
518    aese \blk2,\rdk1
519    aese \blk3,\rdk1
520    aese \blk4,\rdk1
521    aese \blk5,\rdk1
522    aese \blk6,\rdk1
523    aese \blk7,\rdk1
524    eor \blk0,\blk0,\rdk0
525    eor \blk1,\blk1,\rdk0
526    eor \blk2,\blk2,\rdk0
527    eor \blk3,\blk3,\rdk0
528    eor \blk4,\blk4,\rdk0
529    eor \blk5,\blk5,\rdk0
530    eor \blk6,\blk6,\rdk0
531    eor \blk7,\blk7,\rdk0
532.endm
533
534/*
535 * AES_DEC_2_BLKS
536 */
537.macro AES_DEC_2_BLKS key blk0 blk1 rdk0s rdk1s rdk0 rdk1 rounds
538    ldr \rounds,[\key,#240]
539    ld1 {\rdk0s,\rdk1s},[\key],#32
540    sub \rounds,\rounds,#2
541.Loop_dec_2_blks:
542    aesd \blk0,\rdk0
543    aesimc \blk0,\blk0
544    aesd \blk0,\rdk1
545    aesimc \blk0,\blk0
546
547    aesd \blk1,\rdk0
548    aesimc \blk1,\blk1
549    aesd \blk1,\rdk1
550    aesimc \blk1,\blk1
551
552    ld1 {\rdk0s,\rdk1s},[\key],#32
553    subs \rounds,\rounds,#2
554    b.gt .Loop_dec_2_blks
555
556
557    aesd \blk0,\rdk0
558    aesimc \blk0,\blk0
559    aesd \blk1,\rdk0
560    aesimc \blk1,\blk1
561    ld1 {\rdk0s},[\key]
562    aesd \blk0,\rdk1
563    aesd \blk1,\rdk1
564    eor \blk0,\blk0,\rdk0
565    eor \blk1,\blk1,\rdk0
566.endm
567
568/*
569 * AES_DEC_3_BLKS
570 */
571.macro AES_DEC_3_BLKS key blk0 blk1 blk2 rdk0s rdk1s rdk0 rdk1 rounds
572    ldr \rounds,[\key,#240]
573    ld1 {\rdk0s,\rdk1s},[\key],#32
574    sub \rounds,\rounds,#2
575.align    3
576.Loop_dec_3_blks:
577    aesd \blk0,\rdk0
578    aesimc \blk0,\blk0
579    aesd \blk0,\rdk1
580    aesimc \blk0,\blk0
581
582    aesd \blk1,\rdk0
583    aesimc \blk1,\blk1
584    aesd \blk1,\rdk1
585    aesimc \blk1,\blk1
586
587    aesd \blk2,\rdk0
588    aesimc \blk2,\blk2
589    aesd \blk2,\rdk1
590    aesimc \blk2,\blk2
591
592    ld1 {\rdk0s,\rdk1s},[\key],#32
593    subs \rounds,\rounds,#2
594    b.gt .Loop_dec_3_blks
595
596    aesd \blk0,\rdk0
597    aesimc \blk0,\blk0
598    aesd \blk1,\rdk0
599    aesimc \blk1,\blk1
600    aesd \blk2,\rdk0
601    aesimc \blk2,\blk2
602    ld1 {\rdk0s},[\key]
603    aesd \blk0,\rdk1
604    aesd \blk1,\rdk1
605    aesd \blk2,\rdk1
606    eor \blk0,\blk0,\rdk0
607    eor \blk1,\blk1,\rdk0
608    eor \blk2,\blk2,\rdk0
609.endm
610
611/*
612 * AES_DEC_4_BLKS
613 */
614.macro AES_DEC_4_BLKS key blk0 blk1 blk2 blk3 rdk0s rdk1s rdk0 rdk1 rounds
615    ldr \rounds,[\key,#240]
616    ld1 {\rdk0s,\rdk1s},[\key],#32
617    sub \rounds,\rounds,#2
618.Loop_dec_4_blks:
619    aesd \blk0,\rdk0
620    aesimc \blk0,\blk0
621    aesd \blk0,\rdk1
622    aesimc \blk0,\blk0
623
624    aesd \blk1,\rdk0
625    aesimc \blk1,\blk1
626    aesd \blk1,\rdk1
627    aesimc \blk1,\blk1
628
629    aesd \blk2,\rdk0
630    aesimc \blk2,\blk2
631    aesd \blk2,\rdk1
632    aesimc \blk2,\blk2
633
634    aesd \blk3,\rdk0
635    aesimc \blk3,\blk3
636    aesd \blk3,\rdk1
637    aesimc \blk3,\blk3
638
639    ld1 {\rdk0s,\rdk1s},[\key],#32
640    subs \rounds,\rounds,#2
641    b.gt .Loop_dec_4_blks
642
643    aesd \blk0,\rdk0
644    aesimc \blk0,\blk0
645    aesd \blk1,\rdk0
646    aesimc \blk1,\blk1
647    aesd \blk2,\rdk0
648    aesimc \blk2,\blk2
649    aesd \blk3,\rdk0
650    aesimc \blk3,\blk3
651    ld1 {\rdk0s},[\key]
652    aesd \blk0,\rdk1
653    aesd \blk1,\rdk1
654    aesd \blk2,\rdk1
655    aesd \blk3,\rdk1
656    eor \blk0,\blk0,\rdk0
657    eor \blk1,\blk1,\rdk0
658    eor \blk2,\blk2,\rdk0
659    eor \blk3,\blk3,\rdk0
660.endm
661
662/*
663 * AES_DEC_5_BLKS
664 */
665.macro AES_DEC_5_BLKS key blk0 blk1 blk2 blk3 blk4 rdk0s rdk1s rdk0 rdk1 rounds
666    ldr \rounds,[\key,#240]
667    ld1 {\rdk0s,\rdk1s},[\key],#32
668    sub \rounds,\rounds,#2
669.Loop_dec_5_blks:
670    aesd \blk0,\rdk0
671    aesimc \blk0,\blk0
672    aesd \blk0,\rdk1
673    aesimc \blk0,\blk0
674
675    aesd \blk1,\rdk0
676    aesimc \blk1,\blk1
677    aesd \blk1,\rdk1
678    aesimc \blk1,\blk1
679
680    aesd \blk2,\rdk0
681    aesimc \blk2,\blk2
682    aesd \blk2,\rdk1
683    aesimc \blk2,\blk2
684
685    aesd \blk3,\rdk0
686    aesimc \blk3,\blk3
687    aesd \blk3,\rdk1
688    aesimc \blk3,\blk3
689
690    aesd \blk4,\rdk0
691    aesimc \blk4,\blk4
692    aesd \blk4,\rdk1
693    aesimc \blk4,\blk4
694
695    ld1 {\rdk0s,\rdk1s},[\key],#32
696    subs \rounds,\rounds,#2
697    b.gt .Loop_dec_5_blks
698
699    aesd \blk0,\rdk0
700    aesimc \blk0,\blk0
701    aesd \blk1,\rdk0
702    aesimc \blk1,\blk1
703    aesd \blk2,\rdk0
704    aesimc \blk2,\blk2
705    aesd \blk3,\rdk0
706    aesimc \blk3,\blk3
707    aesd \blk4,\rdk0
708    aesimc \blk4,\blk4
709    ld1 {\rdk0s},[\key]
710    aesd \blk0,\rdk1
711    aesd \blk1,\rdk1
712    aesd \blk2,\rdk1
713    aesd \blk3,\rdk1
714    aesd \blk4,\rdk1
715    eor \blk0,\blk0,\rdk0
716    eor \blk1,\blk1,\rdk0
717    eor \blk2,\blk2,\rdk0
718    eor \blk3,\blk3,\rdk0
719    eor \blk4,\blk4,\rdk0
720.endm
721
722/*
723 * AES_DEC_6_BLKS
724 */
725.macro AES_DEC_6_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 rdk0s rdk1s rdk0 rdk1 rounds
726    ldr \rounds,[\key,#240]
727    ld1 {\rdk0s,\rdk1s},[\key],#32
728    sub \rounds,\rounds,#2
729.Loop_dec_6_blks:
730    aesd \blk0,\rdk0
731    aesimc \blk0,\blk0
732    aesd \blk0,\rdk1
733    aesimc \blk0,\blk0
734
735    aesd \blk1,\rdk0
736    aesimc \blk1,\blk1
737    aesd \blk1,\rdk1
738    aesimc \blk1,\blk1
739
740    aesd \blk2,\rdk0
741    aesimc \blk2,\blk2
742    aesd \blk2,\rdk1
743    aesimc \blk2,\blk2
744
745    aesd \blk3,\rdk0
746    aesimc \blk3,\blk3
747    aesd \blk3,\rdk1
748    aesimc \blk3,\blk3
749
750    aesd \blk4,\rdk0
751    aesimc \blk4,\blk4
752    aesd \blk4,\rdk1
753    aesimc \blk4,\blk4
754
755    aesd \blk5,\rdk0
756    aesimc \blk5,\blk5
757    aesd \blk5,\rdk1
758    aesimc \blk5,\blk5
759
760    ld1 {\rdk0s,\rdk1s},[\key],#32
761    subs \rounds,\rounds,#2
762    b.gt .Loop_dec_6_blks
763
764    aesd \blk0,\rdk0
765    aesimc \blk0,\blk0
766    aesd \blk1,\rdk0
767    aesimc \blk1,\blk1
768    aesd \blk2,\rdk0
769    aesimc \blk2,\blk2
770    aesd \blk3,\rdk0
771    aesimc \blk3,\blk3
772    aesd \blk4,\rdk0
773    aesimc \blk4,\blk4
774    aesd \blk5,\rdk0
775    aesimc \blk5,\blk5
776    ld1 {\rdk0s},[\key]
777    aesd \blk0,\rdk1
778    aesd \blk1,\rdk1
779    aesd \blk2,\rdk1
780    aesd \blk3,\rdk1
781    aesd \blk4,\rdk1
782    aesd \blk5,\rdk1
783    eor \blk0,\blk0,\rdk0
784    eor \blk1,\blk1,\rdk0
785    eor \blk2,\blk2,\rdk0
786    eor \blk3,\blk3,\rdk0
787    eor \blk4,\blk4,\rdk0
788    eor \blk5,\blk5,\rdk0
789.endm
790
791/*
792 * AES_DEC_7_BLKS
793 */
794.macro AES_DEC_7_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 rdk0s rdk1s rdk0 rdk1 rounds
795    ldr \rounds,[\key,#240]
796    ld1 {\rdk0s,\rdk1s},[\key],#32
797    sub \rounds,\rounds,#2
798.Loop_dec_7_blks:
799    aesd \blk0,\rdk0
800    aesimc \blk0,\blk0
801    aesd \blk0,\rdk1
802    aesimc \blk0,\blk0
803
804    aesd \blk1,\rdk0
805    aesimc \blk1,\blk1
806    aesd \blk1,\rdk1
807    aesimc \blk1,\blk1
808
809    aesd \blk2,\rdk0
810    aesimc \blk2,\blk2
811    aesd \blk2,\rdk1
812    aesimc \blk2,\blk2
813
814    aesd \blk3,\rdk0
815    aesimc \blk3,\blk3
816    aesd \blk3,\rdk1
817    aesimc \blk3,\blk3
818
819    aesd \blk4,\rdk0
820    aesimc \blk4,\blk4
821    aesd \blk4,\rdk1
822    aesimc \blk4,\blk4
823
824    aesd \blk5,\rdk0
825    aesimc \blk5,\blk5
826    aesd \blk5,\rdk1
827    aesimc \blk5,\blk5
828
829    aesd \blk6,\rdk0
830    aesimc \blk6,\blk6
831    aesd \blk6,\rdk1
832    aesimc \blk6,\blk6
833
834    ld1 {\rdk0s,\rdk1s},[\key],#32
835    subs \rounds,\rounds,#2
836    b.gt .Loop_dec_7_blks
837
838    aesd \blk0,\rdk0
839    aesimc \blk0,\blk0
840    aesd \blk1,\rdk0
841    aesimc \blk1,\blk1
842    aesd \blk2,\rdk0
843    aesimc \blk2,\blk2
844    aesd \blk3,\rdk0
845    aesimc \blk3,\blk3
846    aesd \blk4,\rdk0
847    aesimc \blk4,\blk4
848    aesd \blk5,\rdk0
849    aesimc \blk5,\blk5
850    aesd \blk6,\rdk0
851    aesimc \blk6,\blk6
852    ld1 {\rdk0s},[\key]
853    aesd \blk0,\rdk1
854    aesd \blk1,\rdk1
855    aesd \blk2,\rdk1
856    aesd \blk3,\rdk1
857    aesd \blk4,\rdk1
858    aesd \blk5,\rdk1
859    aesd \blk6,\rdk1
860    eor \blk0,\blk0,\rdk0
861    eor \blk1,\blk1,\rdk0
862    eor \blk2,\blk2,\rdk0
863    eor \blk3,\blk3,\rdk0
864    eor \blk4,\blk4,\rdk0
865    eor \blk5,\blk5,\rdk0
866    eor \blk6,\blk6,\rdk0
867.endm
868
869/*
870 * AES_DEC_8_BLKS
871 */
872.macro AES_DEC_8_BLKS key blk0 blk1 blk2 blk3 blk4 blk5 blk6 blk7 rdk0s rdk1s rdk0 rdk1 rounds
873    ldr \rounds,[\key,#240]
874    ld1 {\rdk0s,\rdk1s},[\key],#32
875    sub \rounds,\rounds,#2
876.align 5
877.Loop_dec_8_blks:
878    aesd \blk0,\rdk0
879    aesimc \blk0,\blk0
880    aesd \blk5,\rdk0
881    aesimc \blk5,\blk5
882    aesd \blk1,\rdk0
883    aesimc \blk1,\blk1
884    aesd \blk6,\rdk0
885    aesimc \blk6,\blk6
886    aesd \blk2,\rdk0
887    aesimc \blk2,\blk2
888    aesd \blk3,\rdk0
889    aesimc \blk3,\blk3
890    aesd \blk4,\rdk0
891    aesimc \blk4,\blk4
892    aesd \blk7,\rdk0
893    aesimc \blk7,\blk7
894
895    aesd \blk0,\rdk1
896    aesimc \blk0,\blk0
897    aesd \blk5,\rdk1
898    aesimc \blk5,\blk5
899    aesd \blk1,\rdk1
900    aesimc \blk1,\blk1
901    aesd \blk6,\rdk1
902    aesimc \blk6,\blk6
903    aesd \blk2,\rdk1
904    aesimc \blk2,\blk2
905    aesd \blk3,\rdk1
906    aesimc \blk3,\blk3
907    aesd \blk4,\rdk1
908    aesimc \blk4,\blk4
909    aesd \blk7,\rdk1
910    ld1 {\rdk0s, \rdk1s},[\key],#32
911    aesimc \blk7,\blk7
912
913    subs \rounds,\rounds,#2
914    b.gt .Loop_dec_8_blks
915
916    aesd \blk0,\rdk0
917    aesimc \blk0,\blk0
918    aesd \blk1,\rdk0
919    aesimc \blk1,\blk1
920    aesd \blk2,\rdk0
921    aesimc \blk2,\blk2
922    aesd \blk3,\rdk0
923    aesimc \blk3,\blk3
924    aesd \blk4,\rdk0
925    aesimc \blk4,\blk4
926    aesd \blk5,\rdk0
927    aesimc \blk5,\blk5
928    aesd \blk6,\rdk0
929    aesimc \blk6,\blk6
930    aesd \blk7,\rdk0
931    ld1 {\rdk0s},[\key]
932    aesimc \blk7,\blk7
933
934    aesd \blk0,\rdk1
935    aesd \blk1,\rdk1
936    aesd \blk2,\rdk1
937    aesd \blk3,\rdk1
938    aesd \blk4,\rdk1
939    aesd \blk5,\rdk1
940    aesd \blk6,\rdk1
941    aesd \blk7,\rdk1
942    eor \blk0,\blk0,\rdk0
943    eor \blk1,\blk1,\rdk0
944    eor \blk2,\blk2,\rdk0
945    eor \blk3,\blk3,\rdk0
946    eor \blk4,\blk4,\rdk0
947    eor \blk5,\blk5,\rdk0
948    eor \blk6,\blk6,\rdk0
949    eor \blk7,\blk7,\rdk0
950.endm
951
952#endif
953