1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* crypto/aes/aes_core.c -*- mode:C; c-file-style: "eay" -*- */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/** 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * rijndael-alg-fst.c 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * @version 3.0 (December 2000) 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Optimised ANSI C code for the Rijndael cipher (now AES) 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * @author Vincent Rijmen <vincent.rijmen@esat.kuleuven.ac.be> 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * @author Antoon Bosselaers <antoon.bosselaers@esat.kuleuven.ac.be> 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * @author Paulo Barreto <paulo.barreto@terra.com.br> 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This code is hereby placed in the public domain. 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ''AS IS'' AND ANY EXPRESS 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Note: rewritten a little bit to provide error control and an OpenSSL- 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project compatible API */ 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef AES_DEBUG 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# ifndef NDEBUG 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# define NDEBUG 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project# endif 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <assert.h> 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdlib.h> 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/aes.h> 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "aes_locl.h" 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 42221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#ifndef AES_ASM 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTe0[x] = S [x].[02, 01, 01, 03]; 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTe1[x] = S [x].[03, 02, 01, 01]; 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTe2[x] = S [x].[01, 03, 02, 01]; 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTe3[x] = S [x].[01, 01, 03, 02]; 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTd0[x] = Si[x].[0e, 09, 0d, 0b]; 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTd1[x] = Si[x].[0b, 0e, 09, 0d]; 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTd2[x] = Si[x].[0d, 0b, 0e, 09]; 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTd3[x] = Si[x].[09, 0d, 0b, 0e]; 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTd4[x] = Si[x].[01]; 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project*/ 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Te0[256] = { 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc66363a5U, 0xf87c7c84U, 0xee777799U, 0xf67b7b8dU, 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfff2f20dU, 0xd66b6bbdU, 0xde6f6fb1U, 0x91c5c554U, 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x60303050U, 0x02010103U, 0xce6767a9U, 0x562b2b7dU, 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe7fefe19U, 0xb5d7d762U, 0x4dababe6U, 0xec76769aU, 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8fcaca45U, 0x1f82829dU, 0x89c9c940U, 0xfa7d7d87U, 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xeffafa15U, 0xb25959ebU, 0x8e4747c9U, 0xfbf0f00bU, 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x41adadecU, 0xb3d4d467U, 0x5fa2a2fdU, 0x45afafeaU, 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x239c9cbfU, 0x53a4a4f7U, 0xe4727296U, 0x9bc0c05bU, 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x75b7b7c2U, 0xe1fdfd1cU, 0x3d9393aeU, 0x4c26266aU, 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6c36365aU, 0x7e3f3f41U, 0xf5f7f702U, 0x83cccc4fU, 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6834345cU, 0x51a5a5f4U, 0xd1e5e534U, 0xf9f1f108U, 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe2717193U, 0xabd8d873U, 0x62313153U, 0x2a15153fU, 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0804040cU, 0x95c7c752U, 0x46232365U, 0x9dc3c35eU, 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x30181828U, 0x379696a1U, 0x0a05050fU, 0x2f9a9ab5U, 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0e070709U, 0x24121236U, 0x1b80809bU, 0xdfe2e23dU, 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcdebeb26U, 0x4e272769U, 0x7fb2b2cdU, 0xea75759fU, 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1209091bU, 0x1d83839eU, 0x582c2c74U, 0x341a1a2eU, 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x361b1b2dU, 0xdc6e6eb2U, 0xb45a5aeeU, 0x5ba0a0fbU, 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa45252f6U, 0x763b3b4dU, 0xb7d6d661U, 0x7db3b3ceU, 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5229297bU, 0xdde3e33eU, 0x5e2f2f71U, 0x13848497U, 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa65353f5U, 0xb9d1d168U, 0x00000000U, 0xc1eded2cU, 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x40202060U, 0xe3fcfc1fU, 0x79b1b1c8U, 0xb65b5bedU, 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd46a6abeU, 0x8dcbcb46U, 0x67bebed9U, 0x7239394bU, 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x944a4adeU, 0x984c4cd4U, 0xb05858e8U, 0x85cfcf4aU, 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbbd0d06bU, 0xc5efef2aU, 0x4faaaae5U, 0xedfbfb16U, 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x864343c5U, 0x9a4d4dd7U, 0x66333355U, 0x11858594U, 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8a4545cfU, 0xe9f9f910U, 0x04020206U, 0xfe7f7f81U, 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa05050f0U, 0x783c3c44U, 0x259f9fbaU, 0x4ba8a8e3U, 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa25151f3U, 0x5da3a3feU, 0x804040c0U, 0x058f8f8aU, 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3f9292adU, 0x219d9dbcU, 0x70383848U, 0xf1f5f504U, 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x63bcbcdfU, 0x77b6b6c1U, 0xafdada75U, 0x42212163U, 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x20101030U, 0xe5ffff1aU, 0xfdf3f30eU, 0xbfd2d26dU, 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x81cdcd4cU, 0x180c0c14U, 0x26131335U, 0xc3ecec2fU, 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbe5f5fe1U, 0x359797a2U, 0x884444ccU, 0x2e171739U, 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x93c4c457U, 0x55a7a7f2U, 0xfc7e7e82U, 0x7a3d3d47U, 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc86464acU, 0xba5d5de7U, 0x3219192bU, 0xe6737395U, 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc06060a0U, 0x19818198U, 0x9e4f4fd1U, 0xa3dcdc7fU, 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x44222266U, 0x542a2a7eU, 0x3b9090abU, 0x0b888883U, 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8c4646caU, 0xc7eeee29U, 0x6bb8b8d3U, 0x2814143cU, 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa7dede79U, 0xbc5e5ee2U, 0x160b0b1dU, 0xaddbdb76U, 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdbe0e03bU, 0x64323256U, 0x743a3a4eU, 0x140a0a1eU, 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x924949dbU, 0x0c06060aU, 0x4824246cU, 0xb85c5ce4U, 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9fc2c25dU, 0xbdd3d36eU, 0x43acacefU, 0xc46262a6U, 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x399191a8U, 0x319595a4U, 0xd3e4e437U, 0xf279798bU, 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd5e7e732U, 0x8bc8c843U, 0x6e373759U, 0xda6d6db7U, 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x018d8d8cU, 0xb1d5d564U, 0x9c4e4ed2U, 0x49a9a9e0U, 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd86c6cb4U, 0xac5656faU, 0xf3f4f407U, 0xcfeaea25U, 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xca6565afU, 0xf47a7a8eU, 0x47aeaee9U, 0x10080818U, 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6fbabad5U, 0xf0787888U, 0x4a25256fU, 0x5c2e2e72U, 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x381c1c24U, 0x57a6a6f1U, 0x73b4b4c7U, 0x97c6c651U, 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcbe8e823U, 0xa1dddd7cU, 0xe874749cU, 0x3e1f1f21U, 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x964b4bddU, 0x61bdbddcU, 0x0d8b8b86U, 0x0f8a8a85U, 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe0707090U, 0x7c3e3e42U, 0x71b5b5c4U, 0xcc6666aaU, 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x904848d8U, 0x06030305U, 0xf7f6f601U, 0x1c0e0e12U, 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc26161a3U, 0x6a35355fU, 0xae5757f9U, 0x69b9b9d0U, 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x17868691U, 0x99c1c158U, 0x3a1d1d27U, 0x279e9eb9U, 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd9e1e138U, 0xebf8f813U, 0x2b9898b3U, 0x22111133U, 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd26969bbU, 0xa9d9d970U, 0x078e8e89U, 0x339494a7U, 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2d9b9bb6U, 0x3c1e1e22U, 0x15878792U, 0xc9e9e920U, 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x87cece49U, 0xaa5555ffU, 0x50282878U, 0xa5dfdf7aU, 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x038c8c8fU, 0x59a1a1f8U, 0x09898980U, 0x1a0d0d17U, 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x65bfbfdaU, 0xd7e6e631U, 0x844242c6U, 0xd06868b8U, 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x824141c3U, 0x299999b0U, 0x5a2d2d77U, 0x1e0f0f11U, 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7bb0b0cbU, 0xa85454fcU, 0x6dbbbbd6U, 0x2c16163aU, 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Te1[256] = { 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa5c66363U, 0x84f87c7cU, 0x99ee7777U, 0x8df67b7bU, 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0dfff2f2U, 0xbdd66b6bU, 0xb1de6f6fU, 0x5491c5c5U, 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x50603030U, 0x03020101U, 0xa9ce6767U, 0x7d562b2bU, 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x19e7fefeU, 0x62b5d7d7U, 0xe64dababU, 0x9aec7676U, 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x458fcacaU, 0x9d1f8282U, 0x4089c9c9U, 0x87fa7d7dU, 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x15effafaU, 0xebb25959U, 0xc98e4747U, 0x0bfbf0f0U, 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xec41adadU, 0x67b3d4d4U, 0xfd5fa2a2U, 0xea45afafU, 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbf239c9cU, 0xf753a4a4U, 0x96e47272U, 0x5b9bc0c0U, 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc275b7b7U, 0x1ce1fdfdU, 0xae3d9393U, 0x6a4c2626U, 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5a6c3636U, 0x417e3f3fU, 0x02f5f7f7U, 0x4f83ccccU, 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5c683434U, 0xf451a5a5U, 0x34d1e5e5U, 0x08f9f1f1U, 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x93e27171U, 0x73abd8d8U, 0x53623131U, 0x3f2a1515U, 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0c080404U, 0x5295c7c7U, 0x65462323U, 0x5e9dc3c3U, 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x28301818U, 0xa1379696U, 0x0f0a0505U, 0xb52f9a9aU, 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x090e0707U, 0x36241212U, 0x9b1b8080U, 0x3ddfe2e2U, 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x26cdebebU, 0x694e2727U, 0xcd7fb2b2U, 0x9fea7575U, 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1b120909U, 0x9e1d8383U, 0x74582c2cU, 0x2e341a1aU, 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2d361b1bU, 0xb2dc6e6eU, 0xeeb45a5aU, 0xfb5ba0a0U, 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf6a45252U, 0x4d763b3bU, 0x61b7d6d6U, 0xce7db3b3U, 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7b522929U, 0x3edde3e3U, 0x715e2f2fU, 0x97138484U, 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf5a65353U, 0x68b9d1d1U, 0x00000000U, 0x2cc1ededU, 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x60402020U, 0x1fe3fcfcU, 0xc879b1b1U, 0xedb65b5bU, 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbed46a6aU, 0x468dcbcbU, 0xd967bebeU, 0x4b723939U, 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xde944a4aU, 0xd4984c4cU, 0xe8b05858U, 0x4a85cfcfU, 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6bbbd0d0U, 0x2ac5efefU, 0xe54faaaaU, 0x16edfbfbU, 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc5864343U, 0xd79a4d4dU, 0x55663333U, 0x94118585U, 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcf8a4545U, 0x10e9f9f9U, 0x06040202U, 0x81fe7f7fU, 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf0a05050U, 0x44783c3cU, 0xba259f9fU, 0xe34ba8a8U, 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf3a25151U, 0xfe5da3a3U, 0xc0804040U, 0x8a058f8fU, 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xad3f9292U, 0xbc219d9dU, 0x48703838U, 0x04f1f5f5U, 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdf63bcbcU, 0xc177b6b6U, 0x75afdadaU, 0x63422121U, 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x30201010U, 0x1ae5ffffU, 0x0efdf3f3U, 0x6dbfd2d2U, 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4c81cdcdU, 0x14180c0cU, 0x35261313U, 0x2fc3ececU, 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe1be5f5fU, 0xa2359797U, 0xcc884444U, 0x392e1717U, 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5793c4c4U, 0xf255a7a7U, 0x82fc7e7eU, 0x477a3d3dU, 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xacc86464U, 0xe7ba5d5dU, 0x2b321919U, 0x95e67373U, 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa0c06060U, 0x98198181U, 0xd19e4f4fU, 0x7fa3dcdcU, 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x66442222U, 0x7e542a2aU, 0xab3b9090U, 0x830b8888U, 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xca8c4646U, 0x29c7eeeeU, 0xd36bb8b8U, 0x3c281414U, 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x79a7dedeU, 0xe2bc5e5eU, 0x1d160b0bU, 0x76addbdbU, 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3bdbe0e0U, 0x56643232U, 0x4e743a3aU, 0x1e140a0aU, 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdb924949U, 0x0a0c0606U, 0x6c482424U, 0xe4b85c5cU, 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5d9fc2c2U, 0x6ebdd3d3U, 0xef43acacU, 0xa6c46262U, 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa8399191U, 0xa4319595U, 0x37d3e4e4U, 0x8bf27979U, 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x32d5e7e7U, 0x438bc8c8U, 0x596e3737U, 0xb7da6d6dU, 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8c018d8dU, 0x64b1d5d5U, 0xd29c4e4eU, 0xe049a9a9U, 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb4d86c6cU, 0xfaac5656U, 0x07f3f4f4U, 0x25cfeaeaU, 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xafca6565U, 0x8ef47a7aU, 0xe947aeaeU, 0x18100808U, 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd56fbabaU, 0x88f07878U, 0x6f4a2525U, 0x725c2e2eU, 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x24381c1cU, 0xf157a6a6U, 0xc773b4b4U, 0x5197c6c6U, 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x23cbe8e8U, 0x7ca1ddddU, 0x9ce87474U, 0x213e1f1fU, 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdd964b4bU, 0xdc61bdbdU, 0x860d8b8bU, 0x850f8a8aU, 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x90e07070U, 0x427c3e3eU, 0xc471b5b5U, 0xaacc6666U, 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd8904848U, 0x05060303U, 0x01f7f6f6U, 0x121c0e0eU, 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa3c26161U, 0x5f6a3535U, 0xf9ae5757U, 0xd069b9b9U, 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x91178686U, 0x5899c1c1U, 0x273a1d1dU, 0xb9279e9eU, 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x38d9e1e1U, 0x13ebf8f8U, 0xb32b9898U, 0x33221111U, 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbbd26969U, 0x70a9d9d9U, 0x89078e8eU, 0xa7339494U, 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb62d9b9bU, 0x223c1e1eU, 0x92158787U, 0x20c9e9e9U, 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4987ceceU, 0xffaa5555U, 0x78502828U, 0x7aa5dfdfU, 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8f038c8cU, 0xf859a1a1U, 0x80098989U, 0x171a0d0dU, 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xda65bfbfU, 0x31d7e6e6U, 0xc6844242U, 0xb8d06868U, 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc3824141U, 0xb0299999U, 0x775a2d2dU, 0x111e0f0fU, 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcb7bb0b0U, 0xfca85454U, 0xd66dbbbbU, 0x3a2c1616U, 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Te2[256] = { 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x63a5c663U, 0x7c84f87cU, 0x7799ee77U, 0x7b8df67bU, 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf20dfff2U, 0x6bbdd66bU, 0x6fb1de6fU, 0xc55491c5U, 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x30506030U, 0x01030201U, 0x67a9ce67U, 0x2b7d562bU, 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfe19e7feU, 0xd762b5d7U, 0xabe64dabU, 0x769aec76U, 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xca458fcaU, 0x829d1f82U, 0xc94089c9U, 0x7d87fa7dU, 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfa15effaU, 0x59ebb259U, 0x47c98e47U, 0xf00bfbf0U, 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xadec41adU, 0xd467b3d4U, 0xa2fd5fa2U, 0xafea45afU, 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9cbf239cU, 0xa4f753a4U, 0x7296e472U, 0xc05b9bc0U, 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb7c275b7U, 0xfd1ce1fdU, 0x93ae3d93U, 0x266a4c26U, 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x365a6c36U, 0x3f417e3fU, 0xf702f5f7U, 0xcc4f83ccU, 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x345c6834U, 0xa5f451a5U, 0xe534d1e5U, 0xf108f9f1U, 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7193e271U, 0xd873abd8U, 0x31536231U, 0x153f2a15U, 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x040c0804U, 0xc75295c7U, 0x23654623U, 0xc35e9dc3U, 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x18283018U, 0x96a13796U, 0x050f0a05U, 0x9ab52f9aU, 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x07090e07U, 0x12362412U, 0x809b1b80U, 0xe23ddfe2U, 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xeb26cdebU, 0x27694e27U, 0xb2cd7fb2U, 0x759fea75U, 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x091b1209U, 0x839e1d83U, 0x2c74582cU, 0x1a2e341aU, 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1b2d361bU, 0x6eb2dc6eU, 0x5aeeb45aU, 0xa0fb5ba0U, 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x52f6a452U, 0x3b4d763bU, 0xd661b7d6U, 0xb3ce7db3U, 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x297b5229U, 0xe33edde3U, 0x2f715e2fU, 0x84971384U, 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x53f5a653U, 0xd168b9d1U, 0x00000000U, 0xed2cc1edU, 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x20604020U, 0xfc1fe3fcU, 0xb1c879b1U, 0x5bedb65bU, 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6abed46aU, 0xcb468dcbU, 0xbed967beU, 0x394b7239U, 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4ade944aU, 0x4cd4984cU, 0x58e8b058U, 0xcf4a85cfU, 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd06bbbd0U, 0xef2ac5efU, 0xaae54faaU, 0xfb16edfbU, 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x43c58643U, 0x4dd79a4dU, 0x33556633U, 0x85941185U, 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x45cf8a45U, 0xf910e9f9U, 0x02060402U, 0x7f81fe7fU, 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x50f0a050U, 0x3c44783cU, 0x9fba259fU, 0xa8e34ba8U, 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x51f3a251U, 0xa3fe5da3U, 0x40c08040U, 0x8f8a058fU, 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x92ad3f92U, 0x9dbc219dU, 0x38487038U, 0xf504f1f5U, 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbcdf63bcU, 0xb6c177b6U, 0xda75afdaU, 0x21634221U, 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x10302010U, 0xff1ae5ffU, 0xf30efdf3U, 0xd26dbfd2U, 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcd4c81cdU, 0x0c14180cU, 0x13352613U, 0xec2fc3ecU, 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5fe1be5fU, 0x97a23597U, 0x44cc8844U, 0x17392e17U, 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc45793c4U, 0xa7f255a7U, 0x7e82fc7eU, 0x3d477a3dU, 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x64acc864U, 0x5de7ba5dU, 0x192b3219U, 0x7395e673U, 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x60a0c060U, 0x81981981U, 0x4fd19e4fU, 0xdc7fa3dcU, 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x22664422U, 0x2a7e542aU, 0x90ab3b90U, 0x88830b88U, 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x46ca8c46U, 0xee29c7eeU, 0xb8d36bb8U, 0x143c2814U, 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xde79a7deU, 0x5ee2bc5eU, 0x0b1d160bU, 0xdb76addbU, 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe03bdbe0U, 0x32566432U, 0x3a4e743aU, 0x0a1e140aU, 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x49db9249U, 0x060a0c06U, 0x246c4824U, 0x5ce4b85cU, 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc25d9fc2U, 0xd36ebdd3U, 0xacef43acU, 0x62a6c462U, 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x91a83991U, 0x95a43195U, 0xe437d3e4U, 0x798bf279U, 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe732d5e7U, 0xc8438bc8U, 0x37596e37U, 0x6db7da6dU, 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8d8c018dU, 0xd564b1d5U, 0x4ed29c4eU, 0xa9e049a9U, 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6cb4d86cU, 0x56faac56U, 0xf407f3f4U, 0xea25cfeaU, 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x65afca65U, 0x7a8ef47aU, 0xaee947aeU, 0x08181008U, 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbad56fbaU, 0x7888f078U, 0x256f4a25U, 0x2e725c2eU, 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1c24381cU, 0xa6f157a6U, 0xb4c773b4U, 0xc65197c6U, 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe823cbe8U, 0xdd7ca1ddU, 0x749ce874U, 0x1f213e1fU, 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4bdd964bU, 0xbddc61bdU, 0x8b860d8bU, 0x8a850f8aU, 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7090e070U, 0x3e427c3eU, 0xb5c471b5U, 0x66aacc66U, 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x48d89048U, 0x03050603U, 0xf601f7f6U, 0x0e121c0eU, 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x61a3c261U, 0x355f6a35U, 0x57f9ae57U, 0xb9d069b9U, 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x86911786U, 0xc15899c1U, 0x1d273a1dU, 0x9eb9279eU, 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe138d9e1U, 0xf813ebf8U, 0x98b32b98U, 0x11332211U, 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x69bbd269U, 0xd970a9d9U, 0x8e89078eU, 0x94a73394U, 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9bb62d9bU, 0x1e223c1eU, 0x87921587U, 0xe920c9e9U, 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xce4987ceU, 0x55ffaa55U, 0x28785028U, 0xdf7aa5dfU, 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8c8f038cU, 0xa1f859a1U, 0x89800989U, 0x0d171a0dU, 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbfda65bfU, 0xe631d7e6U, 0x42c68442U, 0x68b8d068U, 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x41c38241U, 0x99b02999U, 0x2d775a2dU, 0x0f111e0fU, 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb0cb7bb0U, 0x54fca854U, 0xbbd66dbbU, 0x163a2c16U, 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Te3[256] = { 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6363a5c6U, 0x7c7c84f8U, 0x777799eeU, 0x7b7b8df6U, 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf2f20dffU, 0x6b6bbdd6U, 0x6f6fb1deU, 0xc5c55491U, 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x30305060U, 0x01010302U, 0x6767a9ceU, 0x2b2b7d56U, 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfefe19e7U, 0xd7d762b5U, 0xababe64dU, 0x76769aecU, 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcaca458fU, 0x82829d1fU, 0xc9c94089U, 0x7d7d87faU, 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfafa15efU, 0x5959ebb2U, 0x4747c98eU, 0xf0f00bfbU, 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xadadec41U, 0xd4d467b3U, 0xa2a2fd5fU, 0xafafea45U, 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9c9cbf23U, 0xa4a4f753U, 0x727296e4U, 0xc0c05b9bU, 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb7b7c275U, 0xfdfd1ce1U, 0x9393ae3dU, 0x26266a4cU, 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x36365a6cU, 0x3f3f417eU, 0xf7f702f5U, 0xcccc4f83U, 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x34345c68U, 0xa5a5f451U, 0xe5e534d1U, 0xf1f108f9U, 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x717193e2U, 0xd8d873abU, 0x31315362U, 0x15153f2aU, 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x04040c08U, 0xc7c75295U, 0x23236546U, 0xc3c35e9dU, 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x18182830U, 0x9696a137U, 0x05050f0aU, 0x9a9ab52fU, 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0707090eU, 0x12123624U, 0x80809b1bU, 0xe2e23ddfU, 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xebeb26cdU, 0x2727694eU, 0xb2b2cd7fU, 0x75759feaU, 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x09091b12U, 0x83839e1dU, 0x2c2c7458U, 0x1a1a2e34U, 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1b1b2d36U, 0x6e6eb2dcU, 0x5a5aeeb4U, 0xa0a0fb5bU, 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5252f6a4U, 0x3b3b4d76U, 0xd6d661b7U, 0xb3b3ce7dU, 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x29297b52U, 0xe3e33eddU, 0x2f2f715eU, 0x84849713U, 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5353f5a6U, 0xd1d168b9U, 0x00000000U, 0xeded2cc1U, 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x20206040U, 0xfcfc1fe3U, 0xb1b1c879U, 0x5b5bedb6U, 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6a6abed4U, 0xcbcb468dU, 0xbebed967U, 0x39394b72U, 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4a4ade94U, 0x4c4cd498U, 0x5858e8b0U, 0xcfcf4a85U, 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd0d06bbbU, 0xefef2ac5U, 0xaaaae54fU, 0xfbfb16edU, 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4343c586U, 0x4d4dd79aU, 0x33335566U, 0x85859411U, 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4545cf8aU, 0xf9f910e9U, 0x02020604U, 0x7f7f81feU, 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5050f0a0U, 0x3c3c4478U, 0x9f9fba25U, 0xa8a8e34bU, 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5151f3a2U, 0xa3a3fe5dU, 0x4040c080U, 0x8f8f8a05U, 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9292ad3fU, 0x9d9dbc21U, 0x38384870U, 0xf5f504f1U, 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbcbcdf63U, 0xb6b6c177U, 0xdada75afU, 0x21216342U, 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x10103020U, 0xffff1ae5U, 0xf3f30efdU, 0xd2d26dbfU, 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcdcd4c81U, 0x0c0c1418U, 0x13133526U, 0xecec2fc3U, 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5f5fe1beU, 0x9797a235U, 0x4444cc88U, 0x1717392eU, 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc4c45793U, 0xa7a7f255U, 0x7e7e82fcU, 0x3d3d477aU, 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6464acc8U, 0x5d5de7baU, 0x19192b32U, 0x737395e6U, 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6060a0c0U, 0x81819819U, 0x4f4fd19eU, 0xdcdc7fa3U, 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x22226644U, 0x2a2a7e54U, 0x9090ab3bU, 0x8888830bU, 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4646ca8cU, 0xeeee29c7U, 0xb8b8d36bU, 0x14143c28U, 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdede79a7U, 0x5e5ee2bcU, 0x0b0b1d16U, 0xdbdb76adU, 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe0e03bdbU, 0x32325664U, 0x3a3a4e74U, 0x0a0a1e14U, 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4949db92U, 0x06060a0cU, 0x24246c48U, 0x5c5ce4b8U, 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc2c25d9fU, 0xd3d36ebdU, 0xacacef43U, 0x6262a6c4U, 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9191a839U, 0x9595a431U, 0xe4e437d3U, 0x79798bf2U, 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe7e732d5U, 0xc8c8438bU, 0x3737596eU, 0x6d6db7daU, 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8d8d8c01U, 0xd5d564b1U, 0x4e4ed29cU, 0xa9a9e049U, 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6c6cb4d8U, 0x5656faacU, 0xf4f407f3U, 0xeaea25cfU, 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6565afcaU, 0x7a7a8ef4U, 0xaeaee947U, 0x08081810U, 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbabad56fU, 0x787888f0U, 0x25256f4aU, 0x2e2e725cU, 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1c1c2438U, 0xa6a6f157U, 0xb4b4c773U, 0xc6c65197U, 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe8e823cbU, 0xdddd7ca1U, 0x74749ce8U, 0x1f1f213eU, 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4b4bdd96U, 0xbdbddc61U, 0x8b8b860dU, 0x8a8a850fU, 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x707090e0U, 0x3e3e427cU, 0xb5b5c471U, 0x6666aaccU, 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4848d890U, 0x03030506U, 0xf6f601f7U, 0x0e0e121cU, 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6161a3c2U, 0x35355f6aU, 0x5757f9aeU, 0xb9b9d069U, 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x86869117U, 0xc1c15899U, 0x1d1d273aU, 0x9e9eb927U, 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe1e138d9U, 0xf8f813ebU, 0x9898b32bU, 0x11113322U, 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6969bbd2U, 0xd9d970a9U, 0x8e8e8907U, 0x9494a733U, 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9b9bb62dU, 0x1e1e223cU, 0x87879215U, 0xe9e920c9U, 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcece4987U, 0x5555ffaaU, 0x28287850U, 0xdfdf7aa5U, 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8c8c8f03U, 0xa1a1f859U, 0x89898009U, 0x0d0d171aU, 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbfbfda65U, 0xe6e631d7U, 0x4242c684U, 0x6868b8d0U, 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4141c382U, 0x9999b029U, 0x2d2d775aU, 0x0f0f111eU, 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb0b0cb7bU, 0x5454fca8U, 0xbbbbd66dU, 0x16163a2cU, 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Td0[256] = { 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x51f4a750U, 0x7e416553U, 0x1a17a4c3U, 0x3a275e96U, 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3bab6bcbU, 0x1f9d45f1U, 0xacfa58abU, 0x4be30393U, 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2030fa55U, 0xad766df6U, 0x88cc7691U, 0xf5024c25U, 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4fe5d7fcU, 0xc52acbd7U, 0x26354480U, 0xb562a38fU, 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdeb15a49U, 0x25ba1b67U, 0x45ea0e98U, 0x5dfec0e1U, 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc32f7502U, 0x814cf012U, 0x8d4697a3U, 0x6bd3f9c6U, 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x038f5fe7U, 0x15929c95U, 0xbf6d7aebU, 0x955259daU, 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd4be832dU, 0x587421d3U, 0x49e06929U, 0x8ec9c844U, 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x75c2896aU, 0xf48e7978U, 0x99583e6bU, 0x27b971ddU, 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbee14fb6U, 0xf088ad17U, 0xc920ac66U, 0x7dce3ab4U, 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x63df4a18U, 0xe51a3182U, 0x97513360U, 0x62537f45U, 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb16477e0U, 0xbb6bae84U, 0xfe81a01cU, 0xf9082b94U, 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x70486858U, 0x8f45fd19U, 0x94de6c87U, 0x527bf8b7U, 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xab73d323U, 0x724b02e2U, 0xe31f8f57U, 0x6655ab2aU, 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb2eb2807U, 0x2fb5c203U, 0x86c57b9aU, 0xd33708a5U, 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x302887f2U, 0x23bfa5b2U, 0x02036abaU, 0xed16825cU, 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8acf1c2bU, 0xa779b492U, 0xf307f2f0U, 0x4e69e2a1U, 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x65daf4cdU, 0x0605bed5U, 0xd134621fU, 0xc4a6fe8aU, 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x342e539dU, 0xa2f355a0U, 0x058ae132U, 0xa4f6eb75U, 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0b83ec39U, 0x4060efaaU, 0x5e719f06U, 0xbd6e1051U, 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3e218af9U, 0x96dd063dU, 0xdd3e05aeU, 0x4de6bd46U, 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x91548db5U, 0x71c45d05U, 0x0406d46fU, 0x605015ffU, 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1998fb24U, 0xd6bde997U, 0x894043ccU, 0x67d99e77U, 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb0e842bdU, 0x07898b88U, 0xe7195b38U, 0x79c8eedbU, 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa17c0a47U, 0x7c420fe9U, 0xf8841ec9U, 0x00000000U, 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x09808683U, 0x322bed48U, 0x1e1170acU, 0x6c5a724eU, 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfd0efffbU, 0x0f853856U, 0x3daed51eU, 0x362d3927U, 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0a0fd964U, 0x685ca621U, 0x9b5b54d1U, 0x24362e3aU, 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0c0a67b1U, 0x9357e70fU, 0xb4ee96d2U, 0x1b9b919eU, 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x80c0c54fU, 0x61dc20a2U, 0x5a774b69U, 0x1c121a16U, 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe293ba0aU, 0xc0a02ae5U, 0x3c22e043U, 0x121b171dU, 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0e090d0bU, 0xf28bc7adU, 0x2db6a8b9U, 0x141ea9c8U, 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x57f11985U, 0xaf75074cU, 0xee99ddbbU, 0xa37f60fdU, 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf701269fU, 0x5c72f5bcU, 0x44663bc5U, 0x5bfb7e34U, 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8b432976U, 0xcb23c6dcU, 0xb6edfc68U, 0xb8e4f163U, 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd731dccaU, 0x42638510U, 0x13972240U, 0x84c61120U, 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x854a247dU, 0xd2bb3df8U, 0xaef93211U, 0xc729a16dU, 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1d9e2f4bU, 0xdcb230f3U, 0x0d8652ecU, 0x77c1e3d0U, 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2bb3166cU, 0xa970b999U, 0x119448faU, 0x47e96422U, 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa8fc8cc4U, 0xa0f03f1aU, 0x567d2cd8U, 0x223390efU, 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x87494ec7U, 0xd938d1c1U, 0x8ccaa2feU, 0x98d40b36U, 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa6f581cfU, 0xa57ade28U, 0xdab78e26U, 0x3fadbfa4U, 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2c3a9de4U, 0x5078920dU, 0x6a5fcc9bU, 0x547e4662U, 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf68d13c2U, 0x90d8b8e8U, 0x2e39f75eU, 0x82c3aff5U, 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9f5d80beU, 0x69d0937cU, 0x6fd52da9U, 0xcf2512b3U, 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc8ac993bU, 0x10187da7U, 0xe89c636eU, 0xdb3bbb7bU, 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcd267809U, 0x6e5918f4U, 0xec9ab701U, 0x834f9aa8U, 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe6956e65U, 0xaaffe67eU, 0x21bccf08U, 0xef15e8e6U, 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbae79bd9U, 0x4a6f36ceU, 0xea9f09d4U, 0x29b07cd6U, 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x31a4b2afU, 0x2a3f2331U, 0xc6a59430U, 0x35a266c0U, 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x744ebc37U, 0xfc82caa6U, 0xe090d0b0U, 0x33a7d815U, 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf104984aU, 0x41ecdaf7U, 0x7fcd500eU, 0x1791f62fU, 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x764dd68dU, 0x43efb04dU, 0xccaa4d54U, 0xe49604dfU, 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9ed1b5e3U, 0x4c6a881bU, 0xc12c1fb8U, 0x4665517fU, 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9d5eea04U, 0x018c355dU, 0xfa877473U, 0xfb0b412eU, 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb3671d5aU, 0x92dbd252U, 0xe9105633U, 0x6dd64713U, 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9ad7618cU, 0x37a10c7aU, 0x59f8148eU, 0xeb133c89U, 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcea927eeU, 0xb761c935U, 0xe11ce5edU, 0x7a47b13cU, 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9cd2df59U, 0x55f2733fU, 0x1814ce79U, 0x73c737bfU, 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x53f7cdeaU, 0x5ffdaa5bU, 0xdf3d6f14U, 0x7844db86U, 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcaaff381U, 0xb968c43eU, 0x3824342cU, 0xc2a3405fU, 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x161dc372U, 0xbce2250cU, 0x283c498bU, 0xff0d9541U, 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x39a80171U, 0x080cb3deU, 0xd8b4e49cU, 0x6456c190U, 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7bcb8461U, 0xd532b670U, 0x486c5c74U, 0xd0b85742U, 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Td1[256] = { 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5051f4a7U, 0x537e4165U, 0xc31a17a4U, 0x963a275eU, 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcb3bab6bU, 0xf11f9d45U, 0xabacfa58U, 0x934be303U, 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x552030faU, 0xf6ad766dU, 0x9188cc76U, 0x25f5024cU, 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfc4fe5d7U, 0xd7c52acbU, 0x80263544U, 0x8fb562a3U, 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x49deb15aU, 0x6725ba1bU, 0x9845ea0eU, 0xe15dfec0U, 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x02c32f75U, 0x12814cf0U, 0xa38d4697U, 0xc66bd3f9U, 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe7038f5fU, 0x9515929cU, 0xebbf6d7aU, 0xda955259U, 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2dd4be83U, 0xd3587421U, 0x2949e069U, 0x448ec9c8U, 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6a75c289U, 0x78f48e79U, 0x6b99583eU, 0xdd27b971U, 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb6bee14fU, 0x17f088adU, 0x66c920acU, 0xb47dce3aU, 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1863df4aU, 0x82e51a31U, 0x60975133U, 0x4562537fU, 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe0b16477U, 0x84bb6baeU, 0x1cfe81a0U, 0x94f9082bU, 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x58704868U, 0x198f45fdU, 0x8794de6cU, 0xb7527bf8U, 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x23ab73d3U, 0xe2724b02U, 0x57e31f8fU, 0x2a6655abU, 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x07b2eb28U, 0x032fb5c2U, 0x9a86c57bU, 0xa5d33708U, 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf2302887U, 0xb223bfa5U, 0xba02036aU, 0x5ced1682U, 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2b8acf1cU, 0x92a779b4U, 0xf0f307f2U, 0xa14e69e2U, 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcd65daf4U, 0xd50605beU, 0x1fd13462U, 0x8ac4a6feU, 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9d342e53U, 0xa0a2f355U, 0x32058ae1U, 0x75a4f6ebU, 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x390b83ecU, 0xaa4060efU, 0x065e719fU, 0x51bd6e10U, 408656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf93e218aU, 0x3d96dd06U, 0xaedd3e05U, 0x464de6bdU, 409656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb591548dU, 0x0571c45dU, 0x6f0406d4U, 0xff605015U, 410656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x241998fbU, 0x97d6bde9U, 0xcc894043U, 0x7767d99eU, 411656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbdb0e842U, 0x8807898bU, 0x38e7195bU, 0xdb79c8eeU, 412656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x47a17c0aU, 0xe97c420fU, 0xc9f8841eU, 0x00000000U, 413656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x83098086U, 0x48322bedU, 0xac1e1170U, 0x4e6c5a72U, 414656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfbfd0effU, 0x560f8538U, 0x1e3daed5U, 0x27362d39U, 415656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x640a0fd9U, 0x21685ca6U, 0xd19b5b54U, 0x3a24362eU, 416656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb10c0a67U, 0x0f9357e7U, 0xd2b4ee96U, 0x9e1b9b91U, 417656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4f80c0c5U, 0xa261dc20U, 0x695a774bU, 0x161c121aU, 418656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0ae293baU, 0xe5c0a02aU, 0x433c22e0U, 0x1d121b17U, 419656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0b0e090dU, 0xadf28bc7U, 0xb92db6a8U, 0xc8141ea9U, 420656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8557f119U, 0x4caf7507U, 0xbbee99ddU, 0xfda37f60U, 421656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9ff70126U, 0xbc5c72f5U, 0xc544663bU, 0x345bfb7eU, 422656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x768b4329U, 0xdccb23c6U, 0x68b6edfcU, 0x63b8e4f1U, 423656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcad731dcU, 0x10426385U, 0x40139722U, 0x2084c611U, 424656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7d854a24U, 0xf8d2bb3dU, 0x11aef932U, 0x6dc729a1U, 425656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4b1d9e2fU, 0xf3dcb230U, 0xec0d8652U, 0xd077c1e3U, 426656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6c2bb316U, 0x99a970b9U, 0xfa119448U, 0x2247e964U, 427656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc4a8fc8cU, 0x1aa0f03fU, 0xd8567d2cU, 0xef223390U, 428656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc787494eU, 0xc1d938d1U, 0xfe8ccaa2U, 0x3698d40bU, 429656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcfa6f581U, 0x28a57adeU, 0x26dab78eU, 0xa43fadbfU, 430656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe42c3a9dU, 0x0d507892U, 0x9b6a5fccU, 0x62547e46U, 431656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc2f68d13U, 0xe890d8b8U, 0x5e2e39f7U, 0xf582c3afU, 432656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbe9f5d80U, 0x7c69d093U, 0xa96fd52dU, 0xb3cf2512U, 433656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3bc8ac99U, 0xa710187dU, 0x6ee89c63U, 0x7bdb3bbbU, 434656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x09cd2678U, 0xf46e5918U, 0x01ec9ab7U, 0xa8834f9aU, 435656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x65e6956eU, 0x7eaaffe6U, 0x0821bccfU, 0xe6ef15e8U, 436656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd9bae79bU, 0xce4a6f36U, 0xd4ea9f09U, 0xd629b07cU, 437656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xaf31a4b2U, 0x312a3f23U, 0x30c6a594U, 0xc035a266U, 438656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x37744ebcU, 0xa6fc82caU, 0xb0e090d0U, 0x1533a7d8U, 439656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4af10498U, 0xf741ecdaU, 0x0e7fcd50U, 0x2f1791f6U, 440656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8d764dd6U, 0x4d43efb0U, 0x54ccaa4dU, 0xdfe49604U, 441656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe39ed1b5U, 0x1b4c6a88U, 0xb8c12c1fU, 0x7f466551U, 442656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x049d5eeaU, 0x5d018c35U, 0x73fa8774U, 0x2efb0b41U, 443656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5ab3671dU, 0x5292dbd2U, 0x33e91056U, 0x136dd647U, 444656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8c9ad761U, 0x7a37a10cU, 0x8e59f814U, 0x89eb133cU, 445656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xeecea927U, 0x35b761c9U, 0xede11ce5U, 0x3c7a47b1U, 446656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x599cd2dfU, 0x3f55f273U, 0x791814ceU, 0xbf73c737U, 447656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xea53f7cdU, 0x5b5ffdaaU, 0x14df3d6fU, 0x867844dbU, 448656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x81caaff3U, 0x3eb968c4U, 0x2c382434U, 0x5fc2a340U, 449656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x72161dc3U, 0x0cbce225U, 0x8b283c49U, 0x41ff0d95U, 450656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7139a801U, 0xde080cb3U, 0x9cd8b4e4U, 0x906456c1U, 451656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x617bcb84U, 0x70d532b6U, 0x74486c5cU, 0x42d0b857U, 452656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 453656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Td2[256] = { 454656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa75051f4U, 0x65537e41U, 0xa4c31a17U, 0x5e963a27U, 455656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6bcb3babU, 0x45f11f9dU, 0x58abacfaU, 0x03934be3U, 456656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfa552030U, 0x6df6ad76U, 0x769188ccU, 0x4c25f502U, 457656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd7fc4fe5U, 0xcbd7c52aU, 0x44802635U, 0xa38fb562U, 458656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5a49deb1U, 0x1b6725baU, 0x0e9845eaU, 0xc0e15dfeU, 459656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7502c32fU, 0xf012814cU, 0x97a38d46U, 0xf9c66bd3U, 460656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5fe7038fU, 0x9c951592U, 0x7aebbf6dU, 0x59da9552U, 461656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x832dd4beU, 0x21d35874U, 0x692949e0U, 0xc8448ec9U, 462656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x896a75c2U, 0x7978f48eU, 0x3e6b9958U, 0x71dd27b9U, 463656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4fb6bee1U, 0xad17f088U, 0xac66c920U, 0x3ab47dceU, 464656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4a1863dfU, 0x3182e51aU, 0x33609751U, 0x7f456253U, 465656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x77e0b164U, 0xae84bb6bU, 0xa01cfe81U, 0x2b94f908U, 466656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x68587048U, 0xfd198f45U, 0x6c8794deU, 0xf8b7527bU, 467656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd323ab73U, 0x02e2724bU, 0x8f57e31fU, 0xab2a6655U, 468656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2807b2ebU, 0xc2032fb5U, 0x7b9a86c5U, 0x08a5d337U, 469656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x87f23028U, 0xa5b223bfU, 0x6aba0203U, 0x825ced16U, 470656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1c2b8acfU, 0xb492a779U, 0xf2f0f307U, 0xe2a14e69U, 471656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf4cd65daU, 0xbed50605U, 0x621fd134U, 0xfe8ac4a6U, 472656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x539d342eU, 0x55a0a2f3U, 0xe132058aU, 0xeb75a4f6U, 473656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xec390b83U, 0xefaa4060U, 0x9f065e71U, 0x1051bd6eU, 474656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8af93e21U, 0x063d96ddU, 0x05aedd3eU, 0xbd464de6U, 475656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8db59154U, 0x5d0571c4U, 0xd46f0406U, 0x15ff6050U, 476656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfb241998U, 0xe997d6bdU, 0x43cc8940U, 0x9e7767d9U, 477656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x42bdb0e8U, 0x8b880789U, 0x5b38e719U, 0xeedb79c8U, 478656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0a47a17cU, 0x0fe97c42U, 0x1ec9f884U, 0x00000000U, 479656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x86830980U, 0xed48322bU, 0x70ac1e11U, 0x724e6c5aU, 480656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfffbfd0eU, 0x38560f85U, 0xd51e3daeU, 0x3927362dU, 481656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd9640a0fU, 0xa621685cU, 0x54d19b5bU, 0x2e3a2436U, 482656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x67b10c0aU, 0xe70f9357U, 0x96d2b4eeU, 0x919e1b9bU, 483656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc54f80c0U, 0x20a261dcU, 0x4b695a77U, 0x1a161c12U, 484656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xba0ae293U, 0x2ae5c0a0U, 0xe0433c22U, 0x171d121bU, 485656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0d0b0e09U, 0xc7adf28bU, 0xa8b92db6U, 0xa9c8141eU, 486656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x198557f1U, 0x074caf75U, 0xddbbee99U, 0x60fda37fU, 487656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x269ff701U, 0xf5bc5c72U, 0x3bc54466U, 0x7e345bfbU, 488656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x29768b43U, 0xc6dccb23U, 0xfc68b6edU, 0xf163b8e4U, 489656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdccad731U, 0x85104263U, 0x22401397U, 0x112084c6U, 490656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x247d854aU, 0x3df8d2bbU, 0x3211aef9U, 0xa16dc729U, 491656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2f4b1d9eU, 0x30f3dcb2U, 0x52ec0d86U, 0xe3d077c1U, 492656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x166c2bb3U, 0xb999a970U, 0x48fa1194U, 0x642247e9U, 493656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8cc4a8fcU, 0x3f1aa0f0U, 0x2cd8567dU, 0x90ef2233U, 494656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4ec78749U, 0xd1c1d938U, 0xa2fe8ccaU, 0x0b3698d4U, 495656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x81cfa6f5U, 0xde28a57aU, 0x8e26dab7U, 0xbfa43fadU, 496656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9de42c3aU, 0x920d5078U, 0xcc9b6a5fU, 0x4662547eU, 497656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x13c2f68dU, 0xb8e890d8U, 0xf75e2e39U, 0xaff582c3U, 498656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x80be9f5dU, 0x937c69d0U, 0x2da96fd5U, 0x12b3cf25U, 499656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x993bc8acU, 0x7da71018U, 0x636ee89cU, 0xbb7bdb3bU, 500656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7809cd26U, 0x18f46e59U, 0xb701ec9aU, 0x9aa8834fU, 501656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6e65e695U, 0xe67eaaffU, 0xcf0821bcU, 0xe8e6ef15U, 502656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9bd9bae7U, 0x36ce4a6fU, 0x09d4ea9fU, 0x7cd629b0U, 503656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb2af31a4U, 0x23312a3fU, 0x9430c6a5U, 0x66c035a2U, 504656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbc37744eU, 0xcaa6fc82U, 0xd0b0e090U, 0xd81533a7U, 505656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x984af104U, 0xdaf741ecU, 0x500e7fcdU, 0xf62f1791U, 506656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd68d764dU, 0xb04d43efU, 0x4d54ccaaU, 0x04dfe496U, 507656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb5e39ed1U, 0x881b4c6aU, 0x1fb8c12cU, 0x517f4665U, 508656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xea049d5eU, 0x355d018cU, 0x7473fa87U, 0x412efb0bU, 509656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1d5ab367U, 0xd25292dbU, 0x5633e910U, 0x47136dd6U, 510656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x618c9ad7U, 0x0c7a37a1U, 0x148e59f8U, 0x3c89eb13U, 511656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x27eecea9U, 0xc935b761U, 0xe5ede11cU, 0xb13c7a47U, 512656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdf599cd2U, 0x733f55f2U, 0xce791814U, 0x37bf73c7U, 513656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcdea53f7U, 0xaa5b5ffdU, 0x6f14df3dU, 0xdb867844U, 514656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf381caafU, 0xc43eb968U, 0x342c3824U, 0x405fc2a3U, 515656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc372161dU, 0x250cbce2U, 0x498b283cU, 0x9541ff0dU, 516656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x017139a8U, 0xb3de080cU, 0xe49cd8b4U, 0xc1906456U, 517656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x84617bcbU, 0xb670d532U, 0x5c74486cU, 0x5742d0b8U, 518656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 519656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 Td3[256] = { 520656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf4a75051U, 0x4165537eU, 0x17a4c31aU, 0x275e963aU, 521656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xab6bcb3bU, 0x9d45f11fU, 0xfa58abacU, 0xe303934bU, 522656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x30fa5520U, 0x766df6adU, 0xcc769188U, 0x024c25f5U, 523656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe5d7fc4fU, 0x2acbd7c5U, 0x35448026U, 0x62a38fb5U, 524656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb15a49deU, 0xba1b6725U, 0xea0e9845U, 0xfec0e15dU, 525656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2f7502c3U, 0x4cf01281U, 0x4697a38dU, 0xd3f9c66bU, 526656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8f5fe703U, 0x929c9515U, 0x6d7aebbfU, 0x5259da95U, 527656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbe832dd4U, 0x7421d358U, 0xe0692949U, 0xc9c8448eU, 528656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc2896a75U, 0x8e7978f4U, 0x583e6b99U, 0xb971dd27U, 529656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe14fb6beU, 0x88ad17f0U, 0x20ac66c9U, 0xce3ab47dU, 530656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdf4a1863U, 0x1a3182e5U, 0x51336097U, 0x537f4562U, 531656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6477e0b1U, 0x6bae84bbU, 0x81a01cfeU, 0x082b94f9U, 532656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x48685870U, 0x45fd198fU, 0xde6c8794U, 0x7bf8b752U, 533656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x73d323abU, 0x4b02e272U, 0x1f8f57e3U, 0x55ab2a66U, 534656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xeb2807b2U, 0xb5c2032fU, 0xc57b9a86U, 0x3708a5d3U, 535656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2887f230U, 0xbfa5b223U, 0x036aba02U, 0x16825cedU, 536656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcf1c2b8aU, 0x79b492a7U, 0x07f2f0f3U, 0x69e2a14eU, 537656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xdaf4cd65U, 0x05bed506U, 0x34621fd1U, 0xa6fe8ac4U, 538656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2e539d34U, 0xf355a0a2U, 0x8ae13205U, 0xf6eb75a4U, 539656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x83ec390bU, 0x60efaa40U, 0x719f065eU, 0x6e1051bdU, 540656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x218af93eU, 0xdd063d96U, 0x3e05aeddU, 0xe6bd464dU, 541656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x548db591U, 0xc45d0571U, 0x06d46f04U, 0x5015ff60U, 542656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x98fb2419U, 0xbde997d6U, 0x4043cc89U, 0xd99e7767U, 543656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe842bdb0U, 0x898b8807U, 0x195b38e7U, 0xc8eedb79U, 544656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7c0a47a1U, 0x420fe97cU, 0x841ec9f8U, 0x00000000U, 545656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x80868309U, 0x2bed4832U, 0x1170ac1eU, 0x5a724e6cU, 546656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0efffbfdU, 0x8538560fU, 0xaed51e3dU, 0x2d392736U, 547656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0fd9640aU, 0x5ca62168U, 0x5b54d19bU, 0x362e3a24U, 548656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x0a67b10cU, 0x57e70f93U, 0xee96d2b4U, 0x9b919e1bU, 549656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc0c54f80U, 0xdc20a261U, 0x774b695aU, 0x121a161cU, 550656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x93ba0ae2U, 0xa02ae5c0U, 0x22e0433cU, 0x1b171d12U, 551656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x090d0b0eU, 0x8bc7adf2U, 0xb6a8b92dU, 0x1ea9c814U, 552656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf1198557U, 0x75074cafU, 0x99ddbbeeU, 0x7f60fda3U, 553656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x01269ff7U, 0x72f5bc5cU, 0x663bc544U, 0xfb7e345bU, 554656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4329768bU, 0x23c6dccbU, 0xedfc68b6U, 0xe4f163b8U, 555656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x31dccad7U, 0x63851042U, 0x97224013U, 0xc6112084U, 556656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4a247d85U, 0xbb3df8d2U, 0xf93211aeU, 0x29a16dc7U, 557656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9e2f4b1dU, 0xb230f3dcU, 0x8652ec0dU, 0xc1e3d077U, 558656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb3166c2bU, 0x70b999a9U, 0x9448fa11U, 0xe9642247U, 559656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfc8cc4a8U, 0xf03f1aa0U, 0x7d2cd856U, 0x3390ef22U, 560656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x494ec787U, 0x38d1c1d9U, 0xcaa2fe8cU, 0xd40b3698U, 561656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf581cfa6U, 0x7ade28a5U, 0xb78e26daU, 0xadbfa43fU, 562656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3a9de42cU, 0x78920d50U, 0x5fcc9b6aU, 0x7e466254U, 563656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x8d13c2f6U, 0xd8b8e890U, 0x39f75e2eU, 0xc3aff582U, 564656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5d80be9fU, 0xd0937c69U, 0xd52da96fU, 0x2512b3cfU, 565656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xac993bc8U, 0x187da710U, 0x9c636ee8U, 0x3bbb7bdbU, 566656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x267809cdU, 0x5918f46eU, 0x9ab701ecU, 0x4f9aa883U, 567656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x956e65e6U, 0xffe67eaaU, 0xbccf0821U, 0x15e8e6efU, 568656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe79bd9baU, 0x6f36ce4aU, 0x9f09d4eaU, 0xb07cd629U, 569656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa4b2af31U, 0x3f23312aU, 0xa59430c6U, 0xa266c035U, 570656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4ebc3774U, 0x82caa6fcU, 0x90d0b0e0U, 0xa7d81533U, 571656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x04984af1U, 0xecdaf741U, 0xcd500e7fU, 0x91f62f17U, 572656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x4dd68d76U, 0xefb04d43U, 0xaa4d54ccU, 0x9604dfe4U, 573656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd1b5e39eU, 0x6a881b4cU, 0x2c1fb8c1U, 0x65517f46U, 574656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5eea049dU, 0x8c355d01U, 0x877473faU, 0x0b412efbU, 575656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x671d5ab3U, 0xdbd25292U, 0x105633e9U, 0xd647136dU, 576656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd7618c9aU, 0xa10c7a37U, 0xf8148e59U, 0x133c89ebU, 577656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa927eeceU, 0x61c935b7U, 0x1ce5ede1U, 0x47b13c7aU, 578656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd2df599cU, 0xf2733f55U, 0x14ce7918U, 0xc737bf73U, 579656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf7cdea53U, 0xfdaa5b5fU, 0x3d6f14dfU, 0x44db8678U, 580656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xaff381caU, 0x68c43eb9U, 0x24342c38U, 0xa3405fc2U, 581656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1dc37216U, 0xe2250cbcU, 0x3c498b28U, 0x0d9541ffU, 582656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa8017139U, 0x0cb3de08U, 0xb4e49cd8U, 0x56c19064U, 583656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xcb84617bU, 0x32b670d5U, 0x6c5c7448U, 0xb85742d0U, 584656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 585656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u8 Td4[256] = { 586656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x52U, 0x09U, 0x6aU, 0xd5U, 0x30U, 0x36U, 0xa5U, 0x38U, 587656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xbfU, 0x40U, 0xa3U, 0x9eU, 0x81U, 0xf3U, 0xd7U, 0xfbU, 588656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x7cU, 0xe3U, 0x39U, 0x82U, 0x9bU, 0x2fU, 0xffU, 0x87U, 589656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x34U, 0x8eU, 0x43U, 0x44U, 0xc4U, 0xdeU, 0xe9U, 0xcbU, 590656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x54U, 0x7bU, 0x94U, 0x32U, 0xa6U, 0xc2U, 0x23U, 0x3dU, 591656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xeeU, 0x4cU, 0x95U, 0x0bU, 0x42U, 0xfaU, 0xc3U, 0x4eU, 592656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x08U, 0x2eU, 0xa1U, 0x66U, 0x28U, 0xd9U, 0x24U, 0xb2U, 593656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x76U, 0x5bU, 0xa2U, 0x49U, 0x6dU, 0x8bU, 0xd1U, 0x25U, 594656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x72U, 0xf8U, 0xf6U, 0x64U, 0x86U, 0x68U, 0x98U, 0x16U, 595656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd4U, 0xa4U, 0x5cU, 0xccU, 0x5dU, 0x65U, 0xb6U, 0x92U, 596656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6cU, 0x70U, 0x48U, 0x50U, 0xfdU, 0xedU, 0xb9U, 0xdaU, 597656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x5eU, 0x15U, 0x46U, 0x57U, 0xa7U, 0x8dU, 0x9dU, 0x84U, 598656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x90U, 0xd8U, 0xabU, 0x00U, 0x8cU, 0xbcU, 0xd3U, 0x0aU, 599656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xf7U, 0xe4U, 0x58U, 0x05U, 0xb8U, 0xb3U, 0x45U, 0x06U, 600656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xd0U, 0x2cU, 0x1eU, 0x8fU, 0xcaU, 0x3fU, 0x0fU, 0x02U, 601656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc1U, 0xafU, 0xbdU, 0x03U, 0x01U, 0x13U, 0x8aU, 0x6bU, 602656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x3aU, 0x91U, 0x11U, 0x41U, 0x4fU, 0x67U, 0xdcU, 0xeaU, 603656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x97U, 0xf2U, 0xcfU, 0xceU, 0xf0U, 0xb4U, 0xe6U, 0x73U, 604656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x96U, 0xacU, 0x74U, 0x22U, 0xe7U, 0xadU, 0x35U, 0x85U, 605656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe2U, 0xf9U, 0x37U, 0xe8U, 0x1cU, 0x75U, 0xdfU, 0x6eU, 606656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x47U, 0xf1U, 0x1aU, 0x71U, 0x1dU, 0x29U, 0xc5U, 0x89U, 607656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x6fU, 0xb7U, 0x62U, 0x0eU, 0xaaU, 0x18U, 0xbeU, 0x1bU, 608656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xfcU, 0x56U, 0x3eU, 0x4bU, 0xc6U, 0xd2U, 0x79U, 0x20U, 609656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x9aU, 0xdbU, 0xc0U, 0xfeU, 0x78U, 0xcdU, 0x5aU, 0xf4U, 610656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1fU, 0xddU, 0xa8U, 0x33U, 0x88U, 0x07U, 0xc7U, 0x31U, 611656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xb1U, 0x12U, 0x10U, 0x59U, 0x27U, 0x80U, 0xecU, 0x5fU, 612656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x60U, 0x51U, 0x7fU, 0xa9U, 0x19U, 0xb5U, 0x4aU, 0x0dU, 613656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x2dU, 0xe5U, 0x7aU, 0x9fU, 0x93U, 0xc9U, 0x9cU, 0xefU, 614656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xa0U, 0xe0U, 0x3bU, 0x4dU, 0xaeU, 0x2aU, 0xf5U, 0xb0U, 615656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xc8U, 0xebU, 0xbbU, 0x3cU, 0x83U, 0x53U, 0x99U, 0x61U, 616656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x17U, 0x2bU, 0x04U, 0x7eU, 0xbaU, 0x77U, 0xd6U, 0x26U, 617656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0xe1U, 0x69U, 0x14U, 0x63U, 0x55U, 0x21U, 0x0cU, 0x7dU, 618656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 619656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic const u32 rcon[] = { 620656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x01000000, 0x02000000, 0x04000000, 0x08000000, 621656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x10000000, 0x20000000, 0x40000000, 0x80000000, 622656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ 623656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 624656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 625656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/** 626656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Expand the cipher key into the encryption key schedule. 627656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 628392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, 629656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AES_KEY *key) { 630656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 631656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u32 *rk; 632656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i = 0; 633656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u32 temp; 634656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 635656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (!userKey || !key) 636656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return -1; 637656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (bits != 128 && bits != 192 && bits != 256) 638656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return -2; 639656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 640656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk = key->rd_key; 641656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 642656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (bits==128) 643656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project key->rounds = 10; 644656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else if (bits==192) 645656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project key->rounds = 12; 646656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 647656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project key->rounds = 14; 648656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 649656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[0] = GETU32(userKey ); 650656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[1] = GETU32(userKey + 4); 651656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[2] = GETU32(userKey + 8); 652656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[3] = GETU32(userKey + 12); 653656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (bits == 128) { 654656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while (1) { 655656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[3]; 656656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[4] = rk[0] ^ 657656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(temp >> 16) & 0xff] & 0xff000000) ^ 658656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^ 659656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(temp ) & 0xff] & 0x0000ff00) ^ 660656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(temp >> 24) ] & 0x000000ff) ^ 661656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rcon[i]; 662656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[5] = rk[1] ^ rk[4]; 663656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[6] = rk[2] ^ rk[5]; 664656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[7] = rk[3] ^ rk[6]; 665656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (++i == 10) { 666656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 667656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 668656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += 4; 669656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 670656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 671656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[4] = GETU32(userKey + 16); 672656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[5] = GETU32(userKey + 20); 673656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (bits == 192) { 674656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while (1) { 675656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[ 5]; 676656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[ 6] = rk[ 0] ^ 677656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(temp >> 16) & 0xff] & 0xff000000) ^ 678656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^ 679656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(temp ) & 0xff] & 0x0000ff00) ^ 680656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(temp >> 24) ] & 0x000000ff) ^ 681656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rcon[i]; 682656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[ 7] = rk[ 1] ^ rk[ 6]; 683656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[ 8] = rk[ 2] ^ rk[ 7]; 684656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[ 9] = rk[ 3] ^ rk[ 8]; 685656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (++i == 8) { 686656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 687656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 688656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[10] = rk[ 4] ^ rk[ 9]; 689656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[11] = rk[ 5] ^ rk[10]; 690656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += 6; 691656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 692656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 693656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[6] = GETU32(userKey + 24); 694656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[7] = GETU32(userKey + 28); 695656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (bits == 256) { 696656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project while (1) { 697656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[ 7]; 698656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[ 8] = rk[ 0] ^ 699656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(temp >> 16) & 0xff] & 0xff000000) ^ 700656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(temp >> 8) & 0xff] & 0x00ff0000) ^ 701656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(temp ) & 0xff] & 0x0000ff00) ^ 702656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(temp >> 24) ] & 0x000000ff) ^ 703656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rcon[i]; 704656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[ 9] = rk[ 1] ^ rk[ 8]; 705656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[10] = rk[ 2] ^ rk[ 9]; 706656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[11] = rk[ 3] ^ rk[10]; 707656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (++i == 7) { 708656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 709656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 710656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[11]; 711656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[12] = rk[ 4] ^ 712656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(temp >> 24) ] & 0xff000000) ^ 713656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(temp >> 16) & 0xff] & 0x00ff0000) ^ 714656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(temp >> 8) & 0xff] & 0x0000ff00) ^ 715656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(temp ) & 0xff] & 0x000000ff); 716656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[13] = rk[ 5] ^ rk[12]; 717656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[14] = rk[ 6] ^ rk[13]; 718656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[15] = rk[ 7] ^ rk[14]; 719656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 720656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += 8; 721656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 722656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 723656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 724656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 725656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 726656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/** 727656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Expand the cipher key into the decryption key schedule. 728656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 729392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, 730656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project AES_KEY *key) { 731656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 732656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u32 *rk; 733656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int i, j, status; 734656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u32 temp; 735656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 736656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* first, start with an encryption schedule */ 737392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom status = private_AES_set_encrypt_key(userKey, bits, key); 738656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (status < 0) 739656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return status; 740656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 741656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk = key->rd_key; 742656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 743656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* invert the order of the round keys: */ 744656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (i = 0, j = 4*(key->rounds); i < j; i += 4, j -= 4) { 745656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp; 746656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; 747656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; 748656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; 749656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 750656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* apply the inverse MixColumn transform to all round keys but the first and the last: */ 751656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (i = 1; i < (key->rounds); i++) { 752656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += 4; 753656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[0] = 754656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[Te1[(rk[0] >> 24) ] & 0xff] ^ 755656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[Te1[(rk[0] >> 16) & 0xff] & 0xff] ^ 756656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[Te1[(rk[0] >> 8) & 0xff] & 0xff] ^ 757656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[Te1[(rk[0] ) & 0xff] & 0xff]; 758656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[1] = 759656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[Te1[(rk[1] >> 24) ] & 0xff] ^ 760656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[Te1[(rk[1] >> 16) & 0xff] & 0xff] ^ 761656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[Te1[(rk[1] >> 8) & 0xff] & 0xff] ^ 762656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[Te1[(rk[1] ) & 0xff] & 0xff]; 763656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[2] = 764656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[Te1[(rk[2] >> 24) ] & 0xff] ^ 765656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[Te1[(rk[2] >> 16) & 0xff] & 0xff] ^ 766656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[Te1[(rk[2] >> 8) & 0xff] & 0xff] ^ 767656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[Te1[(rk[2] ) & 0xff] & 0xff]; 768656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[3] = 769656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[Te1[(rk[3] >> 24) ] & 0xff] ^ 770656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[Te1[(rk[3] >> 16) & 0xff] & 0xff] ^ 771656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[Te1[(rk[3] >> 8) & 0xff] & 0xff] ^ 772656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[Te1[(rk[3] ) & 0xff] & 0xff]; 773656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 774656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 775656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 776656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 777656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 778656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Encrypt a single block 779656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in and out can overlap 780656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 781656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid AES_encrypt(const unsigned char *in, unsigned char *out, 782656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const AES_KEY *key) { 783656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 784656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const u32 *rk; 785656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u32 s0, s1, s2, s3, t0, t1, t2, t3; 786656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef FULL_UNROLL 787656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int r; 788656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* ?FULL_UNROLL */ 789656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 790656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project assert(in && out && key); 791656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk = key->rd_key; 792656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 793656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* 794656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * map byte array block to cipher state 795656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * and add initial round key: 796656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 797656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = GETU32(in ) ^ rk[0]; 798656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = GETU32(in + 4) ^ rk[1]; 799656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = GETU32(in + 8) ^ rk[2]; 800656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = GETU32(in + 12) ^ rk[3]; 801656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef FULL_UNROLL 802656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 1: */ 803656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[ 4]; 804656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[ 5]; 805656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[ 6]; 806656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[ 7]; 807656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 2: */ 808656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[ 8]; 809656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[ 9]; 810656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[10]; 811656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[11]; 812656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 3: */ 813656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[12]; 814656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[13]; 815656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[14]; 816656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[15]; 817656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 4: */ 818656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[16]; 819656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[17]; 820656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[18]; 821656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[19]; 822656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 5: */ 823656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[20]; 824656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[21]; 825656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[22]; 826656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[23]; 827656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 6: */ 828656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[24]; 829656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[25]; 830656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[26]; 831656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[27]; 832656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 7: */ 833656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[28]; 834656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[29]; 835656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[30]; 836656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[31]; 837656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 8: */ 838656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[32]; 839656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[33]; 840656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[34]; 841656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[35]; 842656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 9: */ 843656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[36]; 844656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[37]; 845656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[38]; 846656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[39]; 847656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (key->rounds > 10) { 848656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 10: */ 849656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[40]; 850656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[41]; 851656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[42]; 852656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[43]; 853656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 11: */ 854656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[44]; 855656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[45]; 856656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[46]; 857656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[47]; 858656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (key->rounds > 12) { 859656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 12: */ 860656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Te0[t0 >> 24] ^ Te1[(t1 >> 16) & 0xff] ^ Te2[(t2 >> 8) & 0xff] ^ Te3[t3 & 0xff] ^ rk[48]; 861656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Te0[t1 >> 24] ^ Te1[(t2 >> 16) & 0xff] ^ Te2[(t3 >> 8) & 0xff] ^ Te3[t0 & 0xff] ^ rk[49]; 862656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Te0[t2 >> 24] ^ Te1[(t3 >> 16) & 0xff] ^ Te2[(t0 >> 8) & 0xff] ^ Te3[t1 & 0xff] ^ rk[50]; 863656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Te0[t3 >> 24] ^ Te1[(t0 >> 16) & 0xff] ^ Te2[(t1 >> 8) & 0xff] ^ Te3[t2 & 0xff] ^ rk[51]; 864656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 13: */ 865656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Te0[s0 >> 24] ^ Te1[(s1 >> 16) & 0xff] ^ Te2[(s2 >> 8) & 0xff] ^ Te3[s3 & 0xff] ^ rk[52]; 866656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Te0[s1 >> 24] ^ Te1[(s2 >> 16) & 0xff] ^ Te2[(s3 >> 8) & 0xff] ^ Te3[s0 & 0xff] ^ rk[53]; 867656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Te0[s2 >> 24] ^ Te1[(s3 >> 16) & 0xff] ^ Te2[(s0 >> 8) & 0xff] ^ Te3[s1 & 0xff] ^ rk[54]; 868656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Te0[s3 >> 24] ^ Te1[(s0 >> 16) & 0xff] ^ Te2[(s1 >> 8) & 0xff] ^ Te3[s2 & 0xff] ^ rk[55]; 869656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 870656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 871656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += key->rounds << 2; 872656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /* !FULL_UNROLL */ 873656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* 874656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Nr - 1 full rounds: 875656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 876656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r = key->rounds >> 1; 877656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (;;) { 878656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = 879656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(s0 >> 24) ] ^ 880656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(s1 >> 16) & 0xff] ^ 881656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(s2 >> 8) & 0xff] ^ 882656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(s3 ) & 0xff] ^ 883656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[4]; 884656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = 885656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(s1 >> 24) ] ^ 886656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(s2 >> 16) & 0xff] ^ 887656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(s3 >> 8) & 0xff] ^ 888656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(s0 ) & 0xff] ^ 889656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[5]; 890656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = 891656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(s2 >> 24) ] ^ 892656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(s3 >> 16) & 0xff] ^ 893656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(s0 >> 8) & 0xff] ^ 894656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(s1 ) & 0xff] ^ 895656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[6]; 896656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = 897656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(s3 >> 24) ] ^ 898656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(s0 >> 16) & 0xff] ^ 899656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(s1 >> 8) & 0xff] ^ 900656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(s2 ) & 0xff] ^ 901656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[7]; 902656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 903656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += 8; 904656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--r == 0) { 905656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project break; 906656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 907656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 908656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = 909656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(t0 >> 24) ] ^ 910656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(t1 >> 16) & 0xff] ^ 911656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(t2 >> 8) & 0xff] ^ 912656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(t3 ) & 0xff] ^ 913656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[0]; 914656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = 915656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(t1 >> 24) ] ^ 916656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(t2 >> 16) & 0xff] ^ 917656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(t3 >> 8) & 0xff] ^ 918656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(t0 ) & 0xff] ^ 919656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[1]; 920656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = 921656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(t2 >> 24) ] ^ 922656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(t3 >> 16) & 0xff] ^ 923656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(t0 >> 8) & 0xff] ^ 924656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(t1 ) & 0xff] ^ 925656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[2]; 926656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = 927656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te0[(t3 >> 24) ] ^ 928656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te1[(t0 >> 16) & 0xff] ^ 929656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te2[(t1 >> 8) & 0xff] ^ 930656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Te3[(t2 ) & 0xff] ^ 931656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[3]; 932656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 933656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* ?FULL_UNROLL */ 934656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* 935656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply last round and 936656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * map cipher state to byte array block: 937656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 938656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = 939656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(t0 >> 24) ] & 0xff000000) ^ 940656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(t1 >> 16) & 0xff] & 0x00ff0000) ^ 941656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(t2 >> 8) & 0xff] & 0x0000ff00) ^ 942656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(t3 ) & 0xff] & 0x000000ff) ^ 943656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[0]; 944656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out , s0); 945656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = 946656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(t1 >> 24) ] & 0xff000000) ^ 947656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(t2 >> 16) & 0xff] & 0x00ff0000) ^ 948656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(t3 >> 8) & 0xff] & 0x0000ff00) ^ 949656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(t0 ) & 0xff] & 0x000000ff) ^ 950656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[1]; 951656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out + 4, s1); 952656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = 953656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(t2 >> 24) ] & 0xff000000) ^ 954656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(t3 >> 16) & 0xff] & 0x00ff0000) ^ 955656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(t0 >> 8) & 0xff] & 0x0000ff00) ^ 956656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(t1 ) & 0xff] & 0x000000ff) ^ 957656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[2]; 958656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out + 8, s2); 959656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = 960656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te2[(t3 >> 24) ] & 0xff000000) ^ 961656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te3[(t0 >> 16) & 0xff] & 0x00ff0000) ^ 962656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te0[(t1 >> 8) & 0xff] & 0x0000ff00) ^ 963656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Te1[(t2 ) & 0xff] & 0x000000ff) ^ 964656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[3]; 965656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out + 12, s3); 966656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 967656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 968656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* 969656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Decrypt a single block 970656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * in and out can overlap 971656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 972656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid AES_decrypt(const unsigned char *in, unsigned char *out, 973656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const AES_KEY *key) { 974656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 975656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const u32 *rk; 976656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project u32 s0, s1, s2, s3, t0, t1, t2, t3; 977656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef FULL_UNROLL 978656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int r; 979656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* ?FULL_UNROLL */ 980656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 981656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project assert(in && out && key); 982656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk = key->rd_key; 983656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 984656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* 985656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * map byte array block to cipher state 986656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * and add initial round key: 987656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 988656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = GETU32(in ) ^ rk[0]; 989656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = GETU32(in + 4) ^ rk[1]; 990656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = GETU32(in + 8) ^ rk[2]; 991656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = GETU32(in + 12) ^ rk[3]; 992656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef FULL_UNROLL 993656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 1: */ 994656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[ 4]; 995656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[ 5]; 996656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[ 6]; 997656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[ 7]; 998656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 2: */ 999656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[ 8]; 1000656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[ 9]; 1001656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[10]; 1002656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[11]; 1003656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 3: */ 1004656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[12]; 1005656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[13]; 1006656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[14]; 1007656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[15]; 1008656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 4: */ 1009656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[16]; 1010656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[17]; 1011656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[18]; 1012656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[19]; 1013656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 5: */ 1014656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[20]; 1015656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[21]; 1016656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[22]; 1017656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[23]; 1018656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 6: */ 1019656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[24]; 1020656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[25]; 1021656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[26]; 1022656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[27]; 1023656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 7: */ 1024656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[28]; 1025656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[29]; 1026656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[30]; 1027656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[31]; 1028656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 8: */ 1029656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[32]; 1030656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[33]; 1031656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[34]; 1032656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[35]; 1033656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 9: */ 1034656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[36]; 1035656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[37]; 1036656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[38]; 1037656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[39]; 1038656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (key->rounds > 10) { 1039656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 10: */ 1040656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[40]; 1041656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[41]; 1042656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[42]; 1043656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[43]; 1044656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 11: */ 1045656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[44]; 1046656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[45]; 1047656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[46]; 1048656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[47]; 1049656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (key->rounds > 12) { 1050656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 12: */ 1051656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = Td0[t0 >> 24] ^ Td1[(t3 >> 16) & 0xff] ^ Td2[(t2 >> 8) & 0xff] ^ Td3[t1 & 0xff] ^ rk[48]; 1052656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = Td0[t1 >> 24] ^ Td1[(t0 >> 16) & 0xff] ^ Td2[(t3 >> 8) & 0xff] ^ Td3[t2 & 0xff] ^ rk[49]; 1053656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = Td0[t2 >> 24] ^ Td1[(t1 >> 16) & 0xff] ^ Td2[(t0 >> 8) & 0xff] ^ Td3[t3 & 0xff] ^ rk[50]; 1054656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = Td0[t3 >> 24] ^ Td1[(t2 >> 16) & 0xff] ^ Td2[(t1 >> 8) & 0xff] ^ Td3[t0 & 0xff] ^ rk[51]; 1055656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* round 13: */ 1056656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = Td0[s0 >> 24] ^ Td1[(s3 >> 16) & 0xff] ^ Td2[(s2 >> 8) & 0xff] ^ Td3[s1 & 0xff] ^ rk[52]; 1057656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = Td0[s1 >> 24] ^ Td1[(s0 >> 16) & 0xff] ^ Td2[(s3 >> 8) & 0xff] ^ Td3[s2 & 0xff] ^ rk[53]; 1058656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = Td0[s2 >> 24] ^ Td1[(s1 >> 16) & 0xff] ^ Td2[(s0 >> 8) & 0xff] ^ Td3[s3 & 0xff] ^ rk[54]; 1059656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = Td0[s3 >> 24] ^ Td1[(s2 >> 16) & 0xff] ^ Td2[(s1 >> 8) & 0xff] ^ Td3[s0 & 0xff] ^ rk[55]; 1060656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 1061656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 1062656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += key->rounds << 2; 1063656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else /* !FULL_UNROLL */ 1064656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* 1065656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Nr - 1 full rounds: 1066656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 1067656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project r = key->rounds >> 1; 1068656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (;;) { 1069656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t0 = 1070656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(s0 >> 24) ] ^ 1071656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(s3 >> 16) & 0xff] ^ 1072656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(s2 >> 8) & 0xff] ^ 1073656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(s1 ) & 0xff] ^ 1074656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[4]; 1075656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t1 = 1076656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(s1 >> 24) ] ^ 1077656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(s0 >> 16) & 0xff] ^ 1078656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(s3 >> 8) & 0xff] ^ 1079656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(s2 ) & 0xff] ^ 1080656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[5]; 1081656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t2 = 1082656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(s2 >> 24) ] ^ 1083656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(s1 >> 16) & 0xff] ^ 1084656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(s0 >> 8) & 0xff] ^ 1085656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(s3 ) & 0xff] ^ 1086656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[6]; 1087656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project t3 = 1088656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(s3 >> 24) ] ^ 1089656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(s2 >> 16) & 0xff] ^ 1090656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(s1 >> 8) & 0xff] ^ 1091656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(s0 ) & 0xff] ^ 1092656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[7]; 1093656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1094656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk += 8; 1095656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (--r == 0) { 1096656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project break; 1097656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 1098656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1099656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = 1100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(t0 >> 24) ] ^ 1101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(t3 >> 16) & 0xff] ^ 1102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(t2 >> 8) & 0xff] ^ 1103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(t1 ) & 0xff] ^ 1104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[0]; 1105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = 1106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(t1 >> 24) ] ^ 1107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(t0 >> 16) & 0xff] ^ 1108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(t3 >> 8) & 0xff] ^ 1109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(t2 ) & 0xff] ^ 1110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[1]; 1111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = 1112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(t2 >> 24) ] ^ 1113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(t1 >> 16) & 0xff] ^ 1114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(t0 >> 8) & 0xff] ^ 1115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(t3 ) & 0xff] ^ 1116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[2]; 1117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = 1118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td0[(t3 >> 24) ] ^ 1119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td1[(t2 >> 16) & 0xff] ^ 1120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td2[(t1 >> 8) & 0xff] ^ 1121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project Td3[(t0 ) & 0xff] ^ 1122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[3]; 1123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 1124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* ?FULL_UNROLL */ 1125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* 1126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * apply last round and 1127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * map cipher state to byte array block: 1128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 1129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s0 = 1130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t0 >> 24) ] << 24) ^ 1131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t3 >> 16) & 0xff] << 16) ^ 1132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t2 >> 8) & 0xff] << 8) ^ 1133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t1 ) & 0xff]) ^ 1134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[0]; 1135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out , s0); 1136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s1 = 1137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t1 >> 24) ] << 24) ^ 1138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t0 >> 16) & 0xff] << 16) ^ 1139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t3 >> 8) & 0xff] << 8) ^ 1140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t2 ) & 0xff]) ^ 1141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[1]; 1142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out + 4, s1); 1143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s2 = 1144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t2 >> 24) ] << 24) ^ 1145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t1 >> 16) & 0xff] << 16) ^ 1146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t0 >> 8) & 0xff] << 8) ^ 1147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t3 ) & 0xff]) ^ 1148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[2]; 1149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out + 8, s2); 1150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project s3 = 1151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t3 >> 24) ] << 24) ^ 1152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t2 >> 16) & 0xff] << 16) ^ 1153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t1 >> 8) & 0xff] << 8) ^ 1154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project (Td4[(t0 ) & 0xff]) ^ 1155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rk[3]; 1156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project PUTU32(out + 12, s3); 1157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 1158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 1159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#else /* AES_ASM */ 1160221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1161221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstatic const u8 Te4[256] = { 1162221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x63U, 0x7cU, 0x77U, 0x7bU, 0xf2U, 0x6bU, 0x6fU, 0xc5U, 1163221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x30U, 0x01U, 0x67U, 0x2bU, 0xfeU, 0xd7U, 0xabU, 0x76U, 1164221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xcaU, 0x82U, 0xc9U, 0x7dU, 0xfaU, 0x59U, 0x47U, 0xf0U, 1165221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xadU, 0xd4U, 0xa2U, 0xafU, 0x9cU, 0xa4U, 0x72U, 0xc0U, 1166221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xb7U, 0xfdU, 0x93U, 0x26U, 0x36U, 0x3fU, 0xf7U, 0xccU, 1167221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x34U, 0xa5U, 0xe5U, 0xf1U, 0x71U, 0xd8U, 0x31U, 0x15U, 1168221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x04U, 0xc7U, 0x23U, 0xc3U, 0x18U, 0x96U, 0x05U, 0x9aU, 1169221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x07U, 0x12U, 0x80U, 0xe2U, 0xebU, 0x27U, 0xb2U, 0x75U, 1170221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x09U, 0x83U, 0x2cU, 0x1aU, 0x1bU, 0x6eU, 0x5aU, 0xa0U, 1171221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x52U, 0x3bU, 0xd6U, 0xb3U, 0x29U, 0xe3U, 0x2fU, 0x84U, 1172221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x53U, 0xd1U, 0x00U, 0xedU, 0x20U, 0xfcU, 0xb1U, 0x5bU, 1173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x6aU, 0xcbU, 0xbeU, 0x39U, 0x4aU, 0x4cU, 0x58U, 0xcfU, 1174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xd0U, 0xefU, 0xaaU, 0xfbU, 0x43U, 0x4dU, 0x33U, 0x85U, 1175221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x45U, 0xf9U, 0x02U, 0x7fU, 0x50U, 0x3cU, 0x9fU, 0xa8U, 1176221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x51U, 0xa3U, 0x40U, 0x8fU, 0x92U, 0x9dU, 0x38U, 0xf5U, 1177221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xbcU, 0xb6U, 0xdaU, 0x21U, 0x10U, 0xffU, 0xf3U, 0xd2U, 1178221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xcdU, 0x0cU, 0x13U, 0xecU, 0x5fU, 0x97U, 0x44U, 0x17U, 1179221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xc4U, 0xa7U, 0x7eU, 0x3dU, 0x64U, 0x5dU, 0x19U, 0x73U, 1180221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x60U, 0x81U, 0x4fU, 0xdcU, 0x22U, 0x2aU, 0x90U, 0x88U, 1181221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x46U, 0xeeU, 0xb8U, 0x14U, 0xdeU, 0x5eU, 0x0bU, 0xdbU, 1182221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xe0U, 0x32U, 0x3aU, 0x0aU, 0x49U, 0x06U, 0x24U, 0x5cU, 1183221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xc2U, 0xd3U, 0xacU, 0x62U, 0x91U, 0x95U, 0xe4U, 0x79U, 1184221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xe7U, 0xc8U, 0x37U, 0x6dU, 0x8dU, 0xd5U, 0x4eU, 0xa9U, 1185221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x6cU, 0x56U, 0xf4U, 0xeaU, 0x65U, 0x7aU, 0xaeU, 0x08U, 1186221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xbaU, 0x78U, 0x25U, 0x2eU, 0x1cU, 0xa6U, 0xb4U, 0xc6U, 1187221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xe8U, 0xddU, 0x74U, 0x1fU, 0x4bU, 0xbdU, 0x8bU, 0x8aU, 1188221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x70U, 0x3eU, 0xb5U, 0x66U, 0x48U, 0x03U, 0xf6U, 0x0eU, 1189221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x61U, 0x35U, 0x57U, 0xb9U, 0x86U, 0xc1U, 0x1dU, 0x9eU, 1190221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0xe1U, 0xf8U, 0x98U, 0x11U, 0x69U, 0xd9U, 0x8eU, 0x94U, 1191221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x9bU, 0x1eU, 0x87U, 0xe9U, 0xceU, 0x55U, 0x28U, 0xdfU, 1192221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x8cU, 0xa1U, 0x89U, 0x0dU, 0xbfU, 0xe6U, 0x42U, 0x68U, 1193221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x41U, 0x99U, 0x2dU, 0x0fU, 0xb0U, 0x54U, 0xbbU, 0x16U 1194221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom}; 1195221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromstatic const u32 rcon[] = { 1196221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x01000000, 0x02000000, 0x04000000, 0x08000000, 1197221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x10000000, 0x20000000, 0x40000000, 0x80000000, 1198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 0x1B000000, 0x36000000, /* for 128-bit blocks, Rijndael never uses more than 10 rcon values */ 1199221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom}; 1200221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1201221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom/** 1202221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * Expand the cipher key into the encryption key schedule. 1203221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom */ 1204392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint private_AES_set_encrypt_key(const unsigned char *userKey, const int bits, 1205221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom AES_KEY *key) { 1206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom u32 *rk; 1207221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom int i = 0; 1208221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom u32 temp; 1209221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1210221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (!userKey || !key) 1211221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return -1; 1212221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (bits != 128 && bits != 192 && bits != 256) 1213221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return -2; 1214221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1215221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk = key->rd_key; 1216221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1217221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (bits==128) 1218221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom key->rounds = 10; 1219221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom else if (bits==192) 1220221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom key->rounds = 12; 1221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom else 1222221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom key->rounds = 14; 1223221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1224221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[0] = GETU32(userKey ); 1225221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[1] = GETU32(userKey + 4); 1226221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[2] = GETU32(userKey + 8); 1227221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[3] = GETU32(userKey + 12); 1228221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (bits == 128) { 1229221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while (1) { 1230221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[3]; 1231221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[4] = rk[0] ^ 1232221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 16) & 0xff] << 24) ^ 1233221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 8) & 0xff] << 16) ^ 1234221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp ) & 0xff] << 8) ^ 1235221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 24) ]) ^ 1236221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rcon[i]; 1237221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[5] = rk[1] ^ rk[4]; 1238221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[6] = rk[2] ^ rk[5]; 1239221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[7] = rk[3] ^ rk[6]; 1240221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (++i == 10) { 1241221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return 0; 1242221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1243221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk += 4; 1244221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1245221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1246221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[4] = GETU32(userKey + 16); 1247221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[5] = GETU32(userKey + 20); 1248221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (bits == 192) { 1249221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while (1) { 1250221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[ 5]; 1251221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[ 6] = rk[ 0] ^ 1252221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 16) & 0xff] << 24) ^ 1253221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 8) & 0xff] << 16) ^ 1254221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp ) & 0xff] << 8) ^ 1255221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 24) ]) ^ 1256221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rcon[i]; 1257221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[ 7] = rk[ 1] ^ rk[ 6]; 1258221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[ 8] = rk[ 2] ^ rk[ 7]; 1259221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[ 9] = rk[ 3] ^ rk[ 8]; 1260221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (++i == 8) { 1261221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return 0; 1262221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1263221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[10] = rk[ 4] ^ rk[ 9]; 1264221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[11] = rk[ 5] ^ rk[10]; 1265221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk += 6; 1266221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1267221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1268221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[6] = GETU32(userKey + 24); 1269221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[7] = GETU32(userKey + 28); 1270221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (bits == 256) { 1271221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom while (1) { 1272221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[ 7]; 1273221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[ 8] = rk[ 0] ^ 1274221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 16) & 0xff] << 24) ^ 1275221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 8) & 0xff] << 16) ^ 1276221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp ) & 0xff] << 8) ^ 1277221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 24) ]) ^ 1278221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rcon[i]; 1279221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[ 9] = rk[ 1] ^ rk[ 8]; 1280221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[10] = rk[ 2] ^ rk[ 9]; 1281221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[11] = rk[ 3] ^ rk[10]; 1282221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (++i == 7) { 1283221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return 0; 1284221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1285221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[11]; 1286221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[12] = rk[ 4] ^ 1287221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 24) ] << 24) ^ 1288221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 16) & 0xff] << 16) ^ 1289221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp >> 8) & 0xff] << 8) ^ 1290221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (Te4[(temp ) & 0xff]); 1291221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[13] = rk[ 5] ^ rk[12]; 1292221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[14] = rk[ 6] ^ rk[13]; 1293221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[15] = rk[ 7] ^ rk[14]; 1294221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1295221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk += 8; 1296221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1297221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1298221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return 0; 1299221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 1300221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1301221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom/** 1302221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom * Expand the cipher key into the decryption key schedule. 1303221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom */ 1304392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromint private_AES_set_decrypt_key(const unsigned char *userKey, const int bits, 1305221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom AES_KEY *key) { 1306221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1307221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom u32 *rk; 1308221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom int i, j, status; 1309221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom u32 temp; 1310221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1311221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* first, start with an encryption schedule */ 1312392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom status = private_AES_set_encrypt_key(userKey, bits, key); 1313221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom if (status < 0) 1314221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return status; 1315221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1316221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk = key->rd_key; 1317221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1318221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* invert the order of the round keys: */ 1319221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom for (i = 0, j = 4*(key->rounds); i < j; i += 4, j -= 4) { 1320221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[i ]; rk[i ] = rk[j ]; rk[j ] = temp; 1321221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[i + 1]; rk[i + 1] = rk[j + 1]; rk[j + 1] = temp; 1322221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[i + 2]; rk[i + 2] = rk[j + 2]; rk[j + 2] = temp; 1323221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom temp = rk[i + 3]; rk[i + 3] = rk[j + 3]; rk[j + 3] = temp; 1324221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1325221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom /* apply the inverse MixColumn transform to all round keys but the first and the last: */ 1326221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom for (i = 1; i < (key->rounds); i++) { 1327221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk += 4; 1328221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom for (j = 0; j < 4; j++) { 1329221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom u32 tp1, tp2, tp4, tp8, tp9, tpb, tpd, tpe, m; 1330221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1331221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tp1 = rk[j]; 1332221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom m = tp1 & 0x80808080; 1333221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tp2 = ((tp1 & 0x7f7f7f7f) << 1) ^ 1334221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ((m - (m >> 7)) & 0x1b1b1b1b); 1335221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom m = tp2 & 0x80808080; 1336221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tp4 = ((tp2 & 0x7f7f7f7f) << 1) ^ 1337221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ((m - (m >> 7)) & 0x1b1b1b1b); 1338221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom m = tp4 & 0x80808080; 1339221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tp8 = ((tp4 & 0x7f7f7f7f) << 1) ^ 1340221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ((m - (m >> 7)) & 0x1b1b1b1b); 1341221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tp9 = tp8 ^ tp1; 1342221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tpb = tp9 ^ tp2; 1343221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tpd = tp9 ^ tp4; 1344221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom tpe = tp8 ^ tp4 ^ tp2; 1345221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#if defined(ROTATE) 1346221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[j] = tpe ^ ROTATE(tpd,16) ^ 1347221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom ROTATE(tp9,24) ^ ROTATE(tpb,8); 1348221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#else 1349221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom rk[j] = tpe ^ (tpd >> 16) ^ (tpd << 16) ^ 1350221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (tp9 >> 8) ^ (tp9 << 24) ^ 1351221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom (tpb >> 24) ^ (tpb << 8); 1352221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom#endif 1353221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1354221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom } 1355221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom return 0; 1356221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom} 1357221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom 1358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif /* AES_ASM */ 1359