ia64/linux-2.6.18-xen.hg
annotate crypto/anubis.c @ 854:950b9eb27661
usbback: fix urb interval value for interrupt urbs.
Signed-off-by: Noboru Iwamatsu <n_iwamatsu@jp.fujitsu.com>
Signed-off-by: Noboru Iwamatsu <n_iwamatsu@jp.fujitsu.com>
author | Keir Fraser <keir.fraser@citrix.com> |
---|---|
date | Mon Apr 06 13:51:20 2009 +0100 (2009-04-06) |
parents | 831230e53067 |
children |
rev | line source |
---|---|
ian@0 | 1 /* |
ian@0 | 2 * Cryptographic API. |
ian@0 | 3 * |
ian@0 | 4 * Anubis Algorithm |
ian@0 | 5 * |
ian@0 | 6 * The Anubis algorithm was developed by Paulo S. L. M. Barreto and |
ian@0 | 7 * Vincent Rijmen. |
ian@0 | 8 * |
ian@0 | 9 * See |
ian@0 | 10 * |
ian@0 | 11 * P.S.L.M. Barreto, V. Rijmen, |
ian@0 | 12 * ``The Anubis block cipher,'' |
ian@0 | 13 * NESSIE submission, 2000. |
ian@0 | 14 * |
ian@0 | 15 * This software implements the "tweaked" version of Anubis. |
ian@0 | 16 * Only the S-box and (consequently) the rounds constants have been |
ian@0 | 17 * changed. |
ian@0 | 18 * |
ian@0 | 19 * The original authors have disclaimed all copyright interest in this |
ian@0 | 20 * code and thus put it in the public domain. The subsequent authors |
ian@0 | 21 * have put this under the GNU General Public License. |
ian@0 | 22 * |
ian@0 | 23 * By Aaron Grothe ajgrothe@yahoo.com, October 28, 2004 |
ian@0 | 24 * |
ian@0 | 25 * This program is free software; you can redistribute it and/or modify |
ian@0 | 26 * it under the terms of the GNU General Public License as published by |
ian@0 | 27 * the Free Software Foundation; either version 2 of the License, or |
ian@0 | 28 * (at your option) any later version. |
ian@0 | 29 * |
ian@0 | 30 */ |
ian@0 | 31 |
ian@0 | 32 #include <linux/init.h> |
ian@0 | 33 #include <linux/module.h> |
ian@0 | 34 #include <linux/mm.h> |
ian@0 | 35 #include <asm/byteorder.h> |
ian@0 | 36 #include <asm/scatterlist.h> |
ian@0 | 37 #include <linux/crypto.h> |
ian@0 | 38 #include <linux/types.h> |
ian@0 | 39 |
ian@0 | 40 #define ANUBIS_MIN_KEY_SIZE 16 |
ian@0 | 41 #define ANUBIS_MAX_KEY_SIZE 40 |
ian@0 | 42 #define ANUBIS_BLOCK_SIZE 16 |
ian@0 | 43 #define ANUBIS_MAX_N 10 |
ian@0 | 44 #define ANUBIS_MAX_ROUNDS (8 + ANUBIS_MAX_N) |
ian@0 | 45 |
ian@0 | 46 struct anubis_ctx { |
ian@0 | 47 int key_len; // in bits |
ian@0 | 48 int R; |
ian@0 | 49 u32 E[ANUBIS_MAX_ROUNDS + 1][4]; |
ian@0 | 50 u32 D[ANUBIS_MAX_ROUNDS + 1][4]; |
ian@0 | 51 }; |
ian@0 | 52 |
ian@0 | 53 static const u32 T0[256] = { |
ian@0 | 54 0xba69d2bbU, 0x54a84de5U, 0x2f5ebce2U, 0x74e8cd25U, |
ian@0 | 55 0x53a651f7U, 0xd3bb6bd0U, 0xd2b96fd6U, 0x4d9a29b3U, |
ian@0 | 56 0x50a05dfdU, 0xac458acfU, 0x8d070e09U, 0xbf63c6a5U, |
ian@0 | 57 0x70e0dd3dU, 0x52a455f1U, 0x9a29527bU, 0x4c982db5U, |
ian@0 | 58 0xeac98f46U, 0xd5b773c4U, 0x97336655U, 0xd1bf63dcU, |
ian@0 | 59 0x3366ccaaU, 0x51a259fbU, 0x5bb671c7U, 0xa651a2f3U, |
ian@0 | 60 0xdea15ffeU, 0x48903dadU, 0xa84d9ad7U, 0x992f5e71U, |
ian@0 | 61 0xdbab4be0U, 0x3264c8acU, 0xb773e695U, 0xfce5d732U, |
ian@0 | 62 0xe3dbab70U, 0x9e214263U, 0x913f7e41U, 0x9b2b567dU, |
ian@0 | 63 0xe2d9af76U, 0xbb6bd6bdU, 0x4182199bU, 0x6edca579U, |
ian@0 | 64 0xa557aef9U, 0xcb8b0b80U, 0x6bd6b167U, 0x95376e59U, |
ian@0 | 65 0xa15fbee1U, 0xf3fbeb10U, 0xb17ffe81U, 0x0204080cU, |
ian@0 | 66 0xcc851792U, 0xc49537a2U, 0x1d3a744eU, 0x14285078U, |
ian@0 | 67 0xc39b2bb0U, 0x63c69157U, 0xdaa94fe6U, 0x5dba69d3U, |
ian@0 | 68 0x5fbe61dfU, 0xdca557f2U, 0x7dfae913U, 0xcd871394U, |
ian@0 | 69 0x7ffee11fU, 0x5ab475c1U, 0x6cd8ad75U, 0x5cb86dd5U, |
ian@0 | 70 0xf7f3fb08U, 0x264c98d4U, 0xffe3db38U, 0xedc79354U, |
ian@0 | 71 0xe8cd874aU, 0x9d274e69U, 0x6fdea17fU, 0x8e010203U, |
ian@0 | 72 0x19326456U, 0xa05dbae7U, 0xf0fde71aU, 0x890f1e11U, |
ian@0 | 73 0x0f1e3c22U, 0x070e1c12U, 0xaf4386c5U, 0xfbebcb20U, |
ian@0 | 74 0x08102030U, 0x152a547eU, 0x0d1a342eU, 0x04081018U, |
ian@0 | 75 0x01020406U, 0x64c88d45U, 0xdfa35bf8U, 0x76ecc529U, |
ian@0 | 76 0x79f2f90bU, 0xdda753f4U, 0x3d7af48eU, 0x162c5874U, |
ian@0 | 77 0x3f7efc82U, 0x376edcb2U, 0x6ddaa973U, 0x3870e090U, |
ian@0 | 78 0xb96fdeb1U, 0x73e6d137U, 0xe9cf834cU, 0x356ad4beU, |
ian@0 | 79 0x55aa49e3U, 0x71e2d93bU, 0x7bf6f107U, 0x8c050a0fU, |
ian@0 | 80 0x72e4d531U, 0x880d1a17U, 0xf6f1ff0eU, 0x2a54a8fcU, |
ian@0 | 81 0x3e7cf884U, 0x5ebc65d9U, 0x274e9cd2U, 0x468c0589U, |
ian@0 | 82 0x0c183028U, 0x65ca8943U, 0x68d0bd6dU, 0x61c2995bU, |
ian@0 | 83 0x03060c0aU, 0xc19f23bcU, 0x57ae41efU, 0xd6b17fceU, |
ian@0 | 84 0xd9af43ecU, 0x58b07dcdU, 0xd8ad47eaU, 0x66cc8549U, |
ian@0 | 85 0xd7b37bc8U, 0x3a74e89cU, 0xc88d078aU, 0x3c78f088U, |
ian@0 | 86 0xfae9cf26U, 0x96316253U, 0xa753a6f5U, 0x982d5a77U, |
ian@0 | 87 0xecc59752U, 0xb86ddab7U, 0xc7933ba8U, 0xae4182c3U, |
ian@0 | 88 0x69d2b96bU, 0x4b9631a7U, 0xab4b96ddU, 0xa94f9ed1U, |
ian@0 | 89 0x67ce814fU, 0x0a14283cU, 0x478e018fU, 0xf2f9ef16U, |
ian@0 | 90 0xb577ee99U, 0x224488ccU, 0xe5d7b364U, 0xeec19f5eU, |
ian@0 | 91 0xbe61c2a3U, 0x2b56acfaU, 0x811f3e21U, 0x1224486cU, |
ian@0 | 92 0x831b362dU, 0x1b366c5aU, 0x0e1c3824U, 0x23468ccaU, |
ian@0 | 93 0xf5f7f304U, 0x458a0983U, 0x214284c6U, 0xce811f9eU, |
ian@0 | 94 0x499239abU, 0x2c58b0e8U, 0xf9efc32cU, 0xe6d1bf6eU, |
ian@0 | 95 0xb671e293U, 0x2850a0f0U, 0x172e5c72U, 0x8219322bU, |
ian@0 | 96 0x1a34685cU, 0x8b0b161dU, 0xfee1df3eU, 0x8a09121bU, |
ian@0 | 97 0x09122436U, 0xc98f038cU, 0x87132635U, 0x4e9c25b9U, |
ian@0 | 98 0xe1dfa37cU, 0x2e5cb8e4U, 0xe4d5b762U, 0xe0dda77aU, |
ian@0 | 99 0xebcb8b40U, 0x903d7a47U, 0xa455aaffU, 0x1e3c7844U, |
ian@0 | 100 0x85172e39U, 0x60c09d5dU, 0x00000000U, 0x254a94deU, |
ian@0 | 101 0xf4f5f702U, 0xf1ffe31cU, 0x94356a5fU, 0x0b162c3aU, |
ian@0 | 102 0xe7d3bb68U, 0x75eac923U, 0xefc39b58U, 0x3468d0b8U, |
ian@0 | 103 0x3162c4a6U, 0xd4b577c2U, 0xd0bd67daU, 0x86112233U, |
ian@0 | 104 0x7efce519U, 0xad478ec9U, 0xfde7d334U, 0x2952a4f6U, |
ian@0 | 105 0x3060c0a0U, 0x3b76ec9aU, 0x9f234665U, 0xf8edc72aU, |
ian@0 | 106 0xc6913faeU, 0x13264c6aU, 0x060c1814U, 0x050a141eU, |
ian@0 | 107 0xc59733a4U, 0x11224466U, 0x77eec12fU, 0x7cf8ed15U, |
ian@0 | 108 0x7af4f501U, 0x78f0fd0dU, 0x366cd8b4U, 0x1c387048U, |
ian@0 | 109 0x3972e496U, 0x59b279cbU, 0x18306050U, 0x56ac45e9U, |
ian@0 | 110 0xb37bf68dU, 0xb07dfa87U, 0x244890d8U, 0x204080c0U, |
ian@0 | 111 0xb279f28bU, 0x9239724bU, 0xa35bb6edU, 0xc09d27baU, |
ian@0 | 112 0x44880d85U, 0x62c49551U, 0x10204060U, 0xb475ea9fU, |
ian@0 | 113 0x84152a3fU, 0x43861197U, 0x933b764dU, 0xc2992fb6U, |
ian@0 | 114 0x4a9435a1U, 0xbd67cea9U, 0x8f030605U, 0x2d5ab4eeU, |
ian@0 | 115 0xbc65caafU, 0x9c254a6fU, 0x6ad4b561U, 0x40801d9dU, |
ian@0 | 116 0xcf831b98U, 0xa259b2ebU, 0x801d3a27U, 0x4f9e21bfU, |
ian@0 | 117 0x1f3e7c42U, 0xca890f86U, 0xaa4992dbU, 0x42841591U, |
ian@0 | 118 }; |
ian@0 | 119 |
ian@0 | 120 static const u32 T1[256] = { |
ian@0 | 121 0x69babbd2U, 0xa854e54dU, 0x5e2fe2bcU, 0xe87425cdU, |
ian@0 | 122 0xa653f751U, 0xbbd3d06bU, 0xb9d2d66fU, 0x9a4db329U, |
ian@0 | 123 0xa050fd5dU, 0x45accf8aU, 0x078d090eU, 0x63bfa5c6U, |
ian@0 | 124 0xe0703dddU, 0xa452f155U, 0x299a7b52U, 0x984cb52dU, |
ian@0 | 125 0xc9ea468fU, 0xb7d5c473U, 0x33975566U, 0xbfd1dc63U, |
ian@0 | 126 0x6633aaccU, 0xa251fb59U, 0xb65bc771U, 0x51a6f3a2U, |
ian@0 | 127 0xa1defe5fU, 0x9048ad3dU, 0x4da8d79aU, 0x2f99715eU, |
ian@0 | 128 0xabdbe04bU, 0x6432acc8U, 0x73b795e6U, 0xe5fc32d7U, |
ian@0 | 129 0xdbe370abU, 0x219e6342U, 0x3f91417eU, 0x2b9b7d56U, |
ian@0 | 130 0xd9e276afU, 0x6bbbbdd6U, 0x82419b19U, 0xdc6e79a5U, |
ian@0 | 131 0x57a5f9aeU, 0x8bcb800bU, 0xd66b67b1U, 0x3795596eU, |
ian@0 | 132 0x5fa1e1beU, 0xfbf310ebU, 0x7fb181feU, 0x04020c08U, |
ian@0 | 133 0x85cc9217U, 0x95c4a237U, 0x3a1d4e74U, 0x28147850U, |
ian@0 | 134 0x9bc3b02bU, 0xc6635791U, 0xa9dae64fU, 0xba5dd369U, |
ian@0 | 135 0xbe5fdf61U, 0xa5dcf257U, 0xfa7d13e9U, 0x87cd9413U, |
ian@0 | 136 0xfe7f1fe1U, 0xb45ac175U, 0xd86c75adU, 0xb85cd56dU, |
ian@0 | 137 0xf3f708fbU, 0x4c26d498U, 0xe3ff38dbU, 0xc7ed5493U, |
ian@0 | 138 0xcde84a87U, 0x279d694eU, 0xde6f7fa1U, 0x018e0302U, |
ian@0 | 139 0x32195664U, 0x5da0e7baU, 0xfdf01ae7U, 0x0f89111eU, |
ian@0 | 140 0x1e0f223cU, 0x0e07121cU, 0x43afc586U, 0xebfb20cbU, |
ian@0 | 141 0x10083020U, 0x2a157e54U, 0x1a0d2e34U, 0x08041810U, |
ian@0 | 142 0x02010604U, 0xc864458dU, 0xa3dff85bU, 0xec7629c5U, |
ian@0 | 143 0xf2790bf9U, 0xa7ddf453U, 0x7a3d8ef4U, 0x2c167458U, |
ian@0 | 144 0x7e3f82fcU, 0x6e37b2dcU, 0xda6d73a9U, 0x703890e0U, |
ian@0 | 145 0x6fb9b1deU, 0xe67337d1U, 0xcfe94c83U, 0x6a35bed4U, |
ian@0 | 146 0xaa55e349U, 0xe2713bd9U, 0xf67b07f1U, 0x058c0f0aU, |
ian@0 | 147 0xe47231d5U, 0x0d88171aU, 0xf1f60effU, 0x542afca8U, |
ian@0 | 148 0x7c3e84f8U, 0xbc5ed965U, 0x4e27d29cU, 0x8c468905U, |
ian@0 | 149 0x180c2830U, 0xca654389U, 0xd0686dbdU, 0xc2615b99U, |
ian@0 | 150 0x06030a0cU, 0x9fc1bc23U, 0xae57ef41U, 0xb1d6ce7fU, |
ian@0 | 151 0xafd9ec43U, 0xb058cd7dU, 0xadd8ea47U, 0xcc664985U, |
ian@0 | 152 0xb3d7c87bU, 0x743a9ce8U, 0x8dc88a07U, 0x783c88f0U, |
ian@0 | 153 0xe9fa26cfU, 0x31965362U, 0x53a7f5a6U, 0x2d98775aU, |
ian@0 | 154 0xc5ec5297U, 0x6db8b7daU, 0x93c7a83bU, 0x41aec382U, |
ian@0 | 155 0xd2696bb9U, 0x964ba731U, 0x4babdd96U, 0x4fa9d19eU, |
ian@0 | 156 0xce674f81U, 0x140a3c28U, 0x8e478f01U, 0xf9f216efU, |
ian@0 | 157 0x77b599eeU, 0x4422cc88U, 0xd7e564b3U, 0xc1ee5e9fU, |
ian@0 | 158 0x61bea3c2U, 0x562bfaacU, 0x1f81213eU, 0x24126c48U, |
ian@0 | 159 0x1b832d36U, 0x361b5a6cU, 0x1c0e2438U, 0x4623ca8cU, |
ian@0 | 160 0xf7f504f3U, 0x8a458309U, 0x4221c684U, 0x81ce9e1fU, |
ian@0 | 161 0x9249ab39U, 0x582ce8b0U, 0xeff92cc3U, 0xd1e66ebfU, |
ian@0 | 162 0x71b693e2U, 0x5028f0a0U, 0x2e17725cU, 0x19822b32U, |
ian@0 | 163 0x341a5c68U, 0x0b8b1d16U, 0xe1fe3edfU, 0x098a1b12U, |
ian@0 | 164 0x12093624U, 0x8fc98c03U, 0x13873526U, 0x9c4eb925U, |
ian@0 | 165 0xdfe17ca3U, 0x5c2ee4b8U, 0xd5e462b7U, 0xdde07aa7U, |
ian@0 | 166 0xcbeb408bU, 0x3d90477aU, 0x55a4ffaaU, 0x3c1e4478U, |
ian@0 | 167 0x1785392eU, 0xc0605d9dU, 0x00000000U, 0x4a25de94U, |
ian@0 | 168 0xf5f402f7U, 0xfff11ce3U, 0x35945f6aU, 0x160b3a2cU, |
ian@0 | 169 0xd3e768bbU, 0xea7523c9U, 0xc3ef589bU, 0x6834b8d0U, |
ian@0 | 170 0x6231a6c4U, 0xb5d4c277U, 0xbdd0da67U, 0x11863322U, |
ian@0 | 171 0xfc7e19e5U, 0x47adc98eU, 0xe7fd34d3U, 0x5229f6a4U, |
ian@0 | 172 0x6030a0c0U, 0x763b9aecU, 0x239f6546U, 0xedf82ac7U, |
ian@0 | 173 0x91c6ae3fU, 0x26136a4cU, 0x0c061418U, 0x0a051e14U, |
ian@0 | 174 0x97c5a433U, 0x22116644U, 0xee772fc1U, 0xf87c15edU, |
ian@0 | 175 0xf47a01f5U, 0xf0780dfdU, 0x6c36b4d8U, 0x381c4870U, |
ian@0 | 176 0x723996e4U, 0xb259cb79U, 0x30185060U, 0xac56e945U, |
ian@0 | 177 0x7bb38df6U, 0x7db087faU, 0x4824d890U, 0x4020c080U, |
ian@0 | 178 0x79b28bf2U, 0x39924b72U, 0x5ba3edb6U, 0x9dc0ba27U, |
ian@0 | 179 0x8844850dU, 0xc4625195U, 0x20106040U, 0x75b49feaU, |
ian@0 | 180 0x15843f2aU, 0x86439711U, 0x3b934d76U, 0x99c2b62fU, |
ian@0 | 181 0x944aa135U, 0x67bda9ceU, 0x038f0506U, 0x5a2deeb4U, |
ian@0 | 182 0x65bcafcaU, 0x259c6f4aU, 0xd46a61b5U, 0x80409d1dU, |
ian@0 | 183 0x83cf981bU, 0x59a2ebb2U, 0x1d80273aU, 0x9e4fbf21U, |
ian@0 | 184 0x3e1f427cU, 0x89ca860fU, 0x49aadb92U, 0x84429115U, |
ian@0 | 185 }; |
ian@0 | 186 |
ian@0 | 187 static const u32 T2[256] = { |
ian@0 | 188 0xd2bbba69U, 0x4de554a8U, 0xbce22f5eU, 0xcd2574e8U, |
ian@0 | 189 0x51f753a6U, 0x6bd0d3bbU, 0x6fd6d2b9U, 0x29b34d9aU, |
ian@0 | 190 0x5dfd50a0U, 0x8acfac45U, 0x0e098d07U, 0xc6a5bf63U, |
ian@0 | 191 0xdd3d70e0U, 0x55f152a4U, 0x527b9a29U, 0x2db54c98U, |
ian@0 | 192 0x8f46eac9U, 0x73c4d5b7U, 0x66559733U, 0x63dcd1bfU, |
ian@0 | 193 0xccaa3366U, 0x59fb51a2U, 0x71c75bb6U, 0xa2f3a651U, |
ian@0 | 194 0x5ffedea1U, 0x3dad4890U, 0x9ad7a84dU, 0x5e71992fU, |
ian@0 | 195 0x4be0dbabU, 0xc8ac3264U, 0xe695b773U, 0xd732fce5U, |
ian@0 | 196 0xab70e3dbU, 0x42639e21U, 0x7e41913fU, 0x567d9b2bU, |
ian@0 | 197 0xaf76e2d9U, 0xd6bdbb6bU, 0x199b4182U, 0xa5796edcU, |
ian@0 | 198 0xaef9a557U, 0x0b80cb8bU, 0xb1676bd6U, 0x6e599537U, |
ian@0 | 199 0xbee1a15fU, 0xeb10f3fbU, 0xfe81b17fU, 0x080c0204U, |
ian@0 | 200 0x1792cc85U, 0x37a2c495U, 0x744e1d3aU, 0x50781428U, |
ian@0 | 201 0x2bb0c39bU, 0x915763c6U, 0x4fe6daa9U, 0x69d35dbaU, |
ian@0 | 202 0x61df5fbeU, 0x57f2dca5U, 0xe9137dfaU, 0x1394cd87U, |
ian@0 | 203 0xe11f7ffeU, 0x75c15ab4U, 0xad756cd8U, 0x6dd55cb8U, |
ian@0 | 204 0xfb08f7f3U, 0x98d4264cU, 0xdb38ffe3U, 0x9354edc7U, |
ian@0 | 205 0x874ae8cdU, 0x4e699d27U, 0xa17f6fdeU, 0x02038e01U, |
ian@0 | 206 0x64561932U, 0xbae7a05dU, 0xe71af0fdU, 0x1e11890fU, |
ian@0 | 207 0x3c220f1eU, 0x1c12070eU, 0x86c5af43U, 0xcb20fbebU, |
ian@0 | 208 0x20300810U, 0x547e152aU, 0x342e0d1aU, 0x10180408U, |
ian@0 | 209 0x04060102U, 0x8d4564c8U, 0x5bf8dfa3U, 0xc52976ecU, |
ian@0 | 210 0xf90b79f2U, 0x53f4dda7U, 0xf48e3d7aU, 0x5874162cU, |
ian@0 | 211 0xfc823f7eU, 0xdcb2376eU, 0xa9736ddaU, 0xe0903870U, |
ian@0 | 212 0xdeb1b96fU, 0xd13773e6U, 0x834ce9cfU, 0xd4be356aU, |
ian@0 | 213 0x49e355aaU, 0xd93b71e2U, 0xf1077bf6U, 0x0a0f8c05U, |
ian@0 | 214 0xd53172e4U, 0x1a17880dU, 0xff0ef6f1U, 0xa8fc2a54U, |
ian@0 | 215 0xf8843e7cU, 0x65d95ebcU, 0x9cd2274eU, 0x0589468cU, |
ian@0 | 216 0x30280c18U, 0x894365caU, 0xbd6d68d0U, 0x995b61c2U, |
ian@0 | 217 0x0c0a0306U, 0x23bcc19fU, 0x41ef57aeU, 0x7fced6b1U, |
ian@0 | 218 0x43ecd9afU, 0x7dcd58b0U, 0x47ead8adU, 0x854966ccU, |
ian@0 | 219 0x7bc8d7b3U, 0xe89c3a74U, 0x078ac88dU, 0xf0883c78U, |
ian@0 | 220 0xcf26fae9U, 0x62539631U, 0xa6f5a753U, 0x5a77982dU, |
ian@0 | 221 0x9752ecc5U, 0xdab7b86dU, 0x3ba8c793U, 0x82c3ae41U, |
ian@0 | 222 0xb96b69d2U, 0x31a74b96U, 0x96ddab4bU, 0x9ed1a94fU, |
ian@0 | 223 0x814f67ceU, 0x283c0a14U, 0x018f478eU, 0xef16f2f9U, |
ian@0 | 224 0xee99b577U, 0x88cc2244U, 0xb364e5d7U, 0x9f5eeec1U, |
ian@0 | 225 0xc2a3be61U, 0xacfa2b56U, 0x3e21811fU, 0x486c1224U, |
ian@0 | 226 0x362d831bU, 0x6c5a1b36U, 0x38240e1cU, 0x8cca2346U, |
ian@0 | 227 0xf304f5f7U, 0x0983458aU, 0x84c62142U, 0x1f9ece81U, |
ian@0 | 228 0x39ab4992U, 0xb0e82c58U, 0xc32cf9efU, 0xbf6ee6d1U, |
ian@0 | 229 0xe293b671U, 0xa0f02850U, 0x5c72172eU, 0x322b8219U, |
ian@0 | 230 0x685c1a34U, 0x161d8b0bU, 0xdf3efee1U, 0x121b8a09U, |
ian@0 | 231 0x24360912U, 0x038cc98fU, 0x26358713U, 0x25b94e9cU, |
ian@0 | 232 0xa37ce1dfU, 0xb8e42e5cU, 0xb762e4d5U, 0xa77ae0ddU, |
ian@0 | 233 0x8b40ebcbU, 0x7a47903dU, 0xaaffa455U, 0x78441e3cU, |
ian@0 | 234 0x2e398517U, 0x9d5d60c0U, 0x00000000U, 0x94de254aU, |
ian@0 | 235 0xf702f4f5U, 0xe31cf1ffU, 0x6a5f9435U, 0x2c3a0b16U, |
ian@0 | 236 0xbb68e7d3U, 0xc92375eaU, 0x9b58efc3U, 0xd0b83468U, |
ian@0 | 237 0xc4a63162U, 0x77c2d4b5U, 0x67dad0bdU, 0x22338611U, |
ian@0 | 238 0xe5197efcU, 0x8ec9ad47U, 0xd334fde7U, 0xa4f62952U, |
ian@0 | 239 0xc0a03060U, 0xec9a3b76U, 0x46659f23U, 0xc72af8edU, |
ian@0 | 240 0x3faec691U, 0x4c6a1326U, 0x1814060cU, 0x141e050aU, |
ian@0 | 241 0x33a4c597U, 0x44661122U, 0xc12f77eeU, 0xed157cf8U, |
ian@0 | 242 0xf5017af4U, 0xfd0d78f0U, 0xd8b4366cU, 0x70481c38U, |
ian@0 | 243 0xe4963972U, 0x79cb59b2U, 0x60501830U, 0x45e956acU, |
ian@0 | 244 0xf68db37bU, 0xfa87b07dU, 0x90d82448U, 0x80c02040U, |
ian@0 | 245 0xf28bb279U, 0x724b9239U, 0xb6eda35bU, 0x27bac09dU, |
ian@0 | 246 0x0d854488U, 0x955162c4U, 0x40601020U, 0xea9fb475U, |
ian@0 | 247 0x2a3f8415U, 0x11974386U, 0x764d933bU, 0x2fb6c299U, |
ian@0 | 248 0x35a14a94U, 0xcea9bd67U, 0x06058f03U, 0xb4ee2d5aU, |
ian@0 | 249 0xcaafbc65U, 0x4a6f9c25U, 0xb5616ad4U, 0x1d9d4080U, |
ian@0 | 250 0x1b98cf83U, 0xb2eba259U, 0x3a27801dU, 0x21bf4f9eU, |
ian@0 | 251 0x7c421f3eU, 0x0f86ca89U, 0x92dbaa49U, 0x15914284U, |
ian@0 | 252 }; |
ian@0 | 253 |
ian@0 | 254 static const u32 T3[256] = { |
ian@0 | 255 0xbbd269baU, 0xe54da854U, 0xe2bc5e2fU, 0x25cde874U, |
ian@0 | 256 0xf751a653U, 0xd06bbbd3U, 0xd66fb9d2U, 0xb3299a4dU, |
ian@0 | 257 0xfd5da050U, 0xcf8a45acU, 0x090e078dU, 0xa5c663bfU, |
ian@0 | 258 0x3ddde070U, 0xf155a452U, 0x7b52299aU, 0xb52d984cU, |
ian@0 | 259 0x468fc9eaU, 0xc473b7d5U, 0x55663397U, 0xdc63bfd1U, |
ian@0 | 260 0xaacc6633U, 0xfb59a251U, 0xc771b65bU, 0xf3a251a6U, |
ian@0 | 261 0xfe5fa1deU, 0xad3d9048U, 0xd79a4da8U, 0x715e2f99U, |
ian@0 | 262 0xe04babdbU, 0xacc86432U, 0x95e673b7U, 0x32d7e5fcU, |
ian@0 | 263 0x70abdbe3U, 0x6342219eU, 0x417e3f91U, 0x7d562b9bU, |
ian@0 | 264 0x76afd9e2U, 0xbdd66bbbU, 0x9b198241U, 0x79a5dc6eU, |
ian@0 | 265 0xf9ae57a5U, 0x800b8bcbU, 0x67b1d66bU, 0x596e3795U, |
ian@0 | 266 0xe1be5fa1U, 0x10ebfbf3U, 0x81fe7fb1U, 0x0c080402U, |
ian@0 | 267 0x921785ccU, 0xa23795c4U, 0x4e743a1dU, 0x78502814U, |
ian@0 | 268 0xb02b9bc3U, 0x5791c663U, 0xe64fa9daU, 0xd369ba5dU, |
ian@0 | 269 0xdf61be5fU, 0xf257a5dcU, 0x13e9fa7dU, 0x941387cdU, |
ian@0 | 270 0x1fe1fe7fU, 0xc175b45aU, 0x75add86cU, 0xd56db85cU, |
ian@0 | 271 0x08fbf3f7U, 0xd4984c26U, 0x38dbe3ffU, 0x5493c7edU, |
ian@0 | 272 0x4a87cde8U, 0x694e279dU, 0x7fa1de6fU, 0x0302018eU, |
ian@0 | 273 0x56643219U, 0xe7ba5da0U, 0x1ae7fdf0U, 0x111e0f89U, |
ian@0 | 274 0x223c1e0fU, 0x121c0e07U, 0xc58643afU, 0x20cbebfbU, |
ian@0 | 275 0x30201008U, 0x7e542a15U, 0x2e341a0dU, 0x18100804U, |
ian@0 | 276 0x06040201U, 0x458dc864U, 0xf85ba3dfU, 0x29c5ec76U, |
ian@0 | 277 0x0bf9f279U, 0xf453a7ddU, 0x8ef47a3dU, 0x74582c16U, |
ian@0 | 278 0x82fc7e3fU, 0xb2dc6e37U, 0x73a9da6dU, 0x90e07038U, |
ian@0 | 279 0xb1de6fb9U, 0x37d1e673U, 0x4c83cfe9U, 0xbed46a35U, |
ian@0 | 280 0xe349aa55U, 0x3bd9e271U, 0x07f1f67bU, 0x0f0a058cU, |
ian@0 | 281 0x31d5e472U, 0x171a0d88U, 0x0efff1f6U, 0xfca8542aU, |
ian@0 | 282 0x84f87c3eU, 0xd965bc5eU, 0xd29c4e27U, 0x89058c46U, |
ian@0 | 283 0x2830180cU, 0x4389ca65U, 0x6dbdd068U, 0x5b99c261U, |
ian@0 | 284 0x0a0c0603U, 0xbc239fc1U, 0xef41ae57U, 0xce7fb1d6U, |
ian@0 | 285 0xec43afd9U, 0xcd7db058U, 0xea47add8U, 0x4985cc66U, |
ian@0 | 286 0xc87bb3d7U, 0x9ce8743aU, 0x8a078dc8U, 0x88f0783cU, |
ian@0 | 287 0x26cfe9faU, 0x53623196U, 0xf5a653a7U, 0x775a2d98U, |
ian@0 | 288 0x5297c5ecU, 0xb7da6db8U, 0xa83b93c7U, 0xc38241aeU, |
ian@0 | 289 0x6bb9d269U, 0xa731964bU, 0xdd964babU, 0xd19e4fa9U, |
ian@0 | 290 0x4f81ce67U, 0x3c28140aU, 0x8f018e47U, 0x16eff9f2U, |
ian@0 | 291 0x99ee77b5U, 0xcc884422U, 0x64b3d7e5U, 0x5e9fc1eeU, |
ian@0 | 292 0xa3c261beU, 0xfaac562bU, 0x213e1f81U, 0x6c482412U, |
ian@0 | 293 0x2d361b83U, 0x5a6c361bU, 0x24381c0eU, 0xca8c4623U, |
ian@0 | 294 0x04f3f7f5U, 0x83098a45U, 0xc6844221U, 0x9e1f81ceU, |
ian@0 | 295 0xab399249U, 0xe8b0582cU, 0x2cc3eff9U, 0x6ebfd1e6U, |
ian@0 | 296 0x93e271b6U, 0xf0a05028U, 0x725c2e17U, 0x2b321982U, |
ian@0 | 297 0x5c68341aU, 0x1d160b8bU, 0x3edfe1feU, 0x1b12098aU, |
ian@0 | 298 0x36241209U, 0x8c038fc9U, 0x35261387U, 0xb9259c4eU, |
ian@0 | 299 0x7ca3dfe1U, 0xe4b85c2eU, 0x62b7d5e4U, 0x7aa7dde0U, |
ian@0 | 300 0x408bcbebU, 0x477a3d90U, 0xffaa55a4U, 0x44783c1eU, |
ian@0 | 301 0x392e1785U, 0x5d9dc060U, 0x00000000U, 0xde944a25U, |
ian@0 | 302 0x02f7f5f4U, 0x1ce3fff1U, 0x5f6a3594U, 0x3a2c160bU, |
ian@0 | 303 0x68bbd3e7U, 0x23c9ea75U, 0x589bc3efU, 0xb8d06834U, |
ian@0 | 304 0xa6c46231U, 0xc277b5d4U, 0xda67bdd0U, 0x33221186U, |
ian@0 | 305 0x19e5fc7eU, 0xc98e47adU, 0x34d3e7fdU, 0xf6a45229U, |
ian@0 | 306 0xa0c06030U, 0x9aec763bU, 0x6546239fU, 0x2ac7edf8U, |
ian@0 | 307 0xae3f91c6U, 0x6a4c2613U, 0x14180c06U, 0x1e140a05U, |
ian@0 | 308 0xa43397c5U, 0x66442211U, 0x2fc1ee77U, 0x15edf87cU, |
ian@0 | 309 0x01f5f47aU, 0x0dfdf078U, 0xb4d86c36U, 0x4870381cU, |
ian@0 | 310 0x96e47239U, 0xcb79b259U, 0x50603018U, 0xe945ac56U, |
ian@0 | 311 0x8df67bb3U, 0x87fa7db0U, 0xd8904824U, 0xc0804020U, |
ian@0 | 312 0x8bf279b2U, 0x4b723992U, 0xedb65ba3U, 0xba279dc0U, |
ian@0 | 313 0x850d8844U, 0x5195c462U, 0x60402010U, 0x9fea75b4U, |
ian@0 | 314 0x3f2a1584U, 0x97118643U, 0x4d763b93U, 0xb62f99c2U, |
ian@0 | 315 0xa135944aU, 0xa9ce67bdU, 0x0506038fU, 0xeeb45a2dU, |
ian@0 | 316 0xafca65bcU, 0x6f4a259cU, 0x61b5d46aU, 0x9d1d8040U, |
ian@0 | 317 0x981b83cfU, 0xebb259a2U, 0x273a1d80U, 0xbf219e4fU, |
ian@0 | 318 0x427c3e1fU, 0x860f89caU, 0xdb9249aaU, 0x91158442U, |
ian@0 | 319 }; |
ian@0 | 320 |
ian@0 | 321 static const u32 T4[256] = { |
ian@0 | 322 0xbabababaU, 0x54545454U, 0x2f2f2f2fU, 0x74747474U, |
ian@0 | 323 0x53535353U, 0xd3d3d3d3U, 0xd2d2d2d2U, 0x4d4d4d4dU, |
ian@0 | 324 0x50505050U, 0xacacacacU, 0x8d8d8d8dU, 0xbfbfbfbfU, |
ian@0 | 325 0x70707070U, 0x52525252U, 0x9a9a9a9aU, 0x4c4c4c4cU, |
ian@0 | 326 0xeaeaeaeaU, 0xd5d5d5d5U, 0x97979797U, 0xd1d1d1d1U, |
ian@0 | 327 0x33333333U, 0x51515151U, 0x5b5b5b5bU, 0xa6a6a6a6U, |
ian@0 | 328 0xdedededeU, 0x48484848U, 0xa8a8a8a8U, 0x99999999U, |
ian@0 | 329 0xdbdbdbdbU, 0x32323232U, 0xb7b7b7b7U, 0xfcfcfcfcU, |
ian@0 | 330 0xe3e3e3e3U, 0x9e9e9e9eU, 0x91919191U, 0x9b9b9b9bU, |
ian@0 | 331 0xe2e2e2e2U, 0xbbbbbbbbU, 0x41414141U, 0x6e6e6e6eU, |
ian@0 | 332 0xa5a5a5a5U, 0xcbcbcbcbU, 0x6b6b6b6bU, 0x95959595U, |
ian@0 | 333 0xa1a1a1a1U, 0xf3f3f3f3U, 0xb1b1b1b1U, 0x02020202U, |
ian@0 | 334 0xccccccccU, 0xc4c4c4c4U, 0x1d1d1d1dU, 0x14141414U, |
ian@0 | 335 0xc3c3c3c3U, 0x63636363U, 0xdadadadaU, 0x5d5d5d5dU, |
ian@0 | 336 0x5f5f5f5fU, 0xdcdcdcdcU, 0x7d7d7d7dU, 0xcdcdcdcdU, |
ian@0 | 337 0x7f7f7f7fU, 0x5a5a5a5aU, 0x6c6c6c6cU, 0x5c5c5c5cU, |
ian@0 | 338 0xf7f7f7f7U, 0x26262626U, 0xffffffffU, 0xededededU, |
ian@0 | 339 0xe8e8e8e8U, 0x9d9d9d9dU, 0x6f6f6f6fU, 0x8e8e8e8eU, |
ian@0 | 340 0x19191919U, 0xa0a0a0a0U, 0xf0f0f0f0U, 0x89898989U, |
ian@0 | 341 0x0f0f0f0fU, 0x07070707U, 0xafafafafU, 0xfbfbfbfbU, |
ian@0 | 342 0x08080808U, 0x15151515U, 0x0d0d0d0dU, 0x04040404U, |
ian@0 | 343 0x01010101U, 0x64646464U, 0xdfdfdfdfU, 0x76767676U, |
ian@0 | 344 0x79797979U, 0xddddddddU, 0x3d3d3d3dU, 0x16161616U, |
ian@0 | 345 0x3f3f3f3fU, 0x37373737U, 0x6d6d6d6dU, 0x38383838U, |
ian@0 | 346 0xb9b9b9b9U, 0x73737373U, 0xe9e9e9e9U, 0x35353535U, |
ian@0 | 347 0x55555555U, 0x71717171U, 0x7b7b7b7bU, 0x8c8c8c8cU, |
ian@0 | 348 0x72727272U, 0x88888888U, 0xf6f6f6f6U, 0x2a2a2a2aU, |
ian@0 | 349 0x3e3e3e3eU, 0x5e5e5e5eU, 0x27272727U, 0x46464646U, |
ian@0 | 350 0x0c0c0c0cU, 0x65656565U, 0x68686868U, 0x61616161U, |
ian@0 | 351 0x03030303U, 0xc1c1c1c1U, 0x57575757U, 0xd6d6d6d6U, |
ian@0 | 352 0xd9d9d9d9U, 0x58585858U, 0xd8d8d8d8U, 0x66666666U, |
ian@0 | 353 0xd7d7d7d7U, 0x3a3a3a3aU, 0xc8c8c8c8U, 0x3c3c3c3cU, |
ian@0 | 354 0xfafafafaU, 0x96969696U, 0xa7a7a7a7U, 0x98989898U, |
ian@0 | 355 0xececececU, 0xb8b8b8b8U, 0xc7c7c7c7U, 0xaeaeaeaeU, |
ian@0 | 356 0x69696969U, 0x4b4b4b4bU, 0xababababU, 0xa9a9a9a9U, |
ian@0 | 357 0x67676767U, 0x0a0a0a0aU, 0x47474747U, 0xf2f2f2f2U, |
ian@0 | 358 0xb5b5b5b5U, 0x22222222U, 0xe5e5e5e5U, 0xeeeeeeeeU, |
ian@0 | 359 0xbebebebeU, 0x2b2b2b2bU, 0x81818181U, 0x12121212U, |
ian@0 | 360 0x83838383U, 0x1b1b1b1bU, 0x0e0e0e0eU, 0x23232323U, |
ian@0 | 361 0xf5f5f5f5U, 0x45454545U, 0x21212121U, 0xcecececeU, |
ian@0 | 362 0x49494949U, 0x2c2c2c2cU, 0xf9f9f9f9U, 0xe6e6e6e6U, |
ian@0 | 363 0xb6b6b6b6U, 0x28282828U, 0x17171717U, 0x82828282U, |
ian@0 | 364 0x1a1a1a1aU, 0x8b8b8b8bU, 0xfefefefeU, 0x8a8a8a8aU, |
ian@0 | 365 0x09090909U, 0xc9c9c9c9U, 0x87878787U, 0x4e4e4e4eU, |
ian@0 | 366 0xe1e1e1e1U, 0x2e2e2e2eU, 0xe4e4e4e4U, 0xe0e0e0e0U, |
ian@0 | 367 0xebebebebU, 0x90909090U, 0xa4a4a4a4U, 0x1e1e1e1eU, |
ian@0 | 368 0x85858585U, 0x60606060U, 0x00000000U, 0x25252525U, |
ian@0 | 369 0xf4f4f4f4U, 0xf1f1f1f1U, 0x94949494U, 0x0b0b0b0bU, |
ian@0 | 370 0xe7e7e7e7U, 0x75757575U, 0xefefefefU, 0x34343434U, |
ian@0 | 371 0x31313131U, 0xd4d4d4d4U, 0xd0d0d0d0U, 0x86868686U, |
ian@0 | 372 0x7e7e7e7eU, 0xadadadadU, 0xfdfdfdfdU, 0x29292929U, |
ian@0 | 373 0x30303030U, 0x3b3b3b3bU, 0x9f9f9f9fU, 0xf8f8f8f8U, |
ian@0 | 374 0xc6c6c6c6U, 0x13131313U, 0x06060606U, 0x05050505U, |
ian@0 | 375 0xc5c5c5c5U, 0x11111111U, 0x77777777U, 0x7c7c7c7cU, |
ian@0 | 376 0x7a7a7a7aU, 0x78787878U, 0x36363636U, 0x1c1c1c1cU, |
ian@0 | 377 0x39393939U, 0x59595959U, 0x18181818U, 0x56565656U, |
ian@0 | 378 0xb3b3b3b3U, 0xb0b0b0b0U, 0x24242424U, 0x20202020U, |
ian@0 | 379 0xb2b2b2b2U, 0x92929292U, 0xa3a3a3a3U, 0xc0c0c0c0U, |
ian@0 | 380 0x44444444U, 0x62626262U, 0x10101010U, 0xb4b4b4b4U, |
ian@0 | 381 0x84848484U, 0x43434343U, 0x93939393U, 0xc2c2c2c2U, |
ian@0 | 382 0x4a4a4a4aU, 0xbdbdbdbdU, 0x8f8f8f8fU, 0x2d2d2d2dU, |
ian@0 | 383 0xbcbcbcbcU, 0x9c9c9c9cU, 0x6a6a6a6aU, 0x40404040U, |
ian@0 | 384 0xcfcfcfcfU, 0xa2a2a2a2U, 0x80808080U, 0x4f4f4f4fU, |
ian@0 | 385 0x1f1f1f1fU, 0xcacacacaU, 0xaaaaaaaaU, 0x42424242U, |
ian@0 | 386 }; |
ian@0 | 387 |
ian@0 | 388 static const u32 T5[256] = { |
ian@0 | 389 0x00000000U, 0x01020608U, 0x02040c10U, 0x03060a18U, |
ian@0 | 390 0x04081820U, 0x050a1e28U, 0x060c1430U, 0x070e1238U, |
ian@0 | 391 0x08103040U, 0x09123648U, 0x0a143c50U, 0x0b163a58U, |
ian@0 | 392 0x0c182860U, 0x0d1a2e68U, 0x0e1c2470U, 0x0f1e2278U, |
ian@0 | 393 0x10206080U, 0x11226688U, 0x12246c90U, 0x13266a98U, |
ian@0 | 394 0x142878a0U, 0x152a7ea8U, 0x162c74b0U, 0x172e72b8U, |
ian@0 | 395 0x183050c0U, 0x193256c8U, 0x1a345cd0U, 0x1b365ad8U, |
ian@0 | 396 0x1c3848e0U, 0x1d3a4ee8U, 0x1e3c44f0U, 0x1f3e42f8U, |
ian@0 | 397 0x2040c01dU, 0x2142c615U, 0x2244cc0dU, 0x2346ca05U, |
ian@0 | 398 0x2448d83dU, 0x254ade35U, 0x264cd42dU, 0x274ed225U, |
ian@0 | 399 0x2850f05dU, 0x2952f655U, 0x2a54fc4dU, 0x2b56fa45U, |
ian@0 | 400 0x2c58e87dU, 0x2d5aee75U, 0x2e5ce46dU, 0x2f5ee265U, |
ian@0 | 401 0x3060a09dU, 0x3162a695U, 0x3264ac8dU, 0x3366aa85U, |
ian@0 | 402 0x3468b8bdU, 0x356abeb5U, 0x366cb4adU, 0x376eb2a5U, |
ian@0 | 403 0x387090ddU, 0x397296d5U, 0x3a749ccdU, 0x3b769ac5U, |
ian@0 | 404 0x3c7888fdU, 0x3d7a8ef5U, 0x3e7c84edU, 0x3f7e82e5U, |
ian@0 | 405 0x40809d3aU, 0x41829b32U, 0x4284912aU, 0x43869722U, |
ian@0 | 406 0x4488851aU, 0x458a8312U, 0x468c890aU, 0x478e8f02U, |
ian@0 | 407 0x4890ad7aU, 0x4992ab72U, 0x4a94a16aU, 0x4b96a762U, |
ian@0 | 408 0x4c98b55aU, 0x4d9ab352U, 0x4e9cb94aU, 0x4f9ebf42U, |
ian@0 | 409 0x50a0fdbaU, 0x51a2fbb2U, 0x52a4f1aaU, 0x53a6f7a2U, |
ian@0 | 410 0x54a8e59aU, 0x55aae392U, 0x56ace98aU, 0x57aeef82U, |
ian@0 | 411 0x58b0cdfaU, 0x59b2cbf2U, 0x5ab4c1eaU, 0x5bb6c7e2U, |
ian@0 | 412 0x5cb8d5daU, 0x5dbad3d2U, 0x5ebcd9caU, 0x5fbedfc2U, |
ian@0 | 413 0x60c05d27U, 0x61c25b2fU, 0x62c45137U, 0x63c6573fU, |
ian@0 | 414 0x64c84507U, 0x65ca430fU, 0x66cc4917U, 0x67ce4f1fU, |
ian@0 | 415 0x68d06d67U, 0x69d26b6fU, 0x6ad46177U, 0x6bd6677fU, |
ian@0 | 416 0x6cd87547U, 0x6dda734fU, 0x6edc7957U, 0x6fde7f5fU, |
ian@0 | 417 0x70e03da7U, 0x71e23bafU, 0x72e431b7U, 0x73e637bfU, |
ian@0 | 418 0x74e82587U, 0x75ea238fU, 0x76ec2997U, 0x77ee2f9fU, |
ian@0 | 419 0x78f00de7U, 0x79f20befU, 0x7af401f7U, 0x7bf607ffU, |
ian@0 | 420 0x7cf815c7U, 0x7dfa13cfU, 0x7efc19d7U, 0x7ffe1fdfU, |
ian@0 | 421 0x801d2774U, 0x811f217cU, 0x82192b64U, 0x831b2d6cU, |
ian@0 | 422 0x84153f54U, 0x8517395cU, 0x86113344U, 0x8713354cU, |
ian@0 | 423 0x880d1734U, 0x890f113cU, 0x8a091b24U, 0x8b0b1d2cU, |
ian@0 | 424 0x8c050f14U, 0x8d07091cU, 0x8e010304U, 0x8f03050cU, |
ian@0 | 425 0x903d47f4U, 0x913f41fcU, 0x92394be4U, 0x933b4decU, |
ian@0 | 426 0x94355fd4U, 0x953759dcU, 0x963153c4U, 0x973355ccU, |
ian@0 | 427 0x982d77b4U, 0x992f71bcU, 0x9a297ba4U, 0x9b2b7dacU, |
ian@0 | 428 0x9c256f94U, 0x9d27699cU, 0x9e216384U, 0x9f23658cU, |
ian@0 | 429 0xa05de769U, 0xa15fe161U, 0xa259eb79U, 0xa35bed71U, |
ian@0 | 430 0xa455ff49U, 0xa557f941U, 0xa651f359U, 0xa753f551U, |
ian@0 | 431 0xa84dd729U, 0xa94fd121U, 0xaa49db39U, 0xab4bdd31U, |
ian@0 | 432 0xac45cf09U, 0xad47c901U, 0xae41c319U, 0xaf43c511U, |
ian@0 | 433 0xb07d87e9U, 0xb17f81e1U, 0xb2798bf9U, 0xb37b8df1U, |
ian@0 | 434 0xb4759fc9U, 0xb57799c1U, 0xb67193d9U, 0xb77395d1U, |
ian@0 | 435 0xb86db7a9U, 0xb96fb1a1U, 0xba69bbb9U, 0xbb6bbdb1U, |
ian@0 | 436 0xbc65af89U, 0xbd67a981U, 0xbe61a399U, 0xbf63a591U, |
ian@0 | 437 0xc09dba4eU, 0xc19fbc46U, 0xc299b65eU, 0xc39bb056U, |
ian@0 | 438 0xc495a26eU, 0xc597a466U, 0xc691ae7eU, 0xc793a876U, |
ian@0 | 439 0xc88d8a0eU, 0xc98f8c06U, 0xca89861eU, 0xcb8b8016U, |
ian@0 | 440 0xcc85922eU, 0xcd879426U, 0xce819e3eU, 0xcf839836U, |
ian@0 | 441 0xd0bddaceU, 0xd1bfdcc6U, 0xd2b9d6deU, 0xd3bbd0d6U, |
ian@0 | 442 0xd4b5c2eeU, 0xd5b7c4e6U, 0xd6b1cefeU, 0xd7b3c8f6U, |
ian@0 | 443 0xd8adea8eU, 0xd9afec86U, 0xdaa9e69eU, 0xdbabe096U, |
ian@0 | 444 0xdca5f2aeU, 0xdda7f4a6U, 0xdea1febeU, 0xdfa3f8b6U, |
ian@0 | 445 0xe0dd7a53U, 0xe1df7c5bU, 0xe2d97643U, 0xe3db704bU, |
ian@0 | 446 0xe4d56273U, 0xe5d7647bU, 0xe6d16e63U, 0xe7d3686bU, |
ian@0 | 447 0xe8cd4a13U, 0xe9cf4c1bU, 0xeac94603U, 0xebcb400bU, |
ian@0 | 448 0xecc55233U, 0xedc7543bU, 0xeec15e23U, 0xefc3582bU, |
ian@0 | 449 0xf0fd1ad3U, 0xf1ff1cdbU, 0xf2f916c3U, 0xf3fb10cbU, |
ian@0 | 450 0xf4f502f3U, 0xf5f704fbU, 0xf6f10ee3U, 0xf7f308ebU, |
ian@0 | 451 0xf8ed2a93U, 0xf9ef2c9bU, 0xfae92683U, 0xfbeb208bU, |
ian@0 | 452 0xfce532b3U, 0xfde734bbU, 0xfee13ea3U, 0xffe338abU, |
ian@0 | 453 }; |
ian@0 | 454 |
ian@0 | 455 static const u32 rc[] = { |
ian@0 | 456 0xba542f74U, 0x53d3d24dU, 0x50ac8dbfU, 0x70529a4cU, |
ian@0 | 457 0xead597d1U, 0x33515ba6U, 0xde48a899U, 0xdb32b7fcU, |
ian@0 | 458 0xe39e919bU, 0xe2bb416eU, 0xa5cb6b95U, 0xa1f3b102U, |
ian@0 | 459 0xccc41d14U, 0xc363da5dU, 0x5fdc7dcdU, 0x7f5a6c5cU, |
ian@0 | 460 0xf726ffedU, 0xe89d6f8eU, 0x19a0f089U, |
ian@0 | 461 }; |
ian@0 | 462 |
ian@0 | 463 static int anubis_setkey(struct crypto_tfm *tfm, const u8 *in_key, |
ian@0 | 464 unsigned int key_len, u32 *flags) |
ian@0 | 465 { |
ian@0 | 466 struct anubis_ctx *ctx = crypto_tfm_ctx(tfm); |
ian@0 | 467 const __be32 *key = (const __be32 *)in_key; |
ian@0 | 468 int N, R, i, r; |
ian@0 | 469 u32 kappa[ANUBIS_MAX_N]; |
ian@0 | 470 u32 inter[ANUBIS_MAX_N]; |
ian@0 | 471 |
ian@0 | 472 switch (key_len) |
ian@0 | 473 { |
ian@0 | 474 case 16: case 20: case 24: case 28: |
ian@0 | 475 case 32: case 36: case 40: |
ian@0 | 476 break; |
ian@0 | 477 default: |
ian@0 | 478 *flags |= CRYPTO_TFM_RES_BAD_KEY_LEN; |
ian@0 | 479 return - EINVAL; |
ian@0 | 480 } |
ian@0 | 481 |
ian@0 | 482 ctx->key_len = key_len * 8; |
ian@0 | 483 N = ctx->key_len >> 5; |
ian@0 | 484 ctx->R = R = 8 + N; |
ian@0 | 485 |
ian@0 | 486 /* * map cipher key to initial key state (mu): */ |
ian@0 | 487 for (i = 0; i < N; i++) |
ian@0 | 488 kappa[i] = be32_to_cpu(key[i]); |
ian@0 | 489 |
ian@0 | 490 /* |
ian@0 | 491 * generate R + 1 round keys: |
ian@0 | 492 */ |
ian@0 | 493 for (r = 0; r <= R; r++) { |
ian@0 | 494 u32 K0, K1, K2, K3; |
ian@0 | 495 /* |
ian@0 | 496 * generate r-th round key K^r: |
ian@0 | 497 */ |
ian@0 | 498 K0 = T4[(kappa[N - 1] >> 24) ]; |
ian@0 | 499 K1 = T4[(kappa[N - 1] >> 16) & 0xff]; |
ian@0 | 500 K2 = T4[(kappa[N - 1] >> 8) & 0xff]; |
ian@0 | 501 K3 = T4[(kappa[N - 1] ) & 0xff]; |
ian@0 | 502 for (i = N - 2; i >= 0; i--) { |
ian@0 | 503 K0 = T4[(kappa[i] >> 24) ] ^ |
ian@0 | 504 (T5[(K0 >> 24) ] & 0xff000000U) ^ |
ian@0 | 505 (T5[(K0 >> 16) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 506 (T5[(K0 >> 8) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 507 (T5[(K0 ) & 0xff] & 0x000000ffU); |
ian@0 | 508 K1 = T4[(kappa[i] >> 16) & 0xff] ^ |
ian@0 | 509 (T5[(K1 >> 24) ] & 0xff000000U) ^ |
ian@0 | 510 (T5[(K1 >> 16) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 511 (T5[(K1 >> 8) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 512 (T5[(K1 ) & 0xff] & 0x000000ffU); |
ian@0 | 513 K2 = T4[(kappa[i] >> 8) & 0xff] ^ |
ian@0 | 514 (T5[(K2 >> 24) ] & 0xff000000U) ^ |
ian@0 | 515 (T5[(K2 >> 16) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 516 (T5[(K2 >> 8) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 517 (T5[(K2 ) & 0xff] & 0x000000ffU); |
ian@0 | 518 K3 = T4[(kappa[i] ) & 0xff] ^ |
ian@0 | 519 (T5[(K3 >> 24) ] & 0xff000000U) ^ |
ian@0 | 520 (T5[(K3 >> 16) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 521 (T5[(K3 >> 8) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 522 (T5[(K3 ) & 0xff] & 0x000000ffU); |
ian@0 | 523 } |
ian@0 | 524 |
ian@0 | 525 ctx->E[r][0] = K0; |
ian@0 | 526 ctx->E[r][1] = K1; |
ian@0 | 527 ctx->E[r][2] = K2; |
ian@0 | 528 ctx->E[r][3] = K3; |
ian@0 | 529 |
ian@0 | 530 /* |
ian@0 | 531 * compute kappa^{r+1} from kappa^r: |
ian@0 | 532 */ |
ian@0 | 533 if (r == R) { |
ian@0 | 534 break; |
ian@0 | 535 } |
ian@0 | 536 for (i = 0; i < N; i++) { |
ian@0 | 537 int j = i; |
ian@0 | 538 inter[i] = T0[(kappa[j--] >> 24) ]; |
ian@0 | 539 if (j < 0) j = N - 1; |
ian@0 | 540 inter[i] ^= T1[(kappa[j--] >> 16) & 0xff]; |
ian@0 | 541 if (j < 0) j = N - 1; |
ian@0 | 542 inter[i] ^= T2[(kappa[j--] >> 8) & 0xff]; |
ian@0 | 543 if (j < 0) j = N - 1; |
ian@0 | 544 inter[i] ^= T3[(kappa[j ] ) & 0xff]; |
ian@0 | 545 } |
ian@0 | 546 kappa[0] = inter[0] ^ rc[r]; |
ian@0 | 547 for (i = 1; i < N; i++) { |
ian@0 | 548 kappa[i] = inter[i]; |
ian@0 | 549 } |
ian@0 | 550 } |
ian@0 | 551 |
ian@0 | 552 /* |
ian@0 | 553 * generate inverse key schedule: K'^0 = K^R, K'^R = |
ian@0 | 554 * K^0, K'^r = theta(K^{R-r}): |
ian@0 | 555 */ |
ian@0 | 556 for (i = 0; i < 4; i++) { |
ian@0 | 557 ctx->D[0][i] = ctx->E[R][i]; |
ian@0 | 558 ctx->D[R][i] = ctx->E[0][i]; |
ian@0 | 559 } |
ian@0 | 560 for (r = 1; r < R; r++) { |
ian@0 | 561 for (i = 0; i < 4; i++) { |
ian@0 | 562 u32 v = ctx->E[R - r][i]; |
ian@0 | 563 ctx->D[r][i] = |
ian@0 | 564 T0[T4[(v >> 24) ] & 0xff] ^ |
ian@0 | 565 T1[T4[(v >> 16) & 0xff] & 0xff] ^ |
ian@0 | 566 T2[T4[(v >> 8) & 0xff] & 0xff] ^ |
ian@0 | 567 T3[T4[(v ) & 0xff] & 0xff]; |
ian@0 | 568 } |
ian@0 | 569 } |
ian@0 | 570 |
ian@0 | 571 return 0; |
ian@0 | 572 } |
ian@0 | 573 |
ian@0 | 574 static void anubis_crypt(u32 roundKey[ANUBIS_MAX_ROUNDS + 1][4], |
ian@0 | 575 u8 *ciphertext, const u8 *plaintext, const int R) |
ian@0 | 576 { |
ian@0 | 577 const __be32 *src = (const __be32 *)plaintext; |
ian@0 | 578 __be32 *dst = (__be32 *)ciphertext; |
ian@0 | 579 int i, r; |
ian@0 | 580 u32 state[4]; |
ian@0 | 581 u32 inter[4]; |
ian@0 | 582 |
ian@0 | 583 /* |
ian@0 | 584 * map plaintext block to cipher state (mu) |
ian@0 | 585 * and add initial round key (sigma[K^0]): |
ian@0 | 586 */ |
ian@0 | 587 for (i = 0; i < 4; i++) |
ian@0 | 588 state[i] = be32_to_cpu(src[i]) ^ roundKey[0][i]; |
ian@0 | 589 |
ian@0 | 590 /* |
ian@0 | 591 * R - 1 full rounds: |
ian@0 | 592 */ |
ian@0 | 593 |
ian@0 | 594 for (r = 1; r < R; r++) { |
ian@0 | 595 inter[0] = |
ian@0 | 596 T0[(state[0] >> 24) ] ^ |
ian@0 | 597 T1[(state[1] >> 24) ] ^ |
ian@0 | 598 T2[(state[2] >> 24) ] ^ |
ian@0 | 599 T3[(state[3] >> 24) ] ^ |
ian@0 | 600 roundKey[r][0]; |
ian@0 | 601 inter[1] = |
ian@0 | 602 T0[(state[0] >> 16) & 0xff] ^ |
ian@0 | 603 T1[(state[1] >> 16) & 0xff] ^ |
ian@0 | 604 T2[(state[2] >> 16) & 0xff] ^ |
ian@0 | 605 T3[(state[3] >> 16) & 0xff] ^ |
ian@0 | 606 roundKey[r][1]; |
ian@0 | 607 inter[2] = |
ian@0 | 608 T0[(state[0] >> 8) & 0xff] ^ |
ian@0 | 609 T1[(state[1] >> 8) & 0xff] ^ |
ian@0 | 610 T2[(state[2] >> 8) & 0xff] ^ |
ian@0 | 611 T3[(state[3] >> 8) & 0xff] ^ |
ian@0 | 612 roundKey[r][2]; |
ian@0 | 613 inter[3] = |
ian@0 | 614 T0[(state[0] ) & 0xff] ^ |
ian@0 | 615 T1[(state[1] ) & 0xff] ^ |
ian@0 | 616 T2[(state[2] ) & 0xff] ^ |
ian@0 | 617 T3[(state[3] ) & 0xff] ^ |
ian@0 | 618 roundKey[r][3]; |
ian@0 | 619 state[0] = inter[0]; |
ian@0 | 620 state[1] = inter[1]; |
ian@0 | 621 state[2] = inter[2]; |
ian@0 | 622 state[3] = inter[3]; |
ian@0 | 623 } |
ian@0 | 624 |
ian@0 | 625 /* |
ian@0 | 626 * last round: |
ian@0 | 627 */ |
ian@0 | 628 |
ian@0 | 629 inter[0] = |
ian@0 | 630 (T0[(state[0] >> 24) ] & 0xff000000U) ^ |
ian@0 | 631 (T1[(state[1] >> 24) ] & 0x00ff0000U) ^ |
ian@0 | 632 (T2[(state[2] >> 24) ] & 0x0000ff00U) ^ |
ian@0 | 633 (T3[(state[3] >> 24) ] & 0x000000ffU) ^ |
ian@0 | 634 roundKey[R][0]; |
ian@0 | 635 inter[1] = |
ian@0 | 636 (T0[(state[0] >> 16) & 0xff] & 0xff000000U) ^ |
ian@0 | 637 (T1[(state[1] >> 16) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 638 (T2[(state[2] >> 16) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 639 (T3[(state[3] >> 16) & 0xff] & 0x000000ffU) ^ |
ian@0 | 640 roundKey[R][1]; |
ian@0 | 641 inter[2] = |
ian@0 | 642 (T0[(state[0] >> 8) & 0xff] & 0xff000000U) ^ |
ian@0 | 643 (T1[(state[1] >> 8) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 644 (T2[(state[2] >> 8) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 645 (T3[(state[3] >> 8) & 0xff] & 0x000000ffU) ^ |
ian@0 | 646 roundKey[R][2]; |
ian@0 | 647 inter[3] = |
ian@0 | 648 (T0[(state[0] ) & 0xff] & 0xff000000U) ^ |
ian@0 | 649 (T1[(state[1] ) & 0xff] & 0x00ff0000U) ^ |
ian@0 | 650 (T2[(state[2] ) & 0xff] & 0x0000ff00U) ^ |
ian@0 | 651 (T3[(state[3] ) & 0xff] & 0x000000ffU) ^ |
ian@0 | 652 roundKey[R][3]; |
ian@0 | 653 |
ian@0 | 654 /* |
ian@0 | 655 * map cipher state to ciphertext block (mu^{-1}): |
ian@0 | 656 */ |
ian@0 | 657 |
ian@0 | 658 for (i = 0; i < 4; i++) |
ian@0 | 659 dst[i] = cpu_to_be32(inter[i]); |
ian@0 | 660 } |
ian@0 | 661 |
ian@0 | 662 static void anubis_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) |
ian@0 | 663 { |
ian@0 | 664 struct anubis_ctx *ctx = crypto_tfm_ctx(tfm); |
ian@0 | 665 anubis_crypt(ctx->E, dst, src, ctx->R); |
ian@0 | 666 } |
ian@0 | 667 |
ian@0 | 668 static void anubis_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) |
ian@0 | 669 { |
ian@0 | 670 struct anubis_ctx *ctx = crypto_tfm_ctx(tfm); |
ian@0 | 671 anubis_crypt(ctx->D, dst, src, ctx->R); |
ian@0 | 672 } |
ian@0 | 673 |
ian@0 | 674 static struct crypto_alg anubis_alg = { |
ian@0 | 675 .cra_name = "anubis", |
ian@0 | 676 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, |
ian@0 | 677 .cra_blocksize = ANUBIS_BLOCK_SIZE, |
ian@0 | 678 .cra_ctxsize = sizeof (struct anubis_ctx), |
ian@0 | 679 .cra_alignmask = 3, |
ian@0 | 680 .cra_module = THIS_MODULE, |
ian@0 | 681 .cra_list = LIST_HEAD_INIT(anubis_alg.cra_list), |
ian@0 | 682 .cra_u = { .cipher = { |
ian@0 | 683 .cia_min_keysize = ANUBIS_MIN_KEY_SIZE, |
ian@0 | 684 .cia_max_keysize = ANUBIS_MAX_KEY_SIZE, |
ian@0 | 685 .cia_setkey = anubis_setkey, |
ian@0 | 686 .cia_encrypt = anubis_encrypt, |
ian@0 | 687 .cia_decrypt = anubis_decrypt } } |
ian@0 | 688 }; |
ian@0 | 689 |
ian@0 | 690 static int __init init(void) |
ian@0 | 691 { |
ian@0 | 692 int ret = 0; |
ian@0 | 693 |
ian@0 | 694 ret = crypto_register_alg(&anubis_alg); |
ian@0 | 695 return ret; |
ian@0 | 696 } |
ian@0 | 697 |
ian@0 | 698 static void __exit fini(void) |
ian@0 | 699 { |
ian@0 | 700 crypto_unregister_alg(&anubis_alg); |
ian@0 | 701 } |
ian@0 | 702 |
ian@0 | 703 module_init(init); |
ian@0 | 704 module_exit(fini); |
ian@0 | 705 |
ian@0 | 706 MODULE_LICENSE("GPL"); |
ian@0 | 707 MODULE_DESCRIPTION("Anubis Cryptographic Algorithm"); |