15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ ==================================================================== 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ project. The module is, however, dual licensed under OpenSSL and 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ CRYPTOGAMS licenses depending on where you obtain it. For further 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ details see http://www.openssl.org/~appro/cryptogams/. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ ==================================================================== 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ AES for ARMv4 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ January 2007. 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@ Code uses single 1K S-box and is >2 times faster than code generated 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@ by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@ allows to merge logical or arithmetic operation with shift or rotate 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@ in one instruction and emit combined result every cycle. The module 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ is endian-neutral. The performance is ~42 cycles/byte for 128-bit 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ key [on single-issue Xscale PXA250 core]. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ May 2007. 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)@ AES_set_[en|de]crypt_key is added. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ July 2010. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ Rescheduling for dual-issue pipeline resulted in 12% improvement on 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ Cortex A8 core and ~25 cycles per byte processed with 128-bit key. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ February 2011. 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ Profiler-assisted and platform-specific optimization resulted in 16% 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ improvement on Cortex A8 core and ~21.5 cycles per byte. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__arm__) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef __KERNEL__ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# include "arm_arch.h" 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# define __ARM_ARCH__ __LINUX_ARM_ARCH__ 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).text 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).code 32 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).syntax unified 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# ifdef __thumb2__ 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).thumb 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# else 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).code 32 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)# endif 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).type AES_Te,%object 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles).align 5 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)AES_Te: 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles).word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles).word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ Te4[256] 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 146c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles).byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ rcon[] 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x01000000, 0x02000000, 0x04000000, 0x08000000 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x10000000, 0x20000000, 0x40000000, 0x80000000 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size AES_Te,.-AES_Te 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ void asm_AES_encrypt(const unsigned char *in, unsigned char *out, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ const AES_KEY *key) { 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).global asm_AES_encrypt 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).hidden asm_AES_encrypt 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type asm_AES_encrypt,%function 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 5 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)asm_AES_encrypt: 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r3,pc,#8 @ asm_AES_encrypt 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) adr r3,asm_AES_encrypt 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stmdb sp!,{r1,r4-r12,lr} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,r0 @ inp 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r11,r2 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r10,r3,#asm_AES_encrypt-AES_Te @ Te 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r0,[r12,#3] @ load input data in endian-neutral 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#2] @ manner... 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#1] 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#0] 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r4,lsl#8 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r1,[r12,#7] 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r5,lsl#16 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#6] 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r6,lsl#24 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#5] 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#4] 18790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) orr r1,r1,r4,lsl#8 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r2,[r12,#11] 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r5,lsl#16 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#10] 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r6,lsl#24 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#9] 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#8] 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r4,lsl#8 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r3,[r12,#15] 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r5,lsl#16 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#14] 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r6,lsl#24 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#13] 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#12] 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r4,lsl#8 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r5,lsl#16 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r6,lsl#24 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r12,#0] 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r1,[r12,#4] 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r2,[r12,#8] 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r3,[r12,#12] 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __ARMEL__ 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r0,r0 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r1,r1 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r2,r2 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r3,r3 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bl _armv4_AES_encrypt 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r12,[sp],#4 @ pop out 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__>=7 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __ARMEL__ 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r0,r0 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r1,r1 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r2,r2 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r3,r3 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r12,#0] 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r12,#4] 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r2,[r12,#8] 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r12,#12] 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r4,r0,lsr#24 @ write output in endian-neutral 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r5,r0,lsr#16 @ manner... 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r6,r0,lsr#8 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r4,[r12,#0] 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r5,[r12,#1] 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r4,r1,lsr#24 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r6,[r12,#2] 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r5,r1,lsr#16 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r0,[r12,#3] 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r6,r1,lsr#8 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r4,[r12,#4] 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r5,[r12,#5] 24390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) mov r4,r2,lsr#24 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r6,[r12,#6] 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r5,r2,lsr#16 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r1,[r12,#7] 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r6,r2,lsr#8 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r4,[r12,#8] 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r5,[r12,#9] 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r4,r3,lsr#24 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r6,[r12,#10] 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r5,r3,lsr#16 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r2,[r12,#11] 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r6,r3,lsr#8 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r4,[r12,#12] 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r5,[r12,#13] 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r6,[r12,#14] 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) strb r3,[r12,#15] 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__>=5 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldmia sp!,{r4-r12,pc} 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldmia sp!,{r4-r12,lr} 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tst lr,#1 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) moveq pc,lr @ be binary compatible with V4, yet 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .word 0xe12fff1e @ interoperable with Thumb ISA:-) 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size asm_AES_encrypt,.-asm_AES_encrypt 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type _armv4_AES_encrypt,%function 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 2 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_armv4_AES_encrypt: 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str lr,[sp,#-4]! @ push lr 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldmia r11!,{r4-r7} 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r4 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r12,[r11,#240-16] 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r5 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r6 27990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) eor r3,r3,r7 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r12,r12,#1 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov lr,#255 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r0 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r0,lsr#8 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r0,lsr#16 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r0,r0,lsr#24 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).Lenc_loop: 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r4,[r10,r7,lsl#2] @ Te3[s0>>0] 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r1,lsr#16 @ i0 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r5,[r10,r8,lsl#2] @ Te2[s0>>8] 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r1 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r6,[r10,r9,lsl#2] @ Te1[s0>>16] 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r1,lsr#8 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r10,r0,lsl#2] @ Te0[s0>>24] 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r1,r1,lsr#24 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r7,[r10,r7,lsl#2] @ Te1[s1>>16] 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r8,[r10,r8,lsl#2] @ Te3[s1>>0] 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r9,[r10,r9,lsl#2] @ Te2[s1>>8] 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r7,ror#8 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r1,[r10,r1,lsl#2] @ Te0[s1>>24] 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r2,lsr#8 @ i0 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r5,r5,r8,ror#8 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r2,lsr#16 @ i1 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r6,r6,r9,ror#8 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r2 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r7,[r10,r7,lsl#2] @ Te2[s2>>8] 30890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) eor r1,r1,r4,ror#24 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r8,[r10,r8,lsl#2] @ Te1[s2>>16] 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r2,r2,lsr#24 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r9,[r10,r9,lsl#2] @ Te3[s2>>0] 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r7,ror#16 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r2,[r10,r2,lsl#2] @ Te0[s2>>24] 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r3 @ i0 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r8,ror#8 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r3,lsr#8 @ i1 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r6,r6,r9,ror#16 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r3,lsr#16 @ i2 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r7,[r10,r7,lsl#2] @ Te3[s3>>0] 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r5,ror#16 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r8,[r10,r8,lsl#2] @ Te2[s3>>8] 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r3,r3,lsr#24 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r9,[r10,r9,lsl#2] @ Te1[s3>>16] 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r7,ror#24 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r7,[r11],#16 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r8,ror#16 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r3,[r10,r3,lsl#2] @ Te0[s3>>24] 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r9,ror#8 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r4,[r11,#-12] 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r3,r6,ror#8 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r5,[r11,#-8] 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r7 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r6,[r11,#-4] 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r0 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r4 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r0,lsr#8 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r5 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r0,lsr#16 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r3,r6 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r0,r0,lsr#24 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subs r12,r12,#1 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .Lenc_loop 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add r10,r10,#2 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r10,r7,lsl#2] @ Te4[s0>>0] 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r1,lsr#16 @ i0 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r10,r8,lsl#2] @ Te4[s0>>8] 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r1 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r10,r9,lsl#2] @ Te4[s0>>16] 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r1,lsr#8 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r0,[r10,r0,lsl#2] @ Te4[s0>>24] 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r1,r1,lsr#24 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r7,[r10,r7,lsl#2] @ Te4[s1>>16] 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r8,[r10,r8,lsl#2] @ Te4[s1>>0] 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r9,[r10,r9,lsl#2] @ Te4[s1>>8] 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r7,r0,lsl#8 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r1,[r10,r1,lsl#2] @ Te4[s1>>24] 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r2,lsr#8 @ i0 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r5,r8,r5,lsl#8 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r2,lsr#16 @ i1 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r6,r9,r6,lsl#8 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r2 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r7,[r10,r7,lsl#2] @ Te4[s2>>8] 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r4,r1,lsl#24 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r8,[r10,r8,lsl#2] @ Te4[s2>>16] 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r2,r2,lsr#24 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r9,[r10,r9,lsl#2] @ Te4[s2>>0] 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r7,r0,lsl#8 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r2,[r10,r2,lsl#2] @ Te4[s2>>24] 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r3 @ i0 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r8,lsl#16 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r3,lsr#8 @ i1 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r6,r9,r6,lsl#8 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r3,lsr#16 @ i2 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r7,[r10,r7,lsl#2] @ Te4[s3>>0] 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r5,r2,lsl#24 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r8,[r10,r8,lsl#2] @ Te4[s3>>8] 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r3,r3,lsr#24 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r9,[r10,r9,lsl#2] @ Te4[s3>>16] 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r7,r0,lsl#8 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r7,[r11,#0] 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r3,[r10,r3,lsl#2] @ Te4[s3>>24] 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r8,lsl#8 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r4,[r11,#4] 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r9,lsl#16 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r5,[r11,#8] 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r6,r3,lsl#24 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r6,[r11,#12] 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r7 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r4 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r5 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r3,r6 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r10,r10,#2 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr pc,[sp],#4 @ pop and return 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size _armv4_AES_encrypt,.-_armv4_AES_encrypt 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).global asm_AES_set_encrypt_key 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).hidden asm_AES_set_encrypt_key 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type asm_AES_set_encrypt_key,%function 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 5 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)asm_AES_set_encrypt_key: 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_armv4_AES_set_encrypt_key: 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r3,pc,#8 @ asm_AES_set_encrypt_key 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) adr r3,asm_AES_set_encrypt_key 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teq r0,#0 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__>=7 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itt eq @ Thumb2 thing, sanity check in ARM 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 422c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) moveq r0,#-1 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) beq .Labrt 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) teq r2,#0 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if __ARM_ARCH__>=7 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) itt eq @ Thumb2 thing, sanity check in ARM 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) moveq r0,#-1 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beq .Labrt 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) teq r1,#128 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beq .Lok 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) teq r1,#192 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beq .Lok 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) teq r1,#256 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__>=7 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) itt ne @ Thumb2 thing, sanity check in ARM 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) movne r0,#-1 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .Labrt 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).Lok: stmdb sp!,{r4-r12,lr} 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r10,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,r0 @ inp 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov lr,r1 @ bits 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r11,r2 @ key 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r0,[r12,#3] @ load input data in endian-neutral 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r4,[r12,#2] @ manner... 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#1] 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#0] 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r4,lsl#8 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r1,[r12,#7] 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r5,lsl#16 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#6] 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r6,lsl#24 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#5] 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#4] 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r4,lsl#8 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r2,[r12,#11] 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r5,lsl#16 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#10] 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r6,lsl#24 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#9] 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#8] 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r4,lsl#8 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r3,[r12,#15] 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r5,lsl#16 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#14] 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r6,lsl#24 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#13] 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#12] 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r4,lsl#8 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r11],#16 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r5,lsl#16 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r11,#-12] 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r6,lsl#24 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r2,[r11,#-8] 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r11,#-4] 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r12,#0] 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r1,[r12,#4] 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r2,[r12,#8] 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r3,[r12,#12] 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __ARMEL__ 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r0,r0 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r1,r1 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r2,r2 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r3,r3 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r11],#16 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r11,#-12] 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r2,[r11,#-8] 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r11,#-4] 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teq lr,#128 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .Lnot128 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,#10 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r12,[r11,#240-16] 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add r6,r10,#256 @ rcon 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov lr,#255 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).L128_loop: 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r5,lr,r3,lsr#24 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r3,lsr#16 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r10,r5] 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r3,lsr#8 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r7,[r10,r7] 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r3 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r8,[r10,r8] 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r7,lsl#24 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r9,[r10,r9] 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r8,lsl#16 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r4,[r6],#4 @ rcon[i++] 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r9,lsl#8 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r5,r5,r4 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r5 @ rk[4]=rk[0]^... 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r0 @ rk[5]=rk[1]^rk[4] 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r11],#16 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r1 @ rk[6]=rk[2]^rk[5] 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r11,#-12] 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r3,r3,r2 @ rk[7]=rk[3]^rk[6] 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r2,[r11,#-8] 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subs r12,r12,#1 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r11,#-4] 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .L128_loop 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r2,r11,#176 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b .Ldone 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).Lnot128: 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r8,[r12,#19] 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#18] 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#17] 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#16] 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r8,r8,r4,lsl#8 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r9,[r12,#23] 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r8,r8,r5,lsl#16 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#22] 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r8,r8,r6,lsl#24 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#21] 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#20] 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r9,r9,r4,lsl#8 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r9,r9,r5,lsl#16 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r8,[r11],#8 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r9,r9,r6,lsl#24 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r9,[r11,#-4] 5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else 5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldr r8,[r12,#16] 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldr r9,[r12,#20] 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef __ARMEL__ 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rev r8,r8 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) rev r9,r9 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r8,[r11],#8 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r9,[r11,#-4] 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teq lr,#192 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bne .Lnot192 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mov r12,#12 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r12,[r11,#240-24] 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) add r6,r10,#256 @ rcon 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov lr,#255 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) mov r12,#8 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).L192_loop: 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) and r5,lr,r9,lsr#24 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r9,lsr#16 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r5,[r10,r5] 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) and r8,lr,r9,lsr#8 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r7,[r10,r7] 5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) and r9,lr,r9 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r8,[r10,r8] 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r5,r5,r7,lsl#24 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r9,[r10,r9] 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r5,r5,r8,lsl#16 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldr r4,[r6],#4 @ rcon[i++] 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r5,r5,r9,lsl#8 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r9,r5,r4 5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r0,r0,r9 @ rk[6]=rk[0]^... 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r1,r1,r0 @ rk[7]=rk[1]^rk[6] 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r0,[r11],#24 5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r2,r2,r1 @ rk[8]=rk[2]^rk[7] 5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r1,[r11,#-20] 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r3,r2 @ rk[9]=rk[3]^rk[8] 5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r2,[r11,#-16] 5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subs r12,r12,#1 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r3,[r11,#-12] 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if __ARM_ARCH__>=7 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) itt eq @ Thumb2 thing, sanity check in ARM 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subeq r2,r11,#216 5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beq .Ldone 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldr r7,[r11,#-32] 6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldr r8,[r11,#-28] 6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r7,r7,r3 @ rk[10]=rk[4]^rk[9] 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) eor r9,r8,r7 @ rk[11]=rk[5]^rk[10] 6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r7,[r11,#-8] 6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) str r9,[r11,#-4] 6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) b .L192_loop 6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).Lnot192: 6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if __ARM_ARCH__<7 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r8,[r12,#27] 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r4,[r12,#26] 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r5,[r12,#25] 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r6,[r12,#24] 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r8,r8,r4,lsl#8 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r9,[r12,#31] 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r8,r8,r5,lsl#16 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r4,[r12,#30] 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r8,r8,r6,lsl#24 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r5,[r12,#29] 6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r6,[r12,#28] 6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r9,r9,r4,lsl#8 6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) orr r9,r9,r5,lsl#16 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r8,[r11],#8 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r9,r9,r6,lsl#24 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r9,[r11,#-4] 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r8,[r12,#24] 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r9,[r12,#28] 6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifdef __ARMEL__ 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r8,r8 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r9,r9 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r8,[r11],#8 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r9,[r11,#-4] 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,#14 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r12,[r11,#240-32] 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add r6,r10,#256 @ rcon 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov lr,#255 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,#7 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).L256_loop: 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r5,lr,r9,lsr#24 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r7,lr,r9,lsr#16 6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r5,[r10,r5] 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r8,lr,r9,lsr#8 6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r7,[r10,r7] 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r9 6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r8,[r10,r8] 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r7,lsl#24 6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r9,[r10,r9] 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r8,lsl#16 6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldr r4,[r6],#4 @ rcon[i++] 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r9,lsl#8 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r9,r5,r4 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r0,r0,r9 @ rk[8]=rk[0]^... 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r1,r0 @ rk[9]=rk[1]^rk[8] 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r11],#32 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r2,r1 @ rk[10]=rk[2]^rk[9] 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r11,#-28] 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r3,r2 @ rk[11]=rk[3]^rk[10] 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r2,[r11,#-24] 6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subs r12,r12,#1 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r11,#-20] 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__>=7 6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) itt eq @ Thumb2 thing, sanity check in ARM 6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) subeq r2,r11,#256 6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) beq .Ldone 6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) and r5,lr,r3 6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) and r7,lr,r3,lsr#8 6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ldrb r5,[r10,r5] 6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) and r8,lr,r3,lsr#16 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r7,[r10,r7] 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r9,lr,r3,lsr#24 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r8,[r10,r8] 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r7,lsl#8 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r9,[r10,r9] 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r8,lsl#16 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r4,[r11,#-48] 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r5,r5,r9,lsl#24 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r7,[r11,#-44] 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r8,[r11,#-40] 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r5 @ rk[12]=rk[4]^... 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r9,[r11,#-36] 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r7,r7,r4 @ rk[13]=rk[5]^rk[12] 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r4,[r11,#-16] 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r8,r8,r7 @ rk[14]=rk[6]^rk[13] 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r7,[r11,#-12] 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r9,r9,r8 @ rk[15]=rk[7]^rk[14] 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r8,[r11,#-8] 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r9,[r11,#-4] 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b .L256_loop 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 2 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).Ldone: mov r0,#0 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldmia sp!,{r4-r12,lr} 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).Labrt: 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(__thumb2__) && __ARM_ARCH__>=7 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .short 0x4770 @ .word 0xe12fff1e in Thumb2 encoding 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tst lr,#1 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) moveq pc,lr @ be binary compatible with V4, yet 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .word 0xe12fff1e @ interoperable with Thumb ISA:-) 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).global asm_AES_set_decrypt_key 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).hidden asm_AES_set_decrypt_key 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type asm_AES_set_decrypt_key,%function 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 5 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)asm_AES_set_decrypt_key: 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str lr,[sp,#-4]! @ push lr 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bl _armv4_AES_set_encrypt_key 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teq r0,#0 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr lr,[sp],#4 @ pop lr 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .Labrt 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r0,r2 @ asm_AES_set_encrypt_key preserves r2, 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r1,r2 @ which is AES_KEY *key 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) b _armv4_AES_set_enc2dec_key 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out) 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).global AES_set_enc2dec_key 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).hidden AES_set_enc2dec_key 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type AES_set_enc2dec_key,%function 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 5 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AES_set_enc2dec_key: 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)_armv4_AES_set_enc2dec_key: 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stmdb sp!,{r4-r12,lr} 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r12,[r0,#240] 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r7,r0 @ input 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add r8,r0,r12,lsl#4 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r11,r1 @ ouput 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) add r10,r1,r12,lsl#4 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r12,[r1,#240] 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).Linv: ldr r0,[r7],#16 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r1,[r7,#-12] 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r2,[r7,#-8] 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r3,[r7,#-4] 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r4,[r8],#-16 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r5,[r8,#16+4] 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r6,[r8,#16+8] 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r9,[r8,#16+12] 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r10],#-16 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r10,#16+4] 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r2,[r10,#16+8] 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r10,#16+12] 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r4,[r11],#16 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r5,[r11,#-12] 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r6,[r11,#-8] 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r9,[r11,#-4] 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) teq r7,r8 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .Linv 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r7] 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r1,[r7,#4] 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r2,[r7,#8] 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r3,[r7,#12] 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r0,[r11] 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r1,[r11,#4] 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r2,[r11,#8] 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r3,[r11,#12] 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r11,r11,r12,lsl#3 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r11,#16]! @ prefetch tp1 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r7,#0x80 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r8,#0x1b 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r7,r7,#0x8000 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r8,r8,#0x1b00 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r7,r7,r7,lsl#16 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r8,r8,r8,lsl#16 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r12,r12,#1 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mvn r9,r7 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,r12,lsl#2 @ (rounds-1)*4 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).Lmix: and r4,r0,r7 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r1,r0,r9 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r4,r4,r4,lsr#7 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r4,r4,r8 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r1,r4,r1,lsl#1 @ tp2 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r4,r1,r7 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r2,r1,r9 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r4,r4,r4,lsr#7 79090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) and r4,r4,r8 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r2,r4,r2,lsl#1 @ tp4 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r4,r2,r7 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r3,r2,r9 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r4,r4,r4,lsr#7 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) and r4,r4,r8 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r3,r4,r3,lsl#1 @ tp8 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r1,r2 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r5,r0,r3 @ tp9 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r3 @ tpe 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r1,ror#24 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r5,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r2,ror#16 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r5,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) eor r4,r4,r5,ror#8 @ ^= ROTATE(tp9,24) 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r11,#4] @ prefetch tp1 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) str r4,[r11],#4 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) subs r12,r12,#1 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bne .Lmix 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r0,#0 81490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if __ARM_ARCH__>=5 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldmia sp!,{r4-r12,pc} 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldmia sp!,{r4-r12,lr} 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) tst lr,#1 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) moveq pc,lr @ be binary compatible with V4, yet 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) .word 0xe12fff1e @ interoperable with Thumb ISA:-) 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size AES_set_enc2dec_key,.-AES_set_enc2dec_key 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type AES_Td,%object 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 5 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)AES_Td: 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a 8552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f 8792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles).word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df 880c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles).word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ Td4[256] 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).size AES_Td,.-AES_Td 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ void asm_AES_decrypt(const unsigned char *in, unsigned char *out, 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)@ const AES_KEY *key) { 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).global asm_AES_decrypt 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).hidden asm_AES_decrypt 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).type asm_AES_decrypt,%function 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles).align 5 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)asm_AES_decrypt: 9335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r3,pc,#8 @ asm_AES_decrypt 9355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 93690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) adr r3,asm_AES_decrypt 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) stmdb sp!,{r1,r4-r12,lr} 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r12,r0 @ inp 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mov r11,r2 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sub r10,r3,#asm_AES_decrypt-AES_Td @ Td 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__<7 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r0,[r12,#3] @ load input data in endian-neutral 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#2] @ manner... 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#1] 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#0] 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r4,lsl#8 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r1,[r12,#7] 9495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r5,lsl#16 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#6] 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r0,r0,r6,lsl#24 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#5] 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#4] 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r4,lsl#8 9555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r2,[r12,#11] 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r5,lsl#16 9575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#10] 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r1,r1,r6,lsl#24 9595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#9] 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#8] 9615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r4,lsl#8 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r3,[r12,#15] 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r5,lsl#16 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r4,[r12,#14] 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r2,r2,r6,lsl#24 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r5,[r12,#13] 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldrb r6,[r12,#12] 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r4,lsl#8 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r5,lsl#16 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) orr r3,r3,r6,lsl#24 9715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 9725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r0,[r12,#0] 9735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r1,[r12,#4] 9745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r2,[r12,#8] 9755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r3,[r12,#12] 9765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __ARMEL__ 9775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r0,r0 9785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r1,r1 9795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r2,r2 9805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r3,r3 9815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bl _armv4_AES_decrypt 9845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ldr r12,[sp],#4 @ pop out 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if __ARM_ARCH__>=7 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifdef __ARMEL__ 9885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r0,r0 9895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) rev r1,r1 990 rev r2,r2 991 rev r3,r3 992#endif 993 str r0,[r12,#0] 994 str r1,[r12,#4] 995 str r2,[r12,#8] 996 str r3,[r12,#12] 997#else 998 mov r4,r0,lsr#24 @ write output in endian-neutral 999 mov r5,r0,lsr#16 @ manner... 1000 mov r6,r0,lsr#8 1001 strb r4,[r12,#0] 1002 strb r5,[r12,#1] 1003 mov r4,r1,lsr#24 1004 strb r6,[r12,#2] 1005 mov r5,r1,lsr#16 1006 strb r0,[r12,#3] 1007 mov r6,r1,lsr#8 1008 strb r4,[r12,#4] 1009 strb r5,[r12,#5] 1010 mov r4,r2,lsr#24 1011 strb r6,[r12,#6] 1012 mov r5,r2,lsr#16 1013 strb r1,[r12,#7] 1014 mov r6,r2,lsr#8 1015 strb r4,[r12,#8] 1016 strb r5,[r12,#9] 1017 mov r4,r3,lsr#24 1018 strb r6,[r12,#10] 1019 mov r5,r3,lsr#16 1020 strb r2,[r12,#11] 1021 mov r6,r3,lsr#8 1022 strb r4,[r12,#12] 1023 strb r5,[r12,#13] 1024 strb r6,[r12,#14] 1025 strb r3,[r12,#15] 1026#endif 1027#if __ARM_ARCH__>=5 1028 ldmia sp!,{r4-r12,pc} 1029#else 1030 ldmia sp!,{r4-r12,lr} 1031 tst lr,#1 1032 moveq pc,lr @ be binary compatible with V4, yet 1033 .word 0xe12fff1e @ interoperable with Thumb ISA:-) 1034#endif 1035.size asm_AES_decrypt,.-asm_AES_decrypt 1036 1037.type _armv4_AES_decrypt,%function 1038.align 2 1039_armv4_AES_decrypt: 1040 str lr,[sp,#-4]! @ push lr 1041 ldmia r11!,{r4-r7} 1042 eor r0,r0,r4 1043 ldr r12,[r11,#240-16] 1044 eor r1,r1,r5 1045 eor r2,r2,r6 1046 eor r3,r3,r7 1047 sub r12,r12,#1 1048 mov lr,#255 1049 1050 and r7,lr,r0,lsr#16 1051 and r8,lr,r0,lsr#8 1052 and r9,lr,r0 1053 mov r0,r0,lsr#24 1054.Ldec_loop: 1055 ldr r4,[r10,r7,lsl#2] @ Td1[s0>>16] 1056 and r7,lr,r1 @ i0 1057 ldr r5,[r10,r8,lsl#2] @ Td2[s0>>8] 1058 and r8,lr,r1,lsr#16 1059 ldr r6,[r10,r9,lsl#2] @ Td3[s0>>0] 1060 and r9,lr,r1,lsr#8 1061 ldr r0,[r10,r0,lsl#2] @ Td0[s0>>24] 1062 mov r1,r1,lsr#24 1063 1064 ldr r7,[r10,r7,lsl#2] @ Td3[s1>>0] 1065 ldr r8,[r10,r8,lsl#2] @ Td1[s1>>16] 1066 ldr r9,[r10,r9,lsl#2] @ Td2[s1>>8] 1067 eor r0,r0,r7,ror#24 1068 ldr r1,[r10,r1,lsl#2] @ Td0[s1>>24] 1069 and r7,lr,r2,lsr#8 @ i0 1070 eor r5,r8,r5,ror#8 1071 and r8,lr,r2 @ i1 1072 eor r6,r9,r6,ror#8 1073 and r9,lr,r2,lsr#16 1074 ldr r7,[r10,r7,lsl#2] @ Td2[s2>>8] 1075 eor r1,r1,r4,ror#8 1076 ldr r8,[r10,r8,lsl#2] @ Td3[s2>>0] 1077 mov r2,r2,lsr#24 1078 1079 ldr r9,[r10,r9,lsl#2] @ Td1[s2>>16] 1080 eor r0,r0,r7,ror#16 1081 ldr r2,[r10,r2,lsl#2] @ Td0[s2>>24] 1082 and r7,lr,r3,lsr#16 @ i0 1083 eor r1,r1,r8,ror#24 1084 and r8,lr,r3,lsr#8 @ i1 1085 eor r6,r9,r6,ror#8 1086 and r9,lr,r3 @ i2 1087 ldr r7,[r10,r7,lsl#2] @ Td1[s3>>16] 1088 eor r2,r2,r5,ror#8 1089 ldr r8,[r10,r8,lsl#2] @ Td2[s3>>8] 1090 mov r3,r3,lsr#24 1091 1092 ldr r9,[r10,r9,lsl#2] @ Td3[s3>>0] 1093 eor r0,r0,r7,ror#8 1094 ldr r7,[r11],#16 1095 eor r1,r1,r8,ror#16 1096 ldr r3,[r10,r3,lsl#2] @ Td0[s3>>24] 1097 eor r2,r2,r9,ror#24 1098 1099 ldr r4,[r11,#-12] 1100 eor r0,r0,r7 1101 ldr r5,[r11,#-8] 1102 eor r3,r3,r6,ror#8 1103 ldr r6,[r11,#-4] 1104 and r7,lr,r0,lsr#16 1105 eor r1,r1,r4 1106 and r8,lr,r0,lsr#8 1107 eor r2,r2,r5 1108 and r9,lr,r0 1109 eor r3,r3,r6 1110 mov r0,r0,lsr#24 1111 1112 subs r12,r12,#1 1113 bne .Ldec_loop 1114 1115 add r10,r10,#1024 1116 1117 ldr r5,[r10,#0] @ prefetch Td4 1118 ldr r6,[r10,#32] 1119 ldr r4,[r10,#64] 1120 ldr r5,[r10,#96] 1121 ldr r6,[r10,#128] 1122 ldr r4,[r10,#160] 1123 ldr r5,[r10,#192] 1124 ldr r6,[r10,#224] 1125 1126 ldrb r0,[r10,r0] @ Td4[s0>>24] 1127 ldrb r4,[r10,r7] @ Td4[s0>>16] 1128 and r7,lr,r1 @ i0 1129 ldrb r5,[r10,r8] @ Td4[s0>>8] 1130 and r8,lr,r1,lsr#16 1131 ldrb r6,[r10,r9] @ Td4[s0>>0] 1132 and r9,lr,r1,lsr#8 1133 1134 add r1,r10,r1,lsr#24 1135 ldrb r7,[r10,r7] @ Td4[s1>>0] 1136 ldrb r1,[r1] @ Td4[s1>>24] 1137 ldrb r8,[r10,r8] @ Td4[s1>>16] 1138 eor r0,r7,r0,lsl#24 1139 ldrb r9,[r10,r9] @ Td4[s1>>8] 1140 eor r1,r4,r1,lsl#8 1141 and r7,lr,r2,lsr#8 @ i0 1142 eor r5,r5,r8,lsl#8 1143 and r8,lr,r2 @ i1 1144 ldrb r7,[r10,r7] @ Td4[s2>>8] 1145 eor r6,r6,r9,lsl#8 1146 ldrb r8,[r10,r8] @ Td4[s2>>0] 1147 and r9,lr,r2,lsr#16 1148 1149 add r2,r10,r2,lsr#24 1150 ldrb r2,[r2] @ Td4[s2>>24] 1151 eor r0,r0,r7,lsl#8 1152 ldrb r9,[r10,r9] @ Td4[s2>>16] 1153 eor r1,r8,r1,lsl#16 1154 and r7,lr,r3,lsr#16 @ i0 1155 eor r2,r5,r2,lsl#16 1156 and r8,lr,r3,lsr#8 @ i1 1157 ldrb r7,[r10,r7] @ Td4[s3>>16] 1158 eor r6,r6,r9,lsl#16 1159 ldrb r8,[r10,r8] @ Td4[s3>>8] 1160 and r9,lr,r3 @ i2 1161 1162 add r3,r10,r3,lsr#24 1163 ldrb r9,[r10,r9] @ Td4[s3>>0] 1164 ldrb r3,[r3] @ Td4[s3>>24] 1165 eor r0,r0,r7,lsl#16 1166 ldr r7,[r11,#0] 1167 eor r1,r1,r8,lsl#8 1168 ldr r4,[r11,#4] 1169 eor r2,r9,r2,lsl#8 1170 ldr r5,[r11,#8] 1171 eor r3,r6,r3,lsl#24 1172 ldr r6,[r11,#12] 1173 1174 eor r0,r0,r7 1175 eor r1,r1,r4 1176 eor r2,r2,r5 1177 eor r3,r3,r6 1178 1179 sub r10,r10,#1024 1180 ldr pc,[sp],#4 @ pop and return 1181.size _armv4_AES_decrypt,.-_armv4_AES_decrypt 1182.asciz "AES for ARMv4, CRYPTOGAMS by <appro@openssl.org>" 1183.align 2 1184 1185#endif 1186