Revert "Merge branch 'upstream' into tizen"
[platform/upstream/nettle.git] / arm / aes.m4
1 C Loads one word, and adds it to the subkey. Uses T0
2 C AES_LOAD(SRC, KEY, REG)
3 define(<AES_LOAD>, <
4         ldrb    $3, [$1], #+1
5         ldrb    T0, [$1], #+1
6         orr     $3, T0, lsl #8
7         ldrb    T0, [$1], #+1
8         orr     $3, T0, lsl #16
9         ldrb    T0, [$1], #+1
10         orr     $3, T0, lsl #24
11         ldr     T0, [$2], #+4
12         eor     $3, T0
13 >)
14 C Stores one word. Destroys input.
15 C AES_STORE(DST, X)
16 define(<AES_STORE>, <
17         strb    $2, [$1], #+1
18         ror     $2, $2, #8
19         strb    $2, [$1], #+1
20         ror     $2, $2, #8
21         strb    $2, [$1], #+1
22         ror     $2, $2, #8
23         strb    $2, [$1], #+1
24 >)
25
26 C 53 instr.
27 C It's tempting to use eor with rotation, but that's slower.
28 C AES_ENCRYPT_ROUND(x0,x1,x2,x3,w0,w1,w2,w3,key)
29 define(<AES_ENCRYPT_ROUND>, <
30         uxtb    T0, $1 
31         ldr     $5, [TABLE, T0, lsl #2]
32         uxtb    T0, $2
33         ldr     $6, [TABLE, T0, lsl #2]
34         uxtb    T0, $3
35         ldr     $7, [TABLE, T0, lsl #2]
36         uxtb    T0, $4
37         ldr     $8, [TABLE, T0, lsl #2]
38
39         uxtb    T0, $2, ror #8
40         add     TABLE, TABLE, #1024
41         ldr     T0, [TABLE, T0, lsl #2]
42         eor     $5, $5, T0
43         uxtb    T0, $3, ror #8
44         ldr     T0, [TABLE, T0, lsl #2]
45         eor     $6, $6, T0
46         uxtb    T0, $4, ror #8
47         ldr     T0, [TABLE, T0, lsl #2]
48         eor     $7, $7, T0
49         uxtb    T0, $1, ror #8
50         ldr     T0, [TABLE, T0, lsl #2]
51         eor     $8, $8, T0
52
53         uxtb    T0, $3, ror #16
54         add     TABLE, TABLE, #1024
55         ldr     T0, [TABLE, T0, lsl #2]
56         eor     $5, $5, T0
57         uxtb    T0, $4, ror #16
58         ldr     T0, [TABLE, T0, lsl #2]
59         eor     $6, $6, T0
60         uxtb    T0, $1, ror #16
61         ldr     T0, [TABLE, T0, lsl #2]
62         eor     $7, $7, T0
63         uxtb    T0, $2, ror #16
64         ldr     T0, [TABLE, T0, lsl #2]
65         eor     $8, $8, T0
66
67         uxtb    T0, $4, ror #24
68         add     TABLE, TABLE, #1024
69         ldr     T0, [TABLE, T0, lsl #2]
70         eor     $5, $5, T0
71         uxtb    T0, $1, ror #24
72         ldr     T0, [TABLE, T0, lsl #2]
73         eor     $6, $6, T0
74         uxtb    T0, $2, ror #24
75         ldr     T0, [TABLE, T0, lsl #2]
76         eor     $7, $7, T0
77         uxtb    T0, $3, ror #24
78         ldr     T0, [TABLE, T0, lsl #2]
79
80         ldm     $9!, {$1,$2,$3,$4}
81         eor     $8, $8, T0
82         sub     TABLE, TABLE, #3072
83         eor     $5, $5, $1
84         eor     $6, $6, $2
85         eor     $7, $7, $3
86         eor     $8, $8, $4
87 >)
88
89 define(<AES_DECRYPT_ROUND>, <
90         uxtb    T0, $1
91         ldr     $5, [TABLE, T0, lsl #2]
92         uxtb    T0, $2
93         ldr     $6, [TABLE, T0, lsl #2]
94         uxtb    T0, $3
95         ldr     $7, [TABLE, T0, lsl #2]
96         uxtb    T0, $4
97         ldr     $8, [TABLE, T0, lsl #2]
98
99         uxtb    T0, $4, ror #8
100         add     TABLE, TABLE, #1024
101         ldr     T0, [TABLE, T0, lsl #2]
102         eor     $5, $5, T0
103         uxtb    T0, $1, ror #8
104         ldr     T0, [TABLE, T0, lsl #2]
105         eor     $6, $6, T0
106         uxtb    T0, $2, ror #8
107         ldr     T0, [TABLE, T0, lsl #2]
108         eor     $7, $7, T0
109         uxtb    T0, $3, ror #8
110         ldr     T0, [TABLE, T0, lsl #2]
111         eor     $8, $8, T0
112
113         uxtb    T0, $3, ror #16
114         add     TABLE, TABLE, #1024
115         ldr     T0, [TABLE, T0, lsl #2]
116         eor     $5, $5, T0
117         uxtb    T0, $4, ror #16
118         ldr     T0, [TABLE, T0, lsl #2]
119         eor     $6, $6, T0
120         uxtb    T0, $1, ror #16
121         ldr     T0, [TABLE, T0, lsl #2]
122         eor     $7, $7, T0
123         uxtb    T0, $2, ror #16
124         ldr     T0, [TABLE, T0, lsl #2]
125         eor     $8, $8, T0
126
127         uxtb    T0, $2, ror #24
128         add     TABLE, TABLE, #1024
129         ldr     T0, [TABLE, T0, lsl #2]
130         eor     $5, $5, T0
131         uxtb    T0, $3, ror #24
132         ldr     T0, [TABLE, T0, lsl #2]
133         eor     $6, $6, T0
134         uxtb    T0, $4, ror #24
135         ldr     T0, [TABLE, T0, lsl #2]
136         eor     $7, $7, T0
137         uxtb    T0, $1, ror #24
138         ldr     T0, [TABLE, T0, lsl #2]
139
140         ldm     $9!, {$1,$2,$3,$4}
141         eor     $8, $8, T0
142         sub     TABLE, TABLE, #3072
143         eor     $5, $5, $1
144         eor     $6, $6, $2
145         eor     $7, $7, $3
146         eor     $8, $8, $4
147 >)
148
149 C AES_FINAL_ROUND(a,b,c,d,key,res)
150 define(<AES_FINAL_ROUND>, <
151         uxtb    T0, $1
152         ldrb    $6, [TABLE, T0]
153         uxtb    T0, $2, ror #8
154         ldrb    T0, [TABLE, T0]
155         eor     $6, $6, T0, lsl #8
156         uxtb    T0, $3, ror #16
157         ldrb    T0, [TABLE, T0]
158         eor     $6, $6, T0, lsl #16
159         uxtb    T0, $4, ror #24
160         ldrb    T0, [TABLE, T0]
161         eor     $6, $6, T0, lsl #24
162         ldr     T0, [$5], #+4
163         eor     $6, T0
164 >)