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