Path: blob/main/sys/crypto/openssl/arm/aes-armv4.S
39482 views
/* Do not modify. This file is auto-generated from aes-armv4.pl. */1@ Copyright 2007-2020 The OpenSSL Project Authors. All Rights Reserved.2@3@ Licensed under the Apache License 2.0 (the "License"). You may not use4@ this file except in compliance with the License. You can obtain a copy5@ in the file LICENSE in the source distribution or at6@ https://www.openssl.org/source/license.html789@ ====================================================================10@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL11@ project. The module is, however, dual licensed under OpenSSL and12@ CRYPTOGAMS licenses depending on where you obtain it. For further13@ details see http://www.openssl.org/~appro/cryptogams/.14@ ====================================================================1516@ AES for ARMv41718@ January 2007.19@20@ Code uses single 1K S-box and is >2 times faster than code generated21@ by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which22@ allows to merge logical or arithmetic operation with shift or rotate23@ in one instruction and emit combined result every cycle. The module24@ is endian-neutral. The performance is ~42 cycles/byte for 128-bit25@ key [on single-issue Xscale PXA250 core].2627@ May 2007.28@29@ AES_set_[en|de]crypt_key is added.3031@ July 2010.32@33@ Rescheduling for dual-issue pipeline resulted in 12% improvement on34@ Cortex A8 core and ~25 cycles per byte processed with 128-bit key.3536@ February 2011.37@38@ Profiler-assisted and platform-specific optimization resulted in 16%39@ improvement on Cortex A8 core and ~21.5 cycles per byte.4041@ $output is the last argument if it looks like a file (it has an extension)42@ $flavour is the first argument if it doesn't look like a file43#ifndef __KERNEL__44# include "arm_arch.h"45#else46# define __ARM_ARCH__ __LINUX_ARM_ARCH__47#endif4849#if defined(__thumb2__) && !defined(__APPLE__)50.syntax unified51.thumb52#else53.code 3254#undef __thumb2__55#endif5657.text5859.type AES_Te,%object60.align 561AES_Te:62.word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d63.word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c55464.word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d65.word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a66.word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d8767.word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b68.word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea69.word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b70.word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a71.word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f72.word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f10873.word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f74.word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e75.word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab576.word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d77.word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f78.word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e79.word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb80.word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce81.word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x1384849782.word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c83.word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed84.word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b85.word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a86.word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb1687.word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x1185859488.word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f8189.word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e390.word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a91.word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f50492.word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x4221216393.word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d94.word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f95.word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e17173996.word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d4797.word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe673739598.word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f99.word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883100.word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c101.word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76102.word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e103.word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4104.word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6105.word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b106.word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7107.word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0108.word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25109.word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818110.word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72111.word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651112.word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21113.word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85114.word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa115.word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12116.word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0117.word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9118.word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133119.word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7120.word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920121.word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a122.word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17123.word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8124.word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11125.word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a126@ Te4[256]127.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5128.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76129.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0130.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0131.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc132.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15133.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a134.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75135.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0136.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84137.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b138.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf139.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85140.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8141.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5142.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2143.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17144.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73145.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88146.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb147.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c148.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79149.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9150.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08151.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6152.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a153.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e154.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e155.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94156.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf157.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68158.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16159@ rcon[]160.word 0x01000000, 0x02000000, 0x04000000, 0x08000000161.word 0x10000000, 0x20000000, 0x40000000, 0x80000000162.word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0163.size AES_Te,.-AES_Te164165@ void AES_encrypt(const unsigned char *in, unsigned char *out,166@ const AES_KEY *key) {167.globl AES_encrypt168.type AES_encrypt,%function169.align 5170AES_encrypt:171#ifndef __thumb2__172sub r3,pc,#8 @ AES_encrypt173#else174adr r3,.175#endif176stmdb sp!,{r1,r4-r12,lr}177#if defined(__thumb2__) || defined(__APPLE__)178adr r10,AES_Te179#else180sub r10,r3,#AES_encrypt-AES_Te @ Te181#endif182mov r12,r0 @ inp183mov r11,r2184#if __ARM_ARCH__<7185ldrb r0,[r12,#3] @ load input data in endian-neutral186ldrb r4,[r12,#2] @ manner...187ldrb r5,[r12,#1]188ldrb r6,[r12,#0]189orr r0,r0,r4,lsl#8190ldrb r1,[r12,#7]191orr r0,r0,r5,lsl#16192ldrb r4,[r12,#6]193orr r0,r0,r6,lsl#24194ldrb r5,[r12,#5]195ldrb r6,[r12,#4]196orr r1,r1,r4,lsl#8197ldrb r2,[r12,#11]198orr r1,r1,r5,lsl#16199ldrb r4,[r12,#10]200orr r1,r1,r6,lsl#24201ldrb r5,[r12,#9]202ldrb r6,[r12,#8]203orr r2,r2,r4,lsl#8204ldrb r3,[r12,#15]205orr r2,r2,r5,lsl#16206ldrb r4,[r12,#14]207orr r2,r2,r6,lsl#24208ldrb r5,[r12,#13]209ldrb r6,[r12,#12]210orr r3,r3,r4,lsl#8211orr r3,r3,r5,lsl#16212orr r3,r3,r6,lsl#24213#else214ldr r0,[r12,#0]215ldr r1,[r12,#4]216ldr r2,[r12,#8]217ldr r3,[r12,#12]218#ifdef __ARMEL__219rev r0,r0220rev r1,r1221rev r2,r2222rev r3,r3223#endif224#endif225bl _armv4_AES_encrypt226227ldr r12,[sp],#4 @ pop out228#if __ARM_ARCH__>=7229#ifdef __ARMEL__230rev r0,r0231rev r1,r1232rev r2,r2233rev r3,r3234#endif235str r0,[r12,#0]236str r1,[r12,#4]237str r2,[r12,#8]238str r3,[r12,#12]239#else240mov r4,r0,lsr#24 @ write output in endian-neutral241mov r5,r0,lsr#16 @ manner...242mov r6,r0,lsr#8243strb r4,[r12,#0]244strb r5,[r12,#1]245mov r4,r1,lsr#24246strb r6,[r12,#2]247mov r5,r1,lsr#16248strb r0,[r12,#3]249mov r6,r1,lsr#8250strb r4,[r12,#4]251strb r5,[r12,#5]252mov r4,r2,lsr#24253strb r6,[r12,#6]254mov r5,r2,lsr#16255strb r1,[r12,#7]256mov r6,r2,lsr#8257strb r4,[r12,#8]258strb r5,[r12,#9]259mov r4,r3,lsr#24260strb r6,[r12,#10]261mov r5,r3,lsr#16262strb r2,[r12,#11]263mov r6,r3,lsr#8264strb r4,[r12,#12]265strb r5,[r12,#13]266strb r6,[r12,#14]267strb r3,[r12,#15]268#endif269#if __ARM_ARCH__>=5270ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}271#else272ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}273tst lr,#1274moveq pc,lr @ be binary compatible with V4, yet275.word 0xe12fff1e @ interoperable with Thumb ISA:-)276#endif277.size AES_encrypt,.-AES_encrypt278279.type _armv4_AES_encrypt,%function280.align 2281_armv4_AES_encrypt:282str lr,[sp,#-4]! @ push lr283ldmia r11!,{r4,r5,r6,r7}284eor r0,r0,r4285ldr r12,[r11,#240-16]286eor r1,r1,r5287eor r2,r2,r6288eor r3,r3,r7289sub r12,r12,#1290mov lr,#255291292and r7,lr,r0293and r8,lr,r0,lsr#8294and r9,lr,r0,lsr#16295mov r0,r0,lsr#24296.Lenc_loop:297ldr r4,[r10,r7,lsl#2] @ Te3[s0>>0]298and r7,lr,r1,lsr#16 @ i0299ldr r5,[r10,r8,lsl#2] @ Te2[s0>>8]300and r8,lr,r1301ldr r6,[r10,r9,lsl#2] @ Te1[s0>>16]302and r9,lr,r1,lsr#8303ldr r0,[r10,r0,lsl#2] @ Te0[s0>>24]304mov r1,r1,lsr#24305306ldr r7,[r10,r7,lsl#2] @ Te1[s1>>16]307ldr r8,[r10,r8,lsl#2] @ Te3[s1>>0]308ldr r9,[r10,r9,lsl#2] @ Te2[s1>>8]309eor r0,r0,r7,ror#8310ldr r1,[r10,r1,lsl#2] @ Te0[s1>>24]311and r7,lr,r2,lsr#8 @ i0312eor r5,r5,r8,ror#8313and r8,lr,r2,lsr#16 @ i1314eor r6,r6,r9,ror#8315and r9,lr,r2316ldr r7,[r10,r7,lsl#2] @ Te2[s2>>8]317eor r1,r1,r4,ror#24318ldr r8,[r10,r8,lsl#2] @ Te1[s2>>16]319mov r2,r2,lsr#24320321ldr r9,[r10,r9,lsl#2] @ Te3[s2>>0]322eor r0,r0,r7,ror#16323ldr r2,[r10,r2,lsl#2] @ Te0[s2>>24]324and r7,lr,r3 @ i0325eor r1,r1,r8,ror#8326and r8,lr,r3,lsr#8 @ i1327eor r6,r6,r9,ror#16328and r9,lr,r3,lsr#16 @ i2329ldr r7,[r10,r7,lsl#2] @ Te3[s3>>0]330eor r2,r2,r5,ror#16331ldr r8,[r10,r8,lsl#2] @ Te2[s3>>8]332mov r3,r3,lsr#24333334ldr r9,[r10,r9,lsl#2] @ Te1[s3>>16]335eor r0,r0,r7,ror#24336ldr r7,[r11],#16337eor r1,r1,r8,ror#16338ldr r3,[r10,r3,lsl#2] @ Te0[s3>>24]339eor r2,r2,r9,ror#8340ldr r4,[r11,#-12]341eor r3,r3,r6,ror#8342343ldr r5,[r11,#-8]344eor r0,r0,r7345ldr r6,[r11,#-4]346and r7,lr,r0347eor r1,r1,r4348and r8,lr,r0,lsr#8349eor r2,r2,r5350and r9,lr,r0,lsr#16351eor r3,r3,r6352mov r0,r0,lsr#24353354subs r12,r12,#1355bne .Lenc_loop356357add r10,r10,#2358359ldrb r4,[r10,r7,lsl#2] @ Te4[s0>>0]360and r7,lr,r1,lsr#16 @ i0361ldrb r5,[r10,r8,lsl#2] @ Te4[s0>>8]362and r8,lr,r1363ldrb r6,[r10,r9,lsl#2] @ Te4[s0>>16]364and r9,lr,r1,lsr#8365ldrb r0,[r10,r0,lsl#2] @ Te4[s0>>24]366mov r1,r1,lsr#24367368ldrb r7,[r10,r7,lsl#2] @ Te4[s1>>16]369ldrb r8,[r10,r8,lsl#2] @ Te4[s1>>0]370ldrb r9,[r10,r9,lsl#2] @ Te4[s1>>8]371eor r0,r7,r0,lsl#8372ldrb r1,[r10,r1,lsl#2] @ Te4[s1>>24]373and r7,lr,r2,lsr#8 @ i0374eor r5,r8,r5,lsl#8375and r8,lr,r2,lsr#16 @ i1376eor r6,r9,r6,lsl#8377and r9,lr,r2378ldrb r7,[r10,r7,lsl#2] @ Te4[s2>>8]379eor r1,r4,r1,lsl#24380ldrb r8,[r10,r8,lsl#2] @ Te4[s2>>16]381mov r2,r2,lsr#24382383ldrb r9,[r10,r9,lsl#2] @ Te4[s2>>0]384eor r0,r7,r0,lsl#8385ldrb r2,[r10,r2,lsl#2] @ Te4[s2>>24]386and r7,lr,r3 @ i0387eor r1,r1,r8,lsl#16388and r8,lr,r3,lsr#8 @ i1389eor r6,r9,r6,lsl#8390and r9,lr,r3,lsr#16 @ i2391ldrb r7,[r10,r7,lsl#2] @ Te4[s3>>0]392eor r2,r5,r2,lsl#24393ldrb r8,[r10,r8,lsl#2] @ Te4[s3>>8]394mov r3,r3,lsr#24395396ldrb r9,[r10,r9,lsl#2] @ Te4[s3>>16]397eor r0,r7,r0,lsl#8398ldr r7,[r11,#0]399ldrb r3,[r10,r3,lsl#2] @ Te4[s3>>24]400eor r1,r1,r8,lsl#8401ldr r4,[r11,#4]402eor r2,r2,r9,lsl#16403ldr r5,[r11,#8]404eor r3,r6,r3,lsl#24405ldr r6,[r11,#12]406407eor r0,r0,r7408eor r1,r1,r4409eor r2,r2,r5410eor r3,r3,r6411412sub r10,r10,#2413ldr pc,[sp],#4 @ pop and return414.size _armv4_AES_encrypt,.-_armv4_AES_encrypt415416.globl AES_set_encrypt_key417.type AES_set_encrypt_key,%function418.align 5419AES_set_encrypt_key:420_armv4_AES_set_encrypt_key:421#ifndef __thumb2__422sub r3,pc,#8 @ AES_set_encrypt_key423#else424adr r3,.425#endif426teq r0,#0427#ifdef __thumb2__428itt eq @ Thumb2 thing, sanity check in ARM429#endif430moveq r0,#-1431beq .Labrt432teq r2,#0433#ifdef __thumb2__434itt eq @ Thumb2 thing, sanity check in ARM435#endif436moveq r0,#-1437beq .Labrt438439teq r1,#128440beq .Lok441teq r1,#192442beq .Lok443teq r1,#256444#ifdef __thumb2__445itt ne @ Thumb2 thing, sanity check in ARM446#endif447movne r0,#-1448bne .Labrt449450.Lok: stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}451mov r12,r0 @ inp452mov lr,r1 @ bits453mov r11,r2 @ key454455#if defined(__thumb2__) || defined(__APPLE__)456adr r10,AES_Te+1024 @ Te4457#else458sub r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4459#endif460461#if __ARM_ARCH__<7462ldrb r0,[r12,#3] @ load input data in endian-neutral463ldrb r4,[r12,#2] @ manner...464ldrb r5,[r12,#1]465ldrb r6,[r12,#0]466orr r0,r0,r4,lsl#8467ldrb r1,[r12,#7]468orr r0,r0,r5,lsl#16469ldrb r4,[r12,#6]470orr r0,r0,r6,lsl#24471ldrb r5,[r12,#5]472ldrb r6,[r12,#4]473orr r1,r1,r4,lsl#8474ldrb r2,[r12,#11]475orr r1,r1,r5,lsl#16476ldrb r4,[r12,#10]477orr r1,r1,r6,lsl#24478ldrb r5,[r12,#9]479ldrb r6,[r12,#8]480orr r2,r2,r4,lsl#8481ldrb r3,[r12,#15]482orr r2,r2,r5,lsl#16483ldrb r4,[r12,#14]484orr r2,r2,r6,lsl#24485ldrb r5,[r12,#13]486ldrb r6,[r12,#12]487orr r3,r3,r4,lsl#8488str r0,[r11],#16489orr r3,r3,r5,lsl#16490str r1,[r11,#-12]491orr r3,r3,r6,lsl#24492str r2,[r11,#-8]493str r3,[r11,#-4]494#else495ldr r0,[r12,#0]496ldr r1,[r12,#4]497ldr r2,[r12,#8]498ldr r3,[r12,#12]499#ifdef __ARMEL__500rev r0,r0501rev r1,r1502rev r2,r2503rev r3,r3504#endif505str r0,[r11],#16506str r1,[r11,#-12]507str r2,[r11,#-8]508str r3,[r11,#-4]509#endif510511teq lr,#128512bne .Lnot128513mov r12,#10514str r12,[r11,#240-16]515add r6,r10,#256 @ rcon516mov lr,#255517518.L128_loop:519and r5,lr,r3,lsr#24520and r7,lr,r3,lsr#16521ldrb r5,[r10,r5]522and r8,lr,r3,lsr#8523ldrb r7,[r10,r7]524and r9,lr,r3525ldrb r8,[r10,r8]526orr r5,r5,r7,lsl#24527ldrb r9,[r10,r9]528orr r5,r5,r8,lsl#16529ldr r4,[r6],#4 @ rcon[i++]530orr r5,r5,r9,lsl#8531eor r5,r5,r4532eor r0,r0,r5 @ rk[4]=rk[0]^...533eor r1,r1,r0 @ rk[5]=rk[1]^rk[4]534str r0,[r11],#16535eor r2,r2,r1 @ rk[6]=rk[2]^rk[5]536str r1,[r11,#-12]537eor r3,r3,r2 @ rk[7]=rk[3]^rk[6]538str r2,[r11,#-8]539subs r12,r12,#1540str r3,[r11,#-4]541bne .L128_loop542sub r2,r11,#176543b .Ldone544545.Lnot128:546#if __ARM_ARCH__<7547ldrb r8,[r12,#19]548ldrb r4,[r12,#18]549ldrb r5,[r12,#17]550ldrb r6,[r12,#16]551orr r8,r8,r4,lsl#8552ldrb r9,[r12,#23]553orr r8,r8,r5,lsl#16554ldrb r4,[r12,#22]555orr r8,r8,r6,lsl#24556ldrb r5,[r12,#21]557ldrb r6,[r12,#20]558orr r9,r9,r4,lsl#8559orr r9,r9,r5,lsl#16560str r8,[r11],#8561orr r9,r9,r6,lsl#24562str r9,[r11,#-4]563#else564ldr r8,[r12,#16]565ldr r9,[r12,#20]566#ifdef __ARMEL__567rev r8,r8568rev r9,r9569#endif570str r8,[r11],#8571str r9,[r11,#-4]572#endif573574teq lr,#192575bne .Lnot192576mov r12,#12577str r12,[r11,#240-24]578add r6,r10,#256 @ rcon579mov lr,#255580mov r12,#8581582.L192_loop:583and r5,lr,r9,lsr#24584and r7,lr,r9,lsr#16585ldrb r5,[r10,r5]586and r8,lr,r9,lsr#8587ldrb r7,[r10,r7]588and r9,lr,r9589ldrb r8,[r10,r8]590orr r5,r5,r7,lsl#24591ldrb r9,[r10,r9]592orr r5,r5,r8,lsl#16593ldr r4,[r6],#4 @ rcon[i++]594orr r5,r5,r9,lsl#8595eor r9,r5,r4596eor r0,r0,r9 @ rk[6]=rk[0]^...597eor r1,r1,r0 @ rk[7]=rk[1]^rk[6]598str r0,[r11],#24599eor r2,r2,r1 @ rk[8]=rk[2]^rk[7]600str r1,[r11,#-20]601eor r3,r3,r2 @ rk[9]=rk[3]^rk[8]602str r2,[r11,#-16]603subs r12,r12,#1604str r3,[r11,#-12]605#ifdef __thumb2__606itt eq @ Thumb2 thing, sanity check in ARM607#endif608subeq r2,r11,#216609beq .Ldone610611ldr r7,[r11,#-32]612ldr r8,[r11,#-28]613eor r7,r7,r3 @ rk[10]=rk[4]^rk[9]614eor r9,r8,r7 @ rk[11]=rk[5]^rk[10]615str r7,[r11,#-8]616str r9,[r11,#-4]617b .L192_loop618619.Lnot192:620#if __ARM_ARCH__<7621ldrb r8,[r12,#27]622ldrb r4,[r12,#26]623ldrb r5,[r12,#25]624ldrb r6,[r12,#24]625orr r8,r8,r4,lsl#8626ldrb r9,[r12,#31]627orr r8,r8,r5,lsl#16628ldrb r4,[r12,#30]629orr r8,r8,r6,lsl#24630ldrb r5,[r12,#29]631ldrb r6,[r12,#28]632orr r9,r9,r4,lsl#8633orr r9,r9,r5,lsl#16634str r8,[r11],#8635orr r9,r9,r6,lsl#24636str r9,[r11,#-4]637#else638ldr r8,[r12,#24]639ldr r9,[r12,#28]640#ifdef __ARMEL__641rev r8,r8642rev r9,r9643#endif644str r8,[r11],#8645str r9,[r11,#-4]646#endif647648mov r12,#14649str r12,[r11,#240-32]650add r6,r10,#256 @ rcon651mov lr,#255652mov r12,#7653654.L256_loop:655and r5,lr,r9,lsr#24656and r7,lr,r9,lsr#16657ldrb r5,[r10,r5]658and r8,lr,r9,lsr#8659ldrb r7,[r10,r7]660and r9,lr,r9661ldrb r8,[r10,r8]662orr r5,r5,r7,lsl#24663ldrb r9,[r10,r9]664orr r5,r5,r8,lsl#16665ldr r4,[r6],#4 @ rcon[i++]666orr r5,r5,r9,lsl#8667eor r9,r5,r4668eor r0,r0,r9 @ rk[8]=rk[0]^...669eor r1,r1,r0 @ rk[9]=rk[1]^rk[8]670str r0,[r11],#32671eor r2,r2,r1 @ rk[10]=rk[2]^rk[9]672str r1,[r11,#-28]673eor r3,r3,r2 @ rk[11]=rk[3]^rk[10]674str r2,[r11,#-24]675subs r12,r12,#1676str r3,[r11,#-20]677#ifdef __thumb2__678itt eq @ Thumb2 thing, sanity check in ARM679#endif680subeq r2,r11,#256681beq .Ldone682683and r5,lr,r3684and r7,lr,r3,lsr#8685ldrb r5,[r10,r5]686and r8,lr,r3,lsr#16687ldrb r7,[r10,r7]688and r9,lr,r3,lsr#24689ldrb r8,[r10,r8]690orr r5,r5,r7,lsl#8691ldrb r9,[r10,r9]692orr r5,r5,r8,lsl#16693ldr r4,[r11,#-48]694orr r5,r5,r9,lsl#24695696ldr r7,[r11,#-44]697ldr r8,[r11,#-40]698eor r4,r4,r5 @ rk[12]=rk[4]^...699ldr r9,[r11,#-36]700eor r7,r7,r4 @ rk[13]=rk[5]^rk[12]701str r4,[r11,#-16]702eor r8,r8,r7 @ rk[14]=rk[6]^rk[13]703str r7,[r11,#-12]704eor r9,r9,r8 @ rk[15]=rk[7]^rk[14]705str r8,[r11,#-8]706str r9,[r11,#-4]707b .L256_loop708709.align 2710.Ldone: mov r0,#0711ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}712.Labrt:713#if __ARM_ARCH__>=5714bx lr @ .word 0xe12fff1e715#else716tst lr,#1717moveq pc,lr @ be binary compatible with V4, yet718.word 0xe12fff1e @ interoperable with Thumb ISA:-)719#endif720.size AES_set_encrypt_key,.-AES_set_encrypt_key721722.globl AES_set_decrypt_key723.type AES_set_decrypt_key,%function724.align 5725AES_set_decrypt_key:726str lr,[sp,#-4]! @ push lr727bl _armv4_AES_set_encrypt_key728teq r0,#0729ldr lr,[sp],#4 @ pop lr730bne .Labrt731732mov r0,r2 @ AES_set_encrypt_key preserves r2,733mov r1,r2 @ which is AES_KEY *key734b _armv4_AES_set_enc2dec_key735.size AES_set_decrypt_key,.-AES_set_decrypt_key736737@ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out)738.globl AES_set_enc2dec_key739.type AES_set_enc2dec_key,%function740.align 5741AES_set_enc2dec_key:742_armv4_AES_set_enc2dec_key:743stmdb sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}744745ldr r12,[r0,#240]746mov r7,r0 @ input747add r8,r0,r12,lsl#4748mov r11,r1 @ output749add r10,r1,r12,lsl#4750str r12,[r1,#240]751752.Linv: ldr r0,[r7],#16753ldr r1,[r7,#-12]754ldr r2,[r7,#-8]755ldr r3,[r7,#-4]756ldr r4,[r8],#-16757ldr r5,[r8,#16+4]758ldr r6,[r8,#16+8]759ldr r9,[r8,#16+12]760str r0,[r10],#-16761str r1,[r10,#16+4]762str r2,[r10,#16+8]763str r3,[r10,#16+12]764str r4,[r11],#16765str r5,[r11,#-12]766str r6,[r11,#-8]767str r9,[r11,#-4]768teq r7,r8769bne .Linv770771ldr r0,[r7]772ldr r1,[r7,#4]773ldr r2,[r7,#8]774ldr r3,[r7,#12]775str r0,[r11]776str r1,[r11,#4]777str r2,[r11,#8]778str r3,[r11,#12]779sub r11,r11,r12,lsl#3780ldr r0,[r11,#16]! @ prefetch tp1781mov r7,#0x80782mov r8,#0x1b783orr r7,r7,#0x8000784orr r8,r8,#0x1b00785orr r7,r7,r7,lsl#16786orr r8,r8,r8,lsl#16787sub r12,r12,#1788mvn r9,r7789mov r12,r12,lsl#2 @ (rounds-1)*4790791.Lmix: and r4,r0,r7792and r1,r0,r9793sub r4,r4,r4,lsr#7794and r4,r4,r8795eor r1,r4,r1,lsl#1 @ tp2796797and r4,r1,r7798and r2,r1,r9799sub r4,r4,r4,lsr#7800and r4,r4,r8801eor r2,r4,r2,lsl#1 @ tp4802803and r4,r2,r7804and r3,r2,r9805sub r4,r4,r4,lsr#7806and r4,r4,r8807eor r3,r4,r3,lsl#1 @ tp8808809eor r4,r1,r2810eor r5,r0,r3 @ tp9811eor r4,r4,r3 @ tpe812eor r4,r4,r1,ror#24813eor r4,r4,r5,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8)814eor r4,r4,r2,ror#16815eor r4,r4,r5,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16)816eor r4,r4,r5,ror#8 @ ^= ROTATE(tp9,24)817818ldr r0,[r11,#4] @ prefetch tp1819str r4,[r11],#4820subs r12,r12,#1821bne .Lmix822823mov r0,#0824#if __ARM_ARCH__>=5825ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}826#else827ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}828tst lr,#1829moveq pc,lr @ be binary compatible with V4, yet830.word 0xe12fff1e @ interoperable with Thumb ISA:-)831#endif832.size AES_set_enc2dec_key,.-AES_set_enc2dec_key833834.type AES_Td,%object835.align 5836AES_Td:837.word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96838.word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393839.word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25840.word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f841.word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1842.word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6843.word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da844.word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844845.word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd846.word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4847.word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45848.word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94849.word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7850.word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a851.word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5852.word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c853.word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1854.word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a855.word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75856.word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051857.word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46858.word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff859.word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77860.word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb861.word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000862.word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e863.word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927864.word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a865.word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e866.word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16867.word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d868.word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8869.word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd870.word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34871.word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163872.word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120873.word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d874.word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0875.word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422876.word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef877.word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36878.word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4879.word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662880.word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5881.word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3882.word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b883.word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8884.word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6885.word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6886.word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0887.word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815888.word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f889.word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df890.word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f891.word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e892.word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713893.word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89894.word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c895.word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf896.word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86897.word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f898.word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541899.word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190900.word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742901@ Td4[256]902.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38903.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb904.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87905.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb906.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d907.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e908.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2909.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25910.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16911.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92912.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda913.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84914.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a915.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06916.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02917.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b918.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea919.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73920.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85921.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e922.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89923.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b924.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20925.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4926.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31927.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f928.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d929.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef930.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0931.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61932.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26933.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d934.size AES_Td,.-AES_Td935936@ void AES_decrypt(const unsigned char *in, unsigned char *out,937@ const AES_KEY *key) {938.globl AES_decrypt939.type AES_decrypt,%function940.align 5941AES_decrypt:942#ifndef __thumb2__943sub r3,pc,#8 @ AES_decrypt944#else945adr r3,.946#endif947stmdb sp!,{r1,r4-r12,lr}948#if defined(__thumb2__) || defined(__APPLE__)949adr r10,AES_Td950#else951sub r10,r3,#AES_decrypt-AES_Td @ Td952#endif953mov r12,r0 @ inp954mov r11,r2955#if __ARM_ARCH__<7956ldrb r0,[r12,#3] @ load input data in endian-neutral957ldrb r4,[r12,#2] @ manner...958ldrb r5,[r12,#1]959ldrb r6,[r12,#0]960orr r0,r0,r4,lsl#8961ldrb r1,[r12,#7]962orr r0,r0,r5,lsl#16963ldrb r4,[r12,#6]964orr r0,r0,r6,lsl#24965ldrb r5,[r12,#5]966ldrb r6,[r12,#4]967orr r1,r1,r4,lsl#8968ldrb r2,[r12,#11]969orr r1,r1,r5,lsl#16970ldrb r4,[r12,#10]971orr r1,r1,r6,lsl#24972ldrb r5,[r12,#9]973ldrb r6,[r12,#8]974orr r2,r2,r4,lsl#8975ldrb r3,[r12,#15]976orr r2,r2,r5,lsl#16977ldrb r4,[r12,#14]978orr r2,r2,r6,lsl#24979ldrb r5,[r12,#13]980ldrb r6,[r12,#12]981orr r3,r3,r4,lsl#8982orr r3,r3,r5,lsl#16983orr r3,r3,r6,lsl#24984#else985ldr r0,[r12,#0]986ldr r1,[r12,#4]987ldr r2,[r12,#8]988ldr r3,[r12,#12]989#ifdef __ARMEL__990rev r0,r0991rev r1,r1992rev r2,r2993rev r3,r3994#endif995#endif996bl _armv4_AES_decrypt997998ldr r12,[sp],#4 @ pop out999#if __ARM_ARCH__>=71000#ifdef __ARMEL__1001rev r0,r01002rev r1,r11003rev r2,r21004rev r3,r31005#endif1006str r0,[r12,#0]1007str r1,[r12,#4]1008str r2,[r12,#8]1009str r3,[r12,#12]1010#else1011mov r4,r0,lsr#24 @ write output in endian-neutral1012mov r5,r0,lsr#16 @ manner...1013mov r6,r0,lsr#81014strb r4,[r12,#0]1015strb r5,[r12,#1]1016mov r4,r1,lsr#241017strb r6,[r12,#2]1018mov r5,r1,lsr#161019strb r0,[r12,#3]1020mov r6,r1,lsr#81021strb r4,[r12,#4]1022strb r5,[r12,#5]1023mov r4,r2,lsr#241024strb r6,[r12,#6]1025mov r5,r2,lsr#161026strb r1,[r12,#7]1027mov r6,r2,lsr#81028strb r4,[r12,#8]1029strb r5,[r12,#9]1030mov r4,r3,lsr#241031strb r6,[r12,#10]1032mov r5,r3,lsr#161033strb r2,[r12,#11]1034mov r6,r3,lsr#81035strb r4,[r12,#12]1036strb r5,[r12,#13]1037strb r6,[r12,#14]1038strb r3,[r12,#15]1039#endif1040#if __ARM_ARCH__>=51041ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,pc}1042#else1043ldmia sp!,{r4,r5,r6,r7,r8,r9,r10,r11,r12,lr}1044tst lr,#11045moveq pc,lr @ be binary compatible with V4, yet1046.word 0xe12fff1e @ interoperable with Thumb ISA:-)1047#endif1048.size AES_decrypt,.-AES_decrypt10491050.type _armv4_AES_decrypt,%function1051.align 21052_armv4_AES_decrypt:1053str lr,[sp,#-4]! @ push lr1054ldmia r11!,{r4,r5,r6,r7}1055eor r0,r0,r41056ldr r12,[r11,#240-16]1057eor r1,r1,r51058eor r2,r2,r61059eor r3,r3,r71060sub r12,r12,#11061mov lr,#25510621063and r7,lr,r0,lsr#161064and r8,lr,r0,lsr#81065and r9,lr,r01066mov r0,r0,lsr#241067.Ldec_loop:1068ldr r4,[r10,r7,lsl#2] @ Td1[s0>>16]1069and r7,lr,r1 @ i01070ldr r5,[r10,r8,lsl#2] @ Td2[s0>>8]1071and r8,lr,r1,lsr#161072ldr r6,[r10,r9,lsl#2] @ Td3[s0>>0]1073and r9,lr,r1,lsr#81074ldr r0,[r10,r0,lsl#2] @ Td0[s0>>24]1075mov r1,r1,lsr#2410761077ldr r7,[r10,r7,lsl#2] @ Td3[s1>>0]1078ldr r8,[r10,r8,lsl#2] @ Td1[s1>>16]1079ldr r9,[r10,r9,lsl#2] @ Td2[s1>>8]1080eor r0,r0,r7,ror#241081ldr r1,[r10,r1,lsl#2] @ Td0[s1>>24]1082and r7,lr,r2,lsr#8 @ i01083eor r5,r8,r5,ror#81084and r8,lr,r2 @ i11085eor r6,r9,r6,ror#81086and r9,lr,r2,lsr#161087ldr r7,[r10,r7,lsl#2] @ Td2[s2>>8]1088eor r1,r1,r4,ror#81089ldr r8,[r10,r8,lsl#2] @ Td3[s2>>0]1090mov r2,r2,lsr#2410911092ldr r9,[r10,r9,lsl#2] @ Td1[s2>>16]1093eor r0,r0,r7,ror#161094ldr r2,[r10,r2,lsl#2] @ Td0[s2>>24]1095and r7,lr,r3,lsr#16 @ i01096eor r1,r1,r8,ror#241097and r8,lr,r3,lsr#8 @ i11098eor r6,r9,r6,ror#81099and r9,lr,r3 @ i21100ldr r7,[r10,r7,lsl#2] @ Td1[s3>>16]1101eor r2,r2,r5,ror#81102ldr r8,[r10,r8,lsl#2] @ Td2[s3>>8]1103mov r3,r3,lsr#2411041105ldr r9,[r10,r9,lsl#2] @ Td3[s3>>0]1106eor r0,r0,r7,ror#81107ldr r7,[r11],#161108eor r1,r1,r8,ror#161109ldr r3,[r10,r3,lsl#2] @ Td0[s3>>24]1110eor r2,r2,r9,ror#2411111112ldr r4,[r11,#-12]1113eor r0,r0,r71114ldr r5,[r11,#-8]1115eor r3,r3,r6,ror#81116ldr r6,[r11,#-4]1117and r7,lr,r0,lsr#161118eor r1,r1,r41119and r8,lr,r0,lsr#81120eor r2,r2,r51121and r9,lr,r01122eor r3,r3,r61123mov r0,r0,lsr#2411241125subs r12,r12,#11126bne .Ldec_loop11271128add r10,r10,#102411291130ldr r5,[r10,#0] @ prefetch Td41131ldr r6,[r10,#32]1132ldr r4,[r10,#64]1133ldr r5,[r10,#96]1134ldr r6,[r10,#128]1135ldr r4,[r10,#160]1136ldr r5,[r10,#192]1137ldr r6,[r10,#224]11381139ldrb r0,[r10,r0] @ Td4[s0>>24]1140ldrb r4,[r10,r7] @ Td4[s0>>16]1141and r7,lr,r1 @ i01142ldrb r5,[r10,r8] @ Td4[s0>>8]1143and r8,lr,r1,lsr#161144ldrb r6,[r10,r9] @ Td4[s0>>0]1145and r9,lr,r1,lsr#811461147add r1,r10,r1,lsr#241148ldrb r7,[r10,r7] @ Td4[s1>>0]1149ldrb r1,[r1] @ Td4[s1>>24]1150ldrb r8,[r10,r8] @ Td4[s1>>16]1151eor r0,r7,r0,lsl#241152ldrb r9,[r10,r9] @ Td4[s1>>8]1153eor r1,r4,r1,lsl#81154and r7,lr,r2,lsr#8 @ i01155eor r5,r5,r8,lsl#81156and r8,lr,r2 @ i11157ldrb r7,[r10,r7] @ Td4[s2>>8]1158eor r6,r6,r9,lsl#81159ldrb r8,[r10,r8] @ Td4[s2>>0]1160and r9,lr,r2,lsr#1611611162add r2,r10,r2,lsr#241163ldrb r2,[r2] @ Td4[s2>>24]1164eor r0,r0,r7,lsl#81165ldrb r9,[r10,r9] @ Td4[s2>>16]1166eor r1,r8,r1,lsl#161167and r7,lr,r3,lsr#16 @ i01168eor r2,r5,r2,lsl#161169and r8,lr,r3,lsr#8 @ i11170ldrb r7,[r10,r7] @ Td4[s3>>16]1171eor r6,r6,r9,lsl#161172ldrb r8,[r10,r8] @ Td4[s3>>8]1173and r9,lr,r3 @ i211741175add r3,r10,r3,lsr#241176ldrb r9,[r10,r9] @ Td4[s3>>0]1177ldrb r3,[r3] @ Td4[s3>>24]1178eor r0,r0,r7,lsl#161179ldr r7,[r11,#0]1180eor r1,r1,r8,lsl#81181ldr r4,[r11,#4]1182eor r2,r9,r2,lsl#81183ldr r5,[r11,#8]1184eor r3,r6,r3,lsl#241185ldr r6,[r11,#12]11861187eor r0,r0,r71188eor r1,r1,r41189eor r2,r2,r51190eor r3,r3,r611911192sub r10,r10,#10241193ldr pc,[sp],#4 @ pop and return1194.size _armv4_AES_decrypt,.-_armv4_AES_decrypt1195.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,01196.align 21197.align 2119811991200