195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#!/usr/bin/env perl 295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# ==================================================================== 495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL 595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# project. The module is, however, dual licensed under OpenSSL and 695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# CRYPTOGAMS licenses depending on where you obtain it. For further 795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# details see http://www.openssl.org/~appro/cryptogams/. 895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# ==================================================================== 995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# AES for ARMv4 1195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 1295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# January 2007. 1395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# 1495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# Code uses single 1K S-box and is >2 times faster than code generated 1595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# by gcc-3.4.1. This is thanks to unique feature of ARMv4 ISA, which 1695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# allows to merge logical or arithmetic operation with shift or rotate 1795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# in one instruction and emit combined result every cycle. The module 1895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# is endian-neutral. The performance is ~42 cycles/byte for 128-bit 1995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# key [on single-issue Xscale PXA250 core]. 2095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# May 2007. 2295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# 2395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# AES_set_[en|de]crypt_key is added. 2495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 2595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# July 2010. 2695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# 2795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# Rescheduling for dual-issue pipeline resulted in 12% improvement on 2895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# Cortex A8 core and ~25 cycles per byte processed with 128-bit key. 2995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 3095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# February 2011. 3195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# 3295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# Profiler-assisted and platform-specific optimization resulted in 16% 3395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# improvement on Cortex A8 core and ~21.5 cycles per byte. 3495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 3595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleywhile (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {} 3695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyopen STDOUT,">$output"; 3795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 3895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$s0="r0"; 3995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$s1="r1"; 4095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$s2="r2"; 4195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$s3="r3"; 4295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$t1="r4"; 4395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$t2="r5"; 4495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$t3="r6"; 4595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$i1="r7"; 4695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$i2="r8"; 4795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$i3="r9"; 4895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 4995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$tbl="r10"; 5095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$key="r11"; 5195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$rounds="r12"; 5295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 5395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$code=<<___; 5495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if defined(__arm__) 5595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifndef __KERNEL__ 5695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# include "arm_arch.h" 5795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 5895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# define __ARM_ARCH__ __LINUX_ARM_ARCH__ 5995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 6095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 6195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.text 6295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 6395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.code 32 6495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 6595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.syntax unified 6695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# ifdef __thumb2__ 6795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.thumb 6895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# else 6995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.code 32 7095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley# endif 7195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 7295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 7395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.type AES_Te,%object 7495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 7595c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyAES_Te: 7695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d 7795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554 7895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d 7995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a 8095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87 8195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b 8295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea 8395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b 8495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a 8595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f 8695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108 8795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f 8895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e 8995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5 9095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d 9195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f 9295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e 9395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb 9495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce 9595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497 9695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c 9795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed 9895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b 9995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a 10095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16 10195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594 10295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81 10395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3 10495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a 10595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504 10695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163 10795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d 10895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f 10995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739 11095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47 11195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395 11295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f 11395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883 11495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c 11595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76 11695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e 11795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4 11895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6 11995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b 12095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7 12195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0 12295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25 12395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818 12495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72 12595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651 12695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21 12795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85 12895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa 12995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12 13095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0 13195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9 13295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133 13395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7 13495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920 13595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a 13695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17 13795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8 13895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11 13995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a 14095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley@ Te4[256] 14195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 14295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76 14395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0 14495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0 14595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc 14695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15 14795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a 14895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75 14995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0 15095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84 15195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b 15295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf 15395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85 15495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8 15595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5 15695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2 15795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17 15895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73 15995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88 16095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb 16195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c 16295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79 16395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9 16495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08 16595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6 16695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a 16795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e 16895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e 16995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94 17095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf 17195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68 17295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 17395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley@ rcon[] 17495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x01000000, 0x02000000, 0x04000000, 0x08000000 17595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x10000000, 0x20000000, 0x40000000, 0x80000000 17695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x1B000000, 0x36000000, 0, 0, 0, 0, 0, 0 17795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.size AES_Te,.-AES_Te 17895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 179eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley@ void asm_AES_encrypt(const unsigned char *in, unsigned char *out, 180eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley@ const AES_KEY *key) { 181eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.global asm_AES_encrypt 182eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.hidden asm_AES_encrypt 183eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.type asm_AES_encrypt,%function 18495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 185eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langleyasm_AES_encrypt: 18695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 187eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley sub r3,pc,#8 @ asm_AES_encrypt 18895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 189eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley adr r3,asm_AES_encrypt 19095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 19195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley stmdb sp!,{r1,r4-r12,lr} 19295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,r0 @ inp 19395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $key,r2 194eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley sub $tbl,r3,#asm_AES_encrypt-AES_Te @ Te 19595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 19695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 19795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#2] @ manner... 19895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#1] 19995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#0] 20095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t1,lsl#8 20195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s1,[$rounds,#7] 20295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t2,lsl#16 20395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#6] 20495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t3,lsl#24 20595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#5] 20695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#4] 20795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t1,lsl#8 20895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s2,[$rounds,#11] 20995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t2,lsl#16 21095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#10] 21195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t3,lsl#24 21295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#9] 21395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#8] 21495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t1,lsl#8 21595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s3,[$rounds,#15] 21695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t2,lsl#16 21795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#14] 21895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t3,lsl#24 21995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#13] 22095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#12] 22195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t1,lsl#8 22295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t2,lsl#16 22395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t3,lsl#24 22495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 22595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$rounds,#0] 22695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$rounds,#4] 22795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$rounds,#8] 22895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$rounds,#12] 22995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 23095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s0,$s0 23195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s1,$s1 23295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s2,$s2 23395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s3,$s3 23495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 23595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 23695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bl _armv4_AES_encrypt 23795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 23895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $rounds,[sp],#4 @ pop out 23995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 24095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 24195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s0,$s0 24295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s1,$s1 24395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s2,$s2 24495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s3,$s3 24595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 24695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$rounds,#0] 24795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$rounds,#4] 24895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$rounds,#8] 24995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$rounds,#12] 25095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 25195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s0,lsr#24 @ write output in endian-neutral 25295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s0,lsr#16 @ manner... 25395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s0,lsr#8 25495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#0] 25595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#1] 25695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s1,lsr#24 25795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#2] 25895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s1,lsr#16 25995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s0,[$rounds,#3] 26095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s1,lsr#8 26195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#4] 26295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#5] 26395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s2,lsr#24 26495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#6] 26595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s2,lsr#16 26695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s1,[$rounds,#7] 26795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s2,lsr#8 26895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#8] 26995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#9] 27095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s3,lsr#24 27195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#10] 27295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s3,lsr#16 27395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s2,[$rounds,#11] 27495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s3,lsr#8 27595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#12] 27695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#13] 27795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#14] 27895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s3,[$rounds,#15] 27995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 28095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=5 28195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,pc} 28295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 28395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,lr} 28495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley tst lr,#1 28595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley moveq pc,lr @ be binary compatible with V4, yet 28695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bx lr @ interoperable with Thumb ISA:-) 28795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 288eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.size asm_AES_encrypt,.-asm_AES_encrypt 28995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 29095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.type _armv4_AES_encrypt,%function 29195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 2 29295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley_armv4_AES_encrypt: 29395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str lr,[sp,#-4]! @ push lr 29495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia $key!,{$t1-$i1} 29595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$t1 29695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $rounds,[$key,#240-16] 29795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t2 29895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t3 29995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$i1 30095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $rounds,$rounds,#1 30195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov lr,#255 30295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 30395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s0 30495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s0,lsr#8 30595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s0,lsr#16 30695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s0,$s0,lsr#24 30795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Lenc_loop: 30895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$tbl,$i1,lsl#2] @ Te3[s0>>0] 30995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s1,lsr#16 @ i0 31095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$tbl,$i2,lsl#2] @ Te2[s0>>8] 31195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s1 31295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$tbl,$i3,lsl#2] @ Te1[s0>>16] 31395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s1,lsr#8 31495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$tbl,$s0,lsl#2] @ Te0[s0>>24] 31595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s1,$s1,lsr#24 31695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 31795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$tbl,$i1,lsl#2] @ Te1[s1>>16] 31895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$tbl,$i2,lsl#2] @ Te3[s1>>0] 31995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$tbl,$i3,lsl#2] @ Te2[s1>>8] 32095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,ror#8 32195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$tbl,$s1,lsl#2] @ Te0[s1>>24] 32295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s2,lsr#8 @ i0 32395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t2,$t2,$i2,ror#8 32495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s2,lsr#16 @ i1 32595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$t3,$i3,ror#8 32695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s2 32795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$tbl,$i1,lsl#2] @ Te2[s2>>8] 32895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t1,ror#24 32995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$tbl,$i2,lsl#2] @ Te1[s2>>16] 33095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s2,$s2,lsr#24 33195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 33295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$tbl,$i3,lsl#2] @ Te3[s2>>0] 33395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,ror#16 33495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$tbl,$s2,lsl#2] @ Te0[s2>>24] 33595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s3 @ i0 33695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,ror#8 33795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s3,lsr#8 @ i1 33895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$t3,$i3,ror#16 33995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s3,lsr#16 @ i2 34095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$tbl,$i1,lsl#2] @ Te3[s3>>0] 34195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t2,ror#16 34295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$tbl,$i2,lsl#2] @ Te2[s3>>8] 34395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s3,$s3,lsr#24 34495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 34595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$tbl,$i3,lsl#2] @ Te1[s3>>16] 34695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,ror#24 34795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$key],#16 34895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,ror#16 34995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$tbl,$s3,lsl#2] @ Te0[s3>>24] 35095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$i3,ror#8 35195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$key,#-12] 35295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$t3,ror#8 35395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 35495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$key,#-8] 35595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1 35695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$key,#-4] 35795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s0 35895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t1 35995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s0,lsr#8 36095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t2 36195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s0,lsr#16 36295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$t3 36395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s0,$s0,lsr#24 36495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 36595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subs $rounds,$rounds,#1 36695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Lenc_loop 36795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 36895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $tbl,$tbl,#2 36995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 37095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$tbl,$i1,lsl#2] @ Te4[s0>>0] 37195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s1,lsr#16 @ i0 37295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$tbl,$i2,lsl#2] @ Te4[s0>>8] 37395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s1 37495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$tbl,$i3,lsl#2] @ Te4[s0>>16] 37595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s1,lsr#8 37695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s0,[$tbl,$s0,lsl#2] @ Te4[s0>>24] 37795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s1,$s1,lsr#24 37895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 37995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s1>>16] 38095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s1>>0] 38195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s1>>8] 38295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$i1,$s0,lsl#8 38395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s1,[$tbl,$s1,lsl#2] @ Te4[s1>>24] 38495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s2,lsr#8 @ i0 38595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t2,$i2,$t2,lsl#8 38695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s2,lsr#16 @ i1 38795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$i3,$t3,lsl#8 38895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s2 38995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s2>>8] 39095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$t1,$s1,lsl#24 39195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s2>>16] 39295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s2,$s2,lsr#24 39395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 39495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s2>>0] 39595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$i1,$s0,lsl#8 39695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s2,[$tbl,$s2,lsl#2] @ Te4[s2>>24] 39795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s3 @ i0 39895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,lsl#16 39995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s3,lsr#8 @ i1 40095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$i3,$t3,lsl#8 40195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s3,lsr#16 @ i2 40295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1,lsl#2] @ Te4[s3>>0] 40395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$t2,$s2,lsl#24 40495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2,lsl#2] @ Te4[s3>>8] 40595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s3,$s3,lsr#24 40695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 40795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3,lsl#2] @ Te4[s3>>16] 40895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$i1,$s0,lsl#8 40995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$key,#0] 41095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s3,[$tbl,$s3,lsl#2] @ Te4[s3>>24] 41195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,lsl#8 41295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$key,#4] 41395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$i3,lsl#16 41495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$key,#8] 41595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$t3,$s3,lsl#24 41695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$key,#12] 41795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 41895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1 41995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t1 42095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t2 42195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$t3 42295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 42395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $tbl,$tbl,#2 42495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr pc,[sp],#4 @ pop and return 42595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.size _armv4_AES_encrypt,.-_armv4_AES_encrypt 42695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 427eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.global asm_AES_set_encrypt_key 428eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.hidden asm_AES_set_encrypt_key 429eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.type asm_AES_set_encrypt_key,%function 43095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 431eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langleyasm_AES_set_encrypt_key: 43295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley_armv4_AES_set_encrypt_key: 43395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 434eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley sub r3,pc,#8 @ asm_AES_set_encrypt_key 43595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 436eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley adr r3,asm_AES_set_encrypt_key 43795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 43895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq r0,#0 43995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 44095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley itt eq @ Thumb2 thing, sanity check in ARM 44195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 44295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley moveq r0,#-1 44395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley beq .Labrt 44495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq r2,#0 44595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 44695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley itt eq @ Thumb2 thing, sanity check in ARM 44795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 44895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley moveq r0,#-1 44995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley beq .Labrt 45095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 45195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq r1,#128 45295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley beq .Lok 45395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq r1,#192 45495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley beq .Lok 45595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq r1,#256 45695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 45795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley itt ne @ Thumb2 thing, sanity check in ARM 45895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 45995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley movne r0,#-1 46095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Labrt 46195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 46295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Lok: stmdb sp!,{r4-r12,lr} 46395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $tbl,r3,#_armv4_AES_set_encrypt_key-AES_Te-1024 @ Te4 46495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 46595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,r0 @ inp 46695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov lr,r1 @ bits 46795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $key,r2 @ key 46895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 46995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 47095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 47195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#2] @ manner... 47295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#1] 47395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#0] 47495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t1,lsl#8 47595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s1,[$rounds,#7] 47695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t2,lsl#16 47795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#6] 47895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t3,lsl#24 47995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#5] 48095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#4] 48195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t1,lsl#8 48295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s2,[$rounds,#11] 48395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t2,lsl#16 48495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#10] 48595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t3,lsl#24 48695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#9] 48795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#8] 48895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t1,lsl#8 48995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s3,[$rounds,#15] 49095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t2,lsl#16 49195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#14] 49295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t3,lsl#24 49395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#13] 49495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#12] 49595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t1,lsl#8 49695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$key],#16 49795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t2,lsl#16 49895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$key,#-12] 49995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t3,lsl#24 50095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$key,#-8] 50195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$key,#-4] 50295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 50395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$rounds,#0] 50495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$rounds,#4] 50595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$rounds,#8] 50695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$rounds,#12] 50795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 50895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s0,$s0 50995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s1,$s1 51095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s2,$s2 51195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s3,$s3 51295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 51395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$key],#16 51495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$key,#-12] 51595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$key,#-8] 51695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$key,#-4] 51795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 51895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 51995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq lr,#128 52095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Lnot128 52195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,#10 52295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $rounds,[$key,#240-16] 52395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $t3,$tbl,#256 @ rcon 52495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov lr,#255 52595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 52695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.L128_loop: 52795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t2,lr,$s3,lsr#24 52895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s3,lsr#16 52995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$tbl,$t2] 53095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s3,lsr#8 53195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] 53295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s3 53395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] 53495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i1,lsl#24 53595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] 53695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i2,lsl#16 53795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$t3],#4 @ rcon[i++] 53895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i3,lsl#8 53995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t2,$t2,$t1 54095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$t2 @ rk[4]=rk[0]^... 54195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$s0 @ rk[5]=rk[1]^rk[4] 54295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$key],#16 54395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$s1 @ rk[6]=rk[2]^rk[5] 54495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$key,#-12] 54595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$s2 @ rk[7]=rk[3]^rk[6] 54695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$key,#-8] 54795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subs $rounds,$rounds,#1 54895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$key,#-4] 54995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .L128_loop 55095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub r2,$key,#176 55195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley b .Ldone 55295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 55395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Lnot128: 55495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 55595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$rounds,#19] 55695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#18] 55795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#17] 55895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#16] 55995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i2,$i2,$t1,lsl#8 56095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$rounds,#23] 56195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i2,$i2,$t2,lsl#16 56295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#22] 56395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i2,$i2,$t3,lsl#24 56495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#21] 56595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#20] 56695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i3,$i3,$t1,lsl#8 56795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i3,$i3,$t2,lsl#16 56895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i2,[$key],#8 56995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i3,$i3,$t3,lsl#24 57095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 57195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 57295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$rounds,#16] 57395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$rounds,#20] 57495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 57595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $i2,$i2 57695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $i3,$i3 57795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 57895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i2,[$key],#8 57995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 58095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 58195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 58295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq lr,#192 58395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Lnot192 58495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,#12 58595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $rounds,[$key,#240-24] 58695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $t3,$tbl,#256 @ rcon 58795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov lr,#255 58895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,#8 58995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 59095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.L192_loop: 59195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t2,lr,$i3,lsr#24 59295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$i3,lsr#16 59395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$tbl,$t2] 59495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$i3,lsr#8 59595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] 59695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$i3 59795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] 59895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i1,lsl#24 59995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] 60095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i2,lsl#16 60195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$t3],#4 @ rcon[i++] 60295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i3,lsl#8 60395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i3,$t2,$t1 60495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i3 @ rk[6]=rk[0]^... 60595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$s0 @ rk[7]=rk[1]^rk[6] 60695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$key],#24 60795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$s1 @ rk[8]=rk[2]^rk[7] 60895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$key,#-20] 60995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$s2 @ rk[9]=rk[3]^rk[8] 61095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$key,#-16] 61195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subs $rounds,$rounds,#1 61295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$key,#-12] 61395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 61495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley itt eq @ Thumb2 thing, sanity check in ARM 61595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 61695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subeq r2,$key,#216 61795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley beq .Ldone 61895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 61995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$key,#-32] 62095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$key,#-28] 62195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i1,$i1,$s3 @ rk[10]=rk[4]^rk[9] 62295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i3,$i2,$i1 @ rk[11]=rk[5]^rk[10] 62395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i1,[$key,#-8] 62495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 62595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley b .L192_loop 62695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 62795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Lnot192: 62895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 62995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$rounds,#27] 63095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#26] 63195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#25] 63295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#24] 63395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i2,$i2,$t1,lsl#8 63495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$rounds,#31] 63595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i2,$i2,$t2,lsl#16 63695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#30] 63795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i2,$i2,$t3,lsl#24 63895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#29] 63995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#28] 64095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i3,$i3,$t1,lsl#8 64195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i3,$i3,$t2,lsl#16 64295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i2,[$key],#8 64395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $i3,$i3,$t3,lsl#24 64495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 64595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 64695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$rounds,#24] 64795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$rounds,#28] 64895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 64995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $i2,$i2 65095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $i3,$i3 65195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 65295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i2,[$key],#8 65395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 65495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 65595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 65695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,#14 65795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $rounds,[$key,#240-32] 65895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $t3,$tbl,#256 @ rcon 65995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov lr,#255 66095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,#7 66195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 66295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.L256_loop: 66395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t2,lr,$i3,lsr#24 66495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$i3,lsr#16 66595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$tbl,$t2] 66695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$i3,lsr#8 66795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] 66895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$i3 66995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] 67095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i1,lsl#24 67195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] 67295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i2,lsl#16 67395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$t3],#4 @ rcon[i++] 67495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i3,lsl#8 67595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i3,$t2,$t1 67695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i3 @ rk[8]=rk[0]^... 67795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$s0 @ rk[9]=rk[1]^rk[8] 67895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$key],#32 67995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$s1 @ rk[10]=rk[2]^rk[9] 68095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$key,#-28] 68195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$s2 @ rk[11]=rk[3]^rk[10] 68295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$key,#-24] 68395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subs $rounds,$rounds,#1 68495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$key,#-20] 68595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 68695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley itt eq @ Thumb2 thing, sanity check in ARM 68795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 68895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subeq r2,$key,#256 68995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley beq .Ldone 69095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 69195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t2,lr,$s3 69295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s3,lsr#8 69395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$tbl,$t2] 69495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s3,lsr#16 69595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] 69695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s3,lsr#24 69795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] 69895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i1,lsl#8 69995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] 70095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i2,lsl#16 70195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$key,#-48] 70295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $t2,$t2,$i3,lsl#24 70395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 70495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$key,#-44] 70595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$key,#-40] 70695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$t2 @ rk[12]=rk[4]^... 70795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$key,#-36] 70895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i1,$i1,$t1 @ rk[13]=rk[5]^rk[12] 70995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $t1,[$key,#-16] 71095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i2,$i2,$i1 @ rk[14]=rk[6]^rk[13] 71195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i1,[$key,#-12] 71295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $i3,$i3,$i2 @ rk[15]=rk[7]^rk[14] 71395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i2,[$key,#-8] 71495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 71595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley b .L256_loop 71695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 71795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 2 71895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Ldone: mov r0,#0 71995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,lr} 72095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Labrt: 72195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if defined(__thumb2__) && __ARM_ARCH__>=7 72295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley .short 0x4770 @ bx lr in Thumb2 encoding 72395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 72495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley tst lr,#1 72595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley moveq pc,lr @ be binary compatible with V4, yet 72695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bx lr @ interoperable with Thumb ISA:-) 72795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 728eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.size asm_AES_set_encrypt_key,.-asm_AES_set_encrypt_key 72995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 730eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.global asm_AES_set_decrypt_key 731eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.hidden asm_AES_set_decrypt_key 732eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.type asm_AES_set_decrypt_key,%function 73395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 734eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langleyasm_AES_set_decrypt_key: 73595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str lr,[sp,#-4]! @ push lr 73695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bl _armv4_AES_set_encrypt_key 73795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq r0,#0 73895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr lr,[sp],#4 @ pop lr 73995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Labrt 74095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 741eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley mov r0,r2 @ asm_AES_set_encrypt_key preserves r2, 74295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov r1,r2 @ which is AES_KEY *key 74395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley b _armv4_AES_set_enc2dec_key 744eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.size asm_AES_set_decrypt_key,.-asm_AES_set_decrypt_key 74595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 74695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley@ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out) 74795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.global AES_set_enc2dec_key 748eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.hidden AES_set_enc2dec_key 74995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.type AES_set_enc2dec_key,%function 75095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 75195c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyAES_set_enc2dec_key: 75295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley_armv4_AES_set_enc2dec_key: 75395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley stmdb sp!,{r4-r12,lr} 75495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 75595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $rounds,[r0,#240] 75695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $i1,r0 @ input 75795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $i2,r0,$rounds,lsl#4 75895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $key,r1 @ ouput 75995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $tbl,r1,$rounds,lsl#4 76095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $rounds,[r1,#240] 76195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 76295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Linv: ldr $s0,[$i1],#16 76395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$i1,#-12] 76495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$i1,#-8] 76595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$i1,#-4] 76695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$i2],#-16 76795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$i2,#16+4] 76895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$i2,#16+8] 76995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$i2,#16+12] 77095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$tbl],#-16 77195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$tbl,#16+4] 77295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$tbl,#16+8] 77395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$tbl,#16+12] 77495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $t1,[$key],#16 77595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $t2,[$key,#-12] 77695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $t3,[$key,#-8] 77795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $i3,[$key,#-4] 77895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley teq $i1,$i2 77995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Linv 78095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 78195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$i1] 78295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$i1,#4] 78395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$i1,#8] 78495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$i1,#12] 78595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$key] 78695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$key,#4] 78795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$key,#8] 78895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$key,#12] 78995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $key,$key,$rounds,lsl#3 79095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley___ 79195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$mask80=$i1; 79295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$mask1b=$i2; 79395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$mask7f=$i3; 79495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$code.=<<___; 79595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$key,#16]! @ prefetch tp1 79695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $mask80,#0x80 79795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $mask1b,#0x1b 79895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $mask80,$mask80,#0x8000 79995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $mask1b,$mask1b,#0x1b00 80095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $mask80,$mask80,$mask80,lsl#16 80195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $mask1b,$mask1b,$mask1b,lsl#16 80295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $rounds,$rounds,#1 80395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mvn $mask7f,$mask80 80495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,$rounds,lsl#2 @ (rounds-1)*4 80595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 80695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Lmix: and $t1,$s0,$mask80 80795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $s1,$s0,$mask7f 80895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $t1,$t1,$t1,lsr#7 80995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t1,$t1,$mask1b 81095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$t1,$s1,lsl#1 @ tp2 81195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 81295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t1,$s1,$mask80 81395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $s2,$s1,$mask7f 81495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $t1,$t1,$t1,lsr#7 81595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t1,$t1,$mask1b 81695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$t1,$s2,lsl#1 @ tp4 81795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 81895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t1,$s2,$mask80 81995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $s3,$s2,$mask7f 82095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $t1,$t1,$t1,lsr#7 82195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $t1,$t1,$mask1b 82295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$t1,$s3,lsl#1 @ tp8 82395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 82495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$s1,$s2 82595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t2,$s0,$s3 @ tp9 82695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$s3 @ tpe 82795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$s1,ror#24 82895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$t2,ror#24 @ ^= ROTATE(tpb=tp9^tp2,8) 82995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$s2,ror#16 83095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$t2,ror#16 @ ^= ROTATE(tpd=tp9^tp4,16) 83195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t1,$t1,$t2,ror#8 @ ^= ROTATE(tp9,24) 83295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 83395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$key,#4] @ prefetch tp1 83495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $t1,[$key],#4 83595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subs $rounds,$rounds,#1 83695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Lmix 83795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 83895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov r0,#0 83995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=5 84095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,pc} 84195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 84295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,lr} 84395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley tst lr,#1 84495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley moveq pc,lr @ be binary compatible with V4, yet 84595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bx lr @ interoperable with Thumb ISA:-) 84695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 84795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.size AES_set_enc2dec_key,.-AES_set_enc2dec_key 84895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 84995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.type AES_Td,%object 85095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 85195c29f3cd1f6c08c6c0927868683392eea727ccAdam LangleyAES_Td: 85295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96 85395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393 85495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25 85595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f 85695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1 85795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6 85895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da 85995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844 86095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd 86195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4 86295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45 86395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94 86495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7 86595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a 86695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5 86795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c 86895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1 86995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a 87095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75 87195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051 87295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46 87395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff 87495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77 87595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb 87695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000 87795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e 87895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927 87995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a 88095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e 88195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16 88295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d 88395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8 88495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd 88595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34 88695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163 88795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120 88895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d 88995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0 89095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422 89195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef 89295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36 89395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4 89495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662 89595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5 89695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3 89795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b 89895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8 89995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6 90095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6 90195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0 90295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815 90395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f 90495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df 90595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f 90695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e 90795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713 90895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89 90995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c 91095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf 91195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86 91295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f 91395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541 91495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190 91595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.word 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 91695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley@ Td4[256] 91795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38 91895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb 91995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87 92095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb 92195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d 92295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e 92395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2 92495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25 92595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16 92695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92 92795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda 92895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84 92995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a 93095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06 93195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02 93295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b 93395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea 93495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73 93595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85 93695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e 93795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89 93895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b 93995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20 94095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4 94195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31 94295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f 94395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d 94495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef 94595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0 94695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61 94795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26 94895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d 94995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.size AES_Td,.-AES_Td 95095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 951eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley@ void asm_AES_decrypt(const unsigned char *in, unsigned char *out, 952eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley@ const AES_KEY *key) { 953eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.global asm_AES_decrypt 954eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.hidden asm_AES_decrypt 955eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.type asm_AES_decrypt,%function 95695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 5 957eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langleyasm_AES_decrypt: 95895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 959eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley sub r3,pc,#8 @ asm_AES_decrypt 96095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 961eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley adr r3,asm_AES_decrypt 96295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 96395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley stmdb sp!,{r1,r4-r12,lr} 96495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $rounds,r0 @ inp 96595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $key,r2 966eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley sub $tbl,r3,#asm_AES_decrypt-AES_Td @ Td 96795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__<7 96895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s0,[$rounds,#3] @ load input data in endian-neutral 96995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#2] @ manner... 97095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#1] 97195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#0] 97295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t1,lsl#8 97395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s1,[$rounds,#7] 97495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t2,lsl#16 97595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#6] 97695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s0,$s0,$t3,lsl#24 97795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#5] 97895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#4] 97995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t1,lsl#8 98095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s2,[$rounds,#11] 98195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t2,lsl#16 98295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#10] 98395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s1,$s1,$t3,lsl#24 98495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#9] 98595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#8] 98695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t1,lsl#8 98795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s3,[$rounds,#15] 98895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t2,lsl#16 98995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$rounds,#14] 99095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s2,$s2,$t3,lsl#24 99195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$rounds,#13] 99295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$rounds,#12] 99395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t1,lsl#8 99495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t2,lsl#16 99595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley orr $s3,$s3,$t3,lsl#24 99695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 99795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$rounds,#0] 99895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$rounds,#4] 99995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$rounds,#8] 100095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$rounds,#12] 100195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 100295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s0,$s0 100395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s1,$s1 100495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s2,$s2 100595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s3,$s3 100695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 100795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 100895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bl _armv4_AES_decrypt 100995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 101095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $rounds,[sp],#4 @ pop out 101195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=7 101295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#ifdef __ARMEL__ 101395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s0,$s0 101495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s1,$s1 101595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s2,$s2 101695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley rev $s3,$s3 101795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 101895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s0,[$rounds,#0] 101995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s1,[$rounds,#4] 102095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s2,[$rounds,#8] 102195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str $s3,[$rounds,#12] 102295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 102395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s0,lsr#24 @ write output in endian-neutral 102495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s0,lsr#16 @ manner... 102595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s0,lsr#8 102695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#0] 102795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#1] 102895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s1,lsr#24 102995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#2] 103095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s1,lsr#16 103195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s0,[$rounds,#3] 103295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s1,lsr#8 103395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#4] 103495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#5] 103595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s2,lsr#24 103695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#6] 103795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s2,lsr#16 103895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s1,[$rounds,#7] 103995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s2,lsr#8 104095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#8] 104195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#9] 104295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t1,$s3,lsr#24 104395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#10] 104495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t2,$s3,lsr#16 104595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s2,[$rounds,#11] 104695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $t3,$s3,lsr#8 104795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t1,[$rounds,#12] 104895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t2,[$rounds,#13] 104995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $t3,[$rounds,#14] 105095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley strb $s3,[$rounds,#15] 105195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 105295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#if __ARM_ARCH__>=5 105395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,pc} 105495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#else 105595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia sp!,{r4-r12,lr} 105695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley tst lr,#1 105795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley moveq pc,lr @ be binary compatible with V4, yet 105895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bx lr @ interoperable with Thumb ISA:-) 105995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 1060eb7d2ed1fe8a33b3e3871502ba7e12efaf94360cAdam Langley.size asm_AES_decrypt,.-asm_AES_decrypt 106195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 106295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.type _armv4_AES_decrypt,%function 106395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 2 106495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley_armv4_AES_decrypt: 106595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley str lr,[sp,#-4]! @ push lr 106695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldmia $key!,{$t1-$i1} 106795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$t1 106895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $rounds,[$key,#240-16] 106995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t2 107095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t3 107195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$i1 107295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $rounds,$rounds,#1 107395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov lr,#255 107495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 107595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s0,lsr#16 107695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s0,lsr#8 107795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s0 107895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s0,$s0,lsr#24 107995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.Ldec_loop: 108095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$tbl,$i1,lsl#2] @ Td1[s0>>16] 108195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s1 @ i0 108295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$tbl,$i2,lsl#2] @ Td2[s0>>8] 108395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s1,lsr#16 108495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$tbl,$i3,lsl#2] @ Td3[s0>>0] 108595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s1,lsr#8 108695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s0,[$tbl,$s0,lsl#2] @ Td0[s0>>24] 108795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s1,$s1,lsr#24 108895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 108995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$tbl,$i1,lsl#2] @ Td3[s1>>0] 109095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$tbl,$i2,lsl#2] @ Td1[s1>>16] 109195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$tbl,$i3,lsl#2] @ Td2[s1>>8] 109295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,ror#24 109395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s1,[$tbl,$s1,lsl#2] @ Td0[s1>>24] 109495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s2,lsr#8 @ i0 109595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t2,$i2,$t2,ror#8 109695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s2 @ i1 109795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$i3,$t3,ror#8 109895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s2,lsr#16 109995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$tbl,$i1,lsl#2] @ Td2[s2>>8] 110095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t1,ror#8 110195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$tbl,$i2,lsl#2] @ Td3[s2>>0] 110295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s2,$s2,lsr#24 110395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 110495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$tbl,$i3,lsl#2] @ Td1[s2>>16] 110595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,ror#16 110695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s2,[$tbl,$s2,lsl#2] @ Td0[s2>>24] 110795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s3,lsr#16 @ i0 110895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,ror#24 110995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s3,lsr#8 @ i1 111095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$i3,$t3,ror#8 111195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s3 @ i2 111295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$tbl,$i1,lsl#2] @ Td1[s3>>16] 111395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t2,ror#8 111495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i2,[$tbl,$i2,lsl#2] @ Td2[s3>>8] 111595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s3,$s3,lsr#24 111695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 111795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i3,[$tbl,$i3,lsl#2] @ Td3[s3>>0] 111895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,ror#8 111995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$key],#16 112095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,ror#16 112195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $s3,[$tbl,$s3,lsl#2] @ Td0[s3>>24] 112295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$i3,ror#24 112395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 112495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$key,#-12] 112595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1 112695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$key,#-8] 112795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$t3,ror#8 112895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$key,#-4] 112995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s0,lsr#16 113095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t1 113195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s0,lsr#8 113295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t2 113395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s0 113495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$t3 113595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley mov $s0,$s0,lsr#24 113695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 113795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley subs $rounds,$rounds,#1 113895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley bne .Ldec_loop 113995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 114095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $tbl,$tbl,#1024 114195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 114295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$tbl,#0] @ prefetch Td4 114395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$tbl,#32] 114495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$tbl,#64] 114595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$tbl,#96] 114695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$tbl,#128] 114795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$tbl,#160] 114895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$tbl,#192] 114995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$tbl,#224] 115095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 115195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s0,[$tbl,$s0] @ Td4[s0>>24] 115295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t1,[$tbl,$i1] @ Td4[s0>>16] 115395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s1 @ i0 115495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t2,[$tbl,$i2] @ Td4[s0>>8] 115595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s1,lsr#16 115695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $t3,[$tbl,$i3] @ Td4[s0>>0] 115795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s1,lsr#8 115895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 115995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $s1,$tbl,$s1,lsr#24 116095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] @ Td4[s1>>0] 116195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s1,[$s1] @ Td4[s1>>24] 116295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] @ Td4[s1>>16] 116395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$i1,$s0,lsl#24 116495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] @ Td4[s1>>8] 116595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$t1,$s1,lsl#8 116695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s2,lsr#8 @ i0 116795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t2,$t2,$i2,lsl#8 116895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s2 @ i1 116995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] @ Td4[s2>>8] 117095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$t3,$i3,lsl#8 117195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] @ Td4[s2>>0] 117295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s2,lsr#16 117395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 117495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $s2,$tbl,$s2,lsr#24 117595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s2,[$s2] @ Td4[s2>>24] 117695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,lsl#8 117795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] @ Td4[s2>>16] 117895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$i2,$s1,lsl#16 117995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i1,lr,$s3,lsr#16 @ i0 118095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$t2,$s2,lsl#16 118195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i2,lr,$s3,lsr#8 @ i1 118295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i1,[$tbl,$i1] @ Td4[s3>>16] 118395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $t3,$t3,$i3,lsl#16 118495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i2,[$tbl,$i2] @ Td4[s3>>8] 118595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley and $i3,lr,$s3 @ i2 118695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 118795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley add $s3,$tbl,$s3,lsr#24 118895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $i3,[$tbl,$i3] @ Td4[s3>>0] 118995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldrb $s3,[$s3] @ Td4[s3>>24] 119095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1,lsl#16 119195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $i1,[$key,#0] 119295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$i2,lsl#8 119395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t1,[$key,#4] 119495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$i3,$s2,lsl#8 119595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t2,[$key,#8] 119695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$t3,$s3,lsl#24 119795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr $t3,[$key,#12] 119895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 119995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s0,$s0,$i1 120095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s1,$s1,$t1 120195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s2,$s2,$t2 120295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley eor $s3,$s3,$t3 120395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 120495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley sub $tbl,$tbl,#1024 120595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley ldr pc,[sp],#4 @ pop and return 120695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.size _armv4_AES_decrypt,.-_armv4_AES_decrypt 120795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.asciz "AES for ARMv4, CRYPTOGAMS by <appro\@openssl.org>" 120895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley.align 2 120995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 121095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley#endif 121195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley___ 121295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 121395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4 121495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 121595c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyopen SELF,$0; 121695c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleywhile(<SELF>) { 121795c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley next if (/^#!/); 121895c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley last if (!s/^#/@/ and !/^$/); 121995c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley print; 122095c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley} 122195c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyclose SELF; 122295c29f3cd1f6c08c6c0927868683392eea727ccAdam Langley 122395c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyprint $code; 122495c29f3cd1f6c08c6c0927868683392eea727ccAdam Langleyclose STDOUT; # enforce flush 1225