CyaSSL changed for NucleoF401RE board: implemented random and time functions for build. (Has trouble with wildcard domains like *.google.com, *.yahoo.com)

Fork of CyaSSL by wolf SSL

Committer:
Vanger
Date:
Wed Jan 14 22:07:14 2015 +0000
Revision:
4:e505054279ed
Parent:
0:1239e9b70ca2
Implemented some platform specific functions in the Cyassl library code: time functions, seed random functions, and also changed the settings.h file to define settings specific to the platform being used

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wolfSSL 0:1239e9b70ca2 1 /* camellia.c ver 1.2.0
wolfSSL 0:1239e9b70ca2 2 *
wolfSSL 0:1239e9b70ca2 3 * Copyright (c) 2006,2007
wolfSSL 0:1239e9b70ca2 4 * NTT (Nippon Telegraph and Telephone Corporation) . All rights reserved.
wolfSSL 0:1239e9b70ca2 5 *
wolfSSL 0:1239e9b70ca2 6 * Redistribution and use in source and binary forms, with or without
wolfSSL 0:1239e9b70ca2 7 * modification, are permitted provided that the following conditions
wolfSSL 0:1239e9b70ca2 8 * are met:
wolfSSL 0:1239e9b70ca2 9 * 1. Redistributions of source code must retain the above copyright
wolfSSL 0:1239e9b70ca2 10 * notice, this list of conditions and the following disclaimer as
wolfSSL 0:1239e9b70ca2 11 * the first lines of this file unmodified.
wolfSSL 0:1239e9b70ca2 12 * 2. Redistributions in binary form must reproduce the above copyright
wolfSSL 0:1239e9b70ca2 13 * notice, this list of conditions and the following disclaimer in the
wolfSSL 0:1239e9b70ca2 14 * documentation and/or other materials provided with the distribution.
wolfSSL 0:1239e9b70ca2 15 *
wolfSSL 0:1239e9b70ca2 16 * THIS SOFTWARE IS PROVIDED BY NTT ``AS IS'' AND ANY EXPRESS OR
wolfSSL 0:1239e9b70ca2 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
wolfSSL 0:1239e9b70ca2 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
wolfSSL 0:1239e9b70ca2 19 * IN NO EVENT SHALL NTT BE LIABLE FOR ANY DIRECT, INDIRECT,
wolfSSL 0:1239e9b70ca2 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
wolfSSL 0:1239e9b70ca2 21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
wolfSSL 0:1239e9b70ca2 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
wolfSSL 0:1239e9b70ca2 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
wolfSSL 0:1239e9b70ca2 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
wolfSSL 0:1239e9b70ca2 25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
wolfSSL 0:1239e9b70ca2 26 */
wolfSSL 0:1239e9b70ca2 27
wolfSSL 0:1239e9b70ca2 28 /* camellia.c
wolfSSL 0:1239e9b70ca2 29 *
wolfSSL 0:1239e9b70ca2 30 * Copyright (C) 2006-2014 wolfSSL Inc.
wolfSSL 0:1239e9b70ca2 31 *
wolfSSL 0:1239e9b70ca2 32 * This file is part of CyaSSL.
wolfSSL 0:1239e9b70ca2 33 *
wolfSSL 0:1239e9b70ca2 34 * CyaSSL is free software; you can redistribute it and/or modify
wolfSSL 0:1239e9b70ca2 35 * it under the terms of the GNU General Public License as published by
wolfSSL 0:1239e9b70ca2 36 * the Free Software Foundation; either version 2 of the License, or
wolfSSL 0:1239e9b70ca2 37 * (at your option) any later version.
wolfSSL 0:1239e9b70ca2 38 *
wolfSSL 0:1239e9b70ca2 39 * CyaSSL is distributed in the hope that it will be useful,
wolfSSL 0:1239e9b70ca2 40 * but WITHOUT ANY WARRANTY; without even the implied warranty of
wolfSSL 0:1239e9b70ca2 41 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
wolfSSL 0:1239e9b70ca2 42 * GNU General Public License for more details.
wolfSSL 0:1239e9b70ca2 43 *
wolfSSL 0:1239e9b70ca2 44 * You should have received a copy of the GNU General Public License
wolfSSL 0:1239e9b70ca2 45 * along with this program; if not, write to the Free Software
wolfSSL 0:1239e9b70ca2 46 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
wolfSSL 0:1239e9b70ca2 47 */
wolfSSL 0:1239e9b70ca2 48
wolfSSL 0:1239e9b70ca2 49 /*
wolfSSL 0:1239e9b70ca2 50 * Algorithm Specification
wolfSSL 0:1239e9b70ca2 51 * http://info.isl.ntt.co.jp/crypt/eng/camellia/specifications.html
wolfSSL 0:1239e9b70ca2 52 */
wolfSSL 0:1239e9b70ca2 53
wolfSSL 0:1239e9b70ca2 54
wolfSSL 0:1239e9b70ca2 55 #ifdef HAVE_CONFIG_H
wolfSSL 0:1239e9b70ca2 56 #include <config.h>
wolfSSL 0:1239e9b70ca2 57 #endif
wolfSSL 0:1239e9b70ca2 58
wolfSSL 0:1239e9b70ca2 59 #include <cyassl/ctaocrypt/settings.h>
wolfSSL 0:1239e9b70ca2 60
wolfSSL 0:1239e9b70ca2 61 #ifdef HAVE_CAMELLIA
wolfSSL 0:1239e9b70ca2 62
wolfSSL 0:1239e9b70ca2 63 #include <cyassl/ctaocrypt/camellia.h>
wolfSSL 0:1239e9b70ca2 64 #include <cyassl/ctaocrypt/error-crypt.h>
wolfSSL 0:1239e9b70ca2 65 #include <cyassl/ctaocrypt/logging.h>
wolfSSL 0:1239e9b70ca2 66 #ifdef NO_INLINE
wolfSSL 0:1239e9b70ca2 67 #include <cyassl/ctaocrypt/misc.h>
wolfSSL 0:1239e9b70ca2 68 #else
wolfSSL 0:1239e9b70ca2 69 #include <ctaocrypt/src/misc.c>
wolfSSL 0:1239e9b70ca2 70 #endif
wolfSSL 0:1239e9b70ca2 71
wolfSSL 0:1239e9b70ca2 72
wolfSSL 0:1239e9b70ca2 73 /* u32 must be 32bit word */
wolfSSL 0:1239e9b70ca2 74 typedef unsigned int u32;
wolfSSL 0:1239e9b70ca2 75 typedef unsigned char u8;
wolfSSL 0:1239e9b70ca2 76
wolfSSL 0:1239e9b70ca2 77 /* key constants */
wolfSSL 0:1239e9b70ca2 78
wolfSSL 0:1239e9b70ca2 79 #define CAMELLIA_SIGMA1L ((u32)0xA09E667FL)
wolfSSL 0:1239e9b70ca2 80 #define CAMELLIA_SIGMA1R ((u32)0x3BCC908BL)
wolfSSL 0:1239e9b70ca2 81 #define CAMELLIA_SIGMA2L ((u32)0xB67AE858L)
wolfSSL 0:1239e9b70ca2 82 #define CAMELLIA_SIGMA2R ((u32)0x4CAA73B2L)
wolfSSL 0:1239e9b70ca2 83 #define CAMELLIA_SIGMA3L ((u32)0xC6EF372FL)
wolfSSL 0:1239e9b70ca2 84 #define CAMELLIA_SIGMA3R ((u32)0xE94F82BEL)
wolfSSL 0:1239e9b70ca2 85 #define CAMELLIA_SIGMA4L ((u32)0x54FF53A5L)
wolfSSL 0:1239e9b70ca2 86 #define CAMELLIA_SIGMA4R ((u32)0xF1D36F1CL)
wolfSSL 0:1239e9b70ca2 87 #define CAMELLIA_SIGMA5L ((u32)0x10E527FAL)
wolfSSL 0:1239e9b70ca2 88 #define CAMELLIA_SIGMA5R ((u32)0xDE682D1DL)
wolfSSL 0:1239e9b70ca2 89 #define CAMELLIA_SIGMA6L ((u32)0xB05688C2L)
wolfSSL 0:1239e9b70ca2 90 #define CAMELLIA_SIGMA6R ((u32)0xB3E6C1FDL)
wolfSSL 0:1239e9b70ca2 91
wolfSSL 0:1239e9b70ca2 92 /*
wolfSSL 0:1239e9b70ca2 93 * macros
wolfSSL 0:1239e9b70ca2 94 */
wolfSSL 0:1239e9b70ca2 95
wolfSSL 0:1239e9b70ca2 96
wolfSSL 0:1239e9b70ca2 97 #if defined(_MSC_VER)
wolfSSL 0:1239e9b70ca2 98
wolfSSL 0:1239e9b70ca2 99 # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00)
wolfSSL 0:1239e9b70ca2 100 # define GETU32(p) SWAP(*((u32 *)(p)))
wolfSSL 0:1239e9b70ca2 101 # define PUTU32(ct, st) {*((u32 *)(ct)) = SWAP((st));}
wolfSSL 0:1239e9b70ca2 102
wolfSSL 0:1239e9b70ca2 103 #else /* not MS-VC */
wolfSSL 0:1239e9b70ca2 104
wolfSSL 0:1239e9b70ca2 105 # define GETU32(pt) \
wolfSSL 0:1239e9b70ca2 106 (((u32)(pt)[0] << 24) \
wolfSSL 0:1239e9b70ca2 107 ^ ((u32)(pt)[1] << 16) \
wolfSSL 0:1239e9b70ca2 108 ^ ((u32)(pt)[2] << 8) \
wolfSSL 0:1239e9b70ca2 109 ^ ((u32)(pt)[3]))
wolfSSL 0:1239e9b70ca2 110
wolfSSL 0:1239e9b70ca2 111 # define PUTU32(ct, st) { \
wolfSSL 0:1239e9b70ca2 112 (ct)[0] = (u8)((st) >> 24); \
wolfSSL 0:1239e9b70ca2 113 (ct)[1] = (u8)((st) >> 16); \
wolfSSL 0:1239e9b70ca2 114 (ct)[2] = (u8)((st) >> 8); \
wolfSSL 0:1239e9b70ca2 115 (ct)[3] = (u8)(st); }
wolfSSL 0:1239e9b70ca2 116
wolfSSL 0:1239e9b70ca2 117 #endif
wolfSSL 0:1239e9b70ca2 118
wolfSSL 0:1239e9b70ca2 119 #define CamelliaSubkeyL(INDEX) (subkey[(INDEX)*2])
wolfSSL 0:1239e9b70ca2 120 #define CamelliaSubkeyR(INDEX) (subkey[(INDEX)*2 + 1])
wolfSSL 0:1239e9b70ca2 121
wolfSSL 0:1239e9b70ca2 122 /* rotation right shift 1byte */
wolfSSL 0:1239e9b70ca2 123 #define CAMELLIA_RR8(x) (((x) >> 8) + ((x) << 24))
wolfSSL 0:1239e9b70ca2 124 /* rotation left shift 1bit */
wolfSSL 0:1239e9b70ca2 125 #define CAMELLIA_RL1(x) (((x) << 1) + ((x) >> 31))
wolfSSL 0:1239e9b70ca2 126 /* rotation left shift 1byte */
wolfSSL 0:1239e9b70ca2 127 #define CAMELLIA_RL8(x) (((x) << 8) + ((x) >> 24))
wolfSSL 0:1239e9b70ca2 128
wolfSSL 0:1239e9b70ca2 129 #define CAMELLIA_ROLDQ(ll, lr, rl, rr, w0, w1, bits) \
wolfSSL 0:1239e9b70ca2 130 do { \
wolfSSL 0:1239e9b70ca2 131 w0 = ll; \
wolfSSL 0:1239e9b70ca2 132 ll = (ll << bits) + (lr >> (32 - bits)); \
wolfSSL 0:1239e9b70ca2 133 lr = (lr << bits) + (rl >> (32 - bits)); \
wolfSSL 0:1239e9b70ca2 134 rl = (rl << bits) + (rr >> (32 - bits)); \
wolfSSL 0:1239e9b70ca2 135 rr = (rr << bits) + (w0 >> (32 - bits)); \
wolfSSL 0:1239e9b70ca2 136 } while(0)
wolfSSL 0:1239e9b70ca2 137
wolfSSL 0:1239e9b70ca2 138 #define CAMELLIA_ROLDQo32(ll, lr, rl, rr, w0, w1, bits) \
wolfSSL 0:1239e9b70ca2 139 do { \
wolfSSL 0:1239e9b70ca2 140 w0 = ll; \
wolfSSL 0:1239e9b70ca2 141 w1 = lr; \
wolfSSL 0:1239e9b70ca2 142 ll = (lr << (bits - 32)) + (rl >> (64 - bits)); \
wolfSSL 0:1239e9b70ca2 143 lr = (rl << (bits - 32)) + (rr >> (64 - bits)); \
wolfSSL 0:1239e9b70ca2 144 rl = (rr << (bits - 32)) + (w0 >> (64 - bits)); \
wolfSSL 0:1239e9b70ca2 145 rr = (w0 << (bits - 32)) + (w1 >> (64 - bits)); \
wolfSSL 0:1239e9b70ca2 146 } while(0)
wolfSSL 0:1239e9b70ca2 147
wolfSSL 0:1239e9b70ca2 148 #define CAMELLIA_SP1110(INDEX) (camellia_sp1110[(INDEX)])
wolfSSL 0:1239e9b70ca2 149 #define CAMELLIA_SP0222(INDEX) (camellia_sp0222[(INDEX)])
wolfSSL 0:1239e9b70ca2 150 #define CAMELLIA_SP3033(INDEX) (camellia_sp3033[(INDEX)])
wolfSSL 0:1239e9b70ca2 151 #define CAMELLIA_SP4404(INDEX) (camellia_sp4404[(INDEX)])
wolfSSL 0:1239e9b70ca2 152
wolfSSL 0:1239e9b70ca2 153 #define CAMELLIA_F(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) \
wolfSSL 0:1239e9b70ca2 154 do { \
wolfSSL 0:1239e9b70ca2 155 il = xl ^ kl; \
wolfSSL 0:1239e9b70ca2 156 ir = xr ^ kr; \
wolfSSL 0:1239e9b70ca2 157 t0 = il >> 16; \
wolfSSL 0:1239e9b70ca2 158 t1 = ir >> 16; \
wolfSSL 0:1239e9b70ca2 159 yl = CAMELLIA_SP1110(ir & 0xff) \
wolfSSL 0:1239e9b70ca2 160 ^ CAMELLIA_SP0222((t1 >> 8) & 0xff) \
wolfSSL 0:1239e9b70ca2 161 ^ CAMELLIA_SP3033(t1 & 0xff) \
wolfSSL 0:1239e9b70ca2 162 ^ CAMELLIA_SP4404((ir >> 8) & 0xff); \
wolfSSL 0:1239e9b70ca2 163 yr = CAMELLIA_SP1110((t0 >> 8) & 0xff) \
wolfSSL 0:1239e9b70ca2 164 ^ CAMELLIA_SP0222(t0 & 0xff) \
wolfSSL 0:1239e9b70ca2 165 ^ CAMELLIA_SP3033((il >> 8) & 0xff) \
wolfSSL 0:1239e9b70ca2 166 ^ CAMELLIA_SP4404(il & 0xff); \
wolfSSL 0:1239e9b70ca2 167 yl ^= yr; \
wolfSSL 0:1239e9b70ca2 168 yr = CAMELLIA_RR8(yr); \
wolfSSL 0:1239e9b70ca2 169 yr ^= yl; \
wolfSSL 0:1239e9b70ca2 170 } while(0)
wolfSSL 0:1239e9b70ca2 171
wolfSSL 0:1239e9b70ca2 172
wolfSSL 0:1239e9b70ca2 173 /*
wolfSSL 0:1239e9b70ca2 174 * for speed up
wolfSSL 0:1239e9b70ca2 175 *
wolfSSL 0:1239e9b70ca2 176 */
wolfSSL 0:1239e9b70ca2 177 #define CAMELLIA_FLS(ll, lr, rl, rr, kll, klr, krl, krr, t0, t1, t2, t3) \
wolfSSL 0:1239e9b70ca2 178 do { \
wolfSSL 0:1239e9b70ca2 179 t0 = kll; \
wolfSSL 0:1239e9b70ca2 180 t0 &= ll; \
wolfSSL 0:1239e9b70ca2 181 lr ^= CAMELLIA_RL1(t0); \
wolfSSL 0:1239e9b70ca2 182 t1 = klr; \
wolfSSL 0:1239e9b70ca2 183 t1 |= lr; \
wolfSSL 0:1239e9b70ca2 184 ll ^= t1; \
wolfSSL 0:1239e9b70ca2 185 \
wolfSSL 0:1239e9b70ca2 186 t2 = krr; \
wolfSSL 0:1239e9b70ca2 187 t2 |= rr; \
wolfSSL 0:1239e9b70ca2 188 rl ^= t2; \
wolfSSL 0:1239e9b70ca2 189 t3 = krl; \
wolfSSL 0:1239e9b70ca2 190 t3 &= rl; \
wolfSSL 0:1239e9b70ca2 191 rr ^= CAMELLIA_RL1(t3); \
wolfSSL 0:1239e9b70ca2 192 } while(0)
wolfSSL 0:1239e9b70ca2 193
wolfSSL 0:1239e9b70ca2 194 #define CAMELLIA_ROUNDSM(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) \
wolfSSL 0:1239e9b70ca2 195 do { \
wolfSSL 0:1239e9b70ca2 196 ir = CAMELLIA_SP1110(xr & 0xff) \
wolfSSL 0:1239e9b70ca2 197 ^ CAMELLIA_SP0222((xr >> 24) & 0xff) \
wolfSSL 0:1239e9b70ca2 198 ^ CAMELLIA_SP3033((xr >> 16) & 0xff) \
wolfSSL 0:1239e9b70ca2 199 ^ CAMELLIA_SP4404((xr >> 8) & 0xff); \
wolfSSL 0:1239e9b70ca2 200 il = CAMELLIA_SP1110((xl >> 24) & 0xff) \
wolfSSL 0:1239e9b70ca2 201 ^ CAMELLIA_SP0222((xl >> 16) & 0xff) \
wolfSSL 0:1239e9b70ca2 202 ^ CAMELLIA_SP3033((xl >> 8) & 0xff) \
wolfSSL 0:1239e9b70ca2 203 ^ CAMELLIA_SP4404(xl & 0xff); \
wolfSSL 0:1239e9b70ca2 204 il ^= kl; \
wolfSSL 0:1239e9b70ca2 205 ir ^= kr; \
wolfSSL 0:1239e9b70ca2 206 ir ^= il; \
wolfSSL 0:1239e9b70ca2 207 il = CAMELLIA_RR8(il); \
wolfSSL 0:1239e9b70ca2 208 il ^= ir; \
wolfSSL 0:1239e9b70ca2 209 yl ^= ir; \
wolfSSL 0:1239e9b70ca2 210 yr ^= il; \
wolfSSL 0:1239e9b70ca2 211 } while(0)
wolfSSL 0:1239e9b70ca2 212
wolfSSL 0:1239e9b70ca2 213
wolfSSL 0:1239e9b70ca2 214 static const u32 camellia_sp1110[256] = {
wolfSSL 0:1239e9b70ca2 215 0x70707000,0x82828200,0x2c2c2c00,0xececec00,
wolfSSL 0:1239e9b70ca2 216 0xb3b3b300,0x27272700,0xc0c0c000,0xe5e5e500,
wolfSSL 0:1239e9b70ca2 217 0xe4e4e400,0x85858500,0x57575700,0x35353500,
wolfSSL 0:1239e9b70ca2 218 0xeaeaea00,0x0c0c0c00,0xaeaeae00,0x41414100,
wolfSSL 0:1239e9b70ca2 219 0x23232300,0xefefef00,0x6b6b6b00,0x93939300,
wolfSSL 0:1239e9b70ca2 220 0x45454500,0x19191900,0xa5a5a500,0x21212100,
wolfSSL 0:1239e9b70ca2 221 0xededed00,0x0e0e0e00,0x4f4f4f00,0x4e4e4e00,
wolfSSL 0:1239e9b70ca2 222 0x1d1d1d00,0x65656500,0x92929200,0xbdbdbd00,
wolfSSL 0:1239e9b70ca2 223 0x86868600,0xb8b8b800,0xafafaf00,0x8f8f8f00,
wolfSSL 0:1239e9b70ca2 224 0x7c7c7c00,0xebebeb00,0x1f1f1f00,0xcecece00,
wolfSSL 0:1239e9b70ca2 225 0x3e3e3e00,0x30303000,0xdcdcdc00,0x5f5f5f00,
wolfSSL 0:1239e9b70ca2 226 0x5e5e5e00,0xc5c5c500,0x0b0b0b00,0x1a1a1a00,
wolfSSL 0:1239e9b70ca2 227 0xa6a6a600,0xe1e1e100,0x39393900,0xcacaca00,
wolfSSL 0:1239e9b70ca2 228 0xd5d5d500,0x47474700,0x5d5d5d00,0x3d3d3d00,
wolfSSL 0:1239e9b70ca2 229 0xd9d9d900,0x01010100,0x5a5a5a00,0xd6d6d600,
wolfSSL 0:1239e9b70ca2 230 0x51515100,0x56565600,0x6c6c6c00,0x4d4d4d00,
wolfSSL 0:1239e9b70ca2 231 0x8b8b8b00,0x0d0d0d00,0x9a9a9a00,0x66666600,
wolfSSL 0:1239e9b70ca2 232 0xfbfbfb00,0xcccccc00,0xb0b0b000,0x2d2d2d00,
wolfSSL 0:1239e9b70ca2 233 0x74747400,0x12121200,0x2b2b2b00,0x20202000,
wolfSSL 0:1239e9b70ca2 234 0xf0f0f000,0xb1b1b100,0x84848400,0x99999900,
wolfSSL 0:1239e9b70ca2 235 0xdfdfdf00,0x4c4c4c00,0xcbcbcb00,0xc2c2c200,
wolfSSL 0:1239e9b70ca2 236 0x34343400,0x7e7e7e00,0x76767600,0x05050500,
wolfSSL 0:1239e9b70ca2 237 0x6d6d6d00,0xb7b7b700,0xa9a9a900,0x31313100,
wolfSSL 0:1239e9b70ca2 238 0xd1d1d100,0x17171700,0x04040400,0xd7d7d700,
wolfSSL 0:1239e9b70ca2 239 0x14141400,0x58585800,0x3a3a3a00,0x61616100,
wolfSSL 0:1239e9b70ca2 240 0xdedede00,0x1b1b1b00,0x11111100,0x1c1c1c00,
wolfSSL 0:1239e9b70ca2 241 0x32323200,0x0f0f0f00,0x9c9c9c00,0x16161600,
wolfSSL 0:1239e9b70ca2 242 0x53535300,0x18181800,0xf2f2f200,0x22222200,
wolfSSL 0:1239e9b70ca2 243 0xfefefe00,0x44444400,0xcfcfcf00,0xb2b2b200,
wolfSSL 0:1239e9b70ca2 244 0xc3c3c300,0xb5b5b500,0x7a7a7a00,0x91919100,
wolfSSL 0:1239e9b70ca2 245 0x24242400,0x08080800,0xe8e8e800,0xa8a8a800,
wolfSSL 0:1239e9b70ca2 246 0x60606000,0xfcfcfc00,0x69696900,0x50505000,
wolfSSL 0:1239e9b70ca2 247 0xaaaaaa00,0xd0d0d000,0xa0a0a000,0x7d7d7d00,
wolfSSL 0:1239e9b70ca2 248 0xa1a1a100,0x89898900,0x62626200,0x97979700,
wolfSSL 0:1239e9b70ca2 249 0x54545400,0x5b5b5b00,0x1e1e1e00,0x95959500,
wolfSSL 0:1239e9b70ca2 250 0xe0e0e000,0xffffff00,0x64646400,0xd2d2d200,
wolfSSL 0:1239e9b70ca2 251 0x10101000,0xc4c4c400,0x00000000,0x48484800,
wolfSSL 0:1239e9b70ca2 252 0xa3a3a300,0xf7f7f700,0x75757500,0xdbdbdb00,
wolfSSL 0:1239e9b70ca2 253 0x8a8a8a00,0x03030300,0xe6e6e600,0xdadada00,
wolfSSL 0:1239e9b70ca2 254 0x09090900,0x3f3f3f00,0xdddddd00,0x94949400,
wolfSSL 0:1239e9b70ca2 255 0x87878700,0x5c5c5c00,0x83838300,0x02020200,
wolfSSL 0:1239e9b70ca2 256 0xcdcdcd00,0x4a4a4a00,0x90909000,0x33333300,
wolfSSL 0:1239e9b70ca2 257 0x73737300,0x67676700,0xf6f6f600,0xf3f3f300,
wolfSSL 0:1239e9b70ca2 258 0x9d9d9d00,0x7f7f7f00,0xbfbfbf00,0xe2e2e200,
wolfSSL 0:1239e9b70ca2 259 0x52525200,0x9b9b9b00,0xd8d8d800,0x26262600,
wolfSSL 0:1239e9b70ca2 260 0xc8c8c800,0x37373700,0xc6c6c600,0x3b3b3b00,
wolfSSL 0:1239e9b70ca2 261 0x81818100,0x96969600,0x6f6f6f00,0x4b4b4b00,
wolfSSL 0:1239e9b70ca2 262 0x13131300,0xbebebe00,0x63636300,0x2e2e2e00,
wolfSSL 0:1239e9b70ca2 263 0xe9e9e900,0x79797900,0xa7a7a700,0x8c8c8c00,
wolfSSL 0:1239e9b70ca2 264 0x9f9f9f00,0x6e6e6e00,0xbcbcbc00,0x8e8e8e00,
wolfSSL 0:1239e9b70ca2 265 0x29292900,0xf5f5f500,0xf9f9f900,0xb6b6b600,
wolfSSL 0:1239e9b70ca2 266 0x2f2f2f00,0xfdfdfd00,0xb4b4b400,0x59595900,
wolfSSL 0:1239e9b70ca2 267 0x78787800,0x98989800,0x06060600,0x6a6a6a00,
wolfSSL 0:1239e9b70ca2 268 0xe7e7e700,0x46464600,0x71717100,0xbababa00,
wolfSSL 0:1239e9b70ca2 269 0xd4d4d400,0x25252500,0xababab00,0x42424200,
wolfSSL 0:1239e9b70ca2 270 0x88888800,0xa2a2a200,0x8d8d8d00,0xfafafa00,
wolfSSL 0:1239e9b70ca2 271 0x72727200,0x07070700,0xb9b9b900,0x55555500,
wolfSSL 0:1239e9b70ca2 272 0xf8f8f800,0xeeeeee00,0xacacac00,0x0a0a0a00,
wolfSSL 0:1239e9b70ca2 273 0x36363600,0x49494900,0x2a2a2a00,0x68686800,
wolfSSL 0:1239e9b70ca2 274 0x3c3c3c00,0x38383800,0xf1f1f100,0xa4a4a400,
wolfSSL 0:1239e9b70ca2 275 0x40404000,0x28282800,0xd3d3d300,0x7b7b7b00,
wolfSSL 0:1239e9b70ca2 276 0xbbbbbb00,0xc9c9c900,0x43434300,0xc1c1c100,
wolfSSL 0:1239e9b70ca2 277 0x15151500,0xe3e3e300,0xadadad00,0xf4f4f400,
wolfSSL 0:1239e9b70ca2 278 0x77777700,0xc7c7c700,0x80808000,0x9e9e9e00,
wolfSSL 0:1239e9b70ca2 279 };
wolfSSL 0:1239e9b70ca2 280
wolfSSL 0:1239e9b70ca2 281 static const u32 camellia_sp0222[256] = {
wolfSSL 0:1239e9b70ca2 282 0x00e0e0e0,0x00050505,0x00585858,0x00d9d9d9,
wolfSSL 0:1239e9b70ca2 283 0x00676767,0x004e4e4e,0x00818181,0x00cbcbcb,
wolfSSL 0:1239e9b70ca2 284 0x00c9c9c9,0x000b0b0b,0x00aeaeae,0x006a6a6a,
wolfSSL 0:1239e9b70ca2 285 0x00d5d5d5,0x00181818,0x005d5d5d,0x00828282,
wolfSSL 0:1239e9b70ca2 286 0x00464646,0x00dfdfdf,0x00d6d6d6,0x00272727,
wolfSSL 0:1239e9b70ca2 287 0x008a8a8a,0x00323232,0x004b4b4b,0x00424242,
wolfSSL 0:1239e9b70ca2 288 0x00dbdbdb,0x001c1c1c,0x009e9e9e,0x009c9c9c,
wolfSSL 0:1239e9b70ca2 289 0x003a3a3a,0x00cacaca,0x00252525,0x007b7b7b,
wolfSSL 0:1239e9b70ca2 290 0x000d0d0d,0x00717171,0x005f5f5f,0x001f1f1f,
wolfSSL 0:1239e9b70ca2 291 0x00f8f8f8,0x00d7d7d7,0x003e3e3e,0x009d9d9d,
wolfSSL 0:1239e9b70ca2 292 0x007c7c7c,0x00606060,0x00b9b9b9,0x00bebebe,
wolfSSL 0:1239e9b70ca2 293 0x00bcbcbc,0x008b8b8b,0x00161616,0x00343434,
wolfSSL 0:1239e9b70ca2 294 0x004d4d4d,0x00c3c3c3,0x00727272,0x00959595,
wolfSSL 0:1239e9b70ca2 295 0x00ababab,0x008e8e8e,0x00bababa,0x007a7a7a,
wolfSSL 0:1239e9b70ca2 296 0x00b3b3b3,0x00020202,0x00b4b4b4,0x00adadad,
wolfSSL 0:1239e9b70ca2 297 0x00a2a2a2,0x00acacac,0x00d8d8d8,0x009a9a9a,
wolfSSL 0:1239e9b70ca2 298 0x00171717,0x001a1a1a,0x00353535,0x00cccccc,
wolfSSL 0:1239e9b70ca2 299 0x00f7f7f7,0x00999999,0x00616161,0x005a5a5a,
wolfSSL 0:1239e9b70ca2 300 0x00e8e8e8,0x00242424,0x00565656,0x00404040,
wolfSSL 0:1239e9b70ca2 301 0x00e1e1e1,0x00636363,0x00090909,0x00333333,
wolfSSL 0:1239e9b70ca2 302 0x00bfbfbf,0x00989898,0x00979797,0x00858585,
wolfSSL 0:1239e9b70ca2 303 0x00686868,0x00fcfcfc,0x00ececec,0x000a0a0a,
wolfSSL 0:1239e9b70ca2 304 0x00dadada,0x006f6f6f,0x00535353,0x00626262,
wolfSSL 0:1239e9b70ca2 305 0x00a3a3a3,0x002e2e2e,0x00080808,0x00afafaf,
wolfSSL 0:1239e9b70ca2 306 0x00282828,0x00b0b0b0,0x00747474,0x00c2c2c2,
wolfSSL 0:1239e9b70ca2 307 0x00bdbdbd,0x00363636,0x00222222,0x00383838,
wolfSSL 0:1239e9b70ca2 308 0x00646464,0x001e1e1e,0x00393939,0x002c2c2c,
wolfSSL 0:1239e9b70ca2 309 0x00a6a6a6,0x00303030,0x00e5e5e5,0x00444444,
wolfSSL 0:1239e9b70ca2 310 0x00fdfdfd,0x00888888,0x009f9f9f,0x00656565,
wolfSSL 0:1239e9b70ca2 311 0x00878787,0x006b6b6b,0x00f4f4f4,0x00232323,
wolfSSL 0:1239e9b70ca2 312 0x00484848,0x00101010,0x00d1d1d1,0x00515151,
wolfSSL 0:1239e9b70ca2 313 0x00c0c0c0,0x00f9f9f9,0x00d2d2d2,0x00a0a0a0,
wolfSSL 0:1239e9b70ca2 314 0x00555555,0x00a1a1a1,0x00414141,0x00fafafa,
wolfSSL 0:1239e9b70ca2 315 0x00434343,0x00131313,0x00c4c4c4,0x002f2f2f,
wolfSSL 0:1239e9b70ca2 316 0x00a8a8a8,0x00b6b6b6,0x003c3c3c,0x002b2b2b,
wolfSSL 0:1239e9b70ca2 317 0x00c1c1c1,0x00ffffff,0x00c8c8c8,0x00a5a5a5,
wolfSSL 0:1239e9b70ca2 318 0x00202020,0x00898989,0x00000000,0x00909090,
wolfSSL 0:1239e9b70ca2 319 0x00474747,0x00efefef,0x00eaeaea,0x00b7b7b7,
wolfSSL 0:1239e9b70ca2 320 0x00151515,0x00060606,0x00cdcdcd,0x00b5b5b5,
wolfSSL 0:1239e9b70ca2 321 0x00121212,0x007e7e7e,0x00bbbbbb,0x00292929,
wolfSSL 0:1239e9b70ca2 322 0x000f0f0f,0x00b8b8b8,0x00070707,0x00040404,
wolfSSL 0:1239e9b70ca2 323 0x009b9b9b,0x00949494,0x00212121,0x00666666,
wolfSSL 0:1239e9b70ca2 324 0x00e6e6e6,0x00cecece,0x00ededed,0x00e7e7e7,
wolfSSL 0:1239e9b70ca2 325 0x003b3b3b,0x00fefefe,0x007f7f7f,0x00c5c5c5,
wolfSSL 0:1239e9b70ca2 326 0x00a4a4a4,0x00373737,0x00b1b1b1,0x004c4c4c,
wolfSSL 0:1239e9b70ca2 327 0x00919191,0x006e6e6e,0x008d8d8d,0x00767676,
wolfSSL 0:1239e9b70ca2 328 0x00030303,0x002d2d2d,0x00dedede,0x00969696,
wolfSSL 0:1239e9b70ca2 329 0x00262626,0x007d7d7d,0x00c6c6c6,0x005c5c5c,
wolfSSL 0:1239e9b70ca2 330 0x00d3d3d3,0x00f2f2f2,0x004f4f4f,0x00191919,
wolfSSL 0:1239e9b70ca2 331 0x003f3f3f,0x00dcdcdc,0x00797979,0x001d1d1d,
wolfSSL 0:1239e9b70ca2 332 0x00525252,0x00ebebeb,0x00f3f3f3,0x006d6d6d,
wolfSSL 0:1239e9b70ca2 333 0x005e5e5e,0x00fbfbfb,0x00696969,0x00b2b2b2,
wolfSSL 0:1239e9b70ca2 334 0x00f0f0f0,0x00313131,0x000c0c0c,0x00d4d4d4,
wolfSSL 0:1239e9b70ca2 335 0x00cfcfcf,0x008c8c8c,0x00e2e2e2,0x00757575,
wolfSSL 0:1239e9b70ca2 336 0x00a9a9a9,0x004a4a4a,0x00575757,0x00848484,
wolfSSL 0:1239e9b70ca2 337 0x00111111,0x00454545,0x001b1b1b,0x00f5f5f5,
wolfSSL 0:1239e9b70ca2 338 0x00e4e4e4,0x000e0e0e,0x00737373,0x00aaaaaa,
wolfSSL 0:1239e9b70ca2 339 0x00f1f1f1,0x00dddddd,0x00595959,0x00141414,
wolfSSL 0:1239e9b70ca2 340 0x006c6c6c,0x00929292,0x00545454,0x00d0d0d0,
wolfSSL 0:1239e9b70ca2 341 0x00787878,0x00707070,0x00e3e3e3,0x00494949,
wolfSSL 0:1239e9b70ca2 342 0x00808080,0x00505050,0x00a7a7a7,0x00f6f6f6,
wolfSSL 0:1239e9b70ca2 343 0x00777777,0x00939393,0x00868686,0x00838383,
wolfSSL 0:1239e9b70ca2 344 0x002a2a2a,0x00c7c7c7,0x005b5b5b,0x00e9e9e9,
wolfSSL 0:1239e9b70ca2 345 0x00eeeeee,0x008f8f8f,0x00010101,0x003d3d3d,
wolfSSL 0:1239e9b70ca2 346 };
wolfSSL 0:1239e9b70ca2 347
wolfSSL 0:1239e9b70ca2 348 static const u32 camellia_sp3033[256] = {
wolfSSL 0:1239e9b70ca2 349 0x38003838,0x41004141,0x16001616,0x76007676,
wolfSSL 0:1239e9b70ca2 350 0xd900d9d9,0x93009393,0x60006060,0xf200f2f2,
wolfSSL 0:1239e9b70ca2 351 0x72007272,0xc200c2c2,0xab00abab,0x9a009a9a,
wolfSSL 0:1239e9b70ca2 352 0x75007575,0x06000606,0x57005757,0xa000a0a0,
wolfSSL 0:1239e9b70ca2 353 0x91009191,0xf700f7f7,0xb500b5b5,0xc900c9c9,
wolfSSL 0:1239e9b70ca2 354 0xa200a2a2,0x8c008c8c,0xd200d2d2,0x90009090,
wolfSSL 0:1239e9b70ca2 355 0xf600f6f6,0x07000707,0xa700a7a7,0x27002727,
wolfSSL 0:1239e9b70ca2 356 0x8e008e8e,0xb200b2b2,0x49004949,0xde00dede,
wolfSSL 0:1239e9b70ca2 357 0x43004343,0x5c005c5c,0xd700d7d7,0xc700c7c7,
wolfSSL 0:1239e9b70ca2 358 0x3e003e3e,0xf500f5f5,0x8f008f8f,0x67006767,
wolfSSL 0:1239e9b70ca2 359 0x1f001f1f,0x18001818,0x6e006e6e,0xaf00afaf,
wolfSSL 0:1239e9b70ca2 360 0x2f002f2f,0xe200e2e2,0x85008585,0x0d000d0d,
wolfSSL 0:1239e9b70ca2 361 0x53005353,0xf000f0f0,0x9c009c9c,0x65006565,
wolfSSL 0:1239e9b70ca2 362 0xea00eaea,0xa300a3a3,0xae00aeae,0x9e009e9e,
wolfSSL 0:1239e9b70ca2 363 0xec00ecec,0x80008080,0x2d002d2d,0x6b006b6b,
wolfSSL 0:1239e9b70ca2 364 0xa800a8a8,0x2b002b2b,0x36003636,0xa600a6a6,
wolfSSL 0:1239e9b70ca2 365 0xc500c5c5,0x86008686,0x4d004d4d,0x33003333,
wolfSSL 0:1239e9b70ca2 366 0xfd00fdfd,0x66006666,0x58005858,0x96009696,
wolfSSL 0:1239e9b70ca2 367 0x3a003a3a,0x09000909,0x95009595,0x10001010,
wolfSSL 0:1239e9b70ca2 368 0x78007878,0xd800d8d8,0x42004242,0xcc00cccc,
wolfSSL 0:1239e9b70ca2 369 0xef00efef,0x26002626,0xe500e5e5,0x61006161,
wolfSSL 0:1239e9b70ca2 370 0x1a001a1a,0x3f003f3f,0x3b003b3b,0x82008282,
wolfSSL 0:1239e9b70ca2 371 0xb600b6b6,0xdb00dbdb,0xd400d4d4,0x98009898,
wolfSSL 0:1239e9b70ca2 372 0xe800e8e8,0x8b008b8b,0x02000202,0xeb00ebeb,
wolfSSL 0:1239e9b70ca2 373 0x0a000a0a,0x2c002c2c,0x1d001d1d,0xb000b0b0,
wolfSSL 0:1239e9b70ca2 374 0x6f006f6f,0x8d008d8d,0x88008888,0x0e000e0e,
wolfSSL 0:1239e9b70ca2 375 0x19001919,0x87008787,0x4e004e4e,0x0b000b0b,
wolfSSL 0:1239e9b70ca2 376 0xa900a9a9,0x0c000c0c,0x79007979,0x11001111,
wolfSSL 0:1239e9b70ca2 377 0x7f007f7f,0x22002222,0xe700e7e7,0x59005959,
wolfSSL 0:1239e9b70ca2 378 0xe100e1e1,0xda00dada,0x3d003d3d,0xc800c8c8,
wolfSSL 0:1239e9b70ca2 379 0x12001212,0x04000404,0x74007474,0x54005454,
wolfSSL 0:1239e9b70ca2 380 0x30003030,0x7e007e7e,0xb400b4b4,0x28002828,
wolfSSL 0:1239e9b70ca2 381 0x55005555,0x68006868,0x50005050,0xbe00bebe,
wolfSSL 0:1239e9b70ca2 382 0xd000d0d0,0xc400c4c4,0x31003131,0xcb00cbcb,
wolfSSL 0:1239e9b70ca2 383 0x2a002a2a,0xad00adad,0x0f000f0f,0xca00caca,
wolfSSL 0:1239e9b70ca2 384 0x70007070,0xff00ffff,0x32003232,0x69006969,
wolfSSL 0:1239e9b70ca2 385 0x08000808,0x62006262,0x00000000,0x24002424,
wolfSSL 0:1239e9b70ca2 386 0xd100d1d1,0xfb00fbfb,0xba00baba,0xed00eded,
wolfSSL 0:1239e9b70ca2 387 0x45004545,0x81008181,0x73007373,0x6d006d6d,
wolfSSL 0:1239e9b70ca2 388 0x84008484,0x9f009f9f,0xee00eeee,0x4a004a4a,
wolfSSL 0:1239e9b70ca2 389 0xc300c3c3,0x2e002e2e,0xc100c1c1,0x01000101,
wolfSSL 0:1239e9b70ca2 390 0xe600e6e6,0x25002525,0x48004848,0x99009999,
wolfSSL 0:1239e9b70ca2 391 0xb900b9b9,0xb300b3b3,0x7b007b7b,0xf900f9f9,
wolfSSL 0:1239e9b70ca2 392 0xce00cece,0xbf00bfbf,0xdf00dfdf,0x71007171,
wolfSSL 0:1239e9b70ca2 393 0x29002929,0xcd00cdcd,0x6c006c6c,0x13001313,
wolfSSL 0:1239e9b70ca2 394 0x64006464,0x9b009b9b,0x63006363,0x9d009d9d,
wolfSSL 0:1239e9b70ca2 395 0xc000c0c0,0x4b004b4b,0xb700b7b7,0xa500a5a5,
wolfSSL 0:1239e9b70ca2 396 0x89008989,0x5f005f5f,0xb100b1b1,0x17001717,
wolfSSL 0:1239e9b70ca2 397 0xf400f4f4,0xbc00bcbc,0xd300d3d3,0x46004646,
wolfSSL 0:1239e9b70ca2 398 0xcf00cfcf,0x37003737,0x5e005e5e,0x47004747,
wolfSSL 0:1239e9b70ca2 399 0x94009494,0xfa00fafa,0xfc00fcfc,0x5b005b5b,
wolfSSL 0:1239e9b70ca2 400 0x97009797,0xfe00fefe,0x5a005a5a,0xac00acac,
wolfSSL 0:1239e9b70ca2 401 0x3c003c3c,0x4c004c4c,0x03000303,0x35003535,
wolfSSL 0:1239e9b70ca2 402 0xf300f3f3,0x23002323,0xb800b8b8,0x5d005d5d,
wolfSSL 0:1239e9b70ca2 403 0x6a006a6a,0x92009292,0xd500d5d5,0x21002121,
wolfSSL 0:1239e9b70ca2 404 0x44004444,0x51005151,0xc600c6c6,0x7d007d7d,
wolfSSL 0:1239e9b70ca2 405 0x39003939,0x83008383,0xdc00dcdc,0xaa00aaaa,
wolfSSL 0:1239e9b70ca2 406 0x7c007c7c,0x77007777,0x56005656,0x05000505,
wolfSSL 0:1239e9b70ca2 407 0x1b001b1b,0xa400a4a4,0x15001515,0x34003434,
wolfSSL 0:1239e9b70ca2 408 0x1e001e1e,0x1c001c1c,0xf800f8f8,0x52005252,
wolfSSL 0:1239e9b70ca2 409 0x20002020,0x14001414,0xe900e9e9,0xbd00bdbd,
wolfSSL 0:1239e9b70ca2 410 0xdd00dddd,0xe400e4e4,0xa100a1a1,0xe000e0e0,
wolfSSL 0:1239e9b70ca2 411 0x8a008a8a,0xf100f1f1,0xd600d6d6,0x7a007a7a,
wolfSSL 0:1239e9b70ca2 412 0xbb00bbbb,0xe300e3e3,0x40004040,0x4f004f4f,
wolfSSL 0:1239e9b70ca2 413 };
wolfSSL 0:1239e9b70ca2 414
wolfSSL 0:1239e9b70ca2 415 static const u32 camellia_sp4404[256] = {
wolfSSL 0:1239e9b70ca2 416 0x70700070,0x2c2c002c,0xb3b300b3,0xc0c000c0,
wolfSSL 0:1239e9b70ca2 417 0xe4e400e4,0x57570057,0xeaea00ea,0xaeae00ae,
wolfSSL 0:1239e9b70ca2 418 0x23230023,0x6b6b006b,0x45450045,0xa5a500a5,
wolfSSL 0:1239e9b70ca2 419 0xeded00ed,0x4f4f004f,0x1d1d001d,0x92920092,
wolfSSL 0:1239e9b70ca2 420 0x86860086,0xafaf00af,0x7c7c007c,0x1f1f001f,
wolfSSL 0:1239e9b70ca2 421 0x3e3e003e,0xdcdc00dc,0x5e5e005e,0x0b0b000b,
wolfSSL 0:1239e9b70ca2 422 0xa6a600a6,0x39390039,0xd5d500d5,0x5d5d005d,
wolfSSL 0:1239e9b70ca2 423 0xd9d900d9,0x5a5a005a,0x51510051,0x6c6c006c,
wolfSSL 0:1239e9b70ca2 424 0x8b8b008b,0x9a9a009a,0xfbfb00fb,0xb0b000b0,
wolfSSL 0:1239e9b70ca2 425 0x74740074,0x2b2b002b,0xf0f000f0,0x84840084,
wolfSSL 0:1239e9b70ca2 426 0xdfdf00df,0xcbcb00cb,0x34340034,0x76760076,
wolfSSL 0:1239e9b70ca2 427 0x6d6d006d,0xa9a900a9,0xd1d100d1,0x04040004,
wolfSSL 0:1239e9b70ca2 428 0x14140014,0x3a3a003a,0xdede00de,0x11110011,
wolfSSL 0:1239e9b70ca2 429 0x32320032,0x9c9c009c,0x53530053,0xf2f200f2,
wolfSSL 0:1239e9b70ca2 430 0xfefe00fe,0xcfcf00cf,0xc3c300c3,0x7a7a007a,
wolfSSL 0:1239e9b70ca2 431 0x24240024,0xe8e800e8,0x60600060,0x69690069,
wolfSSL 0:1239e9b70ca2 432 0xaaaa00aa,0xa0a000a0,0xa1a100a1,0x62620062,
wolfSSL 0:1239e9b70ca2 433 0x54540054,0x1e1e001e,0xe0e000e0,0x64640064,
wolfSSL 0:1239e9b70ca2 434 0x10100010,0x00000000,0xa3a300a3,0x75750075,
wolfSSL 0:1239e9b70ca2 435 0x8a8a008a,0xe6e600e6,0x09090009,0xdddd00dd,
wolfSSL 0:1239e9b70ca2 436 0x87870087,0x83830083,0xcdcd00cd,0x90900090,
wolfSSL 0:1239e9b70ca2 437 0x73730073,0xf6f600f6,0x9d9d009d,0xbfbf00bf,
wolfSSL 0:1239e9b70ca2 438 0x52520052,0xd8d800d8,0xc8c800c8,0xc6c600c6,
wolfSSL 0:1239e9b70ca2 439 0x81810081,0x6f6f006f,0x13130013,0x63630063,
wolfSSL 0:1239e9b70ca2 440 0xe9e900e9,0xa7a700a7,0x9f9f009f,0xbcbc00bc,
wolfSSL 0:1239e9b70ca2 441 0x29290029,0xf9f900f9,0x2f2f002f,0xb4b400b4,
wolfSSL 0:1239e9b70ca2 442 0x78780078,0x06060006,0xe7e700e7,0x71710071,
wolfSSL 0:1239e9b70ca2 443 0xd4d400d4,0xabab00ab,0x88880088,0x8d8d008d,
wolfSSL 0:1239e9b70ca2 444 0x72720072,0xb9b900b9,0xf8f800f8,0xacac00ac,
wolfSSL 0:1239e9b70ca2 445 0x36360036,0x2a2a002a,0x3c3c003c,0xf1f100f1,
wolfSSL 0:1239e9b70ca2 446 0x40400040,0xd3d300d3,0xbbbb00bb,0x43430043,
wolfSSL 0:1239e9b70ca2 447 0x15150015,0xadad00ad,0x77770077,0x80800080,
wolfSSL 0:1239e9b70ca2 448 0x82820082,0xecec00ec,0x27270027,0xe5e500e5,
wolfSSL 0:1239e9b70ca2 449 0x85850085,0x35350035,0x0c0c000c,0x41410041,
wolfSSL 0:1239e9b70ca2 450 0xefef00ef,0x93930093,0x19190019,0x21210021,
wolfSSL 0:1239e9b70ca2 451 0x0e0e000e,0x4e4e004e,0x65650065,0xbdbd00bd,
wolfSSL 0:1239e9b70ca2 452 0xb8b800b8,0x8f8f008f,0xebeb00eb,0xcece00ce,
wolfSSL 0:1239e9b70ca2 453 0x30300030,0x5f5f005f,0xc5c500c5,0x1a1a001a,
wolfSSL 0:1239e9b70ca2 454 0xe1e100e1,0xcaca00ca,0x47470047,0x3d3d003d,
wolfSSL 0:1239e9b70ca2 455 0x01010001,0xd6d600d6,0x56560056,0x4d4d004d,
wolfSSL 0:1239e9b70ca2 456 0x0d0d000d,0x66660066,0xcccc00cc,0x2d2d002d,
wolfSSL 0:1239e9b70ca2 457 0x12120012,0x20200020,0xb1b100b1,0x99990099,
wolfSSL 0:1239e9b70ca2 458 0x4c4c004c,0xc2c200c2,0x7e7e007e,0x05050005,
wolfSSL 0:1239e9b70ca2 459 0xb7b700b7,0x31310031,0x17170017,0xd7d700d7,
wolfSSL 0:1239e9b70ca2 460 0x58580058,0x61610061,0x1b1b001b,0x1c1c001c,
wolfSSL 0:1239e9b70ca2 461 0x0f0f000f,0x16160016,0x18180018,0x22220022,
wolfSSL 0:1239e9b70ca2 462 0x44440044,0xb2b200b2,0xb5b500b5,0x91910091,
wolfSSL 0:1239e9b70ca2 463 0x08080008,0xa8a800a8,0xfcfc00fc,0x50500050,
wolfSSL 0:1239e9b70ca2 464 0xd0d000d0,0x7d7d007d,0x89890089,0x97970097,
wolfSSL 0:1239e9b70ca2 465 0x5b5b005b,0x95950095,0xffff00ff,0xd2d200d2,
wolfSSL 0:1239e9b70ca2 466 0xc4c400c4,0x48480048,0xf7f700f7,0xdbdb00db,
wolfSSL 0:1239e9b70ca2 467 0x03030003,0xdada00da,0x3f3f003f,0x94940094,
wolfSSL 0:1239e9b70ca2 468 0x5c5c005c,0x02020002,0x4a4a004a,0x33330033,
wolfSSL 0:1239e9b70ca2 469 0x67670067,0xf3f300f3,0x7f7f007f,0xe2e200e2,
wolfSSL 0:1239e9b70ca2 470 0x9b9b009b,0x26260026,0x37370037,0x3b3b003b,
wolfSSL 0:1239e9b70ca2 471 0x96960096,0x4b4b004b,0xbebe00be,0x2e2e002e,
wolfSSL 0:1239e9b70ca2 472 0x79790079,0x8c8c008c,0x6e6e006e,0x8e8e008e,
wolfSSL 0:1239e9b70ca2 473 0xf5f500f5,0xb6b600b6,0xfdfd00fd,0x59590059,
wolfSSL 0:1239e9b70ca2 474 0x98980098,0x6a6a006a,0x46460046,0xbaba00ba,
wolfSSL 0:1239e9b70ca2 475 0x25250025,0x42420042,0xa2a200a2,0xfafa00fa,
wolfSSL 0:1239e9b70ca2 476 0x07070007,0x55550055,0xeeee00ee,0x0a0a000a,
wolfSSL 0:1239e9b70ca2 477 0x49490049,0x68680068,0x38380038,0xa4a400a4,
wolfSSL 0:1239e9b70ca2 478 0x28280028,0x7b7b007b,0xc9c900c9,0xc1c100c1,
wolfSSL 0:1239e9b70ca2 479 0xe3e300e3,0xf4f400f4,0xc7c700c7,0x9e9e009e,
wolfSSL 0:1239e9b70ca2 480 };
wolfSSL 0:1239e9b70ca2 481
wolfSSL 0:1239e9b70ca2 482
wolfSSL 0:1239e9b70ca2 483 /**
wolfSSL 0:1239e9b70ca2 484 * Stuff related to the Camellia key schedule
wolfSSL 0:1239e9b70ca2 485 */
wolfSSL 0:1239e9b70ca2 486 #define subl(x) subL[(x)]
wolfSSL 0:1239e9b70ca2 487 #define subr(x) subR[(x)]
wolfSSL 0:1239e9b70ca2 488
wolfSSL 0:1239e9b70ca2 489 static int camellia_setup128(const unsigned char *key, u32 *subkey)
wolfSSL 0:1239e9b70ca2 490 {
wolfSSL 0:1239e9b70ca2 491 u32 kll, klr, krl, krr;
wolfSSL 0:1239e9b70ca2 492 u32 il, ir, t0, t1, w0, w1;
wolfSSL 0:1239e9b70ca2 493 u32 kw4l, kw4r, dw, tl, tr;
wolfSSL 0:1239e9b70ca2 494
wolfSSL 0:1239e9b70ca2 495 #ifdef CYASSL_SMALL_STACK
wolfSSL 0:1239e9b70ca2 496 u32* subL;
wolfSSL 0:1239e9b70ca2 497 u32* subR;
wolfSSL 0:1239e9b70ca2 498
wolfSSL 0:1239e9b70ca2 499 subL = (u32*) XMALLOC(sizeof(u32) * 26, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 500 if (subL == NULL)
wolfSSL 0:1239e9b70ca2 501 return MEMORY_E;
wolfSSL 0:1239e9b70ca2 502
wolfSSL 0:1239e9b70ca2 503 subR = (u32*) XMALLOC(sizeof(u32) * 26, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 504 if (subR == NULL) {
wolfSSL 0:1239e9b70ca2 505 XFREE(subL, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 506 return MEMORY_E;
wolfSSL 0:1239e9b70ca2 507 }
wolfSSL 0:1239e9b70ca2 508 #else
wolfSSL 0:1239e9b70ca2 509 u32 subL[26];
wolfSSL 0:1239e9b70ca2 510 u32 subR[26];
wolfSSL 0:1239e9b70ca2 511 #endif
wolfSSL 0:1239e9b70ca2 512
wolfSSL 0:1239e9b70ca2 513 /**
wolfSSL 0:1239e9b70ca2 514 * k == kll || klr || krl || krr (|| is concatination)
wolfSSL 0:1239e9b70ca2 515 */
wolfSSL 0:1239e9b70ca2 516 kll = GETU32(key );
wolfSSL 0:1239e9b70ca2 517 klr = GETU32(key + 4);
wolfSSL 0:1239e9b70ca2 518 krl = GETU32(key + 8);
wolfSSL 0:1239e9b70ca2 519 krr = GETU32(key + 12);
wolfSSL 0:1239e9b70ca2 520 /**
wolfSSL 0:1239e9b70ca2 521 * generate KL dependent subkeys
wolfSSL 0:1239e9b70ca2 522 */
wolfSSL 0:1239e9b70ca2 523 subl(0) = kll; subr(0) = klr;
wolfSSL 0:1239e9b70ca2 524 subl(1) = krl; subr(1) = krr;
wolfSSL 0:1239e9b70ca2 525 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 526 subl(4) = kll; subr(4) = klr;
wolfSSL 0:1239e9b70ca2 527 subl(5) = krl; subr(5) = krr;
wolfSSL 0:1239e9b70ca2 528 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 30);
wolfSSL 0:1239e9b70ca2 529 subl(10) = kll; subr(10) = klr;
wolfSSL 0:1239e9b70ca2 530 subl(11) = krl; subr(11) = krr;
wolfSSL 0:1239e9b70ca2 531 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 532 subl(13) = krl; subr(13) = krr;
wolfSSL 0:1239e9b70ca2 533 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17);
wolfSSL 0:1239e9b70ca2 534 subl(16) = kll; subr(16) = klr;
wolfSSL 0:1239e9b70ca2 535 subl(17) = krl; subr(17) = krr;
wolfSSL 0:1239e9b70ca2 536 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17);
wolfSSL 0:1239e9b70ca2 537 subl(18) = kll; subr(18) = klr;
wolfSSL 0:1239e9b70ca2 538 subl(19) = krl; subr(19) = krr;
wolfSSL 0:1239e9b70ca2 539 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17);
wolfSSL 0:1239e9b70ca2 540 subl(22) = kll; subr(22) = klr;
wolfSSL 0:1239e9b70ca2 541 subl(23) = krl; subr(23) = krr;
wolfSSL 0:1239e9b70ca2 542
wolfSSL 0:1239e9b70ca2 543 /* generate KA */
wolfSSL 0:1239e9b70ca2 544 kll = subl(0); klr = subr(0);
wolfSSL 0:1239e9b70ca2 545 krl = subl(1); krr = subr(1);
wolfSSL 0:1239e9b70ca2 546 CAMELLIA_F(kll, klr,
wolfSSL 0:1239e9b70ca2 547 CAMELLIA_SIGMA1L, CAMELLIA_SIGMA1R,
wolfSSL 0:1239e9b70ca2 548 w0, w1, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 549 krl ^= w0; krr ^= w1;
wolfSSL 0:1239e9b70ca2 550 CAMELLIA_F(krl, krr,
wolfSSL 0:1239e9b70ca2 551 CAMELLIA_SIGMA2L, CAMELLIA_SIGMA2R,
wolfSSL 0:1239e9b70ca2 552 kll, klr, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 553 CAMELLIA_F(kll, klr,
wolfSSL 0:1239e9b70ca2 554 CAMELLIA_SIGMA3L, CAMELLIA_SIGMA3R,
wolfSSL 0:1239e9b70ca2 555 krl, krr, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 556 krl ^= w0; krr ^= w1;
wolfSSL 0:1239e9b70ca2 557 CAMELLIA_F(krl, krr,
wolfSSL 0:1239e9b70ca2 558 CAMELLIA_SIGMA4L, CAMELLIA_SIGMA4R,
wolfSSL 0:1239e9b70ca2 559 w0, w1, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 560 kll ^= w0; klr ^= w1;
wolfSSL 0:1239e9b70ca2 561
wolfSSL 0:1239e9b70ca2 562 /* generate KA dependent subkeys */
wolfSSL 0:1239e9b70ca2 563 subl(2) = kll; subr(2) = klr;
wolfSSL 0:1239e9b70ca2 564 subl(3) = krl; subr(3) = krr;
wolfSSL 0:1239e9b70ca2 565 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 566 subl(6) = kll; subr(6) = klr;
wolfSSL 0:1239e9b70ca2 567 subl(7) = krl; subr(7) = krr;
wolfSSL 0:1239e9b70ca2 568 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 569 subl(8) = kll; subr(8) = klr;
wolfSSL 0:1239e9b70ca2 570 subl(9) = krl; subr(9) = krr;
wolfSSL 0:1239e9b70ca2 571 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 572 subl(12) = kll; subr(12) = klr;
wolfSSL 0:1239e9b70ca2 573 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 574 subl(14) = kll; subr(14) = klr;
wolfSSL 0:1239e9b70ca2 575 subl(15) = krl; subr(15) = krr;
wolfSSL 0:1239e9b70ca2 576 CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 34);
wolfSSL 0:1239e9b70ca2 577 subl(20) = kll; subr(20) = klr;
wolfSSL 0:1239e9b70ca2 578 subl(21) = krl; subr(21) = krr;
wolfSSL 0:1239e9b70ca2 579 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17);
wolfSSL 0:1239e9b70ca2 580 subl(24) = kll; subr(24) = klr;
wolfSSL 0:1239e9b70ca2 581 subl(25) = krl; subr(25) = krr;
wolfSSL 0:1239e9b70ca2 582
wolfSSL 0:1239e9b70ca2 583
wolfSSL 0:1239e9b70ca2 584 /* absorb kw2 to other subkeys */
wolfSSL 0:1239e9b70ca2 585 subl(3) ^= subl(1); subr(3) ^= subr(1);
wolfSSL 0:1239e9b70ca2 586 subl(5) ^= subl(1); subr(5) ^= subr(1);
wolfSSL 0:1239e9b70ca2 587 subl(7) ^= subl(1); subr(7) ^= subr(1);
wolfSSL 0:1239e9b70ca2 588 subl(1) ^= subr(1) & ~subr(9);
wolfSSL 0:1239e9b70ca2 589 dw = subl(1) & subl(9), subr(1) ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 590 subl(11) ^= subl(1); subr(11) ^= subr(1);
wolfSSL 0:1239e9b70ca2 591 subl(13) ^= subl(1); subr(13) ^= subr(1);
wolfSSL 0:1239e9b70ca2 592 subl(15) ^= subl(1); subr(15) ^= subr(1);
wolfSSL 0:1239e9b70ca2 593 subl(1) ^= subr(1) & ~subr(17);
wolfSSL 0:1239e9b70ca2 594 dw = subl(1) & subl(17), subr(1) ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 595 subl(19) ^= subl(1); subr(19) ^= subr(1);
wolfSSL 0:1239e9b70ca2 596 subl(21) ^= subl(1); subr(21) ^= subr(1);
wolfSSL 0:1239e9b70ca2 597 subl(23) ^= subl(1); subr(23) ^= subr(1);
wolfSSL 0:1239e9b70ca2 598 subl(24) ^= subl(1); subr(24) ^= subr(1);
wolfSSL 0:1239e9b70ca2 599
wolfSSL 0:1239e9b70ca2 600 /* absorb kw4 to other subkeys */
wolfSSL 0:1239e9b70ca2 601 kw4l = subl(25); kw4r = subr(25);
wolfSSL 0:1239e9b70ca2 602 subl(22) ^= kw4l; subr(22) ^= kw4r;
wolfSSL 0:1239e9b70ca2 603 subl(20) ^= kw4l; subr(20) ^= kw4r;
wolfSSL 0:1239e9b70ca2 604 subl(18) ^= kw4l; subr(18) ^= kw4r;
wolfSSL 0:1239e9b70ca2 605 kw4l ^= kw4r & ~subr(16);
wolfSSL 0:1239e9b70ca2 606 dw = kw4l & subl(16), kw4r ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 607 subl(14) ^= kw4l; subr(14) ^= kw4r;
wolfSSL 0:1239e9b70ca2 608 subl(12) ^= kw4l; subr(12) ^= kw4r;
wolfSSL 0:1239e9b70ca2 609 subl(10) ^= kw4l; subr(10) ^= kw4r;
wolfSSL 0:1239e9b70ca2 610 kw4l ^= kw4r & ~subr(8);
wolfSSL 0:1239e9b70ca2 611 dw = kw4l & subl(8), kw4r ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 612 subl(6) ^= kw4l; subr(6) ^= kw4r;
wolfSSL 0:1239e9b70ca2 613 subl(4) ^= kw4l; subr(4) ^= kw4r;
wolfSSL 0:1239e9b70ca2 614 subl(2) ^= kw4l; subr(2) ^= kw4r;
wolfSSL 0:1239e9b70ca2 615 subl(0) ^= kw4l; subr(0) ^= kw4r;
wolfSSL 0:1239e9b70ca2 616
wolfSSL 0:1239e9b70ca2 617 /* key XOR is end of F-function */
wolfSSL 0:1239e9b70ca2 618 CamelliaSubkeyL(0) = subl(0) ^ subl(2);
wolfSSL 0:1239e9b70ca2 619 CamelliaSubkeyR(0) = subr(0) ^ subr(2);
wolfSSL 0:1239e9b70ca2 620 CamelliaSubkeyL(2) = subl(3);
wolfSSL 0:1239e9b70ca2 621 CamelliaSubkeyR(2) = subr(3);
wolfSSL 0:1239e9b70ca2 622 CamelliaSubkeyL(3) = subl(2) ^ subl(4);
wolfSSL 0:1239e9b70ca2 623 CamelliaSubkeyR(3) = subr(2) ^ subr(4);
wolfSSL 0:1239e9b70ca2 624 CamelliaSubkeyL(4) = subl(3) ^ subl(5);
wolfSSL 0:1239e9b70ca2 625 CamelliaSubkeyR(4) = subr(3) ^ subr(5);
wolfSSL 0:1239e9b70ca2 626 CamelliaSubkeyL(5) = subl(4) ^ subl(6);
wolfSSL 0:1239e9b70ca2 627 CamelliaSubkeyR(5) = subr(4) ^ subr(6);
wolfSSL 0:1239e9b70ca2 628 CamelliaSubkeyL(6) = subl(5) ^ subl(7);
wolfSSL 0:1239e9b70ca2 629 CamelliaSubkeyR(6) = subr(5) ^ subr(7);
wolfSSL 0:1239e9b70ca2 630 tl = subl(10) ^ (subr(10) & ~subr(8));
wolfSSL 0:1239e9b70ca2 631 dw = tl & subl(8), tr = subr(10) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 632 CamelliaSubkeyL(7) = subl(6) ^ tl;
wolfSSL 0:1239e9b70ca2 633 CamelliaSubkeyR(7) = subr(6) ^ tr;
wolfSSL 0:1239e9b70ca2 634 CamelliaSubkeyL(8) = subl(8);
wolfSSL 0:1239e9b70ca2 635 CamelliaSubkeyR(8) = subr(8);
wolfSSL 0:1239e9b70ca2 636 CamelliaSubkeyL(9) = subl(9);
wolfSSL 0:1239e9b70ca2 637 CamelliaSubkeyR(9) = subr(9);
wolfSSL 0:1239e9b70ca2 638 tl = subl(7) ^ (subr(7) & ~subr(9));
wolfSSL 0:1239e9b70ca2 639 dw = tl & subl(9), tr = subr(7) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 640 CamelliaSubkeyL(10) = tl ^ subl(11);
wolfSSL 0:1239e9b70ca2 641 CamelliaSubkeyR(10) = tr ^ subr(11);
wolfSSL 0:1239e9b70ca2 642 CamelliaSubkeyL(11) = subl(10) ^ subl(12);
wolfSSL 0:1239e9b70ca2 643 CamelliaSubkeyR(11) = subr(10) ^ subr(12);
wolfSSL 0:1239e9b70ca2 644 CamelliaSubkeyL(12) = subl(11) ^ subl(13);
wolfSSL 0:1239e9b70ca2 645 CamelliaSubkeyR(12) = subr(11) ^ subr(13);
wolfSSL 0:1239e9b70ca2 646 CamelliaSubkeyL(13) = subl(12) ^ subl(14);
wolfSSL 0:1239e9b70ca2 647 CamelliaSubkeyR(13) = subr(12) ^ subr(14);
wolfSSL 0:1239e9b70ca2 648 CamelliaSubkeyL(14) = subl(13) ^ subl(15);
wolfSSL 0:1239e9b70ca2 649 CamelliaSubkeyR(14) = subr(13) ^ subr(15);
wolfSSL 0:1239e9b70ca2 650 tl = subl(18) ^ (subr(18) & ~subr(16));
wolfSSL 0:1239e9b70ca2 651 dw = tl & subl(16), tr = subr(18) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 652 CamelliaSubkeyL(15) = subl(14) ^ tl;
wolfSSL 0:1239e9b70ca2 653 CamelliaSubkeyR(15) = subr(14) ^ tr;
wolfSSL 0:1239e9b70ca2 654 CamelliaSubkeyL(16) = subl(16);
wolfSSL 0:1239e9b70ca2 655 CamelliaSubkeyR(16) = subr(16);
wolfSSL 0:1239e9b70ca2 656 CamelliaSubkeyL(17) = subl(17);
wolfSSL 0:1239e9b70ca2 657 CamelliaSubkeyR(17) = subr(17);
wolfSSL 0:1239e9b70ca2 658 tl = subl(15) ^ (subr(15) & ~subr(17));
wolfSSL 0:1239e9b70ca2 659 dw = tl & subl(17), tr = subr(15) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 660 CamelliaSubkeyL(18) = tl ^ subl(19);
wolfSSL 0:1239e9b70ca2 661 CamelliaSubkeyR(18) = tr ^ subr(19);
wolfSSL 0:1239e9b70ca2 662 CamelliaSubkeyL(19) = subl(18) ^ subl(20);
wolfSSL 0:1239e9b70ca2 663 CamelliaSubkeyR(19) = subr(18) ^ subr(20);
wolfSSL 0:1239e9b70ca2 664 CamelliaSubkeyL(20) = subl(19) ^ subl(21);
wolfSSL 0:1239e9b70ca2 665 CamelliaSubkeyR(20) = subr(19) ^ subr(21);
wolfSSL 0:1239e9b70ca2 666 CamelliaSubkeyL(21) = subl(20) ^ subl(22);
wolfSSL 0:1239e9b70ca2 667 CamelliaSubkeyR(21) = subr(20) ^ subr(22);
wolfSSL 0:1239e9b70ca2 668 CamelliaSubkeyL(22) = subl(21) ^ subl(23);
wolfSSL 0:1239e9b70ca2 669 CamelliaSubkeyR(22) = subr(21) ^ subr(23);
wolfSSL 0:1239e9b70ca2 670 CamelliaSubkeyL(23) = subl(22);
wolfSSL 0:1239e9b70ca2 671 CamelliaSubkeyR(23) = subr(22);
wolfSSL 0:1239e9b70ca2 672 CamelliaSubkeyL(24) = subl(24) ^ subl(23);
wolfSSL 0:1239e9b70ca2 673 CamelliaSubkeyR(24) = subr(24) ^ subr(23);
wolfSSL 0:1239e9b70ca2 674
wolfSSL 0:1239e9b70ca2 675 /* apply the inverse of the last half of P-function */
wolfSSL 0:1239e9b70ca2 676 dw = CamelliaSubkeyL(2) ^ CamelliaSubkeyR(2), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 677 CamelliaSubkeyR(2) = CamelliaSubkeyL(2) ^ dw, CamelliaSubkeyL(2) = dw;
wolfSSL 0:1239e9b70ca2 678 dw = CamelliaSubkeyL(3) ^ CamelliaSubkeyR(3), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 679 CamelliaSubkeyR(3) = CamelliaSubkeyL(3) ^ dw, CamelliaSubkeyL(3) = dw;
wolfSSL 0:1239e9b70ca2 680 dw = CamelliaSubkeyL(4) ^ CamelliaSubkeyR(4), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 681 CamelliaSubkeyR(4) = CamelliaSubkeyL(4) ^ dw, CamelliaSubkeyL(4) = dw;
wolfSSL 0:1239e9b70ca2 682 dw = CamelliaSubkeyL(5) ^ CamelliaSubkeyR(5), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 683 CamelliaSubkeyR(5) = CamelliaSubkeyL(5) ^ dw, CamelliaSubkeyL(5) = dw;
wolfSSL 0:1239e9b70ca2 684 dw = CamelliaSubkeyL(6) ^ CamelliaSubkeyR(6), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 685 CamelliaSubkeyR(6) = CamelliaSubkeyL(6) ^ dw, CamelliaSubkeyL(6) = dw;
wolfSSL 0:1239e9b70ca2 686 dw = CamelliaSubkeyL(7) ^ CamelliaSubkeyR(7), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 687 CamelliaSubkeyR(7) = CamelliaSubkeyL(7) ^ dw, CamelliaSubkeyL(7) = dw;
wolfSSL 0:1239e9b70ca2 688 dw = CamelliaSubkeyL(10) ^ CamelliaSubkeyR(10), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 689 CamelliaSubkeyR(10) = CamelliaSubkeyL(10) ^ dw, CamelliaSubkeyL(10) = dw;
wolfSSL 0:1239e9b70ca2 690 dw = CamelliaSubkeyL(11) ^ CamelliaSubkeyR(11), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 691 CamelliaSubkeyR(11) = CamelliaSubkeyL(11) ^ dw, CamelliaSubkeyL(11) = dw;
wolfSSL 0:1239e9b70ca2 692 dw = CamelliaSubkeyL(12) ^ CamelliaSubkeyR(12), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 693 CamelliaSubkeyR(12) = CamelliaSubkeyL(12) ^ dw, CamelliaSubkeyL(12) = dw;
wolfSSL 0:1239e9b70ca2 694 dw = CamelliaSubkeyL(13) ^ CamelliaSubkeyR(13), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 695 CamelliaSubkeyR(13) = CamelliaSubkeyL(13) ^ dw, CamelliaSubkeyL(13) = dw;
wolfSSL 0:1239e9b70ca2 696 dw = CamelliaSubkeyL(14) ^ CamelliaSubkeyR(14), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 697 CamelliaSubkeyR(14) = CamelliaSubkeyL(14) ^ dw, CamelliaSubkeyL(14) = dw;
wolfSSL 0:1239e9b70ca2 698 dw = CamelliaSubkeyL(15) ^ CamelliaSubkeyR(15), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 699 CamelliaSubkeyR(15) = CamelliaSubkeyL(15) ^ dw, CamelliaSubkeyL(15) = dw;
wolfSSL 0:1239e9b70ca2 700 dw = CamelliaSubkeyL(18) ^ CamelliaSubkeyR(18), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 701 CamelliaSubkeyR(18) = CamelliaSubkeyL(18) ^ dw, CamelliaSubkeyL(18) = dw;
wolfSSL 0:1239e9b70ca2 702 dw = CamelliaSubkeyL(19) ^ CamelliaSubkeyR(19), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 703 CamelliaSubkeyR(19) = CamelliaSubkeyL(19) ^ dw, CamelliaSubkeyL(19) = dw;
wolfSSL 0:1239e9b70ca2 704 dw = CamelliaSubkeyL(20) ^ CamelliaSubkeyR(20), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 705 CamelliaSubkeyR(20) = CamelliaSubkeyL(20) ^ dw, CamelliaSubkeyL(20) = dw;
wolfSSL 0:1239e9b70ca2 706 dw = CamelliaSubkeyL(21) ^ CamelliaSubkeyR(21), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 707 CamelliaSubkeyR(21) = CamelliaSubkeyL(21) ^ dw, CamelliaSubkeyL(21) = dw;
wolfSSL 0:1239e9b70ca2 708 dw = CamelliaSubkeyL(22) ^ CamelliaSubkeyR(22), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 709 CamelliaSubkeyR(22) = CamelliaSubkeyL(22) ^ dw, CamelliaSubkeyL(22) = dw;
wolfSSL 0:1239e9b70ca2 710 dw = CamelliaSubkeyL(23) ^ CamelliaSubkeyR(23), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 711 CamelliaSubkeyR(23) = CamelliaSubkeyL(23) ^ dw, CamelliaSubkeyL(23) = dw;
wolfSSL 0:1239e9b70ca2 712
wolfSSL 0:1239e9b70ca2 713 #ifdef CYASSL_SMALL_STACK
wolfSSL 0:1239e9b70ca2 714 XFREE(subL, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 715 XFREE(subR, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 716 #endif
wolfSSL 0:1239e9b70ca2 717
wolfSSL 0:1239e9b70ca2 718 return 0;
wolfSSL 0:1239e9b70ca2 719 }
wolfSSL 0:1239e9b70ca2 720
wolfSSL 0:1239e9b70ca2 721 static int camellia_setup256(const unsigned char *key, u32 *subkey)
wolfSSL 0:1239e9b70ca2 722 {
wolfSSL 0:1239e9b70ca2 723 u32 kll,klr,krl,krr; /* left half of key */
wolfSSL 0:1239e9b70ca2 724 u32 krll,krlr,krrl,krrr; /* right half of key */
wolfSSL 0:1239e9b70ca2 725 u32 il, ir, t0, t1, w0, w1; /* temporary variables */
wolfSSL 0:1239e9b70ca2 726 u32 kw4l, kw4r, dw, tl, tr;
wolfSSL 0:1239e9b70ca2 727
wolfSSL 0:1239e9b70ca2 728 #ifdef CYASSL_SMALL_STACK
wolfSSL 0:1239e9b70ca2 729 u32* subL;
wolfSSL 0:1239e9b70ca2 730 u32* subR;
wolfSSL 0:1239e9b70ca2 731
wolfSSL 0:1239e9b70ca2 732 subL = (u32*) XMALLOC(sizeof(u32) * 34, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 733 if (subL == NULL)
wolfSSL 0:1239e9b70ca2 734 return MEMORY_E;
wolfSSL 0:1239e9b70ca2 735
wolfSSL 0:1239e9b70ca2 736 subR = (u32*) XMALLOC(sizeof(u32) * 34, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 737 if (subR == NULL) {
wolfSSL 0:1239e9b70ca2 738 XFREE(subL, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 739 return MEMORY_E;
wolfSSL 0:1239e9b70ca2 740 }
wolfSSL 0:1239e9b70ca2 741 #else
wolfSSL 0:1239e9b70ca2 742 u32 subL[34];
wolfSSL 0:1239e9b70ca2 743 u32 subR[34];
wolfSSL 0:1239e9b70ca2 744 #endif
wolfSSL 0:1239e9b70ca2 745
wolfSSL 0:1239e9b70ca2 746 /**
wolfSSL 0:1239e9b70ca2 747 * key = (kll || klr || krl || krr || krll || krlr || krrl || krrr)
wolfSSL 0:1239e9b70ca2 748 * (|| is concatination)
wolfSSL 0:1239e9b70ca2 749 */
wolfSSL 0:1239e9b70ca2 750
wolfSSL 0:1239e9b70ca2 751 kll = GETU32(key );
wolfSSL 0:1239e9b70ca2 752 klr = GETU32(key + 4);
wolfSSL 0:1239e9b70ca2 753 krl = GETU32(key + 8);
wolfSSL 0:1239e9b70ca2 754 krr = GETU32(key + 12);
wolfSSL 0:1239e9b70ca2 755 krll = GETU32(key + 16);
wolfSSL 0:1239e9b70ca2 756 krlr = GETU32(key + 20);
wolfSSL 0:1239e9b70ca2 757 krrl = GETU32(key + 24);
wolfSSL 0:1239e9b70ca2 758 krrr = GETU32(key + 28);
wolfSSL 0:1239e9b70ca2 759
wolfSSL 0:1239e9b70ca2 760 /* generate KL dependent subkeys */
wolfSSL 0:1239e9b70ca2 761 subl(0) = kll; subr(0) = klr;
wolfSSL 0:1239e9b70ca2 762 subl(1) = krl; subr(1) = krr;
wolfSSL 0:1239e9b70ca2 763 CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 45);
wolfSSL 0:1239e9b70ca2 764 subl(12) = kll; subr(12) = klr;
wolfSSL 0:1239e9b70ca2 765 subl(13) = krl; subr(13) = krr;
wolfSSL 0:1239e9b70ca2 766 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 767 subl(16) = kll; subr(16) = klr;
wolfSSL 0:1239e9b70ca2 768 subl(17) = krl; subr(17) = krr;
wolfSSL 0:1239e9b70ca2 769 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17);
wolfSSL 0:1239e9b70ca2 770 subl(22) = kll; subr(22) = klr;
wolfSSL 0:1239e9b70ca2 771 subl(23) = krl; subr(23) = krr;
wolfSSL 0:1239e9b70ca2 772 CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 34);
wolfSSL 0:1239e9b70ca2 773 subl(30) = kll; subr(30) = klr;
wolfSSL 0:1239e9b70ca2 774 subl(31) = krl; subr(31) = krr;
wolfSSL 0:1239e9b70ca2 775
wolfSSL 0:1239e9b70ca2 776 /* generate KR dependent subkeys */
wolfSSL 0:1239e9b70ca2 777 CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 778 subl(4) = krll; subr(4) = krlr;
wolfSSL 0:1239e9b70ca2 779 subl(5) = krrl; subr(5) = krrr;
wolfSSL 0:1239e9b70ca2 780 CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 781 subl(8) = krll; subr(8) = krlr;
wolfSSL 0:1239e9b70ca2 782 subl(9) = krrl; subr(9) = krrr;
wolfSSL 0:1239e9b70ca2 783 CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30);
wolfSSL 0:1239e9b70ca2 784 subl(18) = krll; subr(18) = krlr;
wolfSSL 0:1239e9b70ca2 785 subl(19) = krrl; subr(19) = krrr;
wolfSSL 0:1239e9b70ca2 786 CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 34);
wolfSSL 0:1239e9b70ca2 787 subl(26) = krll; subr(26) = krlr;
wolfSSL 0:1239e9b70ca2 788 subl(27) = krrl; subr(27) = krrr;
wolfSSL 0:1239e9b70ca2 789 CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 34);
wolfSSL 0:1239e9b70ca2 790
wolfSSL 0:1239e9b70ca2 791 /* generate KA */
wolfSSL 0:1239e9b70ca2 792 kll = subl(0) ^ krll; klr = subr(0) ^ krlr;
wolfSSL 0:1239e9b70ca2 793 krl = subl(1) ^ krrl; krr = subr(1) ^ krrr;
wolfSSL 0:1239e9b70ca2 794 CAMELLIA_F(kll, klr,
wolfSSL 0:1239e9b70ca2 795 CAMELLIA_SIGMA1L, CAMELLIA_SIGMA1R,
wolfSSL 0:1239e9b70ca2 796 w0, w1, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 797 krl ^= w0; krr ^= w1;
wolfSSL 0:1239e9b70ca2 798 CAMELLIA_F(krl, krr,
wolfSSL 0:1239e9b70ca2 799 CAMELLIA_SIGMA2L, CAMELLIA_SIGMA2R,
wolfSSL 0:1239e9b70ca2 800 kll, klr, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 801 kll ^= krll; klr ^= krlr;
wolfSSL 0:1239e9b70ca2 802 CAMELLIA_F(kll, klr,
wolfSSL 0:1239e9b70ca2 803 CAMELLIA_SIGMA3L, CAMELLIA_SIGMA3R,
wolfSSL 0:1239e9b70ca2 804 krl, krr, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 805 krl ^= w0 ^ krrl; krr ^= w1 ^ krrr;
wolfSSL 0:1239e9b70ca2 806 CAMELLIA_F(krl, krr,
wolfSSL 0:1239e9b70ca2 807 CAMELLIA_SIGMA4L, CAMELLIA_SIGMA4R,
wolfSSL 0:1239e9b70ca2 808 w0, w1, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 809 kll ^= w0; klr ^= w1;
wolfSSL 0:1239e9b70ca2 810
wolfSSL 0:1239e9b70ca2 811 /* generate KB */
wolfSSL 0:1239e9b70ca2 812 krll ^= kll; krlr ^= klr;
wolfSSL 0:1239e9b70ca2 813 krrl ^= krl; krrr ^= krr;
wolfSSL 0:1239e9b70ca2 814 CAMELLIA_F(krll, krlr,
wolfSSL 0:1239e9b70ca2 815 CAMELLIA_SIGMA5L, CAMELLIA_SIGMA5R,
wolfSSL 0:1239e9b70ca2 816 w0, w1, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 817 krrl ^= w0; krrr ^= w1;
wolfSSL 0:1239e9b70ca2 818 CAMELLIA_F(krrl, krrr,
wolfSSL 0:1239e9b70ca2 819 CAMELLIA_SIGMA6L, CAMELLIA_SIGMA6R,
wolfSSL 0:1239e9b70ca2 820 w0, w1, il, ir, t0, t1);
wolfSSL 0:1239e9b70ca2 821 krll ^= w0; krlr ^= w1;
wolfSSL 0:1239e9b70ca2 822
wolfSSL 0:1239e9b70ca2 823 /* generate KA dependent subkeys */
wolfSSL 0:1239e9b70ca2 824 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15);
wolfSSL 0:1239e9b70ca2 825 subl(6) = kll; subr(6) = klr;
wolfSSL 0:1239e9b70ca2 826 subl(7) = krl; subr(7) = krr;
wolfSSL 0:1239e9b70ca2 827 CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 30);
wolfSSL 0:1239e9b70ca2 828 subl(14) = kll; subr(14) = klr;
wolfSSL 0:1239e9b70ca2 829 subl(15) = krl; subr(15) = krr;
wolfSSL 0:1239e9b70ca2 830 subl(24) = klr; subr(24) = krl;
wolfSSL 0:1239e9b70ca2 831 subl(25) = krr; subr(25) = kll;
wolfSSL 0:1239e9b70ca2 832 CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 49);
wolfSSL 0:1239e9b70ca2 833 subl(28) = kll; subr(28) = klr;
wolfSSL 0:1239e9b70ca2 834 subl(29) = krl; subr(29) = krr;
wolfSSL 0:1239e9b70ca2 835
wolfSSL 0:1239e9b70ca2 836 /* generate KB dependent subkeys */
wolfSSL 0:1239e9b70ca2 837 subl(2) = krll; subr(2) = krlr;
wolfSSL 0:1239e9b70ca2 838 subl(3) = krrl; subr(3) = krrr;
wolfSSL 0:1239e9b70ca2 839 CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30);
wolfSSL 0:1239e9b70ca2 840 subl(10) = krll; subr(10) = krlr;
wolfSSL 0:1239e9b70ca2 841 subl(11) = krrl; subr(11) = krrr;
wolfSSL 0:1239e9b70ca2 842 CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30);
wolfSSL 0:1239e9b70ca2 843 subl(20) = krll; subr(20) = krlr;
wolfSSL 0:1239e9b70ca2 844 subl(21) = krrl; subr(21) = krrr;
wolfSSL 0:1239e9b70ca2 845 CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 51);
wolfSSL 0:1239e9b70ca2 846 subl(32) = krll; subr(32) = krlr;
wolfSSL 0:1239e9b70ca2 847 subl(33) = krrl; subr(33) = krrr;
wolfSSL 0:1239e9b70ca2 848
wolfSSL 0:1239e9b70ca2 849 /* absorb kw2 to other subkeys */
wolfSSL 0:1239e9b70ca2 850 subl(3) ^= subl(1); subr(3) ^= subr(1);
wolfSSL 0:1239e9b70ca2 851 subl(5) ^= subl(1); subr(5) ^= subr(1);
wolfSSL 0:1239e9b70ca2 852 subl(7) ^= subl(1); subr(7) ^= subr(1);
wolfSSL 0:1239e9b70ca2 853 subl(1) ^= subr(1) & ~subr(9);
wolfSSL 0:1239e9b70ca2 854 dw = subl(1) & subl(9), subr(1) ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 855 subl(11) ^= subl(1); subr(11) ^= subr(1);
wolfSSL 0:1239e9b70ca2 856 subl(13) ^= subl(1); subr(13) ^= subr(1);
wolfSSL 0:1239e9b70ca2 857 subl(15) ^= subl(1); subr(15) ^= subr(1);
wolfSSL 0:1239e9b70ca2 858 subl(1) ^= subr(1) & ~subr(17);
wolfSSL 0:1239e9b70ca2 859 dw = subl(1) & subl(17), subr(1) ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 860 subl(19) ^= subl(1); subr(19) ^= subr(1);
wolfSSL 0:1239e9b70ca2 861 subl(21) ^= subl(1); subr(21) ^= subr(1);
wolfSSL 0:1239e9b70ca2 862 subl(23) ^= subl(1); subr(23) ^= subr(1);
wolfSSL 0:1239e9b70ca2 863 subl(1) ^= subr(1) & ~subr(25);
wolfSSL 0:1239e9b70ca2 864 dw = subl(1) & subl(25), subr(1) ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 865 subl(27) ^= subl(1); subr(27) ^= subr(1);
wolfSSL 0:1239e9b70ca2 866 subl(29) ^= subl(1); subr(29) ^= subr(1);
wolfSSL 0:1239e9b70ca2 867 subl(31) ^= subl(1); subr(31) ^= subr(1);
wolfSSL 0:1239e9b70ca2 868 subl(32) ^= subl(1); subr(32) ^= subr(1);
wolfSSL 0:1239e9b70ca2 869
wolfSSL 0:1239e9b70ca2 870 /* absorb kw4 to other subkeys */
wolfSSL 0:1239e9b70ca2 871 kw4l = subl(33); kw4r = subr(33);
wolfSSL 0:1239e9b70ca2 872 subl(30) ^= kw4l; subr(30) ^= kw4r;
wolfSSL 0:1239e9b70ca2 873 subl(28) ^= kw4l; subr(28) ^= kw4r;
wolfSSL 0:1239e9b70ca2 874 subl(26) ^= kw4l; subr(26) ^= kw4r;
wolfSSL 0:1239e9b70ca2 875 kw4l ^= kw4r & ~subr(24);
wolfSSL 0:1239e9b70ca2 876 dw = kw4l & subl(24), kw4r ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 877 subl(22) ^= kw4l; subr(22) ^= kw4r;
wolfSSL 0:1239e9b70ca2 878 subl(20) ^= kw4l; subr(20) ^= kw4r;
wolfSSL 0:1239e9b70ca2 879 subl(18) ^= kw4l; subr(18) ^= kw4r;
wolfSSL 0:1239e9b70ca2 880 kw4l ^= kw4r & ~subr(16);
wolfSSL 0:1239e9b70ca2 881 dw = kw4l & subl(16), kw4r ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 882 subl(14) ^= kw4l; subr(14) ^= kw4r;
wolfSSL 0:1239e9b70ca2 883 subl(12) ^= kw4l; subr(12) ^= kw4r;
wolfSSL 0:1239e9b70ca2 884 subl(10) ^= kw4l; subr(10) ^= kw4r;
wolfSSL 0:1239e9b70ca2 885 kw4l ^= kw4r & ~subr(8);
wolfSSL 0:1239e9b70ca2 886 dw = kw4l & subl(8), kw4r ^= CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 887 subl(6) ^= kw4l; subr(6) ^= kw4r;
wolfSSL 0:1239e9b70ca2 888 subl(4) ^= kw4l; subr(4) ^= kw4r;
wolfSSL 0:1239e9b70ca2 889 subl(2) ^= kw4l; subr(2) ^= kw4r;
wolfSSL 0:1239e9b70ca2 890 subl(0) ^= kw4l; subr(0) ^= kw4r;
wolfSSL 0:1239e9b70ca2 891
wolfSSL 0:1239e9b70ca2 892 /* key XOR is end of F-function */
wolfSSL 0:1239e9b70ca2 893 CamelliaSubkeyL(0) = subl(0) ^ subl(2);
wolfSSL 0:1239e9b70ca2 894 CamelliaSubkeyR(0) = subr(0) ^ subr(2);
wolfSSL 0:1239e9b70ca2 895 CamelliaSubkeyL(2) = subl(3);
wolfSSL 0:1239e9b70ca2 896 CamelliaSubkeyR(2) = subr(3);
wolfSSL 0:1239e9b70ca2 897 CamelliaSubkeyL(3) = subl(2) ^ subl(4);
wolfSSL 0:1239e9b70ca2 898 CamelliaSubkeyR(3) = subr(2) ^ subr(4);
wolfSSL 0:1239e9b70ca2 899 CamelliaSubkeyL(4) = subl(3) ^ subl(5);
wolfSSL 0:1239e9b70ca2 900 CamelliaSubkeyR(4) = subr(3) ^ subr(5);
wolfSSL 0:1239e9b70ca2 901 CamelliaSubkeyL(5) = subl(4) ^ subl(6);
wolfSSL 0:1239e9b70ca2 902 CamelliaSubkeyR(5) = subr(4) ^ subr(6);
wolfSSL 0:1239e9b70ca2 903 CamelliaSubkeyL(6) = subl(5) ^ subl(7);
wolfSSL 0:1239e9b70ca2 904 CamelliaSubkeyR(6) = subr(5) ^ subr(7);
wolfSSL 0:1239e9b70ca2 905 tl = subl(10) ^ (subr(10) & ~subr(8));
wolfSSL 0:1239e9b70ca2 906 dw = tl & subl(8), tr = subr(10) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 907 CamelliaSubkeyL(7) = subl(6) ^ tl;
wolfSSL 0:1239e9b70ca2 908 CamelliaSubkeyR(7) = subr(6) ^ tr;
wolfSSL 0:1239e9b70ca2 909 CamelliaSubkeyL(8) = subl(8);
wolfSSL 0:1239e9b70ca2 910 CamelliaSubkeyR(8) = subr(8);
wolfSSL 0:1239e9b70ca2 911 CamelliaSubkeyL(9) = subl(9);
wolfSSL 0:1239e9b70ca2 912 CamelliaSubkeyR(9) = subr(9);
wolfSSL 0:1239e9b70ca2 913 tl = subl(7) ^ (subr(7) & ~subr(9));
wolfSSL 0:1239e9b70ca2 914 dw = tl & subl(9), tr = subr(7) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 915 CamelliaSubkeyL(10) = tl ^ subl(11);
wolfSSL 0:1239e9b70ca2 916 CamelliaSubkeyR(10) = tr ^ subr(11);
wolfSSL 0:1239e9b70ca2 917 CamelliaSubkeyL(11) = subl(10) ^ subl(12);
wolfSSL 0:1239e9b70ca2 918 CamelliaSubkeyR(11) = subr(10) ^ subr(12);
wolfSSL 0:1239e9b70ca2 919 CamelliaSubkeyL(12) = subl(11) ^ subl(13);
wolfSSL 0:1239e9b70ca2 920 CamelliaSubkeyR(12) = subr(11) ^ subr(13);
wolfSSL 0:1239e9b70ca2 921 CamelliaSubkeyL(13) = subl(12) ^ subl(14);
wolfSSL 0:1239e9b70ca2 922 CamelliaSubkeyR(13) = subr(12) ^ subr(14);
wolfSSL 0:1239e9b70ca2 923 CamelliaSubkeyL(14) = subl(13) ^ subl(15);
wolfSSL 0:1239e9b70ca2 924 CamelliaSubkeyR(14) = subr(13) ^ subr(15);
wolfSSL 0:1239e9b70ca2 925 tl = subl(18) ^ (subr(18) & ~subr(16));
wolfSSL 0:1239e9b70ca2 926 dw = tl & subl(16), tr = subr(18) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 927 CamelliaSubkeyL(15) = subl(14) ^ tl;
wolfSSL 0:1239e9b70ca2 928 CamelliaSubkeyR(15) = subr(14) ^ tr;
wolfSSL 0:1239e9b70ca2 929 CamelliaSubkeyL(16) = subl(16);
wolfSSL 0:1239e9b70ca2 930 CamelliaSubkeyR(16) = subr(16);
wolfSSL 0:1239e9b70ca2 931 CamelliaSubkeyL(17) = subl(17);
wolfSSL 0:1239e9b70ca2 932 CamelliaSubkeyR(17) = subr(17);
wolfSSL 0:1239e9b70ca2 933 tl = subl(15) ^ (subr(15) & ~subr(17));
wolfSSL 0:1239e9b70ca2 934 dw = tl & subl(17), tr = subr(15) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 935 CamelliaSubkeyL(18) = tl ^ subl(19);
wolfSSL 0:1239e9b70ca2 936 CamelliaSubkeyR(18) = tr ^ subr(19);
wolfSSL 0:1239e9b70ca2 937 CamelliaSubkeyL(19) = subl(18) ^ subl(20);
wolfSSL 0:1239e9b70ca2 938 CamelliaSubkeyR(19) = subr(18) ^ subr(20);
wolfSSL 0:1239e9b70ca2 939 CamelliaSubkeyL(20) = subl(19) ^ subl(21);
wolfSSL 0:1239e9b70ca2 940 CamelliaSubkeyR(20) = subr(19) ^ subr(21);
wolfSSL 0:1239e9b70ca2 941 CamelliaSubkeyL(21) = subl(20) ^ subl(22);
wolfSSL 0:1239e9b70ca2 942 CamelliaSubkeyR(21) = subr(20) ^ subr(22);
wolfSSL 0:1239e9b70ca2 943 CamelliaSubkeyL(22) = subl(21) ^ subl(23);
wolfSSL 0:1239e9b70ca2 944 CamelliaSubkeyR(22) = subr(21) ^ subr(23);
wolfSSL 0:1239e9b70ca2 945 tl = subl(26) ^ (subr(26) & ~subr(24));
wolfSSL 0:1239e9b70ca2 946 dw = tl & subl(24), tr = subr(26) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 947 CamelliaSubkeyL(23) = subl(22) ^ tl;
wolfSSL 0:1239e9b70ca2 948 CamelliaSubkeyR(23) = subr(22) ^ tr;
wolfSSL 0:1239e9b70ca2 949 CamelliaSubkeyL(24) = subl(24);
wolfSSL 0:1239e9b70ca2 950 CamelliaSubkeyR(24) = subr(24);
wolfSSL 0:1239e9b70ca2 951 CamelliaSubkeyL(25) = subl(25);
wolfSSL 0:1239e9b70ca2 952 CamelliaSubkeyR(25) = subr(25);
wolfSSL 0:1239e9b70ca2 953 tl = subl(23) ^ (subr(23) & ~subr(25));
wolfSSL 0:1239e9b70ca2 954 dw = tl & subl(25), tr = subr(23) ^ CAMELLIA_RL1(dw);
wolfSSL 0:1239e9b70ca2 955 CamelliaSubkeyL(26) = tl ^ subl(27);
wolfSSL 0:1239e9b70ca2 956 CamelliaSubkeyR(26) = tr ^ subr(27);
wolfSSL 0:1239e9b70ca2 957 CamelliaSubkeyL(27) = subl(26) ^ subl(28);
wolfSSL 0:1239e9b70ca2 958 CamelliaSubkeyR(27) = subr(26) ^ subr(28);
wolfSSL 0:1239e9b70ca2 959 CamelliaSubkeyL(28) = subl(27) ^ subl(29);
wolfSSL 0:1239e9b70ca2 960 CamelliaSubkeyR(28) = subr(27) ^ subr(29);
wolfSSL 0:1239e9b70ca2 961 CamelliaSubkeyL(29) = subl(28) ^ subl(30);
wolfSSL 0:1239e9b70ca2 962 CamelliaSubkeyR(29) = subr(28) ^ subr(30);
wolfSSL 0:1239e9b70ca2 963 CamelliaSubkeyL(30) = subl(29) ^ subl(31);
wolfSSL 0:1239e9b70ca2 964 CamelliaSubkeyR(30) = subr(29) ^ subr(31);
wolfSSL 0:1239e9b70ca2 965 CamelliaSubkeyL(31) = subl(30);
wolfSSL 0:1239e9b70ca2 966 CamelliaSubkeyR(31) = subr(30);
wolfSSL 0:1239e9b70ca2 967 CamelliaSubkeyL(32) = subl(32) ^ subl(31);
wolfSSL 0:1239e9b70ca2 968 CamelliaSubkeyR(32) = subr(32) ^ subr(31);
wolfSSL 0:1239e9b70ca2 969
wolfSSL 0:1239e9b70ca2 970 /* apply the inverse of the last half of P-function */
wolfSSL 0:1239e9b70ca2 971 dw = CamelliaSubkeyL(2) ^ CamelliaSubkeyR(2), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 972 CamelliaSubkeyR(2) = CamelliaSubkeyL(2) ^ dw, CamelliaSubkeyL(2) = dw;
wolfSSL 0:1239e9b70ca2 973 dw = CamelliaSubkeyL(3) ^ CamelliaSubkeyR(3), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 974 CamelliaSubkeyR(3) = CamelliaSubkeyL(3) ^ dw, CamelliaSubkeyL(3) = dw;
wolfSSL 0:1239e9b70ca2 975 dw = CamelliaSubkeyL(4) ^ CamelliaSubkeyR(4), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 976 CamelliaSubkeyR(4) = CamelliaSubkeyL(4) ^ dw, CamelliaSubkeyL(4) = dw;
wolfSSL 0:1239e9b70ca2 977 dw = CamelliaSubkeyL(5) ^ CamelliaSubkeyR(5), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 978 CamelliaSubkeyR(5) = CamelliaSubkeyL(5) ^ dw, CamelliaSubkeyL(5) = dw;
wolfSSL 0:1239e9b70ca2 979 dw = CamelliaSubkeyL(6) ^ CamelliaSubkeyR(6), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 980 CamelliaSubkeyR(6) = CamelliaSubkeyL(6) ^ dw, CamelliaSubkeyL(6) = dw;
wolfSSL 0:1239e9b70ca2 981 dw = CamelliaSubkeyL(7) ^ CamelliaSubkeyR(7), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 982 CamelliaSubkeyR(7) = CamelliaSubkeyL(7) ^ dw, CamelliaSubkeyL(7) = dw;
wolfSSL 0:1239e9b70ca2 983 dw = CamelliaSubkeyL(10) ^ CamelliaSubkeyR(10), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 984 CamelliaSubkeyR(10) = CamelliaSubkeyL(10) ^ dw, CamelliaSubkeyL(10) = dw;
wolfSSL 0:1239e9b70ca2 985 dw = CamelliaSubkeyL(11) ^ CamelliaSubkeyR(11), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 986 CamelliaSubkeyR(11) = CamelliaSubkeyL(11) ^ dw, CamelliaSubkeyL(11) = dw;
wolfSSL 0:1239e9b70ca2 987 dw = CamelliaSubkeyL(12) ^ CamelliaSubkeyR(12), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 988 CamelliaSubkeyR(12) = CamelliaSubkeyL(12) ^ dw, CamelliaSubkeyL(12) = dw;
wolfSSL 0:1239e9b70ca2 989 dw = CamelliaSubkeyL(13) ^ CamelliaSubkeyR(13), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 990 CamelliaSubkeyR(13) = CamelliaSubkeyL(13) ^ dw, CamelliaSubkeyL(13) = dw;
wolfSSL 0:1239e9b70ca2 991 dw = CamelliaSubkeyL(14) ^ CamelliaSubkeyR(14), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 992 CamelliaSubkeyR(14) = CamelliaSubkeyL(14) ^ dw, CamelliaSubkeyL(14) = dw;
wolfSSL 0:1239e9b70ca2 993 dw = CamelliaSubkeyL(15) ^ CamelliaSubkeyR(15), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 994 CamelliaSubkeyR(15) = CamelliaSubkeyL(15) ^ dw, CamelliaSubkeyL(15) = dw;
wolfSSL 0:1239e9b70ca2 995 dw = CamelliaSubkeyL(18) ^ CamelliaSubkeyR(18), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 996 CamelliaSubkeyR(18) = CamelliaSubkeyL(18) ^ dw, CamelliaSubkeyL(18) = dw;
wolfSSL 0:1239e9b70ca2 997 dw = CamelliaSubkeyL(19) ^ CamelliaSubkeyR(19), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 998 CamelliaSubkeyR(19) = CamelliaSubkeyL(19) ^ dw, CamelliaSubkeyL(19) = dw;
wolfSSL 0:1239e9b70ca2 999 dw = CamelliaSubkeyL(20) ^ CamelliaSubkeyR(20), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1000 CamelliaSubkeyR(20) = CamelliaSubkeyL(20) ^ dw, CamelliaSubkeyL(20) = dw;
wolfSSL 0:1239e9b70ca2 1001 dw = CamelliaSubkeyL(21) ^ CamelliaSubkeyR(21), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1002 CamelliaSubkeyR(21) = CamelliaSubkeyL(21) ^ dw, CamelliaSubkeyL(21) = dw;
wolfSSL 0:1239e9b70ca2 1003 dw = CamelliaSubkeyL(22) ^ CamelliaSubkeyR(22), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1004 CamelliaSubkeyR(22) = CamelliaSubkeyL(22) ^ dw, CamelliaSubkeyL(22) = dw;
wolfSSL 0:1239e9b70ca2 1005 dw = CamelliaSubkeyL(23) ^ CamelliaSubkeyR(23), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1006 CamelliaSubkeyR(23) = CamelliaSubkeyL(23) ^ dw, CamelliaSubkeyL(23) = dw;
wolfSSL 0:1239e9b70ca2 1007 dw = CamelliaSubkeyL(26) ^ CamelliaSubkeyR(26), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1008 CamelliaSubkeyR(26) = CamelliaSubkeyL(26) ^ dw, CamelliaSubkeyL(26) = dw;
wolfSSL 0:1239e9b70ca2 1009 dw = CamelliaSubkeyL(27) ^ CamelliaSubkeyR(27), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1010 CamelliaSubkeyR(27) = CamelliaSubkeyL(27) ^ dw, CamelliaSubkeyL(27) = dw;
wolfSSL 0:1239e9b70ca2 1011 dw = CamelliaSubkeyL(28) ^ CamelliaSubkeyR(28), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1012 CamelliaSubkeyR(28) = CamelliaSubkeyL(28) ^ dw, CamelliaSubkeyL(28) = dw;
wolfSSL 0:1239e9b70ca2 1013 dw = CamelliaSubkeyL(29) ^ CamelliaSubkeyR(29), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1014 CamelliaSubkeyR(29) = CamelliaSubkeyL(29) ^ dw, CamelliaSubkeyL(29) = dw;
wolfSSL 0:1239e9b70ca2 1015 dw = CamelliaSubkeyL(30) ^ CamelliaSubkeyR(30), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1016 CamelliaSubkeyR(30) = CamelliaSubkeyL(30) ^ dw, CamelliaSubkeyL(30) = dw;
wolfSSL 0:1239e9b70ca2 1017 dw = CamelliaSubkeyL(31) ^ CamelliaSubkeyR(31), dw = CAMELLIA_RL8(dw);
wolfSSL 0:1239e9b70ca2 1018 CamelliaSubkeyR(31) = CamelliaSubkeyL(31) ^ dw,CamelliaSubkeyL(31) = dw;
wolfSSL 0:1239e9b70ca2 1019
wolfSSL 0:1239e9b70ca2 1020 #ifdef CYASSL_SMALL_STACK
wolfSSL 0:1239e9b70ca2 1021 XFREE(subL, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 1022 XFREE(subR, NULL, DYNAMIC_TYPE_TMP_BUFFER);
wolfSSL 0:1239e9b70ca2 1023 #endif
wolfSSL 0:1239e9b70ca2 1024
wolfSSL 0:1239e9b70ca2 1025 return 0;
wolfSSL 0:1239e9b70ca2 1026 }
wolfSSL 0:1239e9b70ca2 1027
wolfSSL 0:1239e9b70ca2 1028 static int camellia_setup192(const unsigned char *key, u32 *subkey)
wolfSSL 0:1239e9b70ca2 1029 {
wolfSSL 0:1239e9b70ca2 1030 unsigned char kk[32];
wolfSSL 0:1239e9b70ca2 1031 u32 krll, krlr, krrl,krrr;
wolfSSL 0:1239e9b70ca2 1032
wolfSSL 0:1239e9b70ca2 1033 memcpy(kk, key, 24);
wolfSSL 0:1239e9b70ca2 1034 memcpy((unsigned char *)&krll, key+16,4);
wolfSSL 0:1239e9b70ca2 1035 memcpy((unsigned char *)&krlr, key+20,4);
wolfSSL 0:1239e9b70ca2 1036 krrl = ~krll;
wolfSSL 0:1239e9b70ca2 1037 krrr = ~krlr;
wolfSSL 0:1239e9b70ca2 1038 memcpy(kk+24, (unsigned char *)&krrl, 4);
wolfSSL 0:1239e9b70ca2 1039 memcpy(kk+28, (unsigned char *)&krrr, 4);
wolfSSL 0:1239e9b70ca2 1040
wolfSSL 0:1239e9b70ca2 1041 return camellia_setup256(kk, subkey);
wolfSSL 0:1239e9b70ca2 1042 }
wolfSSL 0:1239e9b70ca2 1043
wolfSSL 0:1239e9b70ca2 1044
wolfSSL 0:1239e9b70ca2 1045 /**
wolfSSL 0:1239e9b70ca2 1046 * Stuff related to camellia encryption/decryption
wolfSSL 0:1239e9b70ca2 1047 *
wolfSSL 0:1239e9b70ca2 1048 * "io" must be 4byte aligned and big-endian data.
wolfSSL 0:1239e9b70ca2 1049 */
wolfSSL 0:1239e9b70ca2 1050 static void camellia_encrypt128(const u32 *subkey, u32 *io)
wolfSSL 0:1239e9b70ca2 1051 {
wolfSSL 0:1239e9b70ca2 1052 u32 il, ir, t0, t1;
wolfSSL 0:1239e9b70ca2 1053
wolfSSL 0:1239e9b70ca2 1054 /* pre whitening but absorb kw2*/
wolfSSL 0:1239e9b70ca2 1055 io[0] ^= CamelliaSubkeyL(0);
wolfSSL 0:1239e9b70ca2 1056 io[1] ^= CamelliaSubkeyR(0);
wolfSSL 0:1239e9b70ca2 1057 /* main iteration */
wolfSSL 0:1239e9b70ca2 1058
wolfSSL 0:1239e9b70ca2 1059 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1060 CamelliaSubkeyL(2),CamelliaSubkeyR(2),
wolfSSL 0:1239e9b70ca2 1061 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1062 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1063 CamelliaSubkeyL(3),CamelliaSubkeyR(3),
wolfSSL 0:1239e9b70ca2 1064 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1065 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1066 CamelliaSubkeyL(4),CamelliaSubkeyR(4),
wolfSSL 0:1239e9b70ca2 1067 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1068 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1069 CamelliaSubkeyL(5),CamelliaSubkeyR(5),
wolfSSL 0:1239e9b70ca2 1070 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1071 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1072 CamelliaSubkeyL(6),CamelliaSubkeyR(6),
wolfSSL 0:1239e9b70ca2 1073 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1074 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1075 CamelliaSubkeyL(7),CamelliaSubkeyR(7),
wolfSSL 0:1239e9b70ca2 1076 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1077
wolfSSL 0:1239e9b70ca2 1078 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1079 CamelliaSubkeyL(8),CamelliaSubkeyR(8),
wolfSSL 0:1239e9b70ca2 1080 CamelliaSubkeyL(9),CamelliaSubkeyR(9),
wolfSSL 0:1239e9b70ca2 1081 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1082
wolfSSL 0:1239e9b70ca2 1083 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1084 CamelliaSubkeyL(10),CamelliaSubkeyR(10),
wolfSSL 0:1239e9b70ca2 1085 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1086 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1087 CamelliaSubkeyL(11),CamelliaSubkeyR(11),
wolfSSL 0:1239e9b70ca2 1088 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1089 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1090 CamelliaSubkeyL(12),CamelliaSubkeyR(12),
wolfSSL 0:1239e9b70ca2 1091 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1092 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1093 CamelliaSubkeyL(13),CamelliaSubkeyR(13),
wolfSSL 0:1239e9b70ca2 1094 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1095 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1096 CamelliaSubkeyL(14),CamelliaSubkeyR(14),
wolfSSL 0:1239e9b70ca2 1097 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1098 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1099 CamelliaSubkeyL(15),CamelliaSubkeyR(15),
wolfSSL 0:1239e9b70ca2 1100 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1101
wolfSSL 0:1239e9b70ca2 1102 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1103 CamelliaSubkeyL(16),CamelliaSubkeyR(16),
wolfSSL 0:1239e9b70ca2 1104 CamelliaSubkeyL(17),CamelliaSubkeyR(17),
wolfSSL 0:1239e9b70ca2 1105 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1106
wolfSSL 0:1239e9b70ca2 1107 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1108 CamelliaSubkeyL(18),CamelliaSubkeyR(18),
wolfSSL 0:1239e9b70ca2 1109 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1110 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1111 CamelliaSubkeyL(19),CamelliaSubkeyR(19),
wolfSSL 0:1239e9b70ca2 1112 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1113 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1114 CamelliaSubkeyL(20),CamelliaSubkeyR(20),
wolfSSL 0:1239e9b70ca2 1115 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1116 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1117 CamelliaSubkeyL(21),CamelliaSubkeyR(21),
wolfSSL 0:1239e9b70ca2 1118 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1119 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1120 CamelliaSubkeyL(22),CamelliaSubkeyR(22),
wolfSSL 0:1239e9b70ca2 1121 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1122 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1123 CamelliaSubkeyL(23),CamelliaSubkeyR(23),
wolfSSL 0:1239e9b70ca2 1124 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1125
wolfSSL 0:1239e9b70ca2 1126 /* post whitening but kw4 */
wolfSSL 0:1239e9b70ca2 1127 io[2] ^= CamelliaSubkeyL(24);
wolfSSL 0:1239e9b70ca2 1128 io[3] ^= CamelliaSubkeyR(24);
wolfSSL 0:1239e9b70ca2 1129
wolfSSL 0:1239e9b70ca2 1130 t0 = io[0];
wolfSSL 0:1239e9b70ca2 1131 t1 = io[1];
wolfSSL 0:1239e9b70ca2 1132 io[0] = io[2];
wolfSSL 0:1239e9b70ca2 1133 io[1] = io[3];
wolfSSL 0:1239e9b70ca2 1134 io[2] = t0;
wolfSSL 0:1239e9b70ca2 1135 io[3] = t1;
wolfSSL 0:1239e9b70ca2 1136
wolfSSL 0:1239e9b70ca2 1137 return;
wolfSSL 0:1239e9b70ca2 1138 }
wolfSSL 0:1239e9b70ca2 1139
wolfSSL 0:1239e9b70ca2 1140 static void camellia_decrypt128(const u32 *subkey, u32 *io)
wolfSSL 0:1239e9b70ca2 1141 {
wolfSSL 0:1239e9b70ca2 1142 u32 il,ir,t0,t1; /* temporary valiables */
wolfSSL 0:1239e9b70ca2 1143
wolfSSL 0:1239e9b70ca2 1144 /* pre whitening but absorb kw2*/
wolfSSL 0:1239e9b70ca2 1145 io[0] ^= CamelliaSubkeyL(24);
wolfSSL 0:1239e9b70ca2 1146 io[1] ^= CamelliaSubkeyR(24);
wolfSSL 0:1239e9b70ca2 1147
wolfSSL 0:1239e9b70ca2 1148 /* main iteration */
wolfSSL 0:1239e9b70ca2 1149 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1150 CamelliaSubkeyL(23),CamelliaSubkeyR(23),
wolfSSL 0:1239e9b70ca2 1151 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1152 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1153 CamelliaSubkeyL(22),CamelliaSubkeyR(22),
wolfSSL 0:1239e9b70ca2 1154 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1155 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1156 CamelliaSubkeyL(21),CamelliaSubkeyR(21),
wolfSSL 0:1239e9b70ca2 1157 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1158 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1159 CamelliaSubkeyL(20),CamelliaSubkeyR(20),
wolfSSL 0:1239e9b70ca2 1160 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1161 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1162 CamelliaSubkeyL(19),CamelliaSubkeyR(19),
wolfSSL 0:1239e9b70ca2 1163 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1164 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1165 CamelliaSubkeyL(18),CamelliaSubkeyR(18),
wolfSSL 0:1239e9b70ca2 1166 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1167
wolfSSL 0:1239e9b70ca2 1168 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1169 CamelliaSubkeyL(17),CamelliaSubkeyR(17),
wolfSSL 0:1239e9b70ca2 1170 CamelliaSubkeyL(16),CamelliaSubkeyR(16),
wolfSSL 0:1239e9b70ca2 1171 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1172
wolfSSL 0:1239e9b70ca2 1173 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1174 CamelliaSubkeyL(15),CamelliaSubkeyR(15),
wolfSSL 0:1239e9b70ca2 1175 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1176 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1177 CamelliaSubkeyL(14),CamelliaSubkeyR(14),
wolfSSL 0:1239e9b70ca2 1178 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1179 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1180 CamelliaSubkeyL(13),CamelliaSubkeyR(13),
wolfSSL 0:1239e9b70ca2 1181 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1182 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1183 CamelliaSubkeyL(12),CamelliaSubkeyR(12),
wolfSSL 0:1239e9b70ca2 1184 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1185 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1186 CamelliaSubkeyL(11),CamelliaSubkeyR(11),
wolfSSL 0:1239e9b70ca2 1187 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1188 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1189 CamelliaSubkeyL(10),CamelliaSubkeyR(10),
wolfSSL 0:1239e9b70ca2 1190 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1191
wolfSSL 0:1239e9b70ca2 1192 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1193 CamelliaSubkeyL(9),CamelliaSubkeyR(9),
wolfSSL 0:1239e9b70ca2 1194 CamelliaSubkeyL(8),CamelliaSubkeyR(8),
wolfSSL 0:1239e9b70ca2 1195 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1196
wolfSSL 0:1239e9b70ca2 1197 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1198 CamelliaSubkeyL(7),CamelliaSubkeyR(7),
wolfSSL 0:1239e9b70ca2 1199 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1200 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1201 CamelliaSubkeyL(6),CamelliaSubkeyR(6),
wolfSSL 0:1239e9b70ca2 1202 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1203 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1204 CamelliaSubkeyL(5),CamelliaSubkeyR(5),
wolfSSL 0:1239e9b70ca2 1205 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1206 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1207 CamelliaSubkeyL(4),CamelliaSubkeyR(4),
wolfSSL 0:1239e9b70ca2 1208 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1209 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1210 CamelliaSubkeyL(3),CamelliaSubkeyR(3),
wolfSSL 0:1239e9b70ca2 1211 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1212 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1213 CamelliaSubkeyL(2),CamelliaSubkeyR(2),
wolfSSL 0:1239e9b70ca2 1214 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1215
wolfSSL 0:1239e9b70ca2 1216 /* post whitening but kw4 */
wolfSSL 0:1239e9b70ca2 1217 io[2] ^= CamelliaSubkeyL(0);
wolfSSL 0:1239e9b70ca2 1218 io[3] ^= CamelliaSubkeyR(0);
wolfSSL 0:1239e9b70ca2 1219
wolfSSL 0:1239e9b70ca2 1220 t0 = io[0];
wolfSSL 0:1239e9b70ca2 1221 t1 = io[1];
wolfSSL 0:1239e9b70ca2 1222 io[0] = io[2];
wolfSSL 0:1239e9b70ca2 1223 io[1] = io[3];
wolfSSL 0:1239e9b70ca2 1224 io[2] = t0;
wolfSSL 0:1239e9b70ca2 1225 io[3] = t1;
wolfSSL 0:1239e9b70ca2 1226
wolfSSL 0:1239e9b70ca2 1227 return;
wolfSSL 0:1239e9b70ca2 1228 }
wolfSSL 0:1239e9b70ca2 1229
wolfSSL 0:1239e9b70ca2 1230 /**
wolfSSL 0:1239e9b70ca2 1231 * stuff for 192 and 256bit encryption/decryption
wolfSSL 0:1239e9b70ca2 1232 */
wolfSSL 0:1239e9b70ca2 1233 static void camellia_encrypt256(const u32 *subkey, u32 *io)
wolfSSL 0:1239e9b70ca2 1234 {
wolfSSL 0:1239e9b70ca2 1235 u32 il,ir,t0,t1; /* temporary valiables */
wolfSSL 0:1239e9b70ca2 1236
wolfSSL 0:1239e9b70ca2 1237 /* pre whitening but absorb kw2*/
wolfSSL 0:1239e9b70ca2 1238 io[0] ^= CamelliaSubkeyL(0);
wolfSSL 0:1239e9b70ca2 1239 io[1] ^= CamelliaSubkeyR(0);
wolfSSL 0:1239e9b70ca2 1240
wolfSSL 0:1239e9b70ca2 1241 /* main iteration */
wolfSSL 0:1239e9b70ca2 1242 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1243 CamelliaSubkeyL(2),CamelliaSubkeyR(2),
wolfSSL 0:1239e9b70ca2 1244 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1245 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1246 CamelliaSubkeyL(3),CamelliaSubkeyR(3),
wolfSSL 0:1239e9b70ca2 1247 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1248 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1249 CamelliaSubkeyL(4),CamelliaSubkeyR(4),
wolfSSL 0:1239e9b70ca2 1250 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1251 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1252 CamelliaSubkeyL(5),CamelliaSubkeyR(5),
wolfSSL 0:1239e9b70ca2 1253 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1254 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1255 CamelliaSubkeyL(6),CamelliaSubkeyR(6),
wolfSSL 0:1239e9b70ca2 1256 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1257 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1258 CamelliaSubkeyL(7),CamelliaSubkeyR(7),
wolfSSL 0:1239e9b70ca2 1259 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1260
wolfSSL 0:1239e9b70ca2 1261 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1262 CamelliaSubkeyL(8),CamelliaSubkeyR(8),
wolfSSL 0:1239e9b70ca2 1263 CamelliaSubkeyL(9),CamelliaSubkeyR(9),
wolfSSL 0:1239e9b70ca2 1264 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1265
wolfSSL 0:1239e9b70ca2 1266 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1267 CamelliaSubkeyL(10),CamelliaSubkeyR(10),
wolfSSL 0:1239e9b70ca2 1268 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1269 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1270 CamelliaSubkeyL(11),CamelliaSubkeyR(11),
wolfSSL 0:1239e9b70ca2 1271 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1272 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1273 CamelliaSubkeyL(12),CamelliaSubkeyR(12),
wolfSSL 0:1239e9b70ca2 1274 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1275 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1276 CamelliaSubkeyL(13),CamelliaSubkeyR(13),
wolfSSL 0:1239e9b70ca2 1277 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1278 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1279 CamelliaSubkeyL(14),CamelliaSubkeyR(14),
wolfSSL 0:1239e9b70ca2 1280 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1281 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1282 CamelliaSubkeyL(15),CamelliaSubkeyR(15),
wolfSSL 0:1239e9b70ca2 1283 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1284
wolfSSL 0:1239e9b70ca2 1285 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1286 CamelliaSubkeyL(16),CamelliaSubkeyR(16),
wolfSSL 0:1239e9b70ca2 1287 CamelliaSubkeyL(17),CamelliaSubkeyR(17),
wolfSSL 0:1239e9b70ca2 1288 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1289
wolfSSL 0:1239e9b70ca2 1290 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1291 CamelliaSubkeyL(18),CamelliaSubkeyR(18),
wolfSSL 0:1239e9b70ca2 1292 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1293 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1294 CamelliaSubkeyL(19),CamelliaSubkeyR(19),
wolfSSL 0:1239e9b70ca2 1295 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1296 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1297 CamelliaSubkeyL(20),CamelliaSubkeyR(20),
wolfSSL 0:1239e9b70ca2 1298 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1299 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1300 CamelliaSubkeyL(21),CamelliaSubkeyR(21),
wolfSSL 0:1239e9b70ca2 1301 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1302 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1303 CamelliaSubkeyL(22),CamelliaSubkeyR(22),
wolfSSL 0:1239e9b70ca2 1304 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1305 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1306 CamelliaSubkeyL(23),CamelliaSubkeyR(23),
wolfSSL 0:1239e9b70ca2 1307 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1308
wolfSSL 0:1239e9b70ca2 1309 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1310 CamelliaSubkeyL(24),CamelliaSubkeyR(24),
wolfSSL 0:1239e9b70ca2 1311 CamelliaSubkeyL(25),CamelliaSubkeyR(25),
wolfSSL 0:1239e9b70ca2 1312 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1313
wolfSSL 0:1239e9b70ca2 1314 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1315 CamelliaSubkeyL(26),CamelliaSubkeyR(26),
wolfSSL 0:1239e9b70ca2 1316 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1317 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1318 CamelliaSubkeyL(27),CamelliaSubkeyR(27),
wolfSSL 0:1239e9b70ca2 1319 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1320 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1321 CamelliaSubkeyL(28),CamelliaSubkeyR(28),
wolfSSL 0:1239e9b70ca2 1322 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1323 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1324 CamelliaSubkeyL(29),CamelliaSubkeyR(29),
wolfSSL 0:1239e9b70ca2 1325 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1326 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1327 CamelliaSubkeyL(30),CamelliaSubkeyR(30),
wolfSSL 0:1239e9b70ca2 1328 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1329 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1330 CamelliaSubkeyL(31),CamelliaSubkeyR(31),
wolfSSL 0:1239e9b70ca2 1331 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1332
wolfSSL 0:1239e9b70ca2 1333 /* post whitening but kw4 */
wolfSSL 0:1239e9b70ca2 1334 io[2] ^= CamelliaSubkeyL(32);
wolfSSL 0:1239e9b70ca2 1335 io[3] ^= CamelliaSubkeyR(32);
wolfSSL 0:1239e9b70ca2 1336
wolfSSL 0:1239e9b70ca2 1337 t0 = io[0];
wolfSSL 0:1239e9b70ca2 1338 t1 = io[1];
wolfSSL 0:1239e9b70ca2 1339 io[0] = io[2];
wolfSSL 0:1239e9b70ca2 1340 io[1] = io[3];
wolfSSL 0:1239e9b70ca2 1341 io[2] = t0;
wolfSSL 0:1239e9b70ca2 1342 io[3] = t1;
wolfSSL 0:1239e9b70ca2 1343
wolfSSL 0:1239e9b70ca2 1344 return;
wolfSSL 0:1239e9b70ca2 1345 }
wolfSSL 0:1239e9b70ca2 1346
wolfSSL 0:1239e9b70ca2 1347 static void camellia_decrypt256(const u32 *subkey, u32 *io)
wolfSSL 0:1239e9b70ca2 1348 {
wolfSSL 0:1239e9b70ca2 1349 u32 il,ir,t0,t1; /* temporary valiables */
wolfSSL 0:1239e9b70ca2 1350
wolfSSL 0:1239e9b70ca2 1351 /* pre whitening but absorb kw2*/
wolfSSL 0:1239e9b70ca2 1352 io[0] ^= CamelliaSubkeyL(32);
wolfSSL 0:1239e9b70ca2 1353 io[1] ^= CamelliaSubkeyR(32);
wolfSSL 0:1239e9b70ca2 1354
wolfSSL 0:1239e9b70ca2 1355 /* main iteration */
wolfSSL 0:1239e9b70ca2 1356 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1357 CamelliaSubkeyL(31),CamelliaSubkeyR(31),
wolfSSL 0:1239e9b70ca2 1358 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1359 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1360 CamelliaSubkeyL(30),CamelliaSubkeyR(30),
wolfSSL 0:1239e9b70ca2 1361 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1362 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1363 CamelliaSubkeyL(29),CamelliaSubkeyR(29),
wolfSSL 0:1239e9b70ca2 1364 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1365 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1366 CamelliaSubkeyL(28),CamelliaSubkeyR(28),
wolfSSL 0:1239e9b70ca2 1367 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1368 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1369 CamelliaSubkeyL(27),CamelliaSubkeyR(27),
wolfSSL 0:1239e9b70ca2 1370 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1371 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1372 CamelliaSubkeyL(26),CamelliaSubkeyR(26),
wolfSSL 0:1239e9b70ca2 1373 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1374
wolfSSL 0:1239e9b70ca2 1375 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1376 CamelliaSubkeyL(25),CamelliaSubkeyR(25),
wolfSSL 0:1239e9b70ca2 1377 CamelliaSubkeyL(24),CamelliaSubkeyR(24),
wolfSSL 0:1239e9b70ca2 1378 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1379
wolfSSL 0:1239e9b70ca2 1380 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1381 CamelliaSubkeyL(23),CamelliaSubkeyR(23),
wolfSSL 0:1239e9b70ca2 1382 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1383 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1384 CamelliaSubkeyL(22),CamelliaSubkeyR(22),
wolfSSL 0:1239e9b70ca2 1385 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1386 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1387 CamelliaSubkeyL(21),CamelliaSubkeyR(21),
wolfSSL 0:1239e9b70ca2 1388 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1389 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1390 CamelliaSubkeyL(20),CamelliaSubkeyR(20),
wolfSSL 0:1239e9b70ca2 1391 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1392 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1393 CamelliaSubkeyL(19),CamelliaSubkeyR(19),
wolfSSL 0:1239e9b70ca2 1394 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1395 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1396 CamelliaSubkeyL(18),CamelliaSubkeyR(18),
wolfSSL 0:1239e9b70ca2 1397 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1398
wolfSSL 0:1239e9b70ca2 1399 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1400 CamelliaSubkeyL(17),CamelliaSubkeyR(17),
wolfSSL 0:1239e9b70ca2 1401 CamelliaSubkeyL(16),CamelliaSubkeyR(16),
wolfSSL 0:1239e9b70ca2 1402 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1403
wolfSSL 0:1239e9b70ca2 1404 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1405 CamelliaSubkeyL(15),CamelliaSubkeyR(15),
wolfSSL 0:1239e9b70ca2 1406 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1407 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1408 CamelliaSubkeyL(14),CamelliaSubkeyR(14),
wolfSSL 0:1239e9b70ca2 1409 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1410 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1411 CamelliaSubkeyL(13),CamelliaSubkeyR(13),
wolfSSL 0:1239e9b70ca2 1412 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1413 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1414 CamelliaSubkeyL(12),CamelliaSubkeyR(12),
wolfSSL 0:1239e9b70ca2 1415 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1416 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1417 CamelliaSubkeyL(11),CamelliaSubkeyR(11),
wolfSSL 0:1239e9b70ca2 1418 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1419 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1420 CamelliaSubkeyL(10),CamelliaSubkeyR(10),
wolfSSL 0:1239e9b70ca2 1421 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1422
wolfSSL 0:1239e9b70ca2 1423 CAMELLIA_FLS(io[0],io[1],io[2],io[3],
wolfSSL 0:1239e9b70ca2 1424 CamelliaSubkeyL(9),CamelliaSubkeyR(9),
wolfSSL 0:1239e9b70ca2 1425 CamelliaSubkeyL(8),CamelliaSubkeyR(8),
wolfSSL 0:1239e9b70ca2 1426 t0,t1,il,ir);
wolfSSL 0:1239e9b70ca2 1427
wolfSSL 0:1239e9b70ca2 1428 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1429 CamelliaSubkeyL(7),CamelliaSubkeyR(7),
wolfSSL 0:1239e9b70ca2 1430 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1431 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1432 CamelliaSubkeyL(6),CamelliaSubkeyR(6),
wolfSSL 0:1239e9b70ca2 1433 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1434 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1435 CamelliaSubkeyL(5),CamelliaSubkeyR(5),
wolfSSL 0:1239e9b70ca2 1436 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1437 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1438 CamelliaSubkeyL(4),CamelliaSubkeyR(4),
wolfSSL 0:1239e9b70ca2 1439 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1440 CAMELLIA_ROUNDSM(io[0],io[1],
wolfSSL 0:1239e9b70ca2 1441 CamelliaSubkeyL(3),CamelliaSubkeyR(3),
wolfSSL 0:1239e9b70ca2 1442 io[2],io[3],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1443 CAMELLIA_ROUNDSM(io[2],io[3],
wolfSSL 0:1239e9b70ca2 1444 CamelliaSubkeyL(2),CamelliaSubkeyR(2),
wolfSSL 0:1239e9b70ca2 1445 io[0],io[1],il,ir,t0,t1);
wolfSSL 0:1239e9b70ca2 1446
wolfSSL 0:1239e9b70ca2 1447 /* post whitening but kw4 */
wolfSSL 0:1239e9b70ca2 1448 io[2] ^= CamelliaSubkeyL(0);
wolfSSL 0:1239e9b70ca2 1449 io[3] ^= CamelliaSubkeyR(0);
wolfSSL 0:1239e9b70ca2 1450
wolfSSL 0:1239e9b70ca2 1451 t0 = io[0];
wolfSSL 0:1239e9b70ca2 1452 t1 = io[1];
wolfSSL 0:1239e9b70ca2 1453 io[0] = io[2];
wolfSSL 0:1239e9b70ca2 1454 io[1] = io[3];
wolfSSL 0:1239e9b70ca2 1455 io[2] = t0;
wolfSSL 0:1239e9b70ca2 1456 io[3] = t1;
wolfSSL 0:1239e9b70ca2 1457
wolfSSL 0:1239e9b70ca2 1458 return;
wolfSSL 0:1239e9b70ca2 1459 }
wolfSSL 0:1239e9b70ca2 1460
wolfSSL 0:1239e9b70ca2 1461 /***
wolfSSL 0:1239e9b70ca2 1462 *
wolfSSL 0:1239e9b70ca2 1463 * API for compatibility
wolfSSL 0:1239e9b70ca2 1464 */
wolfSSL 0:1239e9b70ca2 1465
wolfSSL 0:1239e9b70ca2 1466 static void Camellia_EncryptBlock(const int keyBitLength,
wolfSSL 0:1239e9b70ca2 1467 const unsigned char *plaintext,
wolfSSL 0:1239e9b70ca2 1468 const KEY_TABLE_TYPE keyTable,
wolfSSL 0:1239e9b70ca2 1469 unsigned char *ciphertext)
wolfSSL 0:1239e9b70ca2 1470 {
wolfSSL 0:1239e9b70ca2 1471 u32 tmp[4];
wolfSSL 0:1239e9b70ca2 1472
wolfSSL 0:1239e9b70ca2 1473 tmp[0] = GETU32(plaintext);
wolfSSL 0:1239e9b70ca2 1474 tmp[1] = GETU32(plaintext + 4);
wolfSSL 0:1239e9b70ca2 1475 tmp[2] = GETU32(plaintext + 8);
wolfSSL 0:1239e9b70ca2 1476 tmp[3] = GETU32(plaintext + 12);
wolfSSL 0:1239e9b70ca2 1477
wolfSSL 0:1239e9b70ca2 1478 switch (keyBitLength) {
wolfSSL 0:1239e9b70ca2 1479 case 128:
wolfSSL 0:1239e9b70ca2 1480 camellia_encrypt128(keyTable, tmp);
wolfSSL 0:1239e9b70ca2 1481 break;
wolfSSL 0:1239e9b70ca2 1482 case 192:
wolfSSL 0:1239e9b70ca2 1483 /* fall through */
wolfSSL 0:1239e9b70ca2 1484 case 256:
wolfSSL 0:1239e9b70ca2 1485 camellia_encrypt256(keyTable, tmp);
wolfSSL 0:1239e9b70ca2 1486 break;
wolfSSL 0:1239e9b70ca2 1487 default:
wolfSSL 0:1239e9b70ca2 1488 break;
wolfSSL 0:1239e9b70ca2 1489 }
wolfSSL 0:1239e9b70ca2 1490
wolfSSL 0:1239e9b70ca2 1491 PUTU32(ciphertext, tmp[0]);
wolfSSL 0:1239e9b70ca2 1492 PUTU32(ciphertext + 4, tmp[1]);
wolfSSL 0:1239e9b70ca2 1493 PUTU32(ciphertext + 8, tmp[2]);
wolfSSL 0:1239e9b70ca2 1494 PUTU32(ciphertext + 12, tmp[3]);
wolfSSL 0:1239e9b70ca2 1495 }
wolfSSL 0:1239e9b70ca2 1496
wolfSSL 0:1239e9b70ca2 1497 static void Camellia_DecryptBlock(const int keyBitLength,
wolfSSL 0:1239e9b70ca2 1498 const unsigned char *ciphertext,
wolfSSL 0:1239e9b70ca2 1499 const KEY_TABLE_TYPE keyTable,
wolfSSL 0:1239e9b70ca2 1500 unsigned char *plaintext)
wolfSSL 0:1239e9b70ca2 1501 {
wolfSSL 0:1239e9b70ca2 1502 u32 tmp[4];
wolfSSL 0:1239e9b70ca2 1503
wolfSSL 0:1239e9b70ca2 1504 tmp[0] = GETU32(ciphertext);
wolfSSL 0:1239e9b70ca2 1505 tmp[1] = GETU32(ciphertext + 4);
wolfSSL 0:1239e9b70ca2 1506 tmp[2] = GETU32(ciphertext + 8);
wolfSSL 0:1239e9b70ca2 1507 tmp[3] = GETU32(ciphertext + 12);
wolfSSL 0:1239e9b70ca2 1508
wolfSSL 0:1239e9b70ca2 1509 switch (keyBitLength) {
wolfSSL 0:1239e9b70ca2 1510 case 128:
wolfSSL 0:1239e9b70ca2 1511 camellia_decrypt128(keyTable, tmp);
wolfSSL 0:1239e9b70ca2 1512 break;
wolfSSL 0:1239e9b70ca2 1513 case 192:
wolfSSL 0:1239e9b70ca2 1514 /* fall through */
wolfSSL 0:1239e9b70ca2 1515 case 256:
wolfSSL 0:1239e9b70ca2 1516 camellia_decrypt256(keyTable, tmp);
wolfSSL 0:1239e9b70ca2 1517 break;
wolfSSL 0:1239e9b70ca2 1518 default:
wolfSSL 0:1239e9b70ca2 1519 break;
wolfSSL 0:1239e9b70ca2 1520 }
wolfSSL 0:1239e9b70ca2 1521 PUTU32(plaintext, tmp[0]);
wolfSSL 0:1239e9b70ca2 1522 PUTU32(plaintext + 4, tmp[1]);
wolfSSL 0:1239e9b70ca2 1523 PUTU32(plaintext + 8, tmp[2]);
wolfSSL 0:1239e9b70ca2 1524 PUTU32(plaintext + 12, tmp[3]);
wolfSSL 0:1239e9b70ca2 1525 }
wolfSSL 0:1239e9b70ca2 1526
wolfSSL 0:1239e9b70ca2 1527
wolfSSL 0:1239e9b70ca2 1528
wolfSSL 0:1239e9b70ca2 1529 /* CTaoCrypt wrappers to the Camellia code */
wolfSSL 0:1239e9b70ca2 1530
wolfSSL 0:1239e9b70ca2 1531 int CamelliaSetKey(Camellia* cam, const byte* key, word32 len, const byte* iv)
wolfSSL 0:1239e9b70ca2 1532 {
wolfSSL 0:1239e9b70ca2 1533 int ret = 0;
wolfSSL 0:1239e9b70ca2 1534
wolfSSL 0:1239e9b70ca2 1535 if (cam == NULL) return BAD_FUNC_ARG;
wolfSSL 0:1239e9b70ca2 1536
wolfSSL 0:1239e9b70ca2 1537 XMEMSET(cam->key, 0, sizeof(KEY_TABLE_TYPE));
wolfSSL 0:1239e9b70ca2 1538
wolfSSL 0:1239e9b70ca2 1539 switch (len) {
wolfSSL 0:1239e9b70ca2 1540 case 16:
wolfSSL 0:1239e9b70ca2 1541 ret = camellia_setup128(key, cam->key);
wolfSSL 0:1239e9b70ca2 1542 break;
wolfSSL 0:1239e9b70ca2 1543 case 24:
wolfSSL 0:1239e9b70ca2 1544 ret = camellia_setup192(key, cam->key);
wolfSSL 0:1239e9b70ca2 1545 break;
wolfSSL 0:1239e9b70ca2 1546 case 32:
wolfSSL 0:1239e9b70ca2 1547 ret = camellia_setup256(key, cam->key);
wolfSSL 0:1239e9b70ca2 1548 break;
wolfSSL 0:1239e9b70ca2 1549 default:
wolfSSL 0:1239e9b70ca2 1550 return BAD_FUNC_ARG;
wolfSSL 0:1239e9b70ca2 1551 }
wolfSSL 0:1239e9b70ca2 1552
wolfSSL 0:1239e9b70ca2 1553 if (ret != 0)
wolfSSL 0:1239e9b70ca2 1554 return ret;
wolfSSL 0:1239e9b70ca2 1555
wolfSSL 0:1239e9b70ca2 1556 cam->keySz = len * 8;
wolfSSL 0:1239e9b70ca2 1557
wolfSSL 0:1239e9b70ca2 1558 return CamelliaSetIV(cam, iv);
wolfSSL 0:1239e9b70ca2 1559 }
wolfSSL 0:1239e9b70ca2 1560
wolfSSL 0:1239e9b70ca2 1561
wolfSSL 0:1239e9b70ca2 1562 int CamelliaSetIV(Camellia* cam, const byte* iv)
wolfSSL 0:1239e9b70ca2 1563 {
wolfSSL 0:1239e9b70ca2 1564 if (cam == NULL)
wolfSSL 0:1239e9b70ca2 1565 return BAD_FUNC_ARG;
wolfSSL 0:1239e9b70ca2 1566
wolfSSL 0:1239e9b70ca2 1567 if (iv)
wolfSSL 0:1239e9b70ca2 1568 XMEMCPY(cam->reg, iv, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1569 else
wolfSSL 0:1239e9b70ca2 1570 XMEMSET(cam->reg, 0, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1571
wolfSSL 0:1239e9b70ca2 1572 return 0;
wolfSSL 0:1239e9b70ca2 1573 }
wolfSSL 0:1239e9b70ca2 1574
wolfSSL 0:1239e9b70ca2 1575
wolfSSL 0:1239e9b70ca2 1576 void CamelliaEncryptDirect(Camellia* cam, byte* out, const byte* in)
wolfSSL 0:1239e9b70ca2 1577 {
wolfSSL 0:1239e9b70ca2 1578 Camellia_EncryptBlock(cam->keySz, in, cam->key, out);
wolfSSL 0:1239e9b70ca2 1579 }
wolfSSL 0:1239e9b70ca2 1580
wolfSSL 0:1239e9b70ca2 1581
wolfSSL 0:1239e9b70ca2 1582 void CamelliaDecryptDirect(Camellia* cam, byte* out, const byte* in)
wolfSSL 0:1239e9b70ca2 1583 {
wolfSSL 0:1239e9b70ca2 1584 Camellia_DecryptBlock(cam->keySz, in, cam->key, out);
wolfSSL 0:1239e9b70ca2 1585 }
wolfSSL 0:1239e9b70ca2 1586
wolfSSL 0:1239e9b70ca2 1587
wolfSSL 0:1239e9b70ca2 1588 void CamelliaCbcEncrypt(Camellia* cam, byte* out, const byte* in, word32 sz)
wolfSSL 0:1239e9b70ca2 1589 {
wolfSSL 0:1239e9b70ca2 1590 word32 blocks = sz / CAMELLIA_BLOCK_SIZE;
wolfSSL 0:1239e9b70ca2 1591
wolfSSL 0:1239e9b70ca2 1592 while (blocks--) {
wolfSSL 0:1239e9b70ca2 1593 xorbuf((byte*)cam->reg, in, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1594 Camellia_EncryptBlock(cam->keySz, (byte*)cam->reg,
wolfSSL 0:1239e9b70ca2 1595 cam->key, (byte*)cam->reg);
wolfSSL 0:1239e9b70ca2 1596 XMEMCPY(out, cam->reg, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1597
wolfSSL 0:1239e9b70ca2 1598 out += CAMELLIA_BLOCK_SIZE;
wolfSSL 0:1239e9b70ca2 1599 in += CAMELLIA_BLOCK_SIZE;
wolfSSL 0:1239e9b70ca2 1600 }
wolfSSL 0:1239e9b70ca2 1601 }
wolfSSL 0:1239e9b70ca2 1602
wolfSSL 0:1239e9b70ca2 1603
wolfSSL 0:1239e9b70ca2 1604 void CamelliaCbcDecrypt(Camellia* cam, byte* out, const byte* in, word32 sz)
wolfSSL 0:1239e9b70ca2 1605 {
wolfSSL 0:1239e9b70ca2 1606 word32 blocks = sz / CAMELLIA_BLOCK_SIZE;
wolfSSL 0:1239e9b70ca2 1607
wolfSSL 0:1239e9b70ca2 1608 while (blocks--) {
wolfSSL 0:1239e9b70ca2 1609 XMEMCPY(cam->tmp, in, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1610 Camellia_DecryptBlock(cam->keySz, (byte*)cam->tmp, cam->key, out);
wolfSSL 0:1239e9b70ca2 1611 xorbuf(out, (byte*)cam->reg, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1612 XMEMCPY(cam->reg, cam->tmp, CAMELLIA_BLOCK_SIZE);
wolfSSL 0:1239e9b70ca2 1613
wolfSSL 0:1239e9b70ca2 1614 out += CAMELLIA_BLOCK_SIZE;
wolfSSL 0:1239e9b70ca2 1615 in += CAMELLIA_BLOCK_SIZE;
wolfSSL 0:1239e9b70ca2 1616 }
wolfSSL 0:1239e9b70ca2 1617 }
wolfSSL 0:1239e9b70ca2 1618
wolfSSL 0:1239e9b70ca2 1619
wolfSSL 0:1239e9b70ca2 1620 #endif /* HAVE_CAMELLIA */
wolfSSL 0:1239e9b70ca2 1621
wolfSSL 0:1239e9b70ca2 1622