Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(435)

Side by Side Diff: openssl/crypto/aes/asm/aes-armv4.S

Issue 2072073002: Delete bundled copy of OpenSSL and replace with README. (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/openssl@master
Patch Set: Delete bundled copy of OpenSSL and replace with README. Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « openssl/crypto/aes/asm/aes-586-mac.S ('k') | openssl/crypto/aes/asm/aes-armv4.pl » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #include "arm_arch.h"
2 .text
3 .code 32
4
5 .type AES_Te,%object
6 .align 5
7 AES_Te:
8 .word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d
9 .word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554
10 .word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d
11 .word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a
12 .word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87
13 .word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b
14 .word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea
15 .word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b
16 .word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a
17 .word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f
18 .word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108
19 .word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f
20 .word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e
21 .word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5
22 .word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d
23 .word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f
24 .word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e
25 .word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb
26 .word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce
27 .word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497
28 .word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c
29 .word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed
30 .word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b
31 .word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a
32 .word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16
33 .word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594
34 .word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81
35 .word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3
36 .word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a
37 .word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504
38 .word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163
39 .word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d
40 .word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f
41 .word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739
42 .word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47
43 .word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395
44 .word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f
45 .word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883
46 .word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c
47 .word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76
48 .word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e
49 .word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4
50 .word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6
51 .word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b
52 .word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7
53 .word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0
54 .word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25
55 .word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818
56 .word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72
57 .word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651
58 .word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21
59 .word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85
60 .word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa
61 .word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12
62 .word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0
63 .word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9
64 .word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133
65 .word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7
66 .word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920
67 .word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a
68 .word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17
69 .word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8
70 .word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11
71 .word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a
72 @ Te4[256]
73 .byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5
74 .byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
75 .byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
76 .byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
77 .byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
78 .byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
79 .byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
80 .byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
81 .byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
82 .byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
83 .byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
84 .byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
85 .byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
86 .byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
87 .byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
88 .byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
89 .byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
90 .byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
91 .byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
92 .byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
93 .byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
94 .byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
95 .byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
96 .byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
97 .byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
98 .byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
99 .byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
100 .byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
101 .byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
102 .byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
103 .byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
104 .byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
105 @ rcon[]
106 .word 0x01000000, 0x02000000, 0x04000000, 0x08000000
107 .word 0x10000000, 0x20000000, 0x40000000, 0x80000000
108 .word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0
109 .size AES_Te,.-AES_Te
110
111 @ void AES_encrypt(const unsigned char *in, unsigned char *out,
112 @ const AES_KEY *key) {
113 .global AES_encrypt
114 .type AES_encrypt,%function
115 .align 5
116 AES_encrypt:
117 sub r3,pc,#8 @ AES_encrypt
118 stmdb sp!,{r1,r4-r12,lr}
119 mov r12,r0 @ inp
120 mov r11,r2
121 sub r10,r3,#AES_encrypt-AES_Te @ Te
122 #if __ARM_ARCH__<7
123 ldrb r0,[r12,#3] @ load input data in endian-neutral
124 ldrb r4,[r12,#2] @ manner...
125 ldrb r5,[r12,#1]
126 ldrb r6,[r12,#0]
127 orr r0,r0,r4,lsl#8
128 ldrb r1,[r12,#7]
129 orr r0,r0,r5,lsl#16
130 ldrb r4,[r12,#6]
131 orr r0,r0,r6,lsl#24
132 ldrb r5,[r12,#5]
133 ldrb r6,[r12,#4]
134 orr r1,r1,r4,lsl#8
135 ldrb r2,[r12,#11]
136 orr r1,r1,r5,lsl#16
137 ldrb r4,[r12,#10]
138 orr r1,r1,r6,lsl#24
139 ldrb r5,[r12,#9]
140 ldrb r6,[r12,#8]
141 orr r2,r2,r4,lsl#8
142 ldrb r3,[r12,#15]
143 orr r2,r2,r5,lsl#16
144 ldrb r4,[r12,#14]
145 orr r2,r2,r6,lsl#24
146 ldrb r5,[r12,#13]
147 ldrb r6,[r12,#12]
148 orr r3,r3,r4,lsl#8
149 orr r3,r3,r5,lsl#16
150 orr r3,r3,r6,lsl#24
151 #else
152 ldr r0,[r12,#0]
153 ldr r1,[r12,#4]
154 ldr r2,[r12,#8]
155 ldr r3,[r12,#12]
156 #ifdef __ARMEL__
157 rev r0,r0
158 rev r1,r1
159 rev r2,r2
160 rev r3,r3
161 #endif
162 #endif
163 bl _armv4_AES_encrypt
164
165 ldr r12,[sp],#4 @ pop out
166 #if __ARM_ARCH__>=7
167 #ifdef __ARMEL__
168 rev r0,r0
169 rev r1,r1
170 rev r2,r2
171 rev r3,r3
172 #endif
173 str r0,[r12,#0]
174 str r1,[r12,#4]
175 str r2,[r12,#8]
176 str r3,[r12,#12]
177 #else
178 mov r4,r0,lsr#24 @ write output in endian-neutral
179 mov r5,r0,lsr#16 @ manner...
180 mov r6,r0,lsr#8
181 strb r4,[r12,#0]
182 strb r5,[r12,#1]
183 mov r4,r1,lsr#24
184 strb r6,[r12,#2]
185 mov r5,r1,lsr#16
186 strb r0,[r12,#3]
187 mov r6,r1,lsr#8
188 strb r4,[r12,#4]
189 strb r5,[r12,#5]
190 mov r4,r2,lsr#24
191 strb r6,[r12,#6]
192 mov r5,r2,lsr#16
193 strb r1,[r12,#7]
194 mov r6,r2,lsr#8
195 strb r4,[r12,#8]
196 strb r5,[r12,#9]
197 mov r4,r3,lsr#24
198 strb r6,[r12,#10]
199 mov r5,r3,lsr#16
200 strb r2,[r12,#11]
201 mov r6,r3,lsr#8
202 strb r4,[r12,#12]
203 strb r5,[r12,#13]
204 strb r6,[r12,#14]
205 strb r3,[r12,#15]
206 #endif
207 #if __ARM_ARCH__>=5
208 ldmia sp!,{r4-r12,pc}
209 #else
210 ldmia sp!,{r4-r12,lr}
211 tst lr,#1
212 moveq pc,lr @ be binary compatible with V4, yet
213 .word 0xe12fff1e @ interoperable with Thumb ISA:- )
214 #endif
215 .size AES_encrypt,.-AES_encrypt
216
217 .type _armv4_AES_encrypt,%function
218 .align 2
219 _armv4_AES_encrypt:
220 str lr,[sp,#-4]! @ push lr
221 ldmia r11!,{r4-r7}
222 eor r0,r0,r4
223 ldr r12,[r11,#240-16]
224 eor r1,r1,r5
225 eor r2,r2,r6
226 eor r3,r3,r7
227 sub r12,r12,#1
228 mov lr,#255
229
230 and r7,lr,r0
231 and r8,lr,r0,lsr#8
232 and r9,lr,r0,lsr#16
233 mov r0,r0,lsr#24
234 .Lenc_loop:
235 ldr r4,[r10,r7,lsl#2] @ Te3[s0>>0]
236 and r7,lr,r1,lsr#16 @ i0
237 ldr r5,[r10,r8,lsl#2] @ Te2[s0>>8]
238 and r8,lr,r1
239 ldr r6,[r10,r9,lsl#2] @ Te1[s0>>16]
240 and r9,lr,r1,lsr#8
241 ldr r0,[r10,r0,lsl#2] @ Te0[s0>>24]
242 mov r1,r1,lsr#24
243
244 ldr r7,[r10,r7,lsl#2] @ Te1[s1>>16]
245 ldr r8,[r10,r8,lsl#2] @ Te3[s1>>0]
246 ldr r9,[r10,r9,lsl#2] @ Te2[s1>>8]
247 eor r0,r0,r7,ror#8
248 ldr r1,[r10,r1,lsl#2] @ Te0[s1>>24]
249 and r7,lr,r2,lsr#8 @ i0
250 eor r5,r5,r8,ror#8
251 and r8,lr,r2,lsr#16 @ i1
252 eor r6,r6,r9,ror#8
253 and r9,lr,r2
254 ldr r7,[r10,r7,lsl#2] @ Te2[s2>>8]
255 eor r1,r1,r4,ror#24
256 ldr r8,[r10,r8,lsl#2] @ Te1[s2>>16]
257 mov r2,r2,lsr#24
258
259 ldr r9,[r10,r9,lsl#2] @ Te3[s2>>0]
260 eor r0,r0,r7,ror#16
261 ldr r2,[r10,r2,lsl#2] @ Te0[s2>>24]
262 and r7,lr,r3 @ i0
263 eor r1,r1,r8,ror#8
264 and r8,lr,r3,lsr#8 @ i1
265 eor r6,r6,r9,ror#16
266 and r9,lr,r3,lsr#16 @ i2
267 ldr r7,[r10,r7,lsl#2] @ Te3[s3>>0]
268 eor r2,r2,r5,ror#16
269 ldr r8,[r10,r8,lsl#2] @ Te2[s3>>8]
270 mov r3,r3,lsr#24
271
272 ldr r9,[r10,r9,lsl#2] @ Te1[s3>>16]
273 eor r0,r0,r7,ror#24
274 ldr r7,[r11],#16
275 eor r1,r1,r8,ror#16
276 ldr r3,[r10,r3,lsl#2] @ Te0[s3>>24]
277 eor r2,r2,r9,ror#8
278 ldr r4,[r11,#-12]
279 eor r3,r3,r6,ror#8
280
281 ldr r5,[r11,#-8]
282 eor r0,r0,r7
283 ldr r6,[r11,#-4]
284 and r7,lr,r0
285 eor r1,r1,r4
286 and r8,lr,r0,lsr#8
287 eor r2,r2,r5
288 and r9,lr,r0,lsr#16
289 eor r3,r3,r6
290 mov r0,r0,lsr#24
291
292 subs r12,r12,#1
293 bne .Lenc_loop
294
295 add r10,r10,#2
296
297 ldrb r4,[r10,r7,lsl#2] @ Te4[s0>>0]
298 and r7,lr,r1,lsr#16 @ i0
299 ldrb r5,[r10,r8,lsl#2] @ Te4[s0>>8]
300 and r8,lr,r1
301 ldrb r6,[r10,r9,lsl#2] @ Te4[s0>>16]
302 and r9,lr,r1,lsr#8
303 ldrb r0,[r10,r0,lsl#2] @ Te4[s0>>24]
304 mov r1,r1,lsr#24
305
306 ldrb r7,[r10,r7,lsl#2] @ Te4[s1>>16]
307 ldrb r8,[r10,r8,lsl#2] @ Te4[s1>>0]
308 ldrb r9,[r10,r9,lsl#2] @ Te4[s1>>8]
309 eor r0,r7,r0,lsl#8
310 ldrb r1,[r10,r1,lsl#2] @ Te4[s1>>24]
311 and r7,lr,r2,lsr#8 @ i0
312 eor r5,r8,r5,lsl#8
313 and r8,lr,r2,lsr#16 @ i1
314 eor r6,r9,r6,lsl#8
315 and r9,lr,r2
316 ldrb r7,[r10,r7,lsl#2] @ Te4[s2>>8]
317 eor r1,r4,r1,lsl#24
318 ldrb r8,[r10,r8,lsl#2] @ Te4[s2>>16]
319 mov r2,r2,lsr#24
320
321 ldrb r9,[r10,r9,lsl#2] @ Te4[s2>>0]
322 eor r0,r7,r0,lsl#8
323 ldrb r2,[r10,r2,lsl#2] @ Te4[s2>>24]
324 and r7,lr,r3 @ i0
325 eor r1,r1,r8,lsl#16
326 and r8,lr,r3,lsr#8 @ i1
327 eor r6,r9,r6,lsl#8
328 and r9,lr,r3,lsr#16 @ i2
329 ldrb r7,[r10,r7,lsl#2] @ Te4[s3>>0]
330 eor r2,r5,r2,lsl#24
331 ldrb r8,[r10,r8,lsl#2] @ Te4[s3>>8]
332 mov r3,r3,lsr#24
333
334 ldrb r9,[r10,r9,lsl#2] @ Te4[s3>>16]
335 eor r0,r7,r0,lsl#8
336 ldr r7,[r11,#0]
337 ldrb r3,[r10,r3,lsl#2] @ Te4[s3>>24]
338 eor r1,r1,r8,lsl#8
339 ldr r4,[r11,#4]
340 eor r2,r2,r9,lsl#16
341 ldr r5,[r11,#8]
342 eor r3,r6,r3,lsl#24
343 ldr r6,[r11,#12]
344
345 eor r0,r0,r7
346 eor r1,r1,r4
347 eor r2,r2,r5
348 eor r3,r3,r6
349
350 sub r10,r10,#2
351 ldr pc,[sp],#4 @ pop and return
352 .size _armv4_AES_encrypt,.-_armv4_AES_encrypt
353
354 .global private_AES_set_encrypt_key
355 .type private_AES_set_encrypt_key,%function
356 .align 5
357 private_AES_set_encrypt_key:
358 _armv4_AES_set_encrypt_key:
359 sub r3,pc,#8 @ AES_set_encrypt_key
360 teq r0,#0
361 moveq r0,#-1
362 beq .Labrt
363 teq r2,#0
364 moveq r0,#-1
365 beq .Labrt
366
367 teq r1,#128
368 beq .Lok
369 teq r1,#192
370 beq .Lok
371 teq r1,#256
372 movne r0,#-1
373 bne .Labrt
374
375 .Lok: stmdb sp!,{r4-r12,lr}
376 sub r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4
377
378 mov r12,r0 @ inp
379 mov lr,r1 @ bits
380 mov r11,r2 @ key
381
382 #if __ARM_ARCH__<7
383 ldrb r0,[r12,#3] @ load input data in endian-neutral
384 ldrb r4,[r12,#2] @ manner...
385 ldrb r5,[r12,#1]
386 ldrb r6,[r12,#0]
387 orr r0,r0,r4,lsl#8
388 ldrb r1,[r12,#7]
389 orr r0,r0,r5,lsl#16
390 ldrb r4,[r12,#6]
391 orr r0,r0,r6,lsl#24
392 ldrb r5,[r12,#5]
393 ldrb r6,[r12,#4]
394 orr r1,r1,r4,lsl#8
395 ldrb r2,[r12,#11]
396 orr r1,r1,r5,lsl#16
397 ldrb r4,[r12,#10]
398 orr r1,r1,r6,lsl#24
399 ldrb r5,[r12,#9]
400 ldrb r6,[r12,#8]
401 orr r2,r2,r4,lsl#8
402 ldrb r3,[r12,#15]
403 orr r2,r2,r5,lsl#16
404 ldrb r4,[r12,#14]
405 orr r2,r2,r6,lsl#24
406 ldrb r5,[r12,#13]
407 ldrb r6,[r12,#12]
408 orr r3,r3,r4,lsl#8
409 str r0,[r11],#16
410 orr r3,r3,r5,lsl#16
411 str r1,[r11,#-12]
412 orr r3,r3,r6,lsl#24
413 str r2,[r11,#-8]
414 str r3,[r11,#-4]
415 #else
416 ldr r0,[r12,#0]
417 ldr r1,[r12,#4]
418 ldr r2,[r12,#8]
419 ldr r3,[r12,#12]
420 #ifdef __ARMEL__
421 rev r0,r0
422 rev r1,r1
423 rev r2,r2
424 rev r3,r3
425 #endif
426 str r0,[r11],#16
427 str r1,[r11,#-12]
428 str r2,[r11,#-8]
429 str r3,[r11,#-4]
430 #endif
431
432 teq lr,#128
433 bne .Lnot128
434 mov r12,#10
435 str r12,[r11,#240-16]
436 add r6,r10,#256 @ rcon
437 mov lr,#255
438
439 .L128_loop:
440 and r5,lr,r3,lsr#24
441 and r7,lr,r3,lsr#16
442 ldrb r5,[r10,r5]
443 and r8,lr,r3,lsr#8
444 ldrb r7,[r10,r7]
445 and r9,lr,r3
446 ldrb r8,[r10,r8]
447 orr r5,r5,r7,lsl#24
448 ldrb r9,[r10,r9]
449 orr r5,r5,r8,lsl#16
450 ldr r4,[r6],#4 @ rcon[i++]
451 orr r5,r5,r9,lsl#8
452 eor r5,r5,r4
453 eor r0,r0,r5 @ rk[4]=rk[0]^...
454 eor r1,r1,r0 @ rk[5]=rk[1]^rk[4]
455 str r0,[r11],#16
456 eor r2,r2,r1 @ rk[6]=rk[2]^rk[5]
457 str r1,[r11,#-12]
458 eor r3,r3,r2 @ rk[7]=rk[3]^rk[6]
459 str r2,[r11,#-8]
460 subs r12,r12,#1
461 str r3,[r11,#-4]
462 bne .L128_loop
463 sub r2,r11,#176
464 b .Ldone
465
466 .Lnot128:
467 #if __ARM_ARCH__<7
468 ldrb r8,[r12,#19]
469 ldrb r4,[r12,#18]
470 ldrb r5,[r12,#17]
471 ldrb r6,[r12,#16]
472 orr r8,r8,r4,lsl#8
473 ldrb r9,[r12,#23]
474 orr r8,r8,r5,lsl#16
475 ldrb r4,[r12,#22]
476 orr r8,r8,r6,lsl#24
477 ldrb r5,[r12,#21]
478 ldrb r6,[r12,#20]
479 orr r9,r9,r4,lsl#8
480 orr r9,r9,r5,lsl#16
481 str r8,[r11],#8
482 orr r9,r9,r6,lsl#24
483 str r9,[r11,#-4]
484 #else
485 ldr r8,[r12,#16]
486 ldr r9,[r12,#20]
487 #ifdef __ARMEL__
488 rev r8,r8
489 rev r9,r9
490 #endif
491 str r8,[r11],#8
492 str r9,[r11,#-4]
493 #endif
494
495 teq lr,#192
496 bne .Lnot192
497 mov r12,#12
498 str r12,[r11,#240-24]
499 add r6,r10,#256 @ rcon
500 mov lr,#255
501 mov r12,#8
502
503 .L192_loop:
504 and r5,lr,r9,lsr#24
505 and r7,lr,r9,lsr#16
506 ldrb r5,[r10,r5]
507 and r8,lr,r9,lsr#8
508 ldrb r7,[r10,r7]
509 and r9,lr,r9
510 ldrb r8,[r10,r8]
511 orr r5,r5,r7,lsl#24
512 ldrb r9,[r10,r9]
513 orr r5,r5,r8,lsl#16
514 ldr r4,[r6],#4 @ rcon[i++]
515 orr r5,r5,r9,lsl#8
516 eor r9,r5,r4
517 eor r0,r0,r9 @ rk[6]=rk[0]^...
518 eor r1,r1,r0 @ rk[7]=rk[1]^rk[6]
519 str r0,[r11],#24
520 eor r2,r2,r1 @ rk[8]=rk[2]^rk[7]
521 str r1,[r11,#-20]
522 eor r3,r3,r2 @ rk[9]=rk[3]^rk[8]
523 str r2,[r11,#-16]
524 subs r12,r12,#1
525 str r3,[r11,#-12]
526 subeq r2,r11,#216
527 beq .Ldone
528
529 ldr r7,[r11,#-32]
530 ldr r8,[r11,#-28]
531 eor r7,r7,r3 @ rk[10]=rk[4]^rk[9]
532 eor r9,r8,r7 @ rk[11]=rk[5]^rk[10]
533 str r7,[r11,#-8]
534 str r9,[r11,#-4]
535 b .L192_loop
536
537 .Lnot192:
538 #if __ARM_ARCH__<7
539 ldrb r8,[r12,#27]
540 ldrb r4,[r12,#26]
541 ldrb r5,[r12,#25]
542 ldrb r6,[r12,#24]
543 orr r8,r8,r4,lsl#8
544 ldrb r9,[r12,#31]
545 orr r8,r8,r5,lsl#16
546 ldrb r4,[r12,#30]
547 orr r8,r8,r6,lsl#24
548 ldrb r5,[r12,#29]
549 ldrb r6,[r12,#28]
550 orr r9,r9,r4,lsl#8
551 orr r9,r9,r5,lsl#16
552 str r8,[r11],#8
553 orr r9,r9,r6,lsl#24
554 str r9,[r11,#-4]
555 #else
556 ldr r8,[r12,#24]
557 ldr r9,[r12,#28]
558 #ifdef __ARMEL__
559 rev r8,r8
560 rev r9,r9
561 #endif
562 str r8,[r11],#8
563 str r9,[r11,#-4]
564 #endif
565
566 mov r12,#14
567 str r12,[r11,#240-32]
568 add r6,r10,#256 @ rcon
569 mov lr,#255
570 mov r12,#7
571
572 .L256_loop:
573 and r5,lr,r9,lsr#24
574 and r7,lr,r9,lsr#16
575 ldrb r5,[r10,r5]
576 and r8,lr,r9,lsr#8
577 ldrb r7,[r10,r7]
578 and r9,lr,r9
579 ldrb r8,[r10,r8]
580 orr r5,r5,r7,lsl#24
581 ldrb r9,[r10,r9]
582 orr r5,r5,r8,lsl#16
583 ldr r4,[r6],#4 @ rcon[i++]
584 orr r5,r5,r9,lsl#8
585 eor r9,r5,r4
586 eor r0,r0,r9 @ rk[8]=rk[0]^...
587 eor r1,r1,r0 @ rk[9]=rk[1]^rk[8]
588 str r0,[r11],#32
589 eor r2,r2,r1 @ rk[10]=rk[2]^rk[9]
590 str r1,[r11,#-28]
591 eor r3,r3,r2 @ rk[11]=rk[3]^rk[10]
592 str r2,[r11,#-24]
593 subs r12,r12,#1
594 str r3,[r11,#-20]
595 subeq r2,r11,#256
596 beq .Ldone
597
598 and r5,lr,r3
599 and r7,lr,r3,lsr#8
600 ldrb r5,[r10,r5]
601 and r8,lr,r3,lsr#16
602 ldrb r7,[r10,r7]
603 and r9,lr,r3,lsr#24
604 ldrb r8,[r10,r8]
605 orr r5,r5,r7,lsl#8
606 ldrb r9,[r10,r9]
607 orr r5,r5,r8,lsl#16
608 ldr r4,[r11,#-48]
609 orr r5,r5,r9,lsl#24
610
611 ldr r7,[r11,#-44]
612 ldr r8,[r11,#-40]
613 eor r4,r4,r5 @ rk[12]=rk[4]^...
614 ldr r9,[r11,#-36]
615 eor r7,r7,r4 @ rk[13]=rk[5]^rk[12]
616 str r4,[r11,#-16]
617 eor r8,r8,r7 @ rk[14]=rk[6]^rk[13]
618 str r7,[r11,#-12]
619 eor r9,r9,r8 @ rk[15]=rk[7]^rk[14]
620 str r8,[r11,#-8]
621 str r9,[r11,#-4]
622 b .L256_loop
623
624 .Ldone: mov r0,#0
625 ldmia sp!,{r4-r12,lr}
626 .Labrt: tst lr,#1
627 moveq pc,lr @ be binary compatible with V4, yet
628 .word 0xe12fff1e @ interoperable with Thumb ISA:- )
629 .size private_AES_set_encrypt_key,.-private_AES_set_encrypt_key
630
631 .global private_AES_set_decrypt_key
632 .type private_AES_set_decrypt_key,%function
633 .align 5
634 private_AES_set_decrypt_key:
635 str lr,[sp,#-4]! @ push lr
636 bl _armv4_AES_set_encrypt_key
637 teq r0,#0
638 ldrne lr,[sp],#4 @ pop lr
639 bne .Labrt
640
641 stmdb sp!,{r4-r12}
642
643 ldr r12,[r2,#240] @ AES_set_encrypt_key preserves r2,
644 mov r11,r2 @ which is AES_KEY *key
645 mov r7,r2
646 add r8,r2,r12,lsl#4
647
648 .Linv: ldr r0,[r7]
649 ldr r1,[r7,#4]
650 ldr r2,[r7,#8]
651 ldr r3,[r7,#12]
652 ldr r4,[r8]
653 ldr r5,[r8,#4]
654 ldr r6,[r8,#8]
655 ldr r9,[r8,#12]
656 str r0,[r8],#-16
657 str r1,[r8,#16+4]
658 str r2,[r8,#16+8]
659 str r3,[r8,#16+12]
660 str r4,[r7],#16
661 str r5,[r7,#-12]
662 str r6,[r7,#-8]
663 str r9,[r7,#-4]
664 teq r7,r8
665 bne .Linv
666 ldr r0,[r11,#16]! @ prefetch tp1
667 mov r7,#0x80
668 mov r8,#0x1b
669 orr r7,r7,#0x8000
670 orr r8,r8,#0x1b00
671 orr r7,r7,r7,lsl#16
672 orr r8,r8,r8,lsl#16
673 sub r12,r12,#1
674 mvn r9,r7
675 mov r12,r12,lsl#2 @ (rounds-1)*4
676
677 .Lmix: and r4,r0,r7
678 and r1,r0,r9
679 sub r4,r4,r4,lsr#7
680 and r4,r4,r8
681 eor r1,r4,r1,lsl#1 @ tp2
682
683 and r4,r1,r7
684 and r2,r1,r9
685 sub r4,r4,r4,lsr#7
686 and r4,r4,r8
687 eor r2,r4,r2,lsl#1 @ tp4
688
689 and r4,r2,r7
690 and r3,r2,r9
691 sub r4,r4,r4,lsr#7
692 and r4,r4,r8
693 eor r3,r4,r3,lsl#1 @ tp8
694
695 eor r4,r1,r2
696 eor r5,r0,r3 @ tp9
697 eor r4,r4,r3 @ tpe
698 eor r4,r4,r1,ror#24
699 eor r4,r4,r5,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8)
700 eor r4,r4,r2,ror#16
701 eor r4,r4,r5,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16)
702 eor r4,r4,r5,ror#8 @ ^= ROTATE(tp9,24)
703
704 ldr r0,[r11,#4] @ prefetch tp1
705 str r4,[r11],#4
706 subs r12,r12,#1
707 bne .Lmix
708
709 mov r0,#0
710 #if __ARM_ARCH__>=5
711 ldmia sp!,{r4-r12,pc}
712 #else
713 ldmia sp!,{r4-r12,lr}
714 tst lr,#1
715 moveq pc,lr @ be binary compatible with V4, yet
716 .word 0xe12fff1e @ interoperable with Thumb ISA:- )
717 #endif
718 .size private_AES_set_decrypt_key,.-private_AES_set_decrypt_key
719
720 .type AES_Td,%object
721 .align 5
722 AES_Td:
723 .word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96
724 .word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393
725 .word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25
726 .word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f
727 .word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1
728 .word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6
729 .word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da
730 .word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844
731 .word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd
732 .word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4
733 .word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45
734 .word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94
735 .word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7
736 .word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a
737 .word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5
738 .word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c
739 .word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1
740 .word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a
741 .word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75
742 .word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051
743 .word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46
744 .word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff
745 .word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77
746 .word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb
747 .word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000
748 .word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e
749 .word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927
750 .word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a
751 .word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e
752 .word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16
753 .word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d
754 .word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8
755 .word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd
756 .word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34
757 .word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163
758 .word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120
759 .word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d
760 .word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0
761 .word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422
762 .word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef
763 .word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36
764 .word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4
765 .word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662
766 .word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5
767 .word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3
768 .word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b
769 .word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8
770 .word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6
771 .word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6
772 .word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0
773 .word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815
774 .word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f
775 .word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df
776 .word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f
777 .word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e
778 .word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713
779 .word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89
780 .word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c
781 .word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf
782 .word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86
783 .word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f
784 .word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541
785 .word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190
786 .word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742
787 @ Td4[256]
788 .byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38
789 .byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb
790 .byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87
791 .byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb
792 .byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d
793 .byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e
794 .byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2
795 .byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25
796 .byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16
797 .byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92
798 .byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda
799 .byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84
800 .byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a
801 .byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06
802 .byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02
803 .byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b
804 .byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea
805 .byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73
806 .byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85
807 .byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e
808 .byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89
809 .byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b
810 .byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20
811 .byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4
812 .byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31
813 .byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f
814 .byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d
815 .byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef
816 .byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0
817 .byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
818 .byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
819 .byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
820 .size AES_Td,.-AES_Td
821
822 @ void AES_decrypt(const unsigned char *in, unsigned char *out,
823 @ const AES_KEY *key) {
824 .global AES_decrypt
825 .type AES_decrypt,%function
826 .align 5
827 AES_decrypt:
828 sub r3,pc,#8 @ AES_decrypt
829 stmdb sp!,{r1,r4-r12,lr}
830 mov r12,r0 @ inp
831 mov r11,r2
832 sub r10,r3,#AES_decrypt-AES_Td @ Td
833 #if __ARM_ARCH__<7
834 ldrb r0,[r12,#3] @ load input data in endian-neutral
835 ldrb r4,[r12,#2] @ manner...
836 ldrb r5,[r12,#1]
837 ldrb r6,[r12,#0]
838 orr r0,r0,r4,lsl#8
839 ldrb r1,[r12,#7]
840 orr r0,r0,r5,lsl#16
841 ldrb r4,[r12,#6]
842 orr r0,r0,r6,lsl#24
843 ldrb r5,[r12,#5]
844 ldrb r6,[r12,#4]
845 orr r1,r1,r4,lsl#8
846 ldrb r2,[r12,#11]
847 orr r1,r1,r5,lsl#16
848 ldrb r4,[r12,#10]
849 orr r1,r1,r6,lsl#24
850 ldrb r5,[r12,#9]
851 ldrb r6,[r12,#8]
852 orr r2,r2,r4,lsl#8
853 ldrb r3,[r12,#15]
854 orr r2,r2,r5,lsl#16
855 ldrb r4,[r12,#14]
856 orr r2,r2,r6,lsl#24
857 ldrb r5,[r12,#13]
858 ldrb r6,[r12,#12]
859 orr r3,r3,r4,lsl#8
860 orr r3,r3,r5,lsl#16
861 orr r3,r3,r6,lsl#24
862 #else
863 ldr r0,[r12,#0]
864 ldr r1,[r12,#4]
865 ldr r2,[r12,#8]
866 ldr r3,[r12,#12]
867 #ifdef __ARMEL__
868 rev r0,r0
869 rev r1,r1
870 rev r2,r2
871 rev r3,r3
872 #endif
873 #endif
874 bl _armv4_AES_decrypt
875
876 ldr r12,[sp],#4 @ pop out
877 #if __ARM_ARCH__>=7
878 #ifdef __ARMEL__
879 rev r0,r0
880 rev r1,r1
881 rev r2,r2
882 rev r3,r3
883 #endif
884 str r0,[r12,#0]
885 str r1,[r12,#4]
886 str r2,[r12,#8]
887 str r3,[r12,#12]
888 #else
889 mov r4,r0,lsr#24 @ write output in endian-neutral
890 mov r5,r0,lsr#16 @ manner...
891 mov r6,r0,lsr#8
892 strb r4,[r12,#0]
893 strb r5,[r12,#1]
894 mov r4,r1,lsr#24
895 strb r6,[r12,#2]
896 mov r5,r1,lsr#16
897 strb r0,[r12,#3]
898 mov r6,r1,lsr#8
899 strb r4,[r12,#4]
900 strb r5,[r12,#5]
901 mov r4,r2,lsr#24
902 strb r6,[r12,#6]
903 mov r5,r2,lsr#16
904 strb r1,[r12,#7]
905 mov r6,r2,lsr#8
906 strb r4,[r12,#8]
907 strb r5,[r12,#9]
908 mov r4,r3,lsr#24
909 strb r6,[r12,#10]
910 mov r5,r3,lsr#16
911 strb r2,[r12,#11]
912 mov r6,r3,lsr#8
913 strb r4,[r12,#12]
914 strb r5,[r12,#13]
915 strb r6,[r12,#14]
916 strb r3,[r12,#15]
917 #endif
918 #if __ARM_ARCH__>=5
919 ldmia sp!,{r4-r12,pc}
920 #else
921 ldmia sp!,{r4-r12,lr}
922 tst lr,#1
923 moveq pc,lr @ be binary compatible with V4, yet
924 .word 0xe12fff1e @ interoperable with Thumb ISA:- )
925 #endif
926 .size AES_decrypt,.-AES_decrypt
927
928 .type _armv4_AES_decrypt,%function
929 .align 2
930 _armv4_AES_decrypt:
931 str lr,[sp,#-4]! @ push lr
932 ldmia r11!,{r4-r7}
933 eor r0,r0,r4
934 ldr r12,[r11,#240-16]
935 eor r1,r1,r5
936 eor r2,r2,r6
937 eor r3,r3,r7
938 sub r12,r12,#1
939 mov lr,#255
940
941 and r7,lr,r0,lsr#16
942 and r8,lr,r0,lsr#8
943 and r9,lr,r0
944 mov r0,r0,lsr#24
945 .Ldec_loop:
946 ldr r4,[r10,r7,lsl#2] @ Td1[s0>>16]
947 and r7,lr,r1 @ i0
948 ldr r5,[r10,r8,lsl#2] @ Td2[s0>>8]
949 and r8,lr,r1,lsr#16
950 ldr r6,[r10,r9,lsl#2] @ Td3[s0>>0]
951 and r9,lr,r1,lsr#8
952 ldr r0,[r10,r0,lsl#2] @ Td0[s0>>24]
953 mov r1,r1,lsr#24
954
955 ldr r7,[r10,r7,lsl#2] @ Td3[s1>>0]
956 ldr r8,[r10,r8,lsl#2] @ Td1[s1>>16]
957 ldr r9,[r10,r9,lsl#2] @ Td2[s1>>8]
958 eor r0,r0,r7,ror#24
959 ldr r1,[r10,r1,lsl#2] @ Td0[s1>>24]
960 and r7,lr,r2,lsr#8 @ i0
961 eor r5,r8,r5,ror#8
962 and r8,lr,r2 @ i1
963 eor r6,r9,r6,ror#8
964 and r9,lr,r2,lsr#16
965 ldr r7,[r10,r7,lsl#2] @ Td2[s2>>8]
966 eor r1,r1,r4,ror#8
967 ldr r8,[r10,r8,lsl#2] @ Td3[s2>>0]
968 mov r2,r2,lsr#24
969
970 ldr r9,[r10,r9,lsl#2] @ Td1[s2>>16]
971 eor r0,r0,r7,ror#16
972 ldr r2,[r10,r2,lsl#2] @ Td0[s2>>24]
973 and r7,lr,r3,lsr#16 @ i0
974 eor r1,r1,r8,ror#24
975 and r8,lr,r3,lsr#8 @ i1
976 eor r6,r9,r6,ror#8
977 and r9,lr,r3 @ i2
978 ldr r7,[r10,r7,lsl#2] @ Td1[s3>>16]
979 eor r2,r2,r5,ror#8
980 ldr r8,[r10,r8,lsl#2] @ Td2[s3>>8]
981 mov r3,r3,lsr#24
982
983 ldr r9,[r10,r9,lsl#2] @ Td3[s3>>0]
984 eor r0,r0,r7,ror#8
985 ldr r7,[r11],#16
986 eor r1,r1,r8,ror#16
987 ldr r3,[r10,r3,lsl#2] @ Td0[s3>>24]
988 eor r2,r2,r9,ror#24
989
990 ldr r4,[r11,#-12]
991 eor r0,r0,r7
992 ldr r5,[r11,#-8]
993 eor r3,r3,r6,ror#8
994 ldr r6,[r11,#-4]
995 and r7,lr,r0,lsr#16
996 eor r1,r1,r4
997 and r8,lr,r0,lsr#8
998 eor r2,r2,r5
999 and r9,lr,r0
1000 eor r3,r3,r6
1001 mov r0,r0,lsr#24
1002
1003 subs r12,r12,#1
1004 bne .Ldec_loop
1005
1006 add r10,r10,#1024
1007
1008 ldr r5,[r10,#0] @ prefetch Td4
1009 ldr r6,[r10,#32]
1010 ldr r4,[r10,#64]
1011 ldr r5,[r10,#96]
1012 ldr r6,[r10,#128]
1013 ldr r4,[r10,#160]
1014 ldr r5,[r10,#192]
1015 ldr r6,[r10,#224]
1016
1017 ldrb r0,[r10,r0] @ Td4[s0>>24]
1018 ldrb r4,[r10,r7] @ Td4[s0>>16]
1019 and r7,lr,r1 @ i0
1020 ldrb r5,[r10,r8] @ Td4[s0>>8]
1021 and r8,lr,r1,lsr#16
1022 ldrb r6,[r10,r9] @ Td4[s0>>0]
1023 and r9,lr,r1,lsr#8
1024
1025 ldrb r7,[r10,r7] @ Td4[s1>>0]
1026 ldrb r1,[r10,r1,lsr#24] @ Td4[s1>>24]
1027 ldrb r8,[r10,r8] @ Td4[s1>>16]
1028 eor r0,r7,r0,lsl#24
1029 ldrb r9,[r10,r9] @ Td4[s1>>8]
1030 eor r1,r4,r1,lsl#8
1031 and r7,lr,r2,lsr#8 @ i0
1032 eor r5,r5,r8,lsl#8
1033 and r8,lr,r2 @ i1
1034 ldrb r7,[r10,r7] @ Td4[s2>>8]
1035 eor r6,r6,r9,lsl#8
1036 ldrb r8,[r10,r8] @ Td4[s2>>0]
1037 and r9,lr,r2,lsr#16
1038
1039 ldrb r2,[r10,r2,lsr#24] @ Td4[s2>>24]
1040 eor r0,r0,r7,lsl#8
1041 ldrb r9,[r10,r9] @ Td4[s2>>16]
1042 eor r1,r8,r1,lsl#16
1043 and r7,lr,r3,lsr#16 @ i0
1044 eor r2,r5,r2,lsl#16
1045 and r8,lr,r3,lsr#8 @ i1
1046 ldrb r7,[r10,r7] @ Td4[s3>>16]
1047 eor r6,r6,r9,lsl#16
1048 ldrb r8,[r10,r8] @ Td4[s3>>8]
1049 and r9,lr,r3 @ i2
1050
1051 ldrb r9,[r10,r9] @ Td4[s3>>0]
1052 ldrb r3,[r10,r3,lsr#24] @ Td4[s3>>24]
1053 eor r0,r0,r7,lsl#16
1054 ldr r7,[r11,#0]
1055 eor r1,r1,r8,lsl#8
1056 ldr r4,[r11,#4]
1057 eor r2,r9,r2,lsl#8
1058 ldr r5,[r11,#8]
1059 eor r3,r6,r3,lsl#24
1060 ldr r6,[r11,#12]
1061
1062 eor r0,r0,r7
1063 eor r1,r1,r4
1064 eor r2,r2,r5
1065 eor r3,r3,r6
1066
1067 sub r10,r10,#1024
1068 ldr pc,[sp],#4 @ pop and return
1069 .size _armv4_AES_decrypt,.-_armv4_AES_decrypt
1070 .asciz "AES for ARMv4, CRYPTOGAMS by <appro@openssl.org>"
1071 .align 2
OLDNEW
« no previous file with comments | « openssl/crypto/aes/asm/aes-586-mac.S ('k') | openssl/crypto/aes/asm/aes-armv4.pl » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698