1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#!/usr/bin/env perl 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ==================================================================== 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# project. The module is, however, dual licensed under OpenSSL and 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# CRYPTOGAMS licenses depending on where you obtain it. For further 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# details see http://www.openssl.org/~appro/cryptogams/. 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ==================================================================== 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# AES for ARMv4 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# January 2007. 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# Code uses single 1K S-box and is >2 times faster than code generated 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# allows to merge logical or arithmetic operation with shift or rotate 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# in one instruction and emit combined result every cycle. The module 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# is endian-neutral. The performance is ~42 cycles/byte for 128-bit 1943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# key [on single-issue Xscale PXA250 core]. 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# May 2007. 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# AES_set_[en|de]crypt_key is added. 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 2543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# July 2010. 2643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# 2743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# Rescheduling for dual-issue pipeline resulted in 12% improvement on 2843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom# Cortex A8 core and ~25 cycles per byte processed with 128-bit key. 2943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 3043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromwhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} 3143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromopen STDOUT,">$output"; 3243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s0="r0"; 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s1="r1"; 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s2="r2"; 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s3="r3"; 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t1="r4"; 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t2="r5"; 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t3="r6"; 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i1="r7"; 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i2="r8"; 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i3="r9"; 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$tbl="r10"; 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$key="r11"; 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$rounds="r12"; 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code=<<___; 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.code 32 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_Te,%object 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Te: 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Te4[256] 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ rcon[] 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x01000000, 0x02000000, 0x04000000, 0x08000000 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x10000000, 0x20000000, 0x40000000, 0x80000000 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_Te,.-AES_Te 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_encrypt(const unsigned char *in, unsigned char *out, 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ const AES_KEY *key) { 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_encrypt 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_encrypt,%function 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_encrypt: 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r3,pc,#8 @ AES_encrypt 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stmdb sp!,{r1,r4-r12,lr} 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,r0 @ inp 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,r3,#AES_encrypt-AES_Te @ Te 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#2] @ manner... 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#1] 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#0] 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s0,$s0,$t1,lsl#8 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$rounds,#7] 17643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t2,lsl#16 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#6] 17843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t3,lsl#24 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#5] 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#4] 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s1,$s1,$t1,lsl#8 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$rounds,#11] 18343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t2,lsl#16 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#10] 18543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t3,lsl#24 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#9] 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#8] 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s2,$s2,$t1,lsl#8 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$rounds,#15] 19043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t2,lsl#16 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#14] 19243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t3,lsl#24 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#13] 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#12] 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t1,lsl#8 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t2,lsl#16 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t3,lsl#24 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bl _armv4_AES_encrypt 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $rounds,[sp],#4 @ pop out 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s0,lsr#24 @ write output in endian-neutral 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s0,lsr#16 @ manner... 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s0,lsr#8 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#0] 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#1] 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s1,lsr#24 20843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#2] 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s1,lsr#16 21043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s0,[$rounds,#3] 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s1,lsr#8 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#4] 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#5] 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s2,lsr#24 21543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#6] 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s2,lsr#16 21743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s1,[$rounds,#7] 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s2,lsr#8 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#8] 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#9] 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s3,lsr#24 22243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#10] 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s3,lsr#16 22443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s2,[$rounds,#11] 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s3,lsr#8 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#12] 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#13] 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t3,[$rounds,#14] 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $s3,[$rounds,#15] 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tst lr,#1 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_encrypt,.-AES_encrypt 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type _armv4_AES_encrypt,%function 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 2 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_encrypt: 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str lr,[sp,#-4]! @ push lr 24143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldmia $key!,{$t1-$i1} 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$t1 24343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $rounds,[$key,#240-16] 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$t2 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$t3 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$i1 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $rounds,$rounds,#1 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 25043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i1,lr,$s0 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s0,lsr#8 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s0,lsr#16 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s0,$s0,lsr#24 25443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Lenc_loop: 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0] 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1,lsr#16 @ i0 25743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8] 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1 25943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16] 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 26143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24] 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s1,$s1,lsr#24 26343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16] 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0] 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8] 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#8 26843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24] 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 27043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$t2,$i2,ror#8 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2,lsr#16 @ i1 27243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$t3,$i3,ror#8 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s2 27443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1,ror#24 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8] 27643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s2,$s2,lsr#24 27743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16] 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0] 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#16 28143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24] 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3 @ i0 28343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$i2,ror#8 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 28543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$t3,$i3,ror#16 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s3,lsr#16 @ i2 28743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2,ror#16 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0] 28943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s3,$s3,lsr#24 29043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8] 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16] 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#24 29443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24] 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,ror#16 29643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key],#16 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$i3,ror#8 29843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#-12] 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$t3,ror#8 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 30143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#-8] 30243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 30343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#-4] 30443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i1,lr,$s0 30543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 30643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s0,lsr#8 30743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 30843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s0,lsr#16 30943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 31043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s0,$s0,lsr#24 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lenc_loop 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $tbl,$tbl,#2 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0] 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1,lsr#16 @ i0 31943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8] 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1 32143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16] 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 32343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24] 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s1,$s1,lsr#24 32543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16] 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0] 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8] 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#8 33043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24] 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 33243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$i2,$t2,lsl#8 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2,lsr#16 @ i1 33443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,lsl#8 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s2 33643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$t1,$s1,lsl#24 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8] 33843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s2,$s2,lsr#24 33943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16] 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0] 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#8 34343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24] 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3 @ i0 34543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$i2,lsl#16 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 34743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,lsl#8 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s3,lsr#16 @ i2 34943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$t2,$s2,lsl#24 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0] 35143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s3,$s3,lsr#24 35243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8] 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16] 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#8 35643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24] 35743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key,#0] 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,lsl#8 35943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#4] 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$i3,lsl#16 36143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#8] 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$t3,$s3,lsl#24 36343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#12] 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 36543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 36643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 36743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 36843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,$tbl,#2 37143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr pc,[sp],#4 @ pop and return 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size _armv4_AES_encrypt,.-_armv4_AES_encrypt 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_set_encrypt_key 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_set_encrypt_key,%function 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_set_encrypt_key: 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r3,pc,#8 @ AES_set_encrypt_key 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r0,#0 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq r0,#-1 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Labrt 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r2,#0 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq r0,#-1 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Labrt 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r1,#128 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Lok 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r1,#192 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Lok 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r1,#256 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project movne r0,#-1 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Labrt 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lok: stmdb sp!,{r4-r12,lr} 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,r3,#AES_set_encrypt_key-AES_Te-1024 @ Te4 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,r0 @ inp 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,r1 @ bits 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 @ key 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#2] @ manner... 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#1] 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#0] 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s0,$s0,$t1,lsl#8 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$rounds,#7] 40743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t2,lsl#16 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#6] 40943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t3,lsl#24 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#5] 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#4] 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s1,$s1,$t1,lsl#8 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$rounds,#11] 41443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t2,lsl#16 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#10] 41643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t3,lsl#24 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#9] 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#8] 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s2,$s2,$t1,lsl#8 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$rounds,#15] 42143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t2,lsl#16 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#14] 42343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t3,lsl#24 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#13] 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#12] 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t1,lsl#8 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#16 42843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s3,$s3,$t2,lsl#16 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-12] 43043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s3,$s3,$t3,lsl#24 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-8] 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s3,[$key,#-4] 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq lr,#128 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lnot128 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#10 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $rounds,[$key,#240-16] 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $t3,$tbl,#256 @ rcon 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L128_loop: 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$s3,lsr#24 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#16 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 44543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s3,lsr#8 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 44743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s3 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#24 45043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 45243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$t3],#4 @ rcon[i++] 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#8 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t2,$t2,$t1 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$t2 @ rk[4]=rk[0]^... 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4] 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#16 45843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5] 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-12] 46043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6] 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-8] 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 46343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom str $s3,[$key,#-4] 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .L128_loop 465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r2,$key,#176 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project b .Ldone 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot128: 469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$rounds,#19] 470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#18] 471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#17] 472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#16] 473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i2,$i2,$t1,lsl#8 474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$rounds,#23] 47543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t2,lsl#16 476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#22] 47743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t3,lsl#24 478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#21] 479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#20] 480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t1,lsl#8 481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t2,lsl#16 482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i2,[$key],#8 48343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i3,$i3,$t3,lsl#24 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq lr,#192 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lnot192 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#12 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $rounds,[$key,#240-24] 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $t3,$tbl,#256 @ rcon 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#8 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L192_loop: 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$i3,lsr#24 496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$i3,lsr#16 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 49843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$i3,lsr#8 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 50043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$i3 501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#24 50343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 50543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$t3],#4 @ rcon[i++] 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#8 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i3,$t2,$t1 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i3 @ rk[6]=rk[0]^... 509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6] 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#24 51143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7] 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-20] 51343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8] 514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-16] 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 51643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom str $s3,[$key,#-12] 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subeq r2,$key,#216 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Ldone 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$key,#-32] 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$key,#-28] 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i1,$i1,$s3 @ rk[10]=rk[4]^rk[9] 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i3,$i2,$i1 @ rk[11]=rk[5]^rk[10] 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i1,[$key,#-8] 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project b .L192_loop 527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot192: 529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$rounds,#27] 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#26] 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#25] 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#24] 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i2,$i2,$t1,lsl#8 534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$rounds,#31] 53543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t2,lsl#16 536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#30] 53743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t3,lsl#24 538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#29] 539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#28] 540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t1,lsl#8 541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t2,lsl#16 542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i2,[$key],#8 54343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i3,$i3,$t3,lsl#24 544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#14 547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $rounds,[$key,#240-32] 548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $t3,$tbl,#256 @ rcon 549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#7 551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L256_loop: 553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$i3,lsr#24 554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$i3,lsr#16 555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 55643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$i3,lsr#8 557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 55843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$i3 559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#24 56143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 56343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$t3],#4 @ rcon[i++] 564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#8 565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i3,$t2,$t1 566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i3 @ rk[8]=rk[0]^... 567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8] 568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#32 56943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9] 570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-28] 57143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10] 572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-24] 573656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 57443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom str $s3,[$key,#-20] 575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subeq r2,$key,#256 576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Ldone 577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 578656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$s3 579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#8 580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 58143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s3,lsr#16 582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 58343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s3,lsr#24 584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#8 58643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 58843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#-48] 589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#24 590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$key,#-44] 592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$key,#-40] 593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2 @ rk[12]=rk[4]^... 59443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i3,[$key,#-36] 595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12] 596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t1,[$key,#-16] 59743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13] 598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i1,[$key,#-12] 59943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14] 600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i2,[$key,#-8] 601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project b .L256_loop 603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Ldone: mov r0,#0 605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Labrt: tst lr,#1 607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_set_encrypt_key,.-AES_set_encrypt_key 610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_set_decrypt_key 612656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_set_decrypt_key,%function 613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 614656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_set_decrypt_key: 615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str lr,[sp,#-4]! @ push lr 616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bl AES_set_encrypt_key 617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r0,#0 618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrne lr,[sp],#4 @ pop lr 619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Labrt 620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stmdb sp!,{r4-r12} 622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $rounds,[r2,#240] @ AES_set_encrypt_key preserves r2, 624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 @ which is AES_KEY *key 625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $i1,r2 626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $i2,r2,$rounds,lsl#4 627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 628656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Linv: ldr $s0,[$i1] 629656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s1,[$i1,#4] 630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s2,[$i1,#8] 631656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s3,[$i1,#12] 632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t1,[$i2] 633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t2,[$i2,#4] 634656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t3,[$i2,#8] 635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$i2,#12] 636656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$i2],#-16 637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$i2,#16+4] 638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$i2,#16+8] 639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s3,[$i2,#16+12] 640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t1,[$i1],#16 641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t2,[$i1,#-12] 642656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t3,[$i1,#-8] 643656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$i1,#-4] 644656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq $i1,$i2 645656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Linv 646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___ 647656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask80=$i1; 648656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask1b=$i2; 649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask7f=$i3; 650656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code.=<<___; 651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s0,[$key,#16]! @ prefetch tp1 652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $mask80,#0x80 653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $mask1b,#0x1b 654656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask80,$mask80,#0x8000 655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask1b,$mask1b,#0x1b00 656656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask80,$mask80,$mask80,lsl#16 657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask1b,$mask1b,$mask1b,lsl#16 658656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $rounds,$rounds,#1 659656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mvn $mask7f,$mask80 660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,$rounds,lsl#2 @ (rounds-1)*4 661656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 662656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lmix: and $t1,$s0,$mask80 663656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $s1,$s0,$mask7f 664656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $t1,$t1,$t1,lsr#7 665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$t1,$mask1b 666656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$t1,$s1,lsl#1 @ tp2 667656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 668656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$s1,$mask80 669656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $s2,$s1,$mask7f 670656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $t1,$t1,$t1,lsr#7 671656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$t1,$mask1b 672656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$t1,$s2,lsl#1 @ tp4 673656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$s2,$mask80 675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $s3,$s2,$mask7f 676656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $t1,$t1,$t1,lsr#7 677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$t1,$mask1b 678656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$t1,$s3,lsl#1 @ tp8 679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$s1,$s2 681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t2,$s0,$s3 @ tp9 682656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$s3 @ tpe 683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$s1,ror#24 684656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8) 685656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$s2,ror#16 686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16) 687656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2,ror#8 @ ^= ROTATE(tp9,24) 688656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 689656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s0,[$key,#4] @ prefetch tp1 690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t1,[$key],#4 691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lmix 693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 694656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r0,#0 695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tst lr,#1 697656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 698656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 699656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_set_decrypt_key,.-AES_set_decrypt_key 700656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 701656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_Td,%object 702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Td: 704656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 705656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393 706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25 707656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f 708656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1 709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6 710656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da 711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844 712656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd 713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4 714656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45 715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94 716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7 717656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a 718656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5 719656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c 720656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1 721656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a 722656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75 723656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051 724656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46 725656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff 726656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77 727656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb 728656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000 729656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e 730656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927 731656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a 732656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e 733656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16 734656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d 735656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8 736656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd 737656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34 738656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163 739656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120 740656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d 741656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0 742656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422 743656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef 744656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36 745656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4 746656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662 747656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5 748656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3 749656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b 750656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8 751656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6 752656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6 753656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0 754656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815 755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f 756656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df 757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f 758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e 759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713 760656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89 761656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c 762656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf 763656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86 764656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f 765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541 766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190 767656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 768656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Td4[256] 769656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 770656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 771656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 772656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 775656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 776656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_Td,.-AES_Td 802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_decrypt(const unsigned char *in, unsigned char *out, 804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ const AES_KEY *key) { 805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_decrypt 806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_decrypt,%function 807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_decrypt: 809656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r3,pc,#8 @ AES_decrypt 810656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stmdb sp!,{r1,r4-r12,lr} 811656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,r0 @ inp 812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,r3,#AES_decrypt-AES_Td @ Td 814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 816656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#2] @ manner... 817656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#1] 818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#0] 819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s0,$s0,$t1,lsl#8 820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$rounds,#7] 82143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t2,lsl#16 822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#6] 82343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t3,lsl#24 824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#5] 825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#4] 826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s1,$s1,$t1,lsl#8 827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$rounds,#11] 82843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t2,lsl#16 829656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#10] 83043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t3,lsl#24 831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#9] 832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#8] 833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s2,$s2,$t1,lsl#8 834656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$rounds,#15] 83543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t2,lsl#16 836656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#14] 83743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t3,lsl#24 838656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#13] 839656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#12] 840656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t1,lsl#8 841656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t2,lsl#16 842656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t3,lsl#24 843656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bl _armv4_AES_decrypt 845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $rounds,[sp],#4 @ pop out 847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s0,lsr#24 @ write output in endian-neutral 848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s0,lsr#16 @ manner... 849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s0,lsr#8 850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#0] 851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#1] 852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s1,lsr#24 85343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#2] 854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s1,lsr#16 85543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s0,[$rounds,#3] 856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s1,lsr#8 857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#4] 858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#5] 859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s2,lsr#24 86043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#6] 861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s2,lsr#16 86243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s1,[$rounds,#7] 863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s2,lsr#8 864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#8] 865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#9] 866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s3,lsr#24 86743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#10] 868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s3,lsr#16 86943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s2,[$rounds,#11] 870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s3,lsr#8 871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#12] 872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#13] 873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t3,[$rounds,#14] 874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $s3,[$rounds,#15] 875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tst lr,#1 878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_decrypt,.-AES_decrypt 881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type _armv4_AES_decrypt,%function 883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 2 884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_decrypt: 885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str lr,[sp,#-4]! @ push lr 88643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldmia $key!,{$t1-$i1} 887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$t1 88843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $rounds,[$key,#240-16] 889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$t2 890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$t3 891656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$i1 892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $rounds,$rounds,#1 893656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 894656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 895656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s0,lsr#16 896656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s0,lsr#8 897656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s0 898656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s0,$s0,lsr#24 89943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Ldec_loop: 900656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16] 901656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1 @ i0 90243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8] 903656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1,lsr#16 90443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0] 905656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 90643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24] 907656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s1,$s1,lsr#24 90843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0] 910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16] 911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8] 912656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#24 91343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24] 914656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 91543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$i2,$t2,ror#8 916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2 @ i1 91743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,ror#8 918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s2,lsr#16 91943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1,ror#8 920656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8] 92143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s2,$s2,lsr#24 92243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 923656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0] 924656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16] 925656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#16 92643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24] 927656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#16 @ i0 92843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$i2,ror#24 929656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 93043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,ror#8 931656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s3 @ i2 93243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2,ror#8 933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16] 93443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s3,$s3,lsr#24 93543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 936656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8] 937656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0] 938656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#8 93943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24] 940656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,ror#16 941656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$i3,ror#24 94243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key],#16 943656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$t3,ror#8 944656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 94543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#-12] 94643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#-8] 94743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 94843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#-4] 94943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i1,lr,$s0,lsr#16 95043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 95143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s0,lsr#8 95243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 95343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s0 95443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 95543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s0,$s0,lsr#24 956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 957656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Ldec_loop 959656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 960656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $tbl,$tbl,#1024 961656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,#0] @ prefetch Td4 96343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,#32] 96443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$tbl,#64] 96543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,#96] 96643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,#128] 96743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$tbl,#160] 96843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,#192] 96943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,#224] 970656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 97143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s0,[$tbl,$s0] @ Td4[s0>>24] 972656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$tbl,$i1] @ Td4[s0>>16] 973656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1 @ i0 97443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t2,[$tbl,$i2] @ Td4[s0>>8] 975656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1,lsr#16 97643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t3,[$tbl,$i3] @ Td4[s0>>0] 977656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 97843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 979656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] @ Td4[s1>>0] 980656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24] 981656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] @ Td4[s1>>16] 982656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#24 98343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] @ Td4[s1>>8] 984656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$t1,$s1,lsl#8 985656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 98643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$t2,$i2,lsl#8 987656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2 @ i1 98843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$t3,$i3,lsl#8 989656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] @ Td4[s2>>8] 99043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s2,lsr#16 99143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 992656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] @ Td4[s2>>0] 993656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24] 994656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,lsl#8 99543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] @ Td4[s2>>16] 996656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$i2,$s1,lsl#16 997656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#16 @ i0 99843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$t2,$s2,lsl#16 999656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 100043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$t3,$i3,lsl#16 1001656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] @ Td4[s3>>16] 100243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s3 @ i2 100343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1004656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] @ Td4[s3>>8] 1005656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3] @ Td4[s3>>0] 1006656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24] 1007656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,lsl#16 100843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key,#0] 1009656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,lsl#8 101043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#4] 1011656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$i3,$s2,lsl#8 101243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#8] 1013656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$t3,$s3,lsl#24 101443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#12] 1015656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 101643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 101743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 101843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 101943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 1020656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1021656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,$tbl,#1024 102243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr pc,[sp],#4 @ pop and return 1023656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size _armv4_AES_decrypt,.-_armv4_AES_decrypt 1024656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>" 1025221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 2 1026656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___ 1027656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1028656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4 1029656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectprint $code; 103043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromclose STDOUT; # enforce flush 1031