1f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* LibTomCrypt, modular cryptographic library -- Tom St Denis
2f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
3f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * LibTomCrypt is a library that provides various cryptographic
4f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * algorithms in a highly modular and flexible manner.
5f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
6f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The library is free for all purposes without any express
7f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * guarantee it works.
8f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project *
9f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
10f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
11f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
12f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
13f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @file anubis.c
14f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Anubis implementation derived from public domain source
15f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Authors: Paulo S.L.M. Barreto and Vincent Rijmen.
16f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
17f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
18f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#include "tomcrypt.h"
19f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
20f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef ANUBIS
21f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
22f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectconst struct ltc_cipher_descriptor anubis_desc = {
23f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   "anubis",
24f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   19,
25f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16, 40, 16, 12,
26f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   &anubis_setup,
27f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   &anubis_ecb_encrypt,
28f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   &anubis_ecb_decrypt,
29f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   &anubis_test,
30f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   &anubis_done,
31f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   &anubis_keysize,
32f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
33f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
34f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
35f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MIN_N           4
36f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MAX_N           10
37f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MIN_ROUNDS      (8 + MIN_N)
38f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MAX_ROUNDS      (8 + MAX_N)
39f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MIN_KEYSIZEB    (4*MIN_N)
40f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define MAX_KEYSIZEB    (4*MAX_N)
41f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define BLOCKSIZE       128
42f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#define BLOCKSIZEB      (BLOCKSIZE/8)
43f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
44f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
45f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/*
46f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * Though Anubis is endianness-neutral, the encryption tables are listed
47f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * in BIG-ENDIAN format, which is adopted throughout this implementation
48f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * (but little-endian notation would be equally suitable if consistently
49f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * employed).
50f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
51f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if defined(ANUBIS_TWEAK)
52f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
53f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T0[256] = {
54f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U,
55f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x53a651f7U, 0xd3bb6bd0U, 0xd2b96fd6U, 0x4d9a29b3U,
56f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x50a05dfdU, 0xac458acfU, 0x8d070e09U, 0xbf63c6a5U,
57f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x70e0dd3dU, 0x52a455f1U, 0x9a29527bU, 0x4c982db5U,
58f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xeac98f46U, 0xd5b773c4U, 0x97336655U, 0xd1bf63dcU,
59f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3366ccaaU, 0x51a259fbU, 0x5bb671c7U, 0xa651a2f3U,
60f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdea15ffeU, 0x48903dadU, 0xa84d9ad7U, 0x992f5e71U,
61f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdbab4be0U, 0x3264c8acU, 0xb773e695U, 0xfce5d732U,
62f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe3dbab70U, 0x9e214263U, 0x913f7e41U, 0x9b2b567dU,
63f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe2d9af76U, 0xbb6bd6bdU, 0x4182199bU, 0x6edca579U,
64f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa557aef9U, 0xcb8b0b80U, 0x6bd6b167U, 0x95376e59U,
65f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa15fbee1U, 0xf3fbeb10U, 0xb17ffe81U, 0x0204080cU,
66f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcc851792U, 0xc49537a2U, 0x1d3a744eU, 0x14285078U,
67f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc39b2bb0U, 0x63c69157U, 0xdaa94fe6U, 0x5dba69d3U,
68f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5fbe61dfU, 0xdca557f2U, 0x7dfae913U, 0xcd871394U,
69f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7ffee11fU, 0x5ab475c1U, 0x6cd8ad75U, 0x5cb86dd5U,
70f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf7f3fb08U, 0x264c98d4U, 0xffe3db38U, 0xedc79354U,
71f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe8cd874aU, 0x9d274e69U, 0x6fdea17fU, 0x8e010203U,
72f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x19326456U, 0xa05dbae7U, 0xf0fde71aU, 0x890f1e11U,
73f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0f1e3c22U, 0x070e1c12U, 0xaf4386c5U, 0xfbebcb20U,
74f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x08102030U, 0x152a547eU, 0x0d1a342eU, 0x04081018U,
75f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x01020406U, 0x64c88d45U, 0xdfa35bf8U, 0x76ecc529U,
76f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x79f2f90bU, 0xdda753f4U, 0x3d7af48eU, 0x162c5874U,
77f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3f7efc82U, 0x376edcb2U, 0x6ddaa973U, 0x3870e090U,
78f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb96fdeb1U, 0x73e6d137U, 0xe9cf834cU, 0x356ad4beU,
79f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x55aa49e3U, 0x71e2d93bU, 0x7bf6f107U, 0x8c050a0fU,
80f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x72e4d531U, 0x880d1a17U, 0xf6f1ff0eU, 0x2a54a8fcU,
81f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3e7cf884U, 0x5ebc65d9U, 0x274e9cd2U, 0x468c0589U,
82f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0c183028U, 0x65ca8943U, 0x68d0bd6dU, 0x61c2995bU,
83f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x03060c0aU, 0xc19f23bcU, 0x57ae41efU, 0xd6b17fceU,
84f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd9af43ecU, 0x58b07dcdU, 0xd8ad47eaU, 0x66cc8549U,
85f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd7b37bc8U, 0x3a74e89cU, 0xc88d078aU, 0x3c78f088U,
86f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfae9cf26U, 0x96316253U, 0xa753a6f5U, 0x982d5a77U,
87f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xecc59752U, 0xb86ddab7U, 0xc7933ba8U, 0xae4182c3U,
88f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x69d2b96bU, 0x4b9631a7U, 0xab4b96ddU, 0xa94f9ed1U,
89f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x67ce814fU, 0x0a14283cU, 0x478e018fU, 0xf2f9ef16U,
90f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb577ee99U, 0x224488ccU, 0xe5d7b364U, 0xeec19f5eU,
91f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbe61c2a3U, 0x2b56acfaU, 0x811f3e21U, 0x1224486cU,
92f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x831b362dU, 0x1b366c5aU, 0x0e1c3824U, 0x23468ccaU,
93f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf5f7f304U, 0x458a0983U, 0x214284c6U, 0xce811f9eU,
94f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x499239abU, 0x2c58b0e8U, 0xf9efc32cU, 0xe6d1bf6eU,
95f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb671e293U, 0x2850a0f0U, 0x172e5c72U, 0x8219322bU,
96f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1a34685cU, 0x8b0b161dU, 0xfee1df3eU, 0x8a09121bU,
97f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x09122436U, 0xc98f038cU, 0x87132635U, 0x4e9c25b9U,
98f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe1dfa37cU, 0x2e5cb8e4U, 0xe4d5b762U, 0xe0dda77aU,
99f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xebcb8b40U, 0x903d7a47U, 0xa455aaffU, 0x1e3c7844U,
100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x85172e39U, 0x60c09d5dU, 0x00000000U, 0x254a94deU,
101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf4f5f702U, 0xf1ffe31cU, 0x94356a5fU, 0x0b162c3aU,
102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe7d3bb68U, 0x75eac923U, 0xefc39b58U, 0x3468d0b8U,
103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3162c4a6U, 0xd4b577c2U, 0xd0bd67daU, 0x86112233U,
104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7efce519U, 0xad478ec9U, 0xfde7d334U, 0x2952a4f6U,
105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3060c0a0U, 0x3b76ec9aU, 0x9f234665U, 0xf8edc72aU,
106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc6913faeU, 0x13264c6aU, 0x060c1814U, 0x050a141eU,
107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc59733a4U, 0x11224466U, 0x77eec12fU, 0x7cf8ed15U,
108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7af4f501U, 0x78f0fd0dU, 0x366cd8b4U, 0x1c387048U,
109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3972e496U, 0x59b279cbU, 0x18306050U, 0x56ac45e9U,
110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb37bf68dU, 0xb07dfa87U, 0x244890d8U, 0x204080c0U,
111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb279f28bU, 0x9239724bU, 0xa35bb6edU, 0xc09d27baU,
112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x44880d85U, 0x62c49551U, 0x10204060U, 0xb475ea9fU,
113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x84152a3fU, 0x43861197U, 0x933b764dU, 0xc2992fb6U,
114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4a9435a1U, 0xbd67cea9U, 0x8f030605U, 0x2d5ab4eeU,
115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbc65caafU, 0x9c254a6fU, 0x6ad4b561U, 0x40801d9dU,
116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcf831b98U, 0xa259b2ebU, 0x801d3a27U, 0x4f9e21bfU,
117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1f3e7c42U, 0xca890f86U, 0xaa4992dbU, 0x42841591U,
118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T1[256] = {
121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x69babbd2U, 0xa854e54dU, 0x5e2fe2bcU, 0xe87425cdU,
122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa653f751U, 0xbbd3d06bU, 0xb9d2d66fU, 0x9a4db329U,
123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa050fd5dU, 0x45accf8aU, 0x078d090eU, 0x63bfa5c6U,
124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe0703dddU, 0xa452f155U, 0x299a7b52U, 0x984cb52dU,
125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc9ea468fU, 0xb7d5c473U, 0x33975566U, 0xbfd1dc63U,
126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6633aaccU, 0xa251fb59U, 0xb65bc771U, 0x51a6f3a2U,
127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa1defe5fU, 0x9048ad3dU, 0x4da8d79aU, 0x2f99715eU,
128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xabdbe04bU, 0x6432acc8U, 0x73b795e6U, 0xe5fc32d7U,
129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdbe370abU, 0x219e6342U, 0x3f91417eU, 0x2b9b7d56U,
130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd9e276afU, 0x6bbbbdd6U, 0x82419b19U, 0xdc6e79a5U,
131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x57a5f9aeU, 0x8bcb800bU, 0xd66b67b1U, 0x3795596eU,
132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5fa1e1beU, 0xfbf310ebU, 0x7fb181feU, 0x04020c08U,
133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x85cc9217U, 0x95c4a237U, 0x3a1d4e74U, 0x28147850U,
134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9bc3b02bU, 0xc6635791U, 0xa9dae64fU, 0xba5dd369U,
135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbe5fdf61U, 0xa5dcf257U, 0xfa7d13e9U, 0x87cd9413U,
136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfe7f1fe1U, 0xb45ac175U, 0xd86c75adU, 0xb85cd56dU,
137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf3f708fbU, 0x4c26d498U, 0xe3ff38dbU, 0xc7ed5493U,
138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcde84a87U, 0x279d694eU, 0xde6f7fa1U, 0x018e0302U,
139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x32195664U, 0x5da0e7baU, 0xfdf01ae7U, 0x0f89111eU,
140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1e0f223cU, 0x0e07121cU, 0x43afc586U, 0xebfb20cbU,
141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x10083020U, 0x2a157e54U, 0x1a0d2e34U, 0x08041810U,
142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x02010604U, 0xc864458dU, 0xa3dff85bU, 0xec7629c5U,
143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf2790bf9U, 0xa7ddf453U, 0x7a3d8ef4U, 0x2c167458U,
144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7e3f82fcU, 0x6e37b2dcU, 0xda6d73a9U, 0x703890e0U,
145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6fb9b1deU, 0xe67337d1U, 0xcfe94c83U, 0x6a35bed4U,
146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xaa55e349U, 0xe2713bd9U, 0xf67b07f1U, 0x058c0f0aU,
147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe47231d5U, 0x0d88171aU, 0xf1f60effU, 0x542afca8U,
148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7c3e84f8U, 0xbc5ed965U, 0x4e27d29cU, 0x8c468905U,
149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x180c2830U, 0xca654389U, 0xd0686dbdU, 0xc2615b99U,
150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x06030a0cU, 0x9fc1bc23U, 0xae57ef41U, 0xb1d6ce7fU,
151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xafd9ec43U, 0xb058cd7dU, 0xadd8ea47U, 0xcc664985U,
152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb3d7c87bU, 0x743a9ce8U, 0x8dc88a07U, 0x783c88f0U,
153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe9fa26cfU, 0x31965362U, 0x53a7f5a6U, 0x2d98775aU,
154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc5ec5297U, 0x6db8b7daU, 0x93c7a83bU, 0x41aec382U,
155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd2696bb9U, 0x964ba731U, 0x4babdd96U, 0x4fa9d19eU,
156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xce674f81U, 0x140a3c28U, 0x8e478f01U, 0xf9f216efU,
157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x77b599eeU, 0x4422cc88U, 0xd7e564b3U, 0xc1ee5e9fU,
158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x61bea3c2U, 0x562bfaacU, 0x1f81213eU, 0x24126c48U,
159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1b832d36U, 0x361b5a6cU, 0x1c0e2438U, 0x4623ca8cU,
160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf7f504f3U, 0x8a458309U, 0x4221c684U, 0x81ce9e1fU,
161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9249ab39U, 0x582ce8b0U, 0xeff92cc3U, 0xd1e66ebfU,
162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x71b693e2U, 0x5028f0a0U, 0x2e17725cU, 0x19822b32U,
163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x341a5c68U, 0x0b8b1d16U, 0xe1fe3edfU, 0x098a1b12U,
164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x12093624U, 0x8fc98c03U, 0x13873526U, 0x9c4eb925U,
165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdfe17ca3U, 0x5c2ee4b8U, 0xd5e462b7U, 0xdde07aa7U,
166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcbeb408bU, 0x3d90477aU, 0x55a4ffaaU, 0x3c1e4478U,
167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1785392eU, 0xc0605d9dU, 0x00000000U, 0x4a25de94U,
168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf5f402f7U, 0xfff11ce3U, 0x35945f6aU, 0x160b3a2cU,
169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd3e768bbU, 0xea7523c9U, 0xc3ef589bU, 0x6834b8d0U,
170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6231a6c4U, 0xb5d4c277U, 0xbdd0da67U, 0x11863322U,
171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfc7e19e5U, 0x47adc98eU, 0xe7fd34d3U, 0x5229f6a4U,
172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6030a0c0U, 0x763b9aecU, 0x239f6546U, 0xedf82ac7U,
173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x91c6ae3fU, 0x26136a4cU, 0x0c061418U, 0x0a051e14U,
174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x97c5a433U, 0x22116644U, 0xee772fc1U, 0xf87c15edU,
175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf47a01f5U, 0xf0780dfdU, 0x6c36b4d8U, 0x381c4870U,
176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x723996e4U, 0xb259cb79U, 0x30185060U, 0xac56e945U,
177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7bb38df6U, 0x7db087faU, 0x4824d890U, 0x4020c080U,
178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x79b28bf2U, 0x39924b72U, 0x5ba3edb6U, 0x9dc0ba27U,
179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8844850dU, 0xc4625195U, 0x20106040U, 0x75b49feaU,
180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x15843f2aU, 0x86439711U, 0x3b934d76U, 0x99c2b62fU,
181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x944aa135U, 0x67bda9ceU, 0x038f0506U, 0x5a2deeb4U,
182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x65bcafcaU, 0x259c6f4aU, 0xd46a61b5U, 0x80409d1dU,
183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x83cf981bU, 0x59a2ebb2U, 0x1d80273aU, 0x9e4fbf21U,
184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3e1f427cU, 0x89ca860fU, 0x49aadb92U, 0x84429115U,
185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T2[256] = {
188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd2bbba69U, 0x4de554a8U, 0xbce22f5eU, 0xcd2574e8U,
189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x51f753a6U, 0x6bd0d3bbU, 0x6fd6d2b9U, 0x29b34d9aU,
190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5dfd50a0U, 0x8acfac45U, 0x0e098d07U, 0xc6a5bf63U,
191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdd3d70e0U, 0x55f152a4U, 0x527b9a29U, 0x2db54c98U,
192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8f46eac9U, 0x73c4d5b7U, 0x66559733U, 0x63dcd1bfU,
193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xccaa3366U, 0x59fb51a2U, 0x71c75bb6U, 0xa2f3a651U,
194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5ffedea1U, 0x3dad4890U, 0x9ad7a84dU, 0x5e71992fU,
195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4be0dbabU, 0xc8ac3264U, 0xe695b773U, 0xd732fce5U,
196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xab70e3dbU, 0x42639e21U, 0x7e41913fU, 0x567d9b2bU,
197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xaf76e2d9U, 0xd6bdbb6bU, 0x199b4182U, 0xa5796edcU,
198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xaef9a557U, 0x0b80cb8bU, 0xb1676bd6U, 0x6e599537U,
199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbee1a15fU, 0xeb10f3fbU, 0xfe81b17fU, 0x080c0204U,
200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1792cc85U, 0x37a2c495U, 0x744e1d3aU, 0x50781428U,
201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2bb0c39bU, 0x915763c6U, 0x4fe6daa9U, 0x69d35dbaU,
202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x61df5fbeU, 0x57f2dca5U, 0xe9137dfaU, 0x1394cd87U,
203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe11f7ffeU, 0x75c15ab4U, 0xad756cd8U, 0x6dd55cb8U,
204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfb08f7f3U, 0x98d4264cU, 0xdb38ffe3U, 0x9354edc7U,
205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x874ae8cdU, 0x4e699d27U, 0xa17f6fdeU, 0x02038e01U,
206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x64561932U, 0xbae7a05dU, 0xe71af0fdU, 0x1e11890fU,
207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3c220f1eU, 0x1c12070eU, 0x86c5af43U, 0xcb20fbebU,
208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x20300810U, 0x547e152aU, 0x342e0d1aU, 0x10180408U,
209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x04060102U, 0x8d4564c8U, 0x5bf8dfa3U, 0xc52976ecU,
210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf90b79f2U, 0x53f4dda7U, 0xf48e3d7aU, 0x5874162cU,
211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfc823f7eU, 0xdcb2376eU, 0xa9736ddaU, 0xe0903870U,
212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdeb1b96fU, 0xd13773e6U, 0x834ce9cfU, 0xd4be356aU,
213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x49e355aaU, 0xd93b71e2U, 0xf1077bf6U, 0x0a0f8c05U,
214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd53172e4U, 0x1a17880dU, 0xff0ef6f1U, 0xa8fc2a54U,
215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf8843e7cU, 0x65d95ebcU, 0x9cd2274eU, 0x0589468cU,
216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x30280c18U, 0x894365caU, 0xbd6d68d0U, 0x995b61c2U,
217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0c0a0306U, 0x23bcc19fU, 0x41ef57aeU, 0x7fced6b1U,
218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x43ecd9afU, 0x7dcd58b0U, 0x47ead8adU, 0x854966ccU,
219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7bc8d7b3U, 0xe89c3a74U, 0x078ac88dU, 0xf0883c78U,
220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcf26fae9U, 0x62539631U, 0xa6f5a753U, 0x5a77982dU,
221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9752ecc5U, 0xdab7b86dU, 0x3ba8c793U, 0x82c3ae41U,
222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb96b69d2U, 0x31a74b96U, 0x96ddab4bU, 0x9ed1a94fU,
223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x814f67ceU, 0x283c0a14U, 0x018f478eU, 0xef16f2f9U,
224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xee99b577U, 0x88cc2244U, 0xb364e5d7U, 0x9f5eeec1U,
225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc2a3be61U, 0xacfa2b56U, 0x3e21811fU, 0x486c1224U,
226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x362d831bU, 0x6c5a1b36U, 0x38240e1cU, 0x8cca2346U,
227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf304f5f7U, 0x0983458aU, 0x84c62142U, 0x1f9ece81U,
228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x39ab4992U, 0xb0e82c58U, 0xc32cf9efU, 0xbf6ee6d1U,
229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe293b671U, 0xa0f02850U, 0x5c72172eU, 0x322b8219U,
230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x685c1a34U, 0x161d8b0bU, 0xdf3efee1U, 0x121b8a09U,
231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x24360912U, 0x038cc98fU, 0x26358713U, 0x25b94e9cU,
232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa37ce1dfU, 0xb8e42e5cU, 0xb762e4d5U, 0xa77ae0ddU,
233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8b40ebcbU, 0x7a47903dU, 0xaaffa455U, 0x78441e3cU,
234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2e398517U, 0x9d5d60c0U, 0x00000000U, 0x94de254aU,
235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf702f4f5U, 0xe31cf1ffU, 0x6a5f9435U, 0x2c3a0b16U,
236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbb68e7d3U, 0xc92375eaU, 0x9b58efc3U, 0xd0b83468U,
237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc4a63162U, 0x77c2d4b5U, 0x67dad0bdU, 0x22338611U,
238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe5197efcU, 0x8ec9ad47U, 0xd334fde7U, 0xa4f62952U,
239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc0a03060U, 0xec9a3b76U, 0x46659f23U, 0xc72af8edU,
240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3faec691U, 0x4c6a1326U, 0x1814060cU, 0x141e050aU,
241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x33a4c597U, 0x44661122U, 0xc12f77eeU, 0xed157cf8U,
242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf5017af4U, 0xfd0d78f0U, 0xd8b4366cU, 0x70481c38U,
243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe4963972U, 0x79cb59b2U, 0x60501830U, 0x45e956acU,
244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf68db37bU, 0xfa87b07dU, 0x90d82448U, 0x80c02040U,
245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf28bb279U, 0x724b9239U, 0xb6eda35bU, 0x27bac09dU,
246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0d854488U, 0x955162c4U, 0x40601020U, 0xea9fb475U,
247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2a3f8415U, 0x11974386U, 0x764d933bU, 0x2fb6c299U,
248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x35a14a94U, 0xcea9bd67U, 0x06058f03U, 0xb4ee2d5aU,
249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcaafbc65U, 0x4a6f9c25U, 0xb5616ad4U, 0x1d9d4080U,
250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1b98cf83U, 0xb2eba259U, 0x3a27801dU, 0x21bf4f9eU,
251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7c421f3eU, 0x0f86ca89U, 0x92dbaa49U, 0x15914284U,
252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T3[256] = {
255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbbd269baU, 0xe54da854U, 0xe2bc5e2fU, 0x25cde874U,
256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf751a653U, 0xd06bbbd3U, 0xd66fb9d2U, 0xb3299a4dU,
257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfd5da050U, 0xcf8a45acU, 0x090e078dU, 0xa5c663bfU,
258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3ddde070U, 0xf155a452U, 0x7b52299aU, 0xb52d984cU,
259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x468fc9eaU, 0xc473b7d5U, 0x55663397U, 0xdc63bfd1U,
260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xaacc6633U, 0xfb59a251U, 0xc771b65bU, 0xf3a251a6U,
261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfe5fa1deU, 0xad3d9048U, 0xd79a4da8U, 0x715e2f99U,
262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe04babdbU, 0xacc86432U, 0x95e673b7U, 0x32d7e5fcU,
263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x70abdbe3U, 0x6342219eU, 0x417e3f91U, 0x7d562b9bU,
264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x76afd9e2U, 0xbdd66bbbU, 0x9b198241U, 0x79a5dc6eU,
265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf9ae57a5U, 0x800b8bcbU, 0x67b1d66bU, 0x596e3795U,
266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe1be5fa1U, 0x10ebfbf3U, 0x81fe7fb1U, 0x0c080402U,
267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x921785ccU, 0xa23795c4U, 0x4e743a1dU, 0x78502814U,
268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb02b9bc3U, 0x5791c663U, 0xe64fa9daU, 0xd369ba5dU,
269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdf61be5fU, 0xf257a5dcU, 0x13e9fa7dU, 0x941387cdU,
270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1fe1fe7fU, 0xc175b45aU, 0x75add86cU, 0xd56db85cU,
271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x08fbf3f7U, 0xd4984c26U, 0x38dbe3ffU, 0x5493c7edU,
272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4a87cde8U, 0x694e279dU, 0x7fa1de6fU, 0x0302018eU,
273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x56643219U, 0xe7ba5da0U, 0x1ae7fdf0U, 0x111e0f89U,
274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x223c1e0fU, 0x121c0e07U, 0xc58643afU, 0x20cbebfbU,
275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x30201008U, 0x7e542a15U, 0x2e341a0dU, 0x18100804U,
276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x06040201U, 0x458dc864U, 0xf85ba3dfU, 0x29c5ec76U,
277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0bf9f279U, 0xf453a7ddU, 0x8ef47a3dU, 0x74582c16U,
278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x82fc7e3fU, 0xb2dc6e37U, 0x73a9da6dU, 0x90e07038U,
279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb1de6fb9U, 0x37d1e673U, 0x4c83cfe9U, 0xbed46a35U,
280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe349aa55U, 0x3bd9e271U, 0x07f1f67bU, 0x0f0a058cU,
281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x31d5e472U, 0x171a0d88U, 0x0efff1f6U, 0xfca8542aU,
282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x84f87c3eU, 0xd965bc5eU, 0xd29c4e27U, 0x89058c46U,
283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2830180cU, 0x4389ca65U, 0x6dbdd068U, 0x5b99c261U,
284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0a0c0603U, 0xbc239fc1U, 0xef41ae57U, 0xce7fb1d6U,
285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xec43afd9U, 0xcd7db058U, 0xea47add8U, 0x4985cc66U,
286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc87bb3d7U, 0x9ce8743aU, 0x8a078dc8U, 0x88f0783cU,
287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x26cfe9faU, 0x53623196U, 0xf5a653a7U, 0x775a2d98U,
288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5297c5ecU, 0xb7da6db8U, 0xa83b93c7U, 0xc38241aeU,
289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6bb9d269U, 0xa731964bU, 0xdd964babU, 0xd19e4fa9U,
290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4f81ce67U, 0x3c28140aU, 0x8f018e47U, 0x16eff9f2U,
291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x99ee77b5U, 0xcc884422U, 0x64b3d7e5U, 0x5e9fc1eeU,
292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa3c261beU, 0xfaac562bU, 0x213e1f81U, 0x6c482412U,
293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2d361b83U, 0x5a6c361bU, 0x24381c0eU, 0xca8c4623U,
294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x04f3f7f5U, 0x83098a45U, 0xc6844221U, 0x9e1f81ceU,
295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xab399249U, 0xe8b0582cU, 0x2cc3eff9U, 0x6ebfd1e6U,
296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x93e271b6U, 0xf0a05028U, 0x725c2e17U, 0x2b321982U,
297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5c68341aU, 0x1d160b8bU, 0x3edfe1feU, 0x1b12098aU,
298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x36241209U, 0x8c038fc9U, 0x35261387U, 0xb9259c4eU,
299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7ca3dfe1U, 0xe4b85c2eU, 0x62b7d5e4U, 0x7aa7dde0U,
300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x408bcbebU, 0x477a3d90U, 0xffaa55a4U, 0x44783c1eU,
301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x392e1785U, 0x5d9dc060U, 0x00000000U, 0xde944a25U,
302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x02f7f5f4U, 0x1ce3fff1U, 0x5f6a3594U, 0x3a2c160bU,
303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x68bbd3e7U, 0x23c9ea75U, 0x589bc3efU, 0xb8d06834U,
304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa6c46231U, 0xc277b5d4U, 0xda67bdd0U, 0x33221186U,
305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x19e5fc7eU, 0xc98e47adU, 0x34d3e7fdU, 0xf6a45229U,
306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa0c06030U, 0x9aec763bU, 0x6546239fU, 0x2ac7edf8U,
307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xae3f91c6U, 0x6a4c2613U, 0x14180c06U, 0x1e140a05U,
308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa43397c5U, 0x66442211U, 0x2fc1ee77U, 0x15edf87cU,
309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x01f5f47aU, 0x0dfdf078U, 0xb4d86c36U, 0x4870381cU,
310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x96e47239U, 0xcb79b259U, 0x50603018U, 0xe945ac56U,
311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8df67bb3U, 0x87fa7db0U, 0xd8904824U, 0xc0804020U,
312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8bf279b2U, 0x4b723992U, 0xedb65ba3U, 0xba279dc0U,
313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x850d8844U, 0x5195c462U, 0x60402010U, 0x9fea75b4U,
314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3f2a1584U, 0x97118643U, 0x4d763b93U, 0xb62f99c2U,
315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa135944aU, 0xa9ce67bdU, 0x0506038fU, 0xeeb45a2dU,
316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xafca65bcU, 0x6f4a259cU, 0x61b5d46aU, 0x9d1d8040U,
317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x981b83cfU, 0xebb259a2U, 0x273a1d80U, 0xbf219e4fU,
318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x427c3e1fU, 0x860f89caU, 0xdb9249aaU, 0x91158442U,
319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T4[256] = {
322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbabababaU, 0x54545454U, 0x2f2f2f2fU, 0x74747474U,
323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x53535353U, 0xd3d3d3d3U, 0xd2d2d2d2U, 0x4d4d4d4dU,
324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x50505050U, 0xacacacacU, 0x8d8d8d8dU, 0xbfbfbfbfU,
325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x70707070U, 0x52525252U, 0x9a9a9a9aU, 0x4c4c4c4cU,
326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xeaeaeaeaU, 0xd5d5d5d5U, 0x97979797U, 0xd1d1d1d1U,
327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x33333333U, 0x51515151U, 0x5b5b5b5bU, 0xa6a6a6a6U,
328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdedededeU, 0x48484848U, 0xa8a8a8a8U, 0x99999999U,
329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdbdbdbdbU, 0x32323232U, 0xb7b7b7b7U, 0xfcfcfcfcU,
330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe3e3e3e3U, 0x9e9e9e9eU, 0x91919191U, 0x9b9b9b9bU,
331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe2e2e2e2U, 0xbbbbbbbbU, 0x41414141U, 0x6e6e6e6eU,
332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa5a5a5a5U, 0xcbcbcbcbU, 0x6b6b6b6bU, 0x95959595U,
333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa1a1a1a1U, 0xf3f3f3f3U, 0xb1b1b1b1U, 0x02020202U,
334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xccccccccU, 0xc4c4c4c4U, 0x1d1d1d1dU, 0x14141414U,
335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc3c3c3c3U, 0x63636363U, 0xdadadadaU, 0x5d5d5d5dU,
336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5f5f5f5fU, 0xdcdcdcdcU, 0x7d7d7d7dU, 0xcdcdcdcdU,
337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7f7f7f7fU, 0x5a5a5a5aU, 0x6c6c6c6cU, 0x5c5c5c5cU,
338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf7f7f7f7U, 0x26262626U, 0xffffffffU, 0xededededU,
339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe8e8e8e8U, 0x9d9d9d9dU, 0x6f6f6f6fU, 0x8e8e8e8eU,
340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x19191919U, 0xa0a0a0a0U, 0xf0f0f0f0U, 0x89898989U,
341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0f0f0f0fU, 0x07070707U, 0xafafafafU, 0xfbfbfbfbU,
342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x08080808U, 0x15151515U, 0x0d0d0d0dU, 0x04040404U,
343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x01010101U, 0x64646464U, 0xdfdfdfdfU, 0x76767676U,
344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x79797979U, 0xddddddddU, 0x3d3d3d3dU, 0x16161616U,
345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3f3f3f3fU, 0x37373737U, 0x6d6d6d6dU, 0x38383838U,
346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb9b9b9b9U, 0x73737373U, 0xe9e9e9e9U, 0x35353535U,
347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x55555555U, 0x71717171U, 0x7b7b7b7bU, 0x8c8c8c8cU,
348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x72727272U, 0x88888888U, 0xf6f6f6f6U, 0x2a2a2a2aU,
349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3e3e3e3eU, 0x5e5e5e5eU, 0x27272727U, 0x46464646U,
350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0c0c0c0cU, 0x65656565U, 0x68686868U, 0x61616161U,
351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x03030303U, 0xc1c1c1c1U, 0x57575757U, 0xd6d6d6d6U,
352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd9d9d9d9U, 0x58585858U, 0xd8d8d8d8U, 0x66666666U,
353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd7d7d7d7U, 0x3a3a3a3aU, 0xc8c8c8c8U, 0x3c3c3c3cU,
354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfafafafaU, 0x96969696U, 0xa7a7a7a7U, 0x98989898U,
355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xececececU, 0xb8b8b8b8U, 0xc7c7c7c7U, 0xaeaeaeaeU,
356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x69696969U, 0x4b4b4b4bU, 0xababababU, 0xa9a9a9a9U,
357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x67676767U, 0x0a0a0a0aU, 0x47474747U, 0xf2f2f2f2U,
358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb5b5b5b5U, 0x22222222U, 0xe5e5e5e5U, 0xeeeeeeeeU,
359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbebebebeU, 0x2b2b2b2bU, 0x81818181U, 0x12121212U,
360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x83838383U, 0x1b1b1b1bU, 0x0e0e0e0eU, 0x23232323U,
361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf5f5f5f5U, 0x45454545U, 0x21212121U, 0xcecececeU,
362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x49494949U, 0x2c2c2c2cU, 0xf9f9f9f9U, 0xe6e6e6e6U,
363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb6b6b6b6U, 0x28282828U, 0x17171717U, 0x82828282U,
364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1a1a1a1aU, 0x8b8b8b8bU, 0xfefefefeU, 0x8a8a8a8aU,
365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x09090909U, 0xc9c9c9c9U, 0x87878787U, 0x4e4e4e4eU,
366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe1e1e1e1U, 0x2e2e2e2eU, 0xe4e4e4e4U, 0xe0e0e0e0U,
367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xebebebebU, 0x90909090U, 0xa4a4a4a4U, 0x1e1e1e1eU,
368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x85858585U, 0x60606060U, 0x00000000U, 0x25252525U,
369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf4f4f4f4U, 0xf1f1f1f1U, 0x94949494U, 0x0b0b0b0bU,
370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe7e7e7e7U, 0x75757575U, 0xefefefefU, 0x34343434U,
371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x31313131U, 0xd4d4d4d4U, 0xd0d0d0d0U, 0x86868686U,
372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7e7e7e7eU, 0xadadadadU, 0xfdfdfdfdU, 0x29292929U,
373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x30303030U, 0x3b3b3b3bU, 0x9f9f9f9fU, 0xf8f8f8f8U,
374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc6c6c6c6U, 0x13131313U, 0x06060606U, 0x05050505U,
375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc5c5c5c5U, 0x11111111U, 0x77777777U, 0x7c7c7c7cU,
376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7a7a7a7aU, 0x78787878U, 0x36363636U, 0x1c1c1c1cU,
377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x39393939U, 0x59595959U, 0x18181818U, 0x56565656U,
378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb3b3b3b3U, 0xb0b0b0b0U, 0x24242424U, 0x20202020U,
379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb2b2b2b2U, 0x92929292U, 0xa3a3a3a3U, 0xc0c0c0c0U,
380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x44444444U, 0x62626262U, 0x10101010U, 0xb4b4b4b4U,
381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x84848484U, 0x43434343U, 0x93939393U, 0xc2c2c2c2U,
382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4a4a4a4aU, 0xbdbdbdbdU, 0x8f8f8f8fU, 0x2d2d2d2dU,
383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbcbcbcbcU, 0x9c9c9c9cU, 0x6a6a6a6aU, 0x40404040U,
384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcfcfcfcfU, 0xa2a2a2a2U, 0x80808080U, 0x4f4f4f4fU,
385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1f1f1f1fU, 0xcacacacaU, 0xaaaaaaaaU, 0x42424242U,
386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T5[256] = {
389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U,
390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U,
391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U,
392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U,
393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U,
394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U,
395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U,
396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U,
397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U,
398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U,
399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U,
400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U,
401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U,
402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U,
403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U,
404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U,
405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U,
406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U,
407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U,
408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U,
409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U,
410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U,
411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U,
412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U,
413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU,
414f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU,
415f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU,
416f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU,
417f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU,
418f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU,
419f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU,
420f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU,
421f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU,
422f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU,
423f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU,
424f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU,
425f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU,
426f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU,
427f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU,
428f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU,
429f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U,
430f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U,
431f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U,
432f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U,
433f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U,
434f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U,
435f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U,
436f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U,
437f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U,
438f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U,
439f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U,
440f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U,
441f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U,
442f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U,
443f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U,
444f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U,
445f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU,
446f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU,
447f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU,
448f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU,
449f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU,
450f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU,
451f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU,
452f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU,
453f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
454f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
455f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
456f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The round constants.
457f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
458f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 rc[] = {
459f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xba542f74U, 0x53d3d24dU, 0x50ac8dbfU, 0x70529a4cU,
460f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xead597d1U, 0x33515ba6U, 0xde48a899U, 0xdb32b7fcU,
461f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe39e919bU, 0xe2bb416eU, 0xa5cb6b95U, 0xa1f3b102U,
462f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xccc41d14U, 0xc363da5dU, 0x5fdc7dcdU, 0x7f5a6c5cU,
463f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf726ffedU, 0xe89d6f8eU, 0x19a0f089U,
464f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
465f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
466f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
467f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
468f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
469f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
470f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
471f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T0[256] = {
472f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa753a6f5U, 0xd3bb6bd0U, 0xe6d1bf6eU, 0x71e2d93bU,
473f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd0bd67daU, 0xac458acfU, 0x4d9a29b3U, 0x79f2f90bU,
474f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3a74e89cU, 0xc98f038cU, 0x913f7e41U, 0xfce5d732U,
475f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1e3c7844U, 0x478e018fU, 0x54a84de5U, 0xbd67cea9U,
476f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8c050a0fU, 0xa557aef9U, 0x7af4f501U, 0xfbebcb20U,
477f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x63c69157U, 0xb86ddab7U, 0xdda753f4U, 0xd4b577c2U,
478f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe5d7b364U, 0xb37bf68dU, 0xc59733a4U, 0xbe61c2a3U,
479f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa94f9ed1U, 0x880d1a17U, 0x0c183028U, 0xa259b2ebU,
480f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3972e496U, 0xdfa35bf8U, 0x2952a4f6U, 0xdaa94fe6U,
481f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2b56acfaU, 0xa84d9ad7U, 0xcb8b0b80U, 0x4c982db5U,
482f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4b9631a7U, 0x224488ccU, 0xaa4992dbU, 0x244890d8U,
483f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4182199bU, 0x70e0dd3dU, 0xa651a2f3U, 0xf9efc32cU,
484f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5ab475c1U, 0xe2d9af76U, 0xb07dfa87U, 0x366cd8b4U,
485f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7dfae913U, 0xe4d5b762U, 0x3366ccaaU, 0xffe3db38U,
486f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x60c09d5dU, 0x204080c0U, 0x08102030U, 0x8b0b161dU,
487f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5ebc65d9U, 0xab4b96ddU, 0x7ffee11fU, 0x78f0fd0dU,
488f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7cf8ed15U, 0x2c58b0e8U, 0x57ae41efU, 0xd2b96fd6U,
489f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdca557f2U, 0x6ddaa973U, 0x7efce519U, 0x0d1a342eU,
490f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x53a651f7U, 0x94356a5fU, 0xc39b2bb0U, 0x2850a0f0U,
491f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x274e9cd2U, 0x060c1814U, 0x5fbe61dfU, 0xad478ec9U,
492f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x67ce814fU, 0x5cb86dd5U, 0x55aa49e3U, 0x48903dadU,
493f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0e1c3824U, 0x52a455f1U, 0xeac98f46U, 0x42841591U,
494f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5bb671c7U, 0x5dba69d3U, 0x3060c0a0U, 0x58b07dcdU,
495f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x51a259fbU, 0x59b279cbU, 0x3c78f088U, 0x4e9c25b9U,
496f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3870e090U, 0x8a09121bU, 0x72e4d531U, 0x14285078U,
497f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe7d3bb68U, 0xc6913faeU, 0xdea15ffeU, 0x50a05dfdU,
498f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8e010203U, 0x9239724bU, 0xd1bf63dcU, 0x77eec12fU,
499f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x933b764dU, 0x458a0983U, 0x9a29527bU, 0xce811f9eU,
500f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2d5ab4eeU, 0x03060c0aU, 0x62c49551U, 0xb671e293U,
501f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb96fdeb1U, 0xbf63c6a5U, 0x96316253U, 0x6bd6b167U,
502f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3f7efc82U, 0x070e1c12U, 0x1224486cU, 0xae4182c3U,
503f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x40801d9dU, 0x3468d0b8U, 0x468c0589U, 0x3e7cf884U,
504f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdbab4be0U, 0xcf831b98U, 0xecc59752U, 0xcc851792U,
505f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc19f23bcU, 0xa15fbee1U, 0xc09d27baU, 0xd6b17fceU,
506f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1d3a744eU, 0xf4f5f702U, 0x61c2995bU, 0x3b76ec9aU,
507f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x10204060U, 0xd8ad47eaU, 0x68d0bd6dU, 0xa05dbae7U,
508f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb17ffe81U, 0x0a14283cU, 0x69d2b96bU, 0x6cd8ad75U,
509f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x499239abU, 0xfae9cf26U, 0x76ecc529U, 0xc49537a2U,
510f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9e214263U, 0x9b2b567dU, 0x6edca579U, 0x992f5e71U,
511f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc2992fb6U, 0xb773e695U, 0x982d5a77U, 0xbc65caafU,
512f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8f030605U, 0x85172e39U, 0x1f3e7c42U, 0xb475ea9fU,
513f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf8edc72aU, 0x11224466U, 0x2e5cb8e4U, 0x00000000U,
514f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x254a94deU, 0x1c387048U, 0x2a54a8fcU, 0x3d7af48eU,
515f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x050a141eU, 0x4f9e21bfU, 0x7bf6f107U, 0xb279f28bU,
516f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3264c8acU, 0x903d7a47U, 0xaf4386c5U, 0x19326456U,
517f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa35bb6edU, 0xf7f3fb08U, 0x73e6d137U, 0x9d274e69U,
518f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x152a547eU, 0x74e8cd25U, 0xeec19f5eU, 0xca890f86U,
519f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9f234665U, 0x0f1e3c22U, 0x1b366c5aU, 0x75eac923U,
520f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x86112233U, 0x84152a3fU, 0x9c254a6fU, 0x4a9435a1U,
521f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x97336655U, 0x1a34685cU, 0x65ca8943U, 0xf6f1ff0eU,
522f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xedc79354U, 0x09122436U, 0xbb6bd6bdU, 0x264c98d4U,
523f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x831b362dU, 0xebcb8b40U, 0x6fdea17fU, 0x811f3e21U,
524f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x04081018U, 0x6ad4b561U, 0x43861197U, 0x01020406U,
525f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x172e5c72U, 0xe1dfa37cU, 0x87132635U, 0xf5f7f304U,
526f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8d070e09U, 0xe3dbab70U, 0x23468ccaU, 0x801d3a27U,
527f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x44880d85U, 0x162c5874U, 0x66cc8549U, 0x214284c6U,
528f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfee1df3eU, 0xd5b773c4U, 0x3162c4a6U, 0xd9af43ecU,
529f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x356ad4beU, 0x18306050U, 0x0204080cU, 0x64c88d45U,
530f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf2f9ef16U, 0xf1ffe31cU, 0x56ac45e9U, 0xcd871394U,
531f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8219322bU, 0xc88d078aU, 0xba69d2bbU, 0xf0fde71aU,
532f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xefc39b58U, 0xe9cf834cU, 0xe8cd874aU, 0xfde7d334U,
533f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x890f1e11U, 0xd7b37bc8U, 0xc7933ba8U, 0xb577ee99U,
534f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa455aaffU, 0x2f5ebce2U, 0x95376e59U, 0x13264c6aU,
535f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0b162c3aU, 0xf3fbeb10U, 0xe0dda77aU, 0x376edcb2U,
536f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
537f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
538f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T1[256] = {
539f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x53a7f5a6U, 0xbbd3d06bU, 0xd1e66ebfU, 0xe2713bd9U,
540f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbdd0da67U, 0x45accf8aU, 0x9a4db329U, 0xf2790bf9U,
541f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x743a9ce8U, 0x8fc98c03U, 0x3f91417eU, 0xe5fc32d7U,
542f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3c1e4478U, 0x8e478f01U, 0xa854e54dU, 0x67bda9ceU,
543f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x058c0f0aU, 0x57a5f9aeU, 0xf47a01f5U, 0xebfb20cbU,
544f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc6635791U, 0x6db8b7daU, 0xa7ddf453U, 0xb5d4c277U,
545f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd7e564b3U, 0x7bb38df6U, 0x97c5a433U, 0x61bea3c2U,
546f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4fa9d19eU, 0x0d88171aU, 0x180c2830U, 0x59a2ebb2U,
547f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x723996e4U, 0xa3dff85bU, 0x5229f6a4U, 0xa9dae64fU,
548f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x562bfaacU, 0x4da8d79aU, 0x8bcb800bU, 0x984cb52dU,
549f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x964ba731U, 0x4422cc88U, 0x49aadb92U, 0x4824d890U,
550f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x82419b19U, 0xe0703dddU, 0x51a6f3a2U, 0xeff92cc3U,
551f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb45ac175U, 0xd9e276afU, 0x7db087faU, 0x6c36b4d8U,
552f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfa7d13e9U, 0xd5e462b7U, 0x6633aaccU, 0xe3ff38dbU,
553f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc0605d9dU, 0x4020c080U, 0x10083020U, 0x0b8b1d16U,
554f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbc5ed965U, 0x4babdd96U, 0xfe7f1fe1U, 0xf0780dfdU,
555f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf87c15edU, 0x582ce8b0U, 0xae57ef41U, 0xb9d2d66fU,
556f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa5dcf257U, 0xda6d73a9U, 0xfc7e19e5U, 0x1a0d2e34U,
557f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa653f751U, 0x35945f6aU, 0x9bc3b02bU, 0x5028f0a0U,
558f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4e27d29cU, 0x0c061418U, 0xbe5fdf61U, 0x47adc98eU,
559f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xce674f81U, 0xb85cd56dU, 0xaa55e349U, 0x9048ad3dU,
560f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1c0e2438U, 0xa452f155U, 0xc9ea468fU, 0x84429115U,
561f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb65bc771U, 0xba5dd369U, 0x6030a0c0U, 0xb058cd7dU,
562f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa251fb59U, 0xb259cb79U, 0x783c88f0U, 0x9c4eb925U,
563f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x703890e0U, 0x098a1b12U, 0xe47231d5U, 0x28147850U,
564f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd3e768bbU, 0x91c6ae3fU, 0xa1defe5fU, 0xa050fd5dU,
565f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x018e0302U, 0x39924b72U, 0xbfd1dc63U, 0xee772fc1U,
566f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3b934d76U, 0x8a458309U, 0x299a7b52U, 0x81ce9e1fU,
567f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5a2deeb4U, 0x06030a0cU, 0xc4625195U, 0x71b693e2U,
568f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6fb9b1deU, 0x63bfa5c6U, 0x31965362U, 0xd66b67b1U,
569f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7e3f82fcU, 0x0e07121cU, 0x24126c48U, 0x41aec382U,
570f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x80409d1dU, 0x6834b8d0U, 0x8c468905U, 0x7c3e84f8U,
571f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xabdbe04bU, 0x83cf981bU, 0xc5ec5297U, 0x85cc9217U,
572f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9fc1bc23U, 0x5fa1e1beU, 0x9dc0ba27U, 0xb1d6ce7fU,
573f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3a1d4e74U, 0xf5f402f7U, 0xc2615b99U, 0x763b9aecU,
574f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x20106040U, 0xadd8ea47U, 0xd0686dbdU, 0x5da0e7baU,
575f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7fb181feU, 0x140a3c28U, 0xd2696bb9U, 0xd86c75adU,
576f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9249ab39U, 0xe9fa26cfU, 0xec7629c5U, 0x95c4a237U,
577f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x219e6342U, 0x2b9b7d56U, 0xdc6e79a5U, 0x2f99715eU,
578f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x99c2b62fU, 0x73b795e6U, 0x2d98775aU, 0x65bcafcaU,
579f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x038f0506U, 0x1785392eU, 0x3e1f427cU, 0x75b49feaU,
580f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xedf82ac7U, 0x22116644U, 0x5c2ee4b8U, 0x00000000U,
581f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4a25de94U, 0x381c4870U, 0x542afca8U, 0x7a3d8ef4U,
582f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0a051e14U, 0x9e4fbf21U, 0xf67b07f1U, 0x79b28bf2U,
583f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6432acc8U, 0x3d90477aU, 0x43afc586U, 0x32195664U,
584f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5ba3edb6U, 0xf3f708fbU, 0xe67337d1U, 0x279d694eU,
585f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2a157e54U, 0xe87425cdU, 0xc1ee5e9fU, 0x89ca860fU,
586f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x239f6546U, 0x1e0f223cU, 0x361b5a6cU, 0xea7523c9U,
587f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x11863322U, 0x15843f2aU, 0x259c6f4aU, 0x944aa135U,
588f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x33975566U, 0x341a5c68U, 0xca654389U, 0xf1f60effU,
589f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc7ed5493U, 0x12093624U, 0x6bbbbdd6U, 0x4c26d498U,
590f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1b832d36U, 0xcbeb408bU, 0xde6f7fa1U, 0x1f81213eU,
591f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x08041810U, 0xd46a61b5U, 0x86439711U, 0x02010604U,
592f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2e17725cU, 0xdfe17ca3U, 0x13873526U, 0xf7f504f3U,
593f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x078d090eU, 0xdbe370abU, 0x4623ca8cU, 0x1d80273aU,
594f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8844850dU, 0x2c167458U, 0xcc664985U, 0x4221c684U,
595f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe1fe3edfU, 0xb7d5c473U, 0x6231a6c4U, 0xafd9ec43U,
596f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6a35bed4U, 0x30185060U, 0x04020c08U, 0xc864458dU,
597f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf9f216efU, 0xfff11ce3U, 0xac56e945U, 0x87cd9413U,
598f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x19822b32U, 0x8dc88a07U, 0x69babbd2U, 0xfdf01ae7U,
599f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc3ef589bU, 0xcfe94c83U, 0xcde84a87U, 0xe7fd34d3U,
600f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0f89111eU, 0xb3d7c87bU, 0x93c7a83bU, 0x77b599eeU,
601f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x55a4ffaaU, 0x5e2fe2bcU, 0x3795596eU, 0x26136a4cU,
602f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x160b3a2cU, 0xfbf310ebU, 0xdde07aa7U, 0x6e37b2dcU,
603f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
604f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
605f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T2[256] = {
606f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa6f5a753U, 0x6bd0d3bbU, 0xbf6ee6d1U, 0xd93b71e2U,
607f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x67dad0bdU, 0x8acfac45U, 0x29b34d9aU, 0xf90b79f2U,
608f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe89c3a74U, 0x038cc98fU, 0x7e41913fU, 0xd732fce5U,
609f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x78441e3cU, 0x018f478eU, 0x4de554a8U, 0xcea9bd67U,
610f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0a0f8c05U, 0xaef9a557U, 0xf5017af4U, 0xcb20fbebU,
611f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x915763c6U, 0xdab7b86dU, 0x53f4dda7U, 0x77c2d4b5U,
612f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb364e5d7U, 0xf68db37bU, 0x33a4c597U, 0xc2a3be61U,
613f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9ed1a94fU, 0x1a17880dU, 0x30280c18U, 0xb2eba259U,
614f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe4963972U, 0x5bf8dfa3U, 0xa4f62952U, 0x4fe6daa9U,
615f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xacfa2b56U, 0x9ad7a84dU, 0x0b80cb8bU, 0x2db54c98U,
616f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x31a74b96U, 0x88cc2244U, 0x92dbaa49U, 0x90d82448U,
617f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x199b4182U, 0xdd3d70e0U, 0xa2f3a651U, 0xc32cf9efU,
618f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x75c15ab4U, 0xaf76e2d9U, 0xfa87b07dU, 0xd8b4366cU,
619f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe9137dfaU, 0xb762e4d5U, 0xccaa3366U, 0xdb38ffe3U,
620f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9d5d60c0U, 0x80c02040U, 0x20300810U, 0x161d8b0bU,
621f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x65d95ebcU, 0x96ddab4bU, 0xe11f7ffeU, 0xfd0d78f0U,
622f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xed157cf8U, 0xb0e82c58U, 0x41ef57aeU, 0x6fd6d2b9U,
623f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x57f2dca5U, 0xa9736ddaU, 0xe5197efcU, 0x342e0d1aU,
624f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x51f753a6U, 0x6a5f9435U, 0x2bb0c39bU, 0xa0f02850U,
625f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9cd2274eU, 0x1814060cU, 0x61df5fbeU, 0x8ec9ad47U,
626f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x814f67ceU, 0x6dd55cb8U, 0x49e355aaU, 0x3dad4890U,
627f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x38240e1cU, 0x55f152a4U, 0x8f46eac9U, 0x15914284U,
628f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x71c75bb6U, 0x69d35dbaU, 0xc0a03060U, 0x7dcd58b0U,
629f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x59fb51a2U, 0x79cb59b2U, 0xf0883c78U, 0x25b94e9cU,
630f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe0903870U, 0x121b8a09U, 0xd53172e4U, 0x50781428U,
631f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbb68e7d3U, 0x3faec691U, 0x5ffedea1U, 0x5dfd50a0U,
632f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x02038e01U, 0x724b9239U, 0x63dcd1bfU, 0xc12f77eeU,
633f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x764d933bU, 0x0983458aU, 0x527b9a29U, 0x1f9ece81U,
634f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb4ee2d5aU, 0x0c0a0306U, 0x955162c4U, 0xe293b671U,
635f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdeb1b96fU, 0xc6a5bf63U, 0x62539631U, 0xb1676bd6U,
636f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfc823f7eU, 0x1c12070eU, 0x486c1224U, 0x82c3ae41U,
637f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1d9d4080U, 0xd0b83468U, 0x0589468cU, 0xf8843e7cU,
638f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4be0dbabU, 0x1b98cf83U, 0x9752ecc5U, 0x1792cc85U,
639f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x23bcc19fU, 0xbee1a15fU, 0x27bac09dU, 0x7fced6b1U,
640f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x744e1d3aU, 0xf702f4f5U, 0x995b61c2U, 0xec9a3b76U,
641f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x40601020U, 0x47ead8adU, 0xbd6d68d0U, 0xbae7a05dU,
642f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfe81b17fU, 0x283c0a14U, 0xb96b69d2U, 0xad756cd8U,
643f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x39ab4992U, 0xcf26fae9U, 0xc52976ecU, 0x37a2c495U,
644f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x42639e21U, 0x567d9b2bU, 0xa5796edcU, 0x5e71992fU,
645f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2fb6c299U, 0xe695b773U, 0x5a77982dU, 0xcaafbc65U,
646f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x06058f03U, 0x2e398517U, 0x7c421f3eU, 0xea9fb475U,
647f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc72af8edU, 0x44661122U, 0xb8e42e5cU, 0x00000000U,
648f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x94de254aU, 0x70481c38U, 0xa8fc2a54U, 0xf48e3d7aU,
649f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x141e050aU, 0x21bf4f9eU, 0xf1077bf6U, 0xf28bb279U,
650f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc8ac3264U, 0x7a47903dU, 0x86c5af43U, 0x64561932U,
651f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb6eda35bU, 0xfb08f7f3U, 0xd13773e6U, 0x4e699d27U,
652f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x547e152aU, 0xcd2574e8U, 0x9f5eeec1U, 0x0f86ca89U,
653f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x46659f23U, 0x3c220f1eU, 0x6c5a1b36U, 0xc92375eaU,
654f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x22338611U, 0x2a3f8415U, 0x4a6f9c25U, 0x35a14a94U,
655f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x66559733U, 0x685c1a34U, 0x894365caU, 0xff0ef6f1U,
656f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9354edc7U, 0x24360912U, 0xd6bdbb6bU, 0x98d4264cU,
657f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x362d831bU, 0x8b40ebcbU, 0xa17f6fdeU, 0x3e21811fU,
658f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x10180408U, 0xb5616ad4U, 0x11974386U, 0x04060102U,
659f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5c72172eU, 0xa37ce1dfU, 0x26358713U, 0xf304f5f7U,
660f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0e098d07U, 0xab70e3dbU, 0x8cca2346U, 0x3a27801dU,
661f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0d854488U, 0x5874162cU, 0x854966ccU, 0x84c62142U,
662f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdf3efee1U, 0x73c4d5b7U, 0xc4a63162U, 0x43ecd9afU,
663f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd4be356aU, 0x60501830U, 0x080c0204U, 0x8d4564c8U,
664f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xef16f2f9U, 0xe31cf1ffU, 0x45e956acU, 0x1394cd87U,
665f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x322b8219U, 0x078ac88dU, 0xd2bbba69U, 0xe71af0fdU,
666f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9b58efc3U, 0x834ce9cfU, 0x874ae8cdU, 0xd334fde7U,
667f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1e11890fU, 0x7bc8d7b3U, 0x3ba8c793U, 0xee99b577U,
668f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xaaffa455U, 0xbce22f5eU, 0x6e599537U, 0x4c6a1326U,
669f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2c3a0b16U, 0xeb10f3fbU, 0xa77ae0ddU, 0xdcb2376eU,
670f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
671f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
672f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T3[256] = {
673f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf5a653a7U, 0xd06bbbd3U, 0x6ebfd1e6U, 0x3bd9e271U,
674f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xda67bdd0U, 0xcf8a45acU, 0xb3299a4dU, 0x0bf9f279U,
675f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9ce8743aU, 0x8c038fc9U, 0x417e3f91U, 0x32d7e5fcU,
676f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x44783c1eU, 0x8f018e47U, 0xe54da854U, 0xa9ce67bdU,
677f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0f0a058cU, 0xf9ae57a5U, 0x01f5f47aU, 0x20cbebfbU,
678f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5791c663U, 0xb7da6db8U, 0xf453a7ddU, 0xc277b5d4U,
679f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x64b3d7e5U, 0x8df67bb3U, 0xa43397c5U, 0xa3c261beU,
680f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd19e4fa9U, 0x171a0d88U, 0x2830180cU, 0xebb259a2U,
681f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x96e47239U, 0xf85ba3dfU, 0xf6a45229U, 0xe64fa9daU,
682f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfaac562bU, 0xd79a4da8U, 0x800b8bcbU, 0xb52d984cU,
683f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa731964bU, 0xcc884422U, 0xdb9249aaU, 0xd8904824U,
684f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9b198241U, 0x3ddde070U, 0xf3a251a6U, 0x2cc3eff9U,
685f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc175b45aU, 0x76afd9e2U, 0x87fa7db0U, 0xb4d86c36U,
686f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x13e9fa7dU, 0x62b7d5e4U, 0xaacc6633U, 0x38dbe3ffU,
687f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5d9dc060U, 0xc0804020U, 0x30201008U, 0x1d160b8bU,
688f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd965bc5eU, 0xdd964babU, 0x1fe1fe7fU, 0x0dfdf078U,
689f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x15edf87cU, 0xe8b0582cU, 0xef41ae57U, 0xd66fb9d2U,
690f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf257a5dcU, 0x73a9da6dU, 0x19e5fc7eU, 0x2e341a0dU,
691f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf751a653U, 0x5f6a3594U, 0xb02b9bc3U, 0xf0a05028U,
692f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd29c4e27U, 0x14180c06U, 0xdf61be5fU, 0xc98e47adU,
693f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4f81ce67U, 0xd56db85cU, 0xe349aa55U, 0xad3d9048U,
694f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x24381c0eU, 0xf155a452U, 0x468fc9eaU, 0x91158442U,
695f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc771b65bU, 0xd369ba5dU, 0xa0c06030U, 0xcd7db058U,
696f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfb59a251U, 0xcb79b259U, 0x88f0783cU, 0xb9259c4eU,
697f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x90e07038U, 0x1b12098aU, 0x31d5e472U, 0x78502814U,
698f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x68bbd3e7U, 0xae3f91c6U, 0xfe5fa1deU, 0xfd5da050U,
699f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0302018eU, 0x4b723992U, 0xdc63bfd1U, 0x2fc1ee77U,
700f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4d763b93U, 0x83098a45U, 0x7b52299aU, 0x9e1f81ceU,
701f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xeeb45a2dU, 0x0a0c0603U, 0x5195c462U, 0x93e271b6U,
702f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb1de6fb9U, 0xa5c663bfU, 0x53623196U, 0x67b1d66bU,
703f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x82fc7e3fU, 0x121c0e07U, 0x6c482412U, 0xc38241aeU,
704f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9d1d8040U, 0xb8d06834U, 0x89058c46U, 0x84f87c3eU,
705f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe04babdbU, 0x981b83cfU, 0x5297c5ecU, 0x921785ccU,
706f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbc239fc1U, 0xe1be5fa1U, 0xba279dc0U, 0xce7fb1d6U,
707f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4e743a1dU, 0x02f7f5f4U, 0x5b99c261U, 0x9aec763bU,
708f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x60402010U, 0xea47add8U, 0x6dbdd068U, 0xe7ba5da0U,
709f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x81fe7fb1U, 0x3c28140aU, 0x6bb9d269U, 0x75add86cU,
710f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xab399249U, 0x26cfe9faU, 0x29c5ec76U, 0xa23795c4U,
711f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6342219eU, 0x7d562b9bU, 0x79a5dc6eU, 0x715e2f99U,
712f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb62f99c2U, 0x95e673b7U, 0x775a2d98U, 0xafca65bcU,
713f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0506038fU, 0x392e1785U, 0x427c3e1fU, 0x9fea75b4U,
714f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2ac7edf8U, 0x66442211U, 0xe4b85c2eU, 0x00000000U,
715f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xde944a25U, 0x4870381cU, 0xfca8542aU, 0x8ef47a3dU,
716f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1e140a05U, 0xbf219e4fU, 0x07f1f67bU, 0x8bf279b2U,
717f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xacc86432U, 0x477a3d90U, 0xc58643afU, 0x56643219U,
718f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xedb65ba3U, 0x08fbf3f7U, 0x37d1e673U, 0x694e279dU,
719f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7e542a15U, 0x25cde874U, 0x5e9fc1eeU, 0x860f89caU,
720f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6546239fU, 0x223c1e0fU, 0x5a6c361bU, 0x23c9ea75U,
721f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x33221186U, 0x3f2a1584U, 0x6f4a259cU, 0xa135944aU,
722f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x55663397U, 0x5c68341aU, 0x4389ca65U, 0x0efff1f6U,
723f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5493c7edU, 0x36241209U, 0xbdd66bbbU, 0xd4984c26U,
724f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2d361b83U, 0x408bcbebU, 0x7fa1de6fU, 0x213e1f81U,
725f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x18100804U, 0x61b5d46aU, 0x97118643U, 0x06040201U,
726f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x725c2e17U, 0x7ca3dfe1U, 0x35261387U, 0x04f3f7f5U,
727f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x090e078dU, 0x70abdbe3U, 0xca8c4623U, 0x273a1d80U,
728f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x850d8844U, 0x74582c16U, 0x4985cc66U, 0xc6844221U,
729f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3edfe1feU, 0xc473b7d5U, 0xa6c46231U, 0xec43afd9U,
730f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbed46a35U, 0x50603018U, 0x0c080402U, 0x458dc864U,
731f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x16eff9f2U, 0x1ce3fff1U, 0xe945ac56U, 0x941387cdU,
732f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2b321982U, 0x8a078dc8U, 0xbbd269baU, 0x1ae7fdf0U,
733f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x589bc3efU, 0x4c83cfe9U, 0x4a87cde8U, 0x34d3e7fdU,
734f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x111e0f89U, 0xc87bb3d7U, 0xa83b93c7U, 0x99ee77b5U,
735f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xffaa55a4U, 0xe2bc5e2fU, 0x596e3795U, 0x6a4c2613U,
736f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3a2c160bU, 0x10ebfbf3U, 0x7aa7dde0U, 0xb2dc6e37U,
737f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
738f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
739f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T4[256] = {
740f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa7a7a7a7U, 0xd3d3d3d3U, 0xe6e6e6e6U, 0x71717171U,
741f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd0d0d0d0U, 0xacacacacU, 0x4d4d4d4dU, 0x79797979U,
742f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3a3a3a3aU, 0xc9c9c9c9U, 0x91919191U, 0xfcfcfcfcU,
743f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1e1e1e1eU, 0x47474747U, 0x54545454U, 0xbdbdbdbdU,
744f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8c8c8c8cU, 0xa5a5a5a5U, 0x7a7a7a7aU, 0xfbfbfbfbU,
745f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x63636363U, 0xb8b8b8b8U, 0xddddddddU, 0xd4d4d4d4U,
746f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe5e5e5e5U, 0xb3b3b3b3U, 0xc5c5c5c5U, 0xbebebebeU,
747f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa9a9a9a9U, 0x88888888U, 0x0c0c0c0cU, 0xa2a2a2a2U,
748f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x39393939U, 0xdfdfdfdfU, 0x29292929U, 0xdadadadaU,
749f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2b2b2b2bU, 0xa8a8a8a8U, 0xcbcbcbcbU, 0x4c4c4c4cU,
750f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4b4b4b4bU, 0x22222222U, 0xaaaaaaaaU, 0x24242424U,
751f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x41414141U, 0x70707070U, 0xa6a6a6a6U, 0xf9f9f9f9U,
752f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5a5a5a5aU, 0xe2e2e2e2U, 0xb0b0b0b0U, 0x36363636U,
753f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7d7d7d7dU, 0xe4e4e4e4U, 0x33333333U, 0xffffffffU,
754f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x60606060U, 0x20202020U, 0x08080808U, 0x8b8b8b8bU,
755f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5e5e5e5eU, 0xababababU, 0x7f7f7f7fU, 0x78787878U,
756f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7c7c7c7cU, 0x2c2c2c2cU, 0x57575757U, 0xd2d2d2d2U,
757f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdcdcdcdcU, 0x6d6d6d6dU, 0x7e7e7e7eU, 0x0d0d0d0dU,
758f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x53535353U, 0x94949494U, 0xc3c3c3c3U, 0x28282828U,
759f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x27272727U, 0x06060606U, 0x5f5f5f5fU, 0xadadadadU,
760f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x67676767U, 0x5c5c5c5cU, 0x55555555U, 0x48484848U,
761f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0e0e0e0eU, 0x52525252U, 0xeaeaeaeaU, 0x42424242U,
762f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5b5b5b5bU, 0x5d5d5d5dU, 0x30303030U, 0x58585858U,
763f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x51515151U, 0x59595959U, 0x3c3c3c3cU, 0x4e4e4e4eU,
764f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x38383838U, 0x8a8a8a8aU, 0x72727272U, 0x14141414U,
765f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe7e7e7e7U, 0xc6c6c6c6U, 0xdedededeU, 0x50505050U,
766f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8e8e8e8eU, 0x92929292U, 0xd1d1d1d1U, 0x77777777U,
767f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x93939393U, 0x45454545U, 0x9a9a9a9aU, 0xcecececeU,
768f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2d2d2d2dU, 0x03030303U, 0x62626262U, 0xb6b6b6b6U,
769f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb9b9b9b9U, 0xbfbfbfbfU, 0x96969696U, 0x6b6b6b6bU,
770f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3f3f3f3fU, 0x07070707U, 0x12121212U, 0xaeaeaeaeU,
771f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x40404040U, 0x34343434U, 0x46464646U, 0x3e3e3e3eU,
772f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdbdbdbdbU, 0xcfcfcfcfU, 0xececececU, 0xccccccccU,
773f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc1c1c1c1U, 0xa1a1a1a1U, 0xc0c0c0c0U, 0xd6d6d6d6U,
774f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1d1d1d1dU, 0xf4f4f4f4U, 0x61616161U, 0x3b3b3b3bU,
775f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x10101010U, 0xd8d8d8d8U, 0x68686868U, 0xa0a0a0a0U,
776f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb1b1b1b1U, 0x0a0a0a0aU, 0x69696969U, 0x6c6c6c6cU,
777f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x49494949U, 0xfafafafaU, 0x76767676U, 0xc4c4c4c4U,
778f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9e9e9e9eU, 0x9b9b9b9bU, 0x6e6e6e6eU, 0x99999999U,
779f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc2c2c2c2U, 0xb7b7b7b7U, 0x98989898U, 0xbcbcbcbcU,
780f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8f8f8f8fU, 0x85858585U, 0x1f1f1f1fU, 0xb4b4b4b4U,
781f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf8f8f8f8U, 0x11111111U, 0x2e2e2e2eU, 0x00000000U,
782f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x25252525U, 0x1c1c1c1cU, 0x2a2a2a2aU, 0x3d3d3d3dU,
783f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x05050505U, 0x4f4f4f4fU, 0x7b7b7b7bU, 0xb2b2b2b2U,
784f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x32323232U, 0x90909090U, 0xafafafafU, 0x19191919U,
785f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa3a3a3a3U, 0xf7f7f7f7U, 0x73737373U, 0x9d9d9d9dU,
786f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x15151515U, 0x74747474U, 0xeeeeeeeeU, 0xcacacacaU,
787f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9f9f9f9fU, 0x0f0f0f0fU, 0x1b1b1b1bU, 0x75757575U,
788f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x86868686U, 0x84848484U, 0x9c9c9c9cU, 0x4a4a4a4aU,
789f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x97979797U, 0x1a1a1a1aU, 0x65656565U, 0xf6f6f6f6U,
790f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xededededU, 0x09090909U, 0xbbbbbbbbU, 0x26262626U,
791f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x83838383U, 0xebebebebU, 0x6f6f6f6fU, 0x81818181U,
792f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x04040404U, 0x6a6a6a6aU, 0x43434343U, 0x01010101U,
793f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x17171717U, 0xe1e1e1e1U, 0x87878787U, 0xf5f5f5f5U,
794f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8d8d8d8dU, 0xe3e3e3e3U, 0x23232323U, 0x80808080U,
795f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x44444444U, 0x16161616U, 0x66666666U, 0x21212121U,
796f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfefefefeU, 0xd5d5d5d5U, 0x31313131U, 0xd9d9d9d9U,
797f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x35353535U, 0x18181818U, 0x02020202U, 0x64646464U,
798f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf2f2f2f2U, 0xf1f1f1f1U, 0x56565656U, 0xcdcdcdcdU,
799f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x82828282U, 0xc8c8c8c8U, 0xbabababaU, 0xf0f0f0f0U,
800f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xefefefefU, 0xe9e9e9e9U, 0xe8e8e8e8U, 0xfdfdfdfdU,
801f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x89898989U, 0xd7d7d7d7U, 0xc7c7c7c7U, 0xb5b5b5b5U,
802f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa4a4a4a4U, 0x2f2f2f2fU, 0x95959595U, 0x13131313U,
803f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0b0b0b0bU, 0xf3f3f3f3U, 0xe0e0e0e0U, 0x37373737U,
804f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
805f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
806f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 T5[256] = {
807f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U,
808f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U,
809f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U,
810f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U,
811f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U,
812f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U,
813f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U,
814f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U,
815f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U,
816f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U,
817f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U,
818f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U,
819f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U,
820f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U,
821f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U,
822f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U,
823f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U,
824f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U,
825f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U,
826f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U,
827f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U,
828f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U,
829f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U,
830f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U,
831f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU,
832f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU,
833f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU,
834f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU,
835f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU,
836f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU,
837f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU,
838f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU,
839f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU,
840f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU,
841f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU,
842f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU,
843f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU,
844f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU,
845f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU,
846f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU,
847f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U,
848f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U,
849f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U,
850f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U,
851f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U,
852f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U,
853f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U,
854f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U,
855f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U,
856f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U,
857f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U,
858f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U,
859f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U,
860f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U,
861f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U,
862f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U,
863f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU,
864f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU,
865f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU,
866f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU,
867f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU,
868f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU,
869f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU,
870f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU,
871f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
872f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
873f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
874f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project * The round constants.
875f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
876f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic const ulong32 rc[] = {
877f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   0xa7d3e671U, 0xd0ac4d79U, 0x3ac991fcU, 0x1e4754bdU,
878f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   0x8ca57afbU, 0x63b8ddd4U, 0xe5b3c5beU, 0xa9880ca2U,
879f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   0x39df29daU, 0x2ba8cb4cU, 0x4b22aa24U, 0x4170a6f9U,
880f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   0x5ae2b036U, 0x7de433ffU, 0x6020088bU, 0x5eab7f78U,
881f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   0x7c2c57d2U, 0xdc6d7e0dU, 0x5394c328U,
882f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
883f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
884f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
885f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
886f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project /**
887f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    Initialize the Anubis block cipher
888f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    @param key The symmetric key you wish to pass
889f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    @param keylen The key length in bytes
890f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    @param num_rounds The number of rounds desired (0 for default)
891f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    @param skey The key in as scheduled by this function.
892f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    @return CRYPT_OK if successful
893f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project */
894f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CLEAN_STACK
895f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic int _anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
896f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
897f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint  anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
898f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
899f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
900f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   int N, R, i, pos, r;
901f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   ulong32 kappa[MAX_N];
902f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   ulong32 inter[MAX_N];
903f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   ulong32 v, K0, K1, K2, K3;
904f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
905f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(key  != NULL);
906f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(skey != NULL);
907f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
908f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* Valid sizes (in bytes) are 16, 20, 24, 28, 32, 36, and 40. */
909f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if ((keylen & 3) || (keylen < 16) || (keylen > 40)) {
910f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return CRYPT_INVALID_KEYSIZE;
911f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
912f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   skey->anubis.keyBits = keylen*8;
913f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
914f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /*
915f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * determine the N length parameter:
916f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * (N.B. it is assumed that the key length is valid!)
917f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
918f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   N = skey->anubis.keyBits >> 5;
919f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
920f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /*
921f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * determine number of rounds from key size:
922f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
923f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   skey->anubis.R = R = 8 + N;
924f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
925f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (num_rounds != 0 && num_rounds != skey->anubis.R) {
926f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return CRYPT_INVALID_ROUNDS;
927f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
928f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
929f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    /*
930f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * map cipher key to initial key state (mu):
931f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
932f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    for (i = 0, pos = 0; i < N; i++, pos += 4) {
933f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      kappa[i] =
934f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (key[pos    ] << 24) ^
935f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (key[pos + 1] << 16) ^
936f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (key[pos + 2] <<  8) ^
937f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (key[pos + 3]      );
938f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    }
939f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
940f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /*
941f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * generate R + 1 round keys:
942f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
943f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   for (r = 0; r <= R; r++) {
944f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      /*
945f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       * generate r-th round key K^r:
946f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       */
947f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      K0 = T4[(kappa[N - 1] >> 24) & 0xff];
948f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      K1 = T4[(kappa[N - 1] >> 16) & 0xff];
949f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      K2 = T4[(kappa[N - 1] >>  8) & 0xff];
950f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      K3 = T4[(kappa[N - 1]      ) & 0xff];
951f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      for (i = N - 2; i >= 0; i--) {
952f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K0 = T4[(kappa[i] >> 24)  & 0xff] ^
953f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K0 >> 24) & 0xff] & 0xff000000U) ^
954f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K0 >> 16) & 0xff] & 0x00ff0000U) ^
955f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K0 >>  8) & 0xff] & 0x0000ff00U) ^
956f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K0      ) & 0xff] & 0x000000ffU);
957f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K1 = T4[(kappa[i] >> 16) & 0xff] ^
958f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K1 >> 24) & 0xff] & 0xff000000U) ^
959f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K1 >> 16) & 0xff] & 0x00ff0000U) ^
960f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K1 >>  8) & 0xff] & 0x0000ff00U) ^
961f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K1      ) & 0xff] & 0x000000ffU);
962f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K2 = T4[(kappa[i] >>  8) & 0xff] ^
963f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K2 >> 24) & 0xff] & 0xff000000U) ^
964f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K2 >> 16) & 0xff] & 0x00ff0000U) ^
965f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K2 >>  8) & 0xff] & 0x0000ff00U) ^
966f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K2      ) & 0xff] & 0x000000ffU);
967f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K3 = T4[(kappa[i]      ) & 0xff] ^
968f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K3 >> 24) & 0xff] & 0xff000000U) ^
969f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K3 >> 16) & 0xff] & 0x00ff0000U) ^
970f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K3 >>  8) & 0xff] & 0x0000ff00U) ^
971f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            (T5[(K3      ) & 0xff] & 0x000000ffU);
972f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
973f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      /*
974f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      -- this is the code to use with the large U tables:
975f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      K0 = K1 = K2 = K3 = 0;
976f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      for (i = 0; i < N; i++) {
977f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K0 ^= U[i][(kappa[i] >> 24) & 0xff];
978f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K1 ^= U[i][(kappa[i] >> 16) & 0xff];
979f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K2 ^= U[i][(kappa[i] >>  8) & 0xff];
980f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         K3 ^= U[i][(kappa[i]      ) & 0xff];
981f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
982f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      */
983f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      skey->anubis.roundKeyEnc[r][0] = K0;
984f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      skey->anubis.roundKeyEnc[r][1] = K1;
985f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      skey->anubis.roundKeyEnc[r][2] = K2;
986f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      skey->anubis.roundKeyEnc[r][3] = K3;
987f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
988f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      /*
989f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       * compute kappa^{r+1} from kappa^r:
990f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       */
991f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      if (r == R) {
992f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         break;
993f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
994f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      for (i = 0; i < N; i++) {
995f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         int j = i;
996f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         inter[i]  = T0[(kappa[j--] >> 24) & 0xff]; if (j < 0) j = N - 1;
997f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         inter[i] ^= T1[(kappa[j--] >> 16) & 0xff]; if (j < 0) j = N - 1;
998f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         inter[i] ^= T2[(kappa[j--] >>  8) & 0xff]; if (j < 0) j = N - 1;
999f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         inter[i] ^= T3[(kappa[j  ]      ) & 0xff];
1000f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
1001f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      kappa[0] = inter[0] ^ rc[r];
1002f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      for (i = 1; i < N; i++) {
1003f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         kappa[i] = inter[i];
1004f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
1005f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
1006f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1007f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /*
1008f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * generate inverse key schedule: K'^0 = K^R, K'^R = K^0, K'^r = theta(K^{R-r}):
1009f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
1010f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   for (i = 0; i < 4; i++) {
1011f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      skey->anubis.roundKeyDec[0][i] = skey->anubis.roundKeyEnc[R][i];
1012f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      skey->anubis.roundKeyDec[R][i] = skey->anubis.roundKeyEnc[0][i];
1013f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
1014f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   for (r = 1; r < R; r++) {
1015f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      for (i = 0; i < 4; i++) {
1016f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         v = skey->anubis.roundKeyEnc[R - r][i];
1017f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         skey->anubis.roundKeyDec[r][i] =
1018f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            T0[T4[(v >> 24) & 0xff] & 0xff] ^
1019f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            T1[T4[(v >> 16) & 0xff] & 0xff] ^
1020f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            T2[T4[(v >>  8) & 0xff] & 0xff] ^
1021f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project            T3[T4[(v      ) & 0xff] & 0xff];
1022f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      }
1023f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
1024f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1025f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_OK;
1026f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1027f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1028f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifdef LTC_CLEAN_STACK
1029f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint  anubis_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey)
1030f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1031f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  int err;
1032f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  err = _anubis_setup(key, keylen, num_rounds, skey);
1033f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  burn_stack(sizeof(int) * 5 + sizeof(ulong32) * (MAX_N + MAX_N + 5));
1034f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  return err;
1035f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1036f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
1037f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1038f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1039f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectstatic void anubis_crypt(const unsigned char *plaintext, unsigned char *ciphertext,
1040f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project                         ulong32 roundKey[18 + 1][4], int R) {
1041f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   int i, pos, r;
1042f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   ulong32 state[4];
1043f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   ulong32 inter[4];
1044f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1045f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    /*
1046f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * map plaintext block to cipher state (mu)
1047f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * and add initial round key (sigma[K^0]):
1048f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
1049f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    for (i = 0, pos = 0; i < 4; i++, pos += 4) {
1050f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      state[i] =
1051f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (plaintext[pos    ] << 24) ^
1052f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (plaintext[pos + 1] << 16) ^
1053f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (plaintext[pos + 2] <<  8) ^
1054f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         (plaintext[pos + 3]      ) ^
1055f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         roundKey[0][i];
1056f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    }
1057f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1058f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    /*
1059f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     * R - 1 full rounds:
1060f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     */
1061f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    for (r = 1; r < R; r++) {
1062f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      inter[0] =
1063f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T0[(state[0] >> 24) & 0xff] ^
1064f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T1[(state[1] >> 24) & 0xff] ^
1065f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T2[(state[2] >> 24) & 0xff] ^
1066f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T3[(state[3] >> 24) & 0xff] ^
1067f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         roundKey[r][0];
1068f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      inter[1] =
1069f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T0[(state[0] >> 16) & 0xff] ^
1070f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T1[(state[1] >> 16) & 0xff] ^
1071f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T2[(state[2] >> 16) & 0xff] ^
1072f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T3[(state[3] >> 16) & 0xff] ^
1073f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         roundKey[r][1];
1074f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      inter[2] =
1075f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T0[(state[0] >>  8) & 0xff] ^
1076f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T1[(state[1] >>  8) & 0xff] ^
1077f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T2[(state[2] >>  8) & 0xff] ^
1078f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T3[(state[3] >>  8) & 0xff] ^
1079f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         roundKey[r][2];
1080f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      inter[3] =
1081f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T0[(state[0]      ) & 0xff] ^
1082f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T1[(state[1]      ) & 0xff] ^
1083f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T2[(state[2]      ) & 0xff] ^
1084f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         T3[(state[3]      ) & 0xff] ^
1085f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project         roundKey[r][3];
1086f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      state[0] = inter[0];
1087f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      state[1] = inter[1];
1088f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      state[2] = inter[2];
1089f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      state[3] = inter[3];
1090f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    }
1091f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1092f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    /*
1093f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * last round:
1094f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
1095f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   inter[0] =
1096f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T0[(state[0] >> 24) & 0xff] & 0xff000000U) ^
1097f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T1[(state[1] >> 24) & 0xff] & 0x00ff0000U) ^
1098f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T2[(state[2] >> 24) & 0xff] & 0x0000ff00U) ^
1099f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T3[(state[3] >> 24) & 0xff] & 0x000000ffU) ^
1100f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      roundKey[R][0];
1101f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   inter[1] =
1102f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T0[(state[0] >> 16) & 0xff] & 0xff000000U) ^
1103f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T1[(state[1] >> 16) & 0xff] & 0x00ff0000U) ^
1104f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T2[(state[2] >> 16) & 0xff] & 0x0000ff00U) ^
1105f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T3[(state[3] >> 16) & 0xff] & 0x000000ffU) ^
1106f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      roundKey[R][1];
1107f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   inter[2] =
1108f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T0[(state[0] >>  8) & 0xff] & 0xff000000U) ^
1109f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T1[(state[1] >>  8) & 0xff] & 0x00ff0000U) ^
1110f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T2[(state[2] >>  8) & 0xff] & 0x0000ff00U) ^
1111f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T3[(state[3] >>  8) & 0xff] & 0x000000ffU) ^
1112f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      roundKey[R][2];
1113f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   inter[3] =
1114f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T0[(state[0]      ) & 0xff] & 0xff000000U) ^
1115f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T1[(state[1]      ) & 0xff] & 0x00ff0000U) ^
1116f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T2[(state[2]      ) & 0xff] & 0x0000ff00U) ^
1117f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      (T3[(state[3]      ) & 0xff] & 0x000000ffU) ^
1118f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      roundKey[R][3];
1119f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1120f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /*
1121f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    * map cipher state to ciphertext block (mu^{-1}):
1122f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    */
1123f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    for (i = 0, pos = 0; i < 4; i++, pos += 4) {
1124f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        ulong32 w = inter[i];
1125f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        ciphertext[pos    ] = (unsigned char)(w >> 24);
1126f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        ciphertext[pos + 1] = (unsigned char)(w >> 16);
1127f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        ciphertext[pos + 2] = (unsigned char)(w >>  8);
1128f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project        ciphertext[pos + 3] = (unsigned char)(w      );
1129f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project    }
1130f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1131f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1132f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
1133f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Encrypts a block of text with Anubis
1134f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param pt The input plaintext (16 bytes)
1135f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param ct The output ciphertext (16 bytes)
1136f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param skey The key as scheduled
1137f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @return CRYPT_OK if successful
1138f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
1139f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint anubis_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *skey)
1140f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1141f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(pt   != NULL);
1142f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(ct   != NULL);
1143f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(skey != NULL);
1144f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   anubis_crypt(pt, ct, skey->anubis.roundKeyEnc, skey->anubis.R);
1145f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_OK;
1146f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1147f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1148f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
1149f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Decrypts a block of text with Anubis
1150f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param ct The input ciphertext (16 bytes)
1151f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param pt The output plaintext (16 bytes)
1152f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param skey The key as scheduled
1153f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @return CRYPT_OK if successful
1154f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
1155f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint anubis_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *skey)
1156f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1157f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(pt   != NULL);
1158f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(ct   != NULL);
1159f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(skey != NULL);
1160f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   anubis_crypt(ct, pt, skey->anubis.roundKeyDec, skey->anubis.R);
1161f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_OK;
1162f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1163f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1164f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
1165f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Performs a self-test of the Anubis block cipher
1166f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @return CRYPT_OK if functional, CRYPT_NOP if self-test has been disabled
1167f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
1168f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint anubis_test(void)
1169f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1170f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#if !defined(LTC_TEST)
1171f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  return CRYPT_NOP;
1172f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
1173f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  static const struct test {
1174f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     int keylen;
1175f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     unsigned char pt[16], ct[16], key[40];
1176f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  } tests[] = {
1177f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#ifndef ANUBIS_TWEAK
1178f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /**** ORIGINAL ANUBIS ****/
1179f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 128 bit keys */
1180f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1181f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
1182f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1183f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1184f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xF0, 0x68, 0x60, 0xFC, 0x67, 0x30, 0xE8, 0x18,
1185f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xF1, 0x32, 0xC7, 0x8A, 0xF4, 0x13, 0x2A, 0xFE },
1186f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1187f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1188f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1189f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
1190f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1191f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1192f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xA8, 0x66, 0x84, 0x80, 0x07, 0x74, 0x5C, 0x89,
1193f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xFC, 0x5E, 0xB5, 0xBA, 0xD4, 0xFE, 0x32, 0x6D },
1194f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1195f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1196f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1197f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1198f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* 160-bit keys */
1199f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1200f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
1201f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1202f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1203f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xBD, 0x5E, 0x32, 0xBE, 0x51, 0x67, 0xA8, 0xE2,
1204f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x72, 0xD7, 0x95, 0x0F, 0x83, 0xC6, 0x8C, 0x31 },
1205f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1206f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1207f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00 }
1208f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1209f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
1210f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1211f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1212f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x4C, 0x1F, 0x86, 0x2E, 0x11, 0xEB, 0xCE, 0xEB,
1213f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xFE, 0xB9, 0x73, 0xC9, 0xDF, 0xEF, 0x7A, 0xDB },
1214f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1215f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1216f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x01 }
1217f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1218f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1219f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 192-bit keys */
1220f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1221f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   24,
1222f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1223f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1224f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x17, 0xAC, 0x57, 0x44, 0x9D, 0x59, 0x61, 0x66,
1225f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xD0, 0xC7, 0x9E, 0x04, 0x7C, 0xC7, 0x58, 0xF0 },
1226f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1227f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1228f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1229f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1230f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   24,
1231f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1232f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1233f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x71, 0x52, 0xB4, 0xEB, 0x1D, 0xAA, 0x36, 0xFD,
1234f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x57, 0x14, 0x5F, 0x57, 0x04, 0x9F, 0x70, 0x74 },
1235f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1236f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1237f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1238f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1239f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1240f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 224-bit keys */
1241f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1242f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   28,
1243f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1244f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1245f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xA2, 0xF0, 0xA6, 0xB9, 0x17, 0x93, 0x2A, 0x3B,
1246f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xEF, 0x08, 0xE8, 0x7A, 0x58, 0xD6, 0xF8, 0x53 },
1247f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1248f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1249f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1250f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00 }
1251f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1252f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   28,
1253f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1254f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1255f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xF0, 0xCA, 0xFC, 0x78, 0x8B, 0x4B, 0x4E, 0x53,
1256f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x8B, 0xC4, 0x32, 0x6A, 0xF5, 0xB9, 0x1B, 0x5F },
1257f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1258f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1259f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1260f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x01 }
1261f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1262f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1263f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 256-bit keys */
1264f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1265f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   32,
1266f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1267f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1268f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xE0, 0x86, 0xAC, 0x45, 0x6B, 0x3C, 0xE5, 0x13,
1269f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xED, 0xF5, 0xDF, 0xDD, 0xD6, 0x3B, 0x71, 0x93 },
1270f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1271f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1272f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1273f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1274f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1275f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   32,
1276f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1277f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1278f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x50, 0x01, 0xB9, 0xF5, 0x21, 0xC1, 0xC1, 0x29,
1279f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0xD5, 0xEC, 0x98, 0x2B, 0x9E, 0xE8, 0x21 },
1280f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1281f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1282f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1283f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1284f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1285f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1286f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 288-bit keys */
1287f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1288f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   36,
1289f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1290f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1291f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xE8, 0xF4, 0xAF, 0x2B, 0x21, 0xA0, 0x87, 0x9B,
1292f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x41, 0x95, 0xB9, 0x71, 0x75, 0x79, 0x04, 0x7C },
1293f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1294f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1295f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1296f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1297f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00 }
1298f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1299f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   36,
1300f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1301f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1302f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xE6, 0xA6, 0xA5, 0xBC, 0x8B, 0x63, 0x6F, 0xE2,
1303f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xBD, 0xA7, 0xA7, 0x53, 0xAB, 0x40, 0x22, 0xE0 },
1304f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1305f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1306f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1307f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1308f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x01 }
1309f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1310f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1311f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 320-bit keys */
1312f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1313f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   40,
1314f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1315f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1316f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x17, 0x04, 0xD7, 0x2C, 0xC6, 0x85, 0x76, 0x02,
1317f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x4B, 0xCC, 0x39, 0x80, 0xD8, 0x22, 0xEA, 0xA4 },
1318f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1319f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1320f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1321f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1322f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1323f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1324f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   40,
1325f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1326f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1327f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x7A, 0x41, 0xE6, 0x7D, 0x4F, 0xD8, 0x64, 0xF0,
1328f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x44, 0xA8, 0x3C, 0x73, 0x81, 0x7E, 0x53, 0xD8 },
1329f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1330f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1331f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1332f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1333f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1334f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1335f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#else
1336f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /**** Tweaked ANUBIS ****/
1337f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 128 bit keys */
1338f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1339f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
1340f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1341f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1342f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xB8, 0x35, 0xBD, 0xC3, 0x34, 0x82, 0x9D, 0x83,
1343f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x71, 0xBF, 0xA3, 0x71, 0xE4, 0xB3, 0xC4, 0xFD },
1344f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1345f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1346f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1347f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   16,
1348f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1349f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1350f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xE6, 0x14, 0x1E, 0xAF, 0xEB, 0xE0, 0x59, 0x3C,
1351f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x48, 0xE1, 0xCD, 0xF2, 0x1B, 0xBA, 0xA1, 0x89 },
1352f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1353f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1354f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1355f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1356f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   /* 160-bit keys */
1357f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1358f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
1359f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1360f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1361f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x97, 0x59, 0x79, 0x4B, 0x5C, 0xA0, 0x70, 0x73,
1362f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x24, 0xEF, 0xB3, 0x58, 0x67, 0xCA, 0xD4, 0xB3 },
1363f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1364f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1365f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00 }
1366f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1367f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   20,
1368f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1369f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1370f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xB8, 0x0D, 0xFB, 0x9B, 0xE4, 0xA1, 0x58, 0x87,
1371f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xB3, 0x76, 0xD5, 0x02, 0x18, 0x95, 0xC1, 0x2E },
1372f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1373f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1374f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x01 }
1375f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1376f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1377f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 192-bit keys */
1378f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1379f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   24,
1380f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1381f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1382f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x7D, 0x62, 0x3B, 0x52, 0xC7, 0x4C, 0x64, 0xD8,
1383f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xEB, 0xC7, 0x2D, 0x57, 0x97, 0x85, 0x43, 0x8F },
1384f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1385f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1386f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1387f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1388f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   24,
1389f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1390f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1391f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xB1, 0x0A, 0x59, 0xDD, 0x5D, 0x5D, 0x8D, 0x67,
1392f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xEC, 0xEE, 0x4A, 0xC4, 0xBE, 0x4F, 0xA8, 0x4F },
1393f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1394f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1395f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1396f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1397f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1398f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 224-bit keys */
1399f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1400f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   28,
1401f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1402f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1403f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x68, 0x9E, 0x05, 0x94, 0x6A, 0x94, 0x43, 0x8F,
1404f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xE7, 0x8E, 0x37, 0x3D, 0x24, 0x97, 0x92, 0xF5 },
1405f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1406f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1407f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1408f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00 }
1409f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1410f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   28,
1411f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1412f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1413f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xDD, 0xB7, 0xB0, 0xB4, 0xE9, 0xB4, 0x9B, 0x9C,
1414f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x38, 0x20, 0x25, 0x0B, 0x47, 0xC2, 0x1F, 0x89 },
1415f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1416f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1417f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1418f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x01 }
1419f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1420f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1421f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 256-bit keys */
1422f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1423f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   32,
1424f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1425f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1426f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x96, 0x00, 0xF0, 0x76, 0x91, 0x69, 0x29, 0x87,
1427f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xF5, 0xE5, 0x97, 0xDB, 0xDB, 0xAF, 0x1B, 0x0A },
1428f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1429f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1430f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1431f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1432f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1433f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   32,
1434f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1435f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1436f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x69, 0x9C, 0xAF, 0xDD, 0x94, 0xC7, 0xBC, 0x60,
1437f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x44, 0xFE, 0x02, 0x05, 0x8A, 0x6E, 0xEF, 0xBD },
1438f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1439f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1440f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1441f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1442f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1443f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1444f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 288-bit keys */
1445f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1446f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   36,
1447f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1448f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1449f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x0F, 0xC7, 0xA2, 0xC0, 0x11, 0x17, 0xAC, 0x43,
1450f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x52, 0x5E, 0xDF, 0x6C, 0xF3, 0x96, 0x33, 0x6C },
1451f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1452f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1453f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1454f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1455f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00 }
1456f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1457f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   36,
1458f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1459f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1460f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xAD, 0x08, 0x4F, 0xED, 0x55, 0xA6, 0x94, 0x3E,
1461f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x7E, 0x5E, 0xED, 0x05, 0xA1, 0x9D, 0x41, 0xB4 },
1462f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1463f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1464f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1465f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1466f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x01 }
1467f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project},
1468f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1469f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  /* 320-bit keys */
1470f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1471f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   40,
1472f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1473f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1474f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0xFE, 0xE2, 0x0E, 0x2A, 0x9D, 0xC5, 0x83, 0xBA,
1475f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xA3, 0xA6, 0xD6, 0xA6, 0xF2, 0xE8, 0x06, 0xA5 },
1476f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1477f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1478f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1479f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1480f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }
1481f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}, {
1482f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   40,
1483f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1484f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
1485f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x86, 0x3D, 0xCC, 0x4A, 0x60, 0x34, 0x9C, 0x28,
1486f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0xA7, 0xDA, 0xA4, 0x3B, 0x0A, 0xD7, 0xFD, 0xC7 },
1487f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1488f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1489f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1490f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1491f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01 }
1492f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1493f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
1494f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project};
1495f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   int x, y;
1496f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   unsigned char buf[2][16];
1497f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   symmetric_key skey;
1498f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1499f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   for (x = 0; x < (int)(sizeof(tests)/sizeof(tests[0])); x++) {
1500f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       anubis_setup(tests[x].key, tests[x].keylen, 0, &skey);
1501f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       anubis_ecb_encrypt(tests[x].pt, buf[0], &skey);
1502f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       anubis_ecb_decrypt(buf[0], buf[1], &skey);
1503f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if (XMEMCMP(buf[0], tests[x].ct, 16) || XMEMCMP(buf[1], tests[x].pt, 16)) {
1504f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return CRYPT_FAIL_TESTVECTOR;
1505f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
1506f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1507f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       for (y = 0; y < 1000; y++) anubis_ecb_encrypt(buf[0], buf[0], &skey);
1508f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       for (y = 0; y < 1000; y++) anubis_ecb_decrypt(buf[0], buf[0], &skey);
1509f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       if (XMEMCMP(buf[0], tests[x].ct, 16)) {
1510f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project          return CRYPT_FAIL_TESTVECTOR;
1511f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project       }
1512f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1513f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
1514f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_OK;
1515f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
1516f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1517f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1518f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/** Terminate the context
1519f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   @param skey    The scheduled key
1520f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
1521f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectvoid anubis_done(symmetric_key *skey)
1522f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1523f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1524f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1525f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/**
1526f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  Gets suitable key size
1527f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @param keysize [in/out] The length of the recommended key (in bytes).  This function will store the suitable size back in this variable.
1528f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project  @return CRYPT_OK if the input key size is acceptable.
1529f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project*/
1530f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Projectint anubis_keysize(int *keysize)
1531f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project{
1532f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   LTC_ARGCHK(keysize != NULL);
1533f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   if (*keysize >= 40) {
1534f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 40;
1535f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else if (*keysize >= 36) {
1536f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 36;
1537f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else if (*keysize >= 32) {
1538f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 32;
1539f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else if (*keysize >= 28) {
1540f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 28;
1541f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else if (*keysize >= 24) {
1542f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 24;
1543f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else if (*keysize >= 20) {
1544f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 20;
1545f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else if (*keysize >= 16) {
1546f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      *keysize = 16;
1547f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   } else {
1548f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project      return CRYPT_INVALID_KEYSIZE;
1549f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   }
1550f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project   return CRYPT_OK;
1551f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project}
1552f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1553f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project#endif
1554f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1555f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project
1556f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Source: /cvs/libtom/libtomcrypt/src/ciphers/anubis.c,v $ */
1557f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Revision: 1.15 $ */
1558f7fc46c63fdc8f39234fea409b8dbe116d73ebf8The Android Open Source Project/* $Date: 2006/11/15 12:41:28 $ */
1559