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