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 30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# February 2011. 31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# 32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# Profiler-assisted and platform-specific optimization resulted in 16% 33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom# improvement on Cortex A8 core and ~21.5 cycles per byte. 34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 3543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromwhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} 3643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromopen STDOUT,">$output"; 3743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s0="r0"; 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s1="r1"; 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s2="r2"; 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$s3="r3"; 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t1="r4"; 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t2="r5"; 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$t3="r6"; 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i1="r7"; 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i2="r8"; 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$i3="r9"; 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$tbl="r10"; 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$key="r11"; 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$rounds="r12"; 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code=<<___; 54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "arm_arch.h" 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.text 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.code 32 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_Te,%object 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Te: 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Te4[256] 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ rcon[] 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x01000000, 0x02000000, 0x04000000, 0x08000000 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x10000000, 0x20000000, 0x40000000, 0x80000000 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_Te,.-AES_Te 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_encrypt(const unsigned char *in, unsigned char *out, 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ const AES_KEY *key) { 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_encrypt 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_encrypt,%function 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_encrypt: 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r3,pc,#8 @ AES_encrypt 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stmdb sp!,{r1,r4-r12,lr} 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,r0 @ inp 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,r3,#AES_encrypt-AES_Te @ Te 175392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#2] @ manner... 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#1] 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#0] 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s0,$s0,$t1,lsl#8 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$rounds,#7] 18243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t2,lsl#16 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#6] 18443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t3,lsl#24 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#5] 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#4] 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s1,$s1,$t1,lsl#8 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$rounds,#11] 18943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t2,lsl#16 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#10] 19143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t3,lsl#24 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#9] 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#8] 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s2,$s2,$t1,lsl#8 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$rounds,#15] 19643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t2,lsl#16 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#14] 19843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t3,lsl#24 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#13] 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#12] 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t1,lsl#8 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t2,lsl#16 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t3,lsl#24 204392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 205392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s0,[$rounds,#0] 206392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s1,[$rounds,#4] 207392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s2,[$rounds,#8] 208392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s3,[$rounds,#12] 209392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 210392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s0,$s0 211392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s1,$s1 212392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s2,$s2 213392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s3,$s3 214392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 215392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bl _armv4_AES_encrypt 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $rounds,[sp],#4 @ pop out 219392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7 220392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 221392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s0,$s0 222392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s1,$s1 223392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s2,$s2 224392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s3,$s3 225392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 226392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s0,[$rounds,#0] 227392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s1,[$rounds,#4] 228392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s2,[$rounds,#8] 229392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s3,[$rounds,#12] 230392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s0,lsr#24 @ write output in endian-neutral 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s0,lsr#16 @ manner... 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s0,lsr#8 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#0] 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#1] 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s1,lsr#24 23743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#2] 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s1,lsr#16 23943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s0,[$rounds,#3] 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s1,lsr#8 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#4] 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#5] 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s2,lsr#24 24443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#6] 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s2,lsr#16 24643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s1,[$rounds,#7] 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s2,lsr#8 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#8] 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#9] 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s3,lsr#24 25143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#10] 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s3,lsr#16 25343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s2,[$rounds,#11] 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s3,lsr#8 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#12] 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#13] 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t3,[$rounds,#14] 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $s3,[$rounds,#15] 259392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 260392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5 261392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldmia sp!,{r4-r12,pc} 262392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tst lr,#1 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 267392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_encrypt,.-AES_encrypt 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type _armv4_AES_encrypt,%function 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 2 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_encrypt: 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str lr,[sp,#-4]! @ push lr 27443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldmia $key!,{$t1-$i1} 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$t1 27643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $rounds,[$key,#240-16] 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$t2 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$t3 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$i1 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $rounds,$rounds,#1 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 28343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i1,lr,$s0 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s0,lsr#8 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s0,lsr#16 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s0,$s0,lsr#24 28743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Lenc_loop: 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0] 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1,lsr#16 @ i0 29043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8] 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1 29243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16] 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 29443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24] 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s1,$s1,lsr#24 29643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16] 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0] 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8] 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#8 30143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24] 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 30343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$t2,$i2,ror#8 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2,lsr#16 @ i1 30543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$t3,$i3,ror#8 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s2 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8] 308392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s1,$s1,$t1,ror#24 309392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16] 31043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s2,$s2,lsr#24 31143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0] 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#16 31443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24] 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3 @ i0 31643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$i2,ror#8 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 31843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$t3,$i3,ror#16 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s3,lsr#16 @ i2 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0] 321392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s2,$s2,$t2,ror#16 322392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8] 32343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s3,$s3,lsr#24 32443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16] 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#24 32743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key],#16 328392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s1,$s1,$i2,ror#16 329392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24] 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$i3,ror#8 33143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#-12] 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$t3,ror#8 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 33443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#-8] 33543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 33643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#-4] 33743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i1,lr,$s0 33843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 33943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s0,lsr#8 34043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 34143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s0,lsr#16 34243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 34343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s0,$s0,lsr#24 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lenc_loop 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $tbl,$tbl,#2 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0] 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1,lsr#16 @ i0 35243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8] 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1 35443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16] 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 35643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24] 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s1,$s1,lsr#24 35843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16] 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0] 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8] 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#8 36343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24] 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 36543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$i2,$t2,lsl#8 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2,lsr#16 @ i1 36743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,lsl#8 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s2 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8] 370392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s1,$t1,$s1,lsl#24 371392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16] 37243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s2,$s2,lsr#24 37343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0] 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#8 37643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24] 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3 @ i0 37843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$i2,lsl#16 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 38043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,lsl#8 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s3,lsr#16 @ i2 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0] 383392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s2,$t2,$s2,lsl#24 384392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8] 38543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s3,$s3,lsr#24 38643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16] 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#8 38943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key,#0] 390392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24] 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,lsl#8 39243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#4] 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$i3,lsl#16 39443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#8] 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$t3,$s3,lsl#24 39643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#12] 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 39843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 39943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 40043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 40143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,$tbl,#2 40443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr pc,[sp],#4 @ pop and return 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size _armv4_AES_encrypt,.-_armv4_AES_encrypt 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 407392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global private_AES_set_encrypt_key 408392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type private_AES_set_encrypt_key,%function 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 410392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprivate_AES_set_encrypt_key: 411a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom_armv4_AES_set_encrypt_key: 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r3,pc,#8 @ AES_set_encrypt_key 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r0,#0 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq r0,#-1 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Labrt 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r2,#0 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq r0,#-1 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Labrt 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r1,#128 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Lok 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r1,#192 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Lok 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r1,#256 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project movne r0,#-1 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Labrt 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lok: stmdb sp!,{r4-r12,lr} 429a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom sub $tbl,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,r0 @ inp 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,r1 @ bits 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 @ key 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 435392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#2] @ manner... 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#1] 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#0] 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s0,$s0,$t1,lsl#8 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$rounds,#7] 44243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t2,lsl#16 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#6] 44443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t3,lsl#24 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#5] 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#4] 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s1,$s1,$t1,lsl#8 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$rounds,#11] 44943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t2,lsl#16 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#10] 45143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t3,lsl#24 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#9] 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#8] 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s2,$s2,$t1,lsl#8 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$rounds,#15] 45643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t2,lsl#16 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#14] 45843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t3,lsl#24 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#13] 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#12] 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t1,lsl#8 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#16 46343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s3,$s3,$t2,lsl#16 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-12] 46543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s3,$s3,$t3,lsl#24 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-8] 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s3,[$key,#-4] 468392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 469392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s0,[$rounds,#0] 470392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s1,[$rounds,#4] 471392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s2,[$rounds,#8] 472392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s3,[$rounds,#12] 473392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 474392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s0,$s0 475392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s1,$s1 476392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s2,$s2 477392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s3,$s3 478392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 479392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s0,[$key],#16 480392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s1,[$key,#-12] 481392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s2,[$key,#-8] 482392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s3,[$key,#-4] 483392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq lr,#128 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lnot128 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#10 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $rounds,[$key,#240-16] 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $t3,$tbl,#256 @ rcon 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L128_loop: 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$s3,lsr#24 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#16 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 49643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s3,lsr#8 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 49843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s3 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#24 50143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 50343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$t3],#4 @ rcon[i++] 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#8 505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t2,$t2,$t1 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$t2 @ rk[4]=rk[0]^... 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4] 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#16 50943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5] 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-12] 51143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6] 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-8] 513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 51443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom str $s3,[$key,#-4] 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .L128_loop 516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r2,$key,#176 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project b .Ldone 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot128: 520392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$rounds,#19] 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#18] 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#17] 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#16] 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i2,$i2,$t1,lsl#8 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$rounds,#23] 52743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t2,lsl#16 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#22] 52943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t3,lsl#24 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#21] 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#20] 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t1,lsl#8 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t2,lsl#16 534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i2,[$key],#8 53543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i3,$i3,$t3,lsl#24 536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 537392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 538392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i2,[$rounds,#16] 539392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i3,[$rounds,#20] 540392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 541392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $i2,$i2 542392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $i3,$i3 543392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 544392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $i2,[$key],#8 545392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $i3,[$key,#-4] 546392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq lr,#192 549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lnot192 550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#12 551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $rounds,[$key,#240-24] 552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $t3,$tbl,#256 @ rcon 553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#8 555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L192_loop: 557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$i3,lsr#24 558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$i3,lsr#16 559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 56043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$i3,lsr#8 561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 56243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$i3 563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#24 56543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 56743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$t3],#4 @ rcon[i++] 568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#8 569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i3,$t2,$t1 570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i3 @ rk[6]=rk[0]^... 571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6] 572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#24 57343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7] 574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-20] 57543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8] 576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-16] 577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 57843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom str $s3,[$key,#-12] 579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subeq r2,$key,#216 580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Ldone 581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$key,#-32] 583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$key,#-28] 584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i1,$i1,$s3 @ rk[10]=rk[4]^rk[9] 585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i3,$i2,$i1 @ rk[11]=rk[5]^rk[10] 586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i1,[$key,#-8] 587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project b .L192_loop 589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lnot192: 591392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7 592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$rounds,#27] 593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#26] 594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#25] 595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#24] 596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i2,$i2,$t1,lsl#8 597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$rounds,#31] 59843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t2,lsl#16 599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#30] 60043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i2,$i2,$t3,lsl#24 601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#29] 602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#28] 603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t1,lsl#8 604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $i3,$i3,$t2,lsl#16 605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i2,[$key],#8 60643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $i3,$i3,$t3,lsl#24 607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 608392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 609392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i2,[$rounds,#24] 610392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i3,[$rounds,#28] 611392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 612392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $i2,$i2 613392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $i3,$i3 614392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 615392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $i2,[$key],#8 616392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $i3,[$key,#-4] 617392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#14 620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $rounds,[$key,#240-32] 621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $t3,$tbl,#256 @ rcon 622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,#7 624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.L256_loop: 626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$i3,lsr#24 627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$i3,lsr#16 628656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 62943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$i3,lsr#8 630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 63143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$i3 632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#24 63443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 63643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$t3],#4 @ rcon[i++] 637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#8 638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i3,$t2,$t1 639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i3 @ rk[8]=rk[0]^... 640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8] 641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$key],#32 64243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9] 643656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$key,#-28] 64443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10] 645656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$key,#-24] 646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 64743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom str $s3,[$key,#-20] 648656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subeq r2,$key,#256 649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project beq .Ldone 650656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t2,lr,$s3 652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#8 653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$tbl,$t2] 65443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s3,lsr#16 655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] 65643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s3,lsr#24 657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] 658656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i1,lsl#8 65943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] 660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i2,lsl#16 66143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#-48] 662656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $t2,$t2,$i3,lsl#24 663656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 664656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$key,#-44] 665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$key,#-40] 666656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2 @ rk[12]=rk[4]^... 66743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i3,[$key,#-36] 668656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12] 669656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t1,[$key,#-16] 67043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13] 671656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i1,[$key,#-12] 67243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14] 673656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i2,[$key,#-8] 674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$key,#-4] 675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project b .L256_loop 676656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Ldone: mov r0,#0 678656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Labrt: tst lr,#1 680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 682392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size private_AES_set_encrypt_key,.-private_AES_set_encrypt_key 683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 684392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.global private_AES_set_decrypt_key 685392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.type private_AES_set_decrypt_key,%function 686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 687392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromprivate_AES_set_decrypt_key: 688656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str lr,[sp,#-4]! @ push lr 689a1a5710c055e139ea00e785f9eb55b3af3e4dab1Brian Carlstrom bl _armv4_AES_set_encrypt_key 690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq r0,#0 691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrne lr,[sp],#4 @ pop lr 692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Labrt 693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 694656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stmdb sp!,{r4-r12} 695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $rounds,[r2,#240] @ AES_set_encrypt_key preserves r2, 697656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 @ which is AES_KEY *key 698656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $i1,r2 699656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $i2,r2,$rounds,lsl#4 700656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 701656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Linv: ldr $s0,[$i1] 702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s1,[$i1,#4] 703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s2,[$i1,#8] 704656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s3,[$i1,#12] 705656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t1,[$i2] 706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t2,[$i2,#4] 707656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t3,[$i2,#8] 708656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$i2,#12] 709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s0,[$i2],#-16 710656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s1,[$i2,#16+4] 711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s2,[$i2,#16+8] 712656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $s3,[$i2,#16+12] 713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t1,[$i1],#16 714656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t2,[$i1,#-12] 715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t3,[$i1,#-8] 716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $i3,[$i1,#-4] 717656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project teq $i1,$i2 718656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Linv 719656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___ 720656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask80=$i1; 721656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask1b=$i2; 722656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$mask7f=$i3; 723656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code.=<<___; 724656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s0,[$key,#16]! @ prefetch tp1 725656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $mask80,#0x80 726656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $mask1b,#0x1b 727656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask80,$mask80,#0x8000 728656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask1b,$mask1b,#0x1b00 729656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask80,$mask80,$mask80,lsl#16 730656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $mask1b,$mask1b,$mask1b,lsl#16 731656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $rounds,$rounds,#1 732656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mvn $mask7f,$mask80 733656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,$rounds,lsl#2 @ (rounds-1)*4 734656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 735656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.Lmix: and $t1,$s0,$mask80 736656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $s1,$s0,$mask7f 737656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $t1,$t1,$t1,lsr#7 738656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$t1,$mask1b 739656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$t1,$s1,lsl#1 @ tp2 740656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 741656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$s1,$mask80 742656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $s2,$s1,$mask7f 743656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $t1,$t1,$t1,lsr#7 744656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$t1,$mask1b 745656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$t1,$s2,lsl#1 @ tp4 746656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 747656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$s2,$mask80 748656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $s3,$s2,$mask7f 749656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $t1,$t1,$t1,lsr#7 750656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $t1,$t1,$mask1b 751656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$t1,$s3,lsl#1 @ tp8 752656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 753656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$s1,$s2 754656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t2,$s0,$s3 @ tp9 755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$s3 @ tpe 756656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$s1,ror#24 757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8) 758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$s2,ror#16 759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16) 760656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $t1,$t1,$t2,ror#8 @ ^= ROTATE(tp9,24) 761656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 762656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $s0,[$key,#4] @ prefetch tp1 763656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str $t1,[$key],#4 764656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Lmix 766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 767656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov r0,#0 768392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5 769392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldmia sp!,{r4-r12,pc} 770392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 771656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 772656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tst lr,#1 773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 775392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 776392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom.size private_AES_set_decrypt_key,.-private_AES_set_decrypt_key 777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_Td,%object 779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_Td: 781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393 783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25 784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f 785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1 786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6 787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da 788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844 789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd 790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4 791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45 792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94 793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7 794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a 795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5 796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c 797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1 798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a 799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75 800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051 801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46 802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff 803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77 804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb 805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000 806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e 807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927 808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a 809656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e 810656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16 811656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d 812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8 813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd 814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34 815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163 816656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120 817656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d 818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0 819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422 820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef 821656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36 822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4 823656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662 824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5 825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3 826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b 827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8 828656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6 829656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6 830656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0 831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815 832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f 833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df 834656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f 835656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e 836656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713 837656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89 838656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c 839656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf 840656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86 841656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f 842656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541 843656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190 844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ Td4[256] 846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 853656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 855656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 860656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 862656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 867656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 869656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_Td,.-AES_Td 879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ void AES_decrypt(const unsigned char *in, unsigned char *out, 881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project@ const AES_KEY *key) { 882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.global AES_decrypt 883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type AES_decrypt,%function 884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 5 885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectAES_decrypt: 886656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub r3,pc,#8 @ AES_decrypt 887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project stmdb sp!,{r1,r4-r12,lr} 888656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $rounds,r0 @ inp 889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $key,r2 890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,r3,#AES_decrypt-AES_Td @ Td 891392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__<7 892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 893656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#2] @ manner... 894656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#1] 895656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#0] 896656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s0,$s0,$t1,lsl#8 897656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$rounds,#7] 89843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t2,lsl#16 899656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#6] 90043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s0,$s0,$t3,lsl#24 901656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#5] 902656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#4] 903656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s1,$s1,$t1,lsl#8 904656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$rounds,#11] 90543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t2,lsl#16 906656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#10] 90743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s1,$s1,$t3,lsl#24 908656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#9] 909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#8] 910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s2,$s2,$t1,lsl#8 911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$rounds,#15] 91243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t2,lsl#16 913656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$rounds,#14] 91443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom orr $s2,$s2,$t3,lsl#24 915656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t2,[$rounds,#13] 916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t3,[$rounds,#12] 917656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t1,lsl#8 918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t2,lsl#16 919656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project orr $s3,$s3,$t3,lsl#24 920392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 921392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s0,[$rounds,#0] 922392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s1,[$rounds,#4] 923392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s2,[$rounds,#8] 924392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s3,[$rounds,#12] 925392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 926392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s0,$s0 927392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s1,$s1 928392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s2,$s2 929392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s3,$s3 930392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 931392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 932656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bl _armv4_AES_decrypt 933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 934656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $rounds,[sp],#4 @ pop out 935392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=7 936392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#ifdef __ARMEL__ 937392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s0,$s0 938392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s1,$s1 939392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s2,$s2 940392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom rev $s3,$s3 941392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 942392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s0,[$rounds,#0] 943392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s1,[$rounds,#4] 944392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s2,[$rounds,#8] 945392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom str $s3,[$rounds,#12] 946392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 947656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s0,lsr#24 @ write output in endian-neutral 948656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s0,lsr#16 @ manner... 949656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s0,lsr#8 950656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#0] 951656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#1] 952656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s1,lsr#24 95343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#2] 954656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s1,lsr#16 95543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s0,[$rounds,#3] 956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s1,lsr#8 957656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#4] 958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#5] 959656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s2,lsr#24 96043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#6] 961656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s2,lsr#16 96243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s1,[$rounds,#7] 963656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s2,lsr#8 964656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#8] 965656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#9] 966656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t1,$s3,lsr#24 96743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $t3,[$rounds,#10] 968656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t2,$s3,lsr#16 96943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom strb $s2,[$rounds,#11] 970656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $t3,$s3,lsr#8 971656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t1,[$rounds,#12] 972656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t2,[$rounds,#13] 973656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $t3,[$rounds,#14] 974656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project strb $s3,[$rounds,#15] 975392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 976392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#if __ARM_ARCH__>=5 977392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldmia sp!,{r4-r12,pc} 978392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#else 979656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldmia sp!,{r4-r12,lr} 980656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project tst lr,#1 981656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project moveq pc,lr @ be binary compatible with V4, yet 982656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bx lr @ interoperable with Thumb ISA:-) 983392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#endif 984656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size AES_decrypt,.-AES_decrypt 985656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 986656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.type _armv4_AES_decrypt,%function 987656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.align 2 988656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project_armv4_AES_decrypt: 989656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str lr,[sp,#-4]! @ push lr 99043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldmia $key!,{$t1-$i1} 991656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$t1 99243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $rounds,[$key,#240-16] 993656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$t2 994656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$t3 995656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$s3,$i1 996656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $rounds,$rounds,#1 997656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov lr,#255 998656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 999656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s0,lsr#16 1000656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s0,lsr#8 1001656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s0 1002656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s0,$s0,lsr#24 100343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom.Ldec_loop: 1004656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16] 1005656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1 @ i0 100643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8] 1007656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1,lsr#16 100843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0] 1009656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 101043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24] 1011656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project mov $s1,$s1,lsr#24 101243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1013656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0] 1014656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16] 1015656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8] 1016656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#24 101743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24] 1018656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 101943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$i2,$t2,ror#8 1020656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2 @ i1 102143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,ror#8 1022656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s2,lsr#16 1023656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8] 1024392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s1,$s1,$t1,ror#8 1025392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0] 102643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s2,$s2,lsr#24 102743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1028656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16] 1029656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#16 103043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24] 1031656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#16 @ i0 103243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$i2,ror#24 1033656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 103443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t3,$i3,$t3,ror#8 1035656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s3 @ i2 1036656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16] 1037392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s2,$s2,$t2,ror#8 1038392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8] 103943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s3,$s3,lsr#24 104043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1041656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0] 1042656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,ror#8 1043392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $i1,[$key],#16 1044656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,ror#16 1045392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24] 1046656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$s2,$i3,ror#24 1047656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 104843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#-12] 104943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 1050392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldr $t2,[$key,#-8] 1051392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $s3,$s3,$t3,ror#8 105243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#-4] 105343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i1,lr,$s0,lsr#16 105443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 105543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i2,lr,$s0,lsr#8 105643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 105743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s0 105843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 105943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom mov $s0,$s0,lsr#24 1060656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1061656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project subs $rounds,$rounds,#1 1062656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project bne .Ldec_loop 1063656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1064656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project add $tbl,$tbl,#1024 1065656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 106643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,#0] @ prefetch Td4 106743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,#32] 106843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$tbl,#64] 106943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,#96] 107043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,#128] 107143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$tbl,#160] 107243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$tbl,#192] 107343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$tbl,#224] 1074656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 107543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $s0,[$tbl,$s0] @ Td4[s0>>24] 1076656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $t1,[$tbl,$i1] @ Td4[s0>>16] 1077656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s1 @ i0 107843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t2,[$tbl,$i2] @ Td4[s0>>8] 1079656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s1,lsr#16 108043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $t3,[$tbl,$i3] @ Td4[s0>>0] 1081656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i3,lr,$s1,lsr#8 108243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1083656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] @ Td4[s1>>0] 1084656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24] 1085656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i2,[$tbl,$i2] @ Td4[s1>>16] 1086656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$i1,$s0,lsl#24 108743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] @ Td4[s1>>8] 1088656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$t1,$s1,lsl#8 1089656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s2,lsr#8 @ i0 109043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $t2,$t2,$i2,lsl#8 1091656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s2 @ i1 1092656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] @ Td4[s2>>8] 1093392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $t3,$t3,$i3,lsl#8 1094392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldrb $i2,[$tbl,$i2] @ Td4[s2>>0] 109543c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s2,lsr#16 109643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1097656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24] 1098656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,lsl#8 109943c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldrb $i3,[$tbl,$i3] @ Td4[s2>>16] 1100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$i2,$s1,lsl#16 1101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i1,lr,$s3,lsr#16 @ i0 110243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$t2,$s2,lsl#16 1103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project and $i2,lr,$s3,lsr#8 @ i1 1104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i1,[$tbl,$i1] @ Td4[s3>>16] 1105392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom eor $t3,$t3,$i3,lsl#16 1106392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom ldrb $i2,[$tbl,$i2] @ Td4[s3>>8] 110743c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom and $i3,lr,$s3 @ i2 110843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom 1109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $i3,[$tbl,$i3] @ Td4[s3>>0] 1110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24] 1111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s0,$s0,$i1,lsl#16 111243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $i1,[$key,#0] 1113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s1,$s1,$i2,lsl#8 111443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t1,[$key,#4] 1115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s2,$i3,$s2,lsl#8 111643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t2,[$key,#8] 1117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project eor $s3,$t3,$s3,lsl#24 111843c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr $t3,[$key,#12] 1119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 112043c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s0,$s0,$i1 112143c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s1,$s1,$t1 112243c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s2,$s2,$t2 112343c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom eor $s3,$s3,$t3 1124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project sub $tbl,$tbl,#1024 112643c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstrom ldr pc,[sp],#4 @ pop and return 1127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.size _armv4_AES_decrypt,.-_armv4_AES_decrypt 1128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project.asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>" 1129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom.align 2 1130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project___ 1131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4 1133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectprint $code; 113443c12e3d4f9bbbbd4a8ba7b149686437514bc6b6Brian Carlstromclose STDOUT; # enforce flush 1135