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