/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Cryptographic API.
 *
 * ARIA Cipher Algorithm.
 *
 * Documentation of ARIA can be found in RFC 5794.
 * Copyright (c) 2022 Taehee Yoo <ap420073@gmail.com>
 * Copyright (c) 2022 Taehee Yoo <ap420073@gmail.com>
 *
 * Information for ARIA
 *     http://210.104.33.10/ARIA/index-e.html (English)
 *     http://seed.kisa.or.kr/ (Korean)
 *
 * Public domain version is distributed above.
 */

#ifndef _CRYPTO_ARIA_H
#define _CRYPTO_ARIA_H

#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/crypto.h>
#include <asm/byteorder.h>

#define ARIA_MIN_KEY_SIZE	16
#define ARIA_MAX_KEY_SIZE	32
#define ARIA_BLOCK_SIZE		16
#define ARIA_MAX_RD_KEYS	17
#define ARIA_RD_KEY_WORDS	(ARIA_BLOCK_SIZE / sizeof(u32))

struct aria_ctx {
	u32 enc_key[ARIA_MAX_RD_KEYS][ARIA_RD_KEY_WORDS];
	u32 dec_key[ARIA_MAX_RD_KEYS][ARIA_RD_KEY_WORDS];
	int rounds;
	int key_length;
};

static const u32 s1[256] = {
	0x00636363, 0x007c7c7c, 0x00777777, 0x007b7b7b,
	0x00f2f2f2, 0x006b6b6b, 0x006f6f6f, 0x00c5c5c5,
	0x00303030, 0x00010101, 0x00676767, 0x002b2b2b,
	0x00fefefe, 0x00d7d7d7, 0x00ababab, 0x00767676,
	0x00cacaca, 0x00828282, 0x00c9c9c9, 0x007d7d7d,
	0x00fafafa, 0x00595959, 0x00474747, 0x00f0f0f0,
	0x00adadad, 0x00d4d4d4, 0x00a2a2a2, 0x00afafaf,
	0x009c9c9c, 0x00a4a4a4, 0x00727272, 0x00c0c0c0,
	0x00b7b7b7, 0x00fdfdfd, 0x00939393, 0x00262626,
	0x00363636, 0x003f3f3f, 0x00f7f7f7, 0x00cccccc,
	0x00343434, 0x00a5a5a5, 0x00e5e5e5, 0x00f1f1f1,
	0x00717171, 0x00d8d8d8, 0x00313131, 0x00151515,
	0x00040404, 0x00c7c7c7, 0x00232323, 0x00c3c3c3,
	0x00181818, 0x00969696, 0x00050505, 0x009a9a9a,
	0x00070707, 0x00121212, 0x00808080, 0x00e2e2e2,
	0x00ebebeb, 0x00272727, 0x00b2b2b2, 0x00757575,
	0x00090909, 0x00838383, 0x002c2c2c, 0x001a1a1a,
	0x001b1b1b, 0x006e6e6e, 0x005a5a5a, 0x00a0a0a0,
	0x00525252, 0x003b3b3b, 0x00d6d6d6, 0x00b3b3b3,
	0x00292929, 0x00e3e3e3, 0x002f2f2f, 0x00848484,
	0x00535353, 0x00d1d1d1, 0x00000000, 0x00ededed,
	0x00202020, 0x00fcfcfc, 0x00b1b1b1, 0x005b5b5b,
	0x006a6a6a, 0x00cbcbcb, 0x00bebebe, 0x00393939,
	0x004a4a4a, 0x004c4c4c, 0x00585858, 0x00cfcfcf,
	0x00d0d0d0, 0x00efefef, 0x00aaaaaa, 0x00fbfbfb,
	0x00434343, 0x004d4d4d, 0x00333333, 0x00858585,
	0x00454545, 0x00f9f9f9, 0x00020202, 0x007f7f7f,
	0x00505050, 0x003c3c3c, 0x009f9f9f, 0x00a8a8a8,
	0x00515151, 0x00a3a3a3, 0x00404040, 0x008f8f8f,
	0x00929292, 0x009d9d9d, 0x00383838, 0x00f5f5f5,
	0x00bcbcbc, 0x00b6b6b6, 0x00dadada, 0x00212121,
	0x00101010, 0x00ffffff, 0x00f3f3f3, 0x00d2d2d2,
	0x00cdcdcd, 0x000c0c0c, 0x00131313, 0x00ececec,
	0x005f5f5f, 0x00979797, 0x00444444, 0x00171717,
	0x00c4c4c4, 0x00a7a7a7, 0x007e7e7e, 0x003d3d3d,
	0x00646464, 0x005d5d5d, 0x00191919, 0x00737373,
	0x00606060, 0x00818181, 0x004f4f4f, 0x00dcdcdc,
	0x00222222, 0x002a2a2a, 0x00909090, 0x00888888,
	0x00464646, 0x00eeeeee, 0x00b8b8b8, 0x00141414,
	0x00dedede, 0x005e5e5e, 0x000b0b0b, 0x00dbdbdb,
	0x00e0e0e0, 0x00323232, 0x003a3a3a, 0x000a0a0a,
	0x00494949, 0x00060606, 0x00242424, 0x005c5c5c,
	0x00c2c2c2, 0x00d3d3d3, 0x00acacac, 0x00626262,
	0x00919191, 0x00959595, 0x00e4e4e4, 0x00797979,
	0x00e7e7e7, 0x00c8c8c8, 0x00373737, 0x006d6d6d,
	0x008d8d8d, 0x00d5d5d5, 0x004e4e4e, 0x00a9a9a9,
	0x006c6c6c, 0x00565656, 0x00f4f4f4, 0x00eaeaea,
	0x00656565, 0x007a7a7a, 0x00aeaeae, 0x00080808,
	0x00bababa, 0x00787878, 0x00252525, 0x002e2e2e,
	0x001c1c1c, 0x00a6a6a6, 0x00b4b4b4, 0x00c6c6c6,
	0x00e8e8e8, 0x00dddddd, 0x00747474, 0x001f1f1f,
	0x004b4b4b, 0x00bdbdbd, 0x008b8b8b, 0x008a8a8a,
	0x00707070, 0x003e3e3e, 0x00b5b5b5, 0x00666666,
	0x00484848, 0x00030303, 0x00f6f6f6, 0x000e0e0e,
	0x00616161, 0x00353535, 0x00575757, 0x00b9b9b9,
	0x00868686, 0x00c1c1c1, 0x001d1d1d, 0x009e9e9e,
	0x00e1e1e1, 0x00f8f8f8, 0x00989898, 0x00111111,
	0x00696969, 0x00d9d9d9, 0x008e8e8e, 0x00949494,
	0x009b9b9b, 0x001e1e1e, 0x00878787, 0x00e9e9e9,
	0x00cecece, 0x00555555, 0x00282828, 0x00dfdfdf,
	0x008c8c8c, 0x00a1a1a1, 0x00898989, 0x000d0d0d,
	0x00bfbfbf, 0x00e6e6e6, 0x00424242, 0x00686868,
	0x00414141, 0x00999999, 0x002d2d2d, 0x000f0f0f,
	0x00b0b0b0, 0x00545454, 0x00bbbbbb, 0x00161616
};

static const u32 s2[256] = {
	0xe200e2e2, 0x4e004e4e, 0x54005454, 0xfc00fcfc,
	0x94009494, 0xc200c2c2, 0x4a004a4a, 0xcc00cccc,
	0x62006262, 0x0d000d0d, 0x6a006a6a, 0x46004646,
	0x3c003c3c, 0x4d004d4d, 0x8b008b8b, 0xd100d1d1,
	0x5e005e5e, 0xfa00fafa, 0x64006464, 0xcb00cbcb,
	0xb400b4b4, 0x97009797, 0xbe00bebe, 0x2b002b2b,
	0xbc00bcbc, 0x77007777, 0x2e002e2e, 0x03000303,
	0xd300d3d3, 0x19001919, 0x59005959, 0xc100c1c1,
	0x1d001d1d, 0x06000606, 0x41004141, 0x6b006b6b,
	0x55005555, 0xf000f0f0, 0x99009999, 0x69006969,
	0xea00eaea, 0x9c009c9c, 0x18001818, 0xae00aeae,
	0x63006363, 0xdf00dfdf, 0xe700e7e7, 0xbb00bbbb,
	0x00000000, 0x73007373, 0x66006666, 0xfb00fbfb,
	0x96009696, 0x4c004c4c, 0x85008585, 0xe400e4e4,
	0x3a003a3a, 0x09000909, 0x45004545, 0xaa00aaaa,
	0x0f000f0f, 0xee00eeee, 0x10001010, 0xeb00ebeb,
	0x2d002d2d, 0x7f007f7f, 0xf400f4f4, 0x29002929,
	0xac00acac, 0xcf00cfcf, 0xad00adad, 0x91009191,
	0x8d008d8d, 0x78007878, 0xc800c8c8, 0x95009595,
	0xf900f9f9, 0x2f002f2f, 0xce00cece, 0xcd00cdcd,
	0x08000808, 0x7a007a7a, 0x88008888, 0x38003838,
	0x5c005c5c, 0x83008383, 0x2a002a2a, 0x28002828,
	0x47004747, 0xdb00dbdb, 0xb800b8b8, 0xc700c7c7,
	0x93009393, 0xa400a4a4, 0x12001212, 0x53005353,
	0xff00ffff, 0x87008787, 0x0e000e0e, 0x31003131,
	0x36003636, 0x21002121, 0x58005858, 0x48004848,
	0x01000101, 0x8e008e8e, 0x37003737, 0x74007474,
	0x32003232, 0xca00caca, 0xe900e9e9, 0xb100b1b1,
	0xb700b7b7, 0xab00abab, 0x0c000c0c, 0xd700d7d7,
	0xc400c4c4, 0x56005656, 0x42004242, 0x26002626,
	0x07000707, 0x98009898, 0x60006060, 0xd900d9d9,
	0xb600b6b6, 0xb900b9b9, 0x11001111, 0x40004040,
	0xec00ecec, 0x20002020, 0x8c008c8c, 0xbd00bdbd,
	0xa000a0a0, 0xc900c9c9, 0x84008484, 0x04000404,
	0x49004949, 0x23002323, 0xf100f1f1, 0x4f004f4f,
	0x50005050, 0x1f001f1f, 0x13001313, 0xdc00dcdc,
	0xd800d8d8, 0xc000c0c0, 0x9e009e9e, 0x57005757,
	0xe300e3e3, 0xc300c3c3, 0x7b007b7b, 0x65006565,
	0x3b003b3b, 0x02000202, 0x8f008f8f, 0x3e003e3e,
	0xe800e8e8, 0x25002525, 0x92009292, 0xe500e5e5,
	0x15001515, 0xdd00dddd, 0xfd00fdfd, 0x17001717,
	0xa900a9a9, 0xbf00bfbf, 0xd400d4d4, 0x9a009a9a,
	0x7e007e7e, 0xc500c5c5, 0x39003939, 0x67006767,
	0xfe00fefe, 0x76007676, 0x9d009d9d, 0x43004343,
	0xa700a7a7, 0xe100e1e1, 0xd000d0d0, 0xf500f5f5,
	0x68006868, 0xf200f2f2, 0x1b001b1b, 0x34003434,
	0x70007070, 0x05000505, 0xa300a3a3, 0x8a008a8a,
	0xd500d5d5, 0x79007979, 0x86008686, 0xa800a8a8,
	0x30003030, 0xc600c6c6, 0x51005151, 0x4b004b4b,
	0x1e001e1e, 0xa600a6a6, 0x27002727, 0xf600f6f6,
	0x35003535, 0xd200d2d2, 0x6e006e6e, 0x24002424,
	0x16001616, 0x82008282, 0x5f005f5f, 0xda00dada,
	0xe600e6e6, 0x75007575, 0xa200a2a2, 0xef00efef,
	0x2c002c2c, 0xb200b2b2, 0x1c001c1c, 0x9f009f9f,
	0x5d005d5d, 0x6f006f6f, 0x80008080, 0x0a000a0a,
	0x72007272, 0x44004444, 0x9b009b9b, 0x6c006c6c,
	0x90009090, 0x0b000b0b, 0x5b005b5b, 0x33003333,
	0x7d007d7d, 0x5a005a5a, 0x52005252, 0xf300f3f3,
	0x61006161, 0xa100a1a1, 0xf700f7f7, 0xb000b0b0,
	0xd600d6d6, 0x3f003f3f, 0x7c007c7c, 0x6d006d6d,
	0xed00eded, 0x14001414, 0xe000e0e0, 0xa500a5a5,
	0x3d003d3d, 0x22002222, 0xb300b3b3, 0xf800f8f8,
	0x89008989, 0xde00dede, 0x71007171, 0x1a001a1a,
	0xaf00afaf, 0xba00baba, 0xb500b5b5, 0x81008181
};

static const u32 x1[256] = {
	0x52520052, 0x09090009, 0x6a6a006a, 0xd5d500d5,
	0x30300030, 0x36360036, 0xa5a500a5, 0x38380038,
	0xbfbf00bf, 0x40400040, 0xa3a300a3, 0x9e9e009e,
	0x81810081, 0xf3f300f3, 0xd7d700d7, 0xfbfb00fb,
	0x7c7c007c, 0xe3e300e3, 0x39390039, 0x82820082,
	0x9b9b009b, 0x2f2f002f, 0xffff00ff, 0x87870087,
	0x34340034, 0x8e8e008e, 0x43430043, 0x44440044,
	0xc4c400c4, 0xdede00de, 0xe9e900e9, 0xcbcb00cb,
	0x54540054, 0x7b7b007b, 0x94940094, 0x32320032,
	0xa6a600a6, 0xc2c200c2, 0x23230023, 0x3d3d003d,
	0xeeee00ee, 0x4c4c004c, 0x95950095, 0x0b0b000b,
	0x42420042, 0xfafa00fa, 0xc3c300c3, 0x4e4e004e,
	0x08080008, 0x2e2e002e, 0xa1a100a1, 0x66660066,
	0x28280028, 0xd9d900d9, 0x24240024, 0xb2b200b2,
	0x76760076, 0x5b5b005b, 0xa2a200a2, 0x49490049,
	0x6d6d006d, 0x8b8b008b, 0xd1d100d1, 0x25250025,
	0x72720072, 0xf8f800f8, 0xf6f600f6, 0x64640064,
	0x86860086, 0x68680068, 0x98980098, 0x16160016,
	0xd4d400d4, 0xa4a400a4, 0x5c5c005c, 0xcccc00cc,
	0x5d5d005d, 0x65650065, 0xb6b600b6, 0x92920092,
	0x6c6c006c, 0x70700070, 0x48480048, 0x50500050,
	0xfdfd00fd, 0xeded00ed, 0xb9b900b9, 0xdada00da,
	0x5e5e005e, 0x15150015, 0x46460046, 0x57570057,
	0xa7a700a7, 0x8d8d008d, 0x9d9d009d, 0x84840084,
	0x90900090, 0xd8d800d8, 0xabab00ab, 0x00000000,
	0x8c8c008c, 0xbcbc00bc, 0xd3d300d3, 0x0a0a000a,
	0xf7f700f7, 0xe4e400e4, 0x58580058, 0x05050005,
	0xb8b800b8, 0xb3b300b3, 0x45450045, 0x06060006,
	0xd0d000d0, 0x2c2c002c, 0x1e1e001e, 0x8f8f008f,
	0xcaca00ca, 0x3f3f003f, 0x0f0f000f, 0x02020002,
	0xc1c100c1, 0xafaf00af, 0xbdbd00bd, 0x03030003,
	0x01010001, 0x13130013, 0x8a8a008a, 0x6b6b006b,
	0x3a3a003a, 0x91910091, 0x11110011, 0x41410041,
	0x4f4f004f, 0x67670067, 0xdcdc00dc, 0xeaea00ea,
	0x97970097, 0xf2f200f2, 0xcfcf00cf, 0xcece00ce,
	0xf0f000f0, 0xb4b400b4, 0xe6e600e6, 0x73730073,
	0x96960096, 0xacac00ac, 0x74740074, 0x22220022,
	0xe7e700e7, 0xadad00ad, 0x35350035, 0x85850085,
	0xe2e200e2, 0xf9f900f9, 0x37370037, 0xe8e800e8,
	0x1c1c001c, 0x75750075, 0xdfdf00df, 0x6e6e006e,
	0x47470047, 0xf1f100f1, 0x1a1a001a, 0x71710071,
	0x1d1d001d, 0x29290029, 0xc5c500c5, 0x89890089,
	0x6f6f006f, 0xb7b700b7, 0x62620062, 0x0e0e000e,
	0xaaaa00aa, 0x18180018, 0xbebe00be, 0x1b1b001b,
	0xfcfc00fc, 0x56560056, 0x3e3e003e, 0x4b4b004b,
	0xc6c600c6, 0xd2d200d2, 0x79790079, 0x20200020,
	0x9a9a009a, 0xdbdb00db, 0xc0c000c0, 0xfefe00fe,
	0x78780078, 0xcdcd00cd, 0x5a5a005a, 0xf4f400f4,
	0x1f1f001f, 0xdddd00dd, 0xa8a800a8, 0x33330033,
	0x88880088, 0x07070007, 0xc7c700c7, 0x31310031,
	0xb1b100b1, 0x12120012, 0x10100010, 0x59590059,
	0x27270027, 0x80800080, 0xecec00ec, 0x5f5f005f,
	0x60600060, 0x51510051, 0x7f7f007f, 0xa9a900a9,
	0x19190019, 0xb5b500b5, 0x4a4a004a, 0x0d0d000d,
	0x2d2d002d, 0xe5e500e5, 0x7a7a007a, 0x9f9f009f,
	0x93930093, 0xc9c900c9, 0x9c9c009c, 0xefef00ef,
	0xa0a000a0, 0xe0e000e0, 0x3b3b003b, 0x4d4d004d,
	0xaeae00ae, 0x2a2a002a, 0xf5f500f5, 0xb0b000b0,
	0xc8c800c8, 0xebeb00eb, 0xbbbb00bb, 0x3c3c003c,
	0x83830083, 0x53530053, 0x99990099, 0x61610061,
	0x17170017, 0x2b2b002b, 0x04040004, 0x7e7e007e,
	0xbaba00ba, 0x77770077, 0xd6d600d6, 0x26260026,
	0xe1e100e1, 0x69690069, 0x14140014, 0x63630063,
	0x55550055, 0x21210021, 0x0c0c000c, 0x7d7d007d
};

static const u32 x2[256] = {
	0x30303000, 0x68686800, 0x99999900, 0x1b1b1b00,
	0x87878700, 0xb9b9b900, 0x21212100, 0x78787800,
	0x50505000, 0x39393900, 0xdbdbdb00, 0xe1e1e100,
	0x72727200, 0x09090900, 0x62626200, 0x3c3c3c00,
	0x3e3e3e00, 0x7e7e7e00, 0x5e5e5e00, 0x8e8e8e00,
	0xf1f1f100, 0xa0a0a000, 0xcccccc00, 0xa3a3a300,
	0x2a2a2a00, 0x1d1d1d00, 0xfbfbfb00, 0xb6b6b600,
	0xd6d6d600, 0x20202000, 0xc4c4c400, 0x8d8d8d00,
	0x81818100, 0x65656500, 0xf5f5f500, 0x89898900,
	0xcbcbcb00, 0x9d9d9d00, 0x77777700, 0xc6c6c600,
	0x57575700, 0x43434300, 0x56565600, 0x17171700,
	0xd4d4d400, 0x40404000, 0x1a1a1a00, 0x4d4d4d00,
	0xc0c0c000, 0x63636300, 0x6c6c6c00, 0xe3e3e300,
	0xb7b7b700, 0xc8c8c800, 0x64646400, 0x6a6a6a00,
	0x53535300, 0xaaaaaa00, 0x38383800, 0x98989800,
	0x0c0c0c00, 0xf4f4f400, 0x9b9b9b00, 0xededed00,
	0x7f7f7f00, 0x22222200, 0x76767600, 0xafafaf00,
	0xdddddd00, 0x3a3a3a00, 0x0b0b0b00, 0x58585800,
	0x67676700, 0x88888800, 0x06060600, 0xc3c3c300,
	0x35353500, 0x0d0d0d00, 0x01010100, 0x8b8b8b00,
	0x8c8c8c00, 0xc2c2c200, 0xe6e6e600, 0x5f5f5f00,
	0x02020200, 0x24242400, 0x75757500, 0x93939300,
	0x66666600, 0x1e1e1e00, 0xe5e5e500, 0xe2e2e200,
	0x54545400, 0xd8d8d800, 0x10101000, 0xcecece00,
	0x7a7a7a00, 0xe8e8e800, 0x08080800, 0x2c2c2c00,
	0x12121200, 0x97979700, 0x32323200, 0xababab00,
	0xb4b4b400, 0x27272700, 0x0a0a0a00, 0x23232300,
	0xdfdfdf00, 0xefefef00, 0xcacaca00, 0xd9d9d900,
	0xb8b8b800, 0xfafafa00, 0xdcdcdc00, 0x31313100,
	0x6b6b6b00, 0xd1d1d100, 0xadadad00, 0x19191900,
	0x49494900, 0xbdbdbd00, 0x51515100, 0x96969600,
	0xeeeeee00, 0xe4e4e400, 0xa8a8a800, 0x41414100,
	0xdadada00, 0xffffff00, 0xcdcdcd00, 0x55555500,
	0x86868600, 0x36363600, 0xbebebe00, 0x61616100,
	0x52525200, 0xf8f8f800, 0xbbbbbb00, 0x0e0e0e00,
	0x82828200, 0x48484800, 0x69696900, 0x9a9a9a00,
	0xe0e0e000, 0x47474700, 0x9e9e9e00, 0x5c5c5c00,
	0x04040400, 0x4b4b4b00, 0x34343400, 0x15151500,
	0x79797900, 0x26262600, 0xa7a7a700, 0xdedede00,
	0x29292900, 0xaeaeae00, 0x92929200, 0xd7d7d700,
	0x84848400, 0xe9e9e900, 0xd2d2d200, 0xbababa00,
	0x5d5d5d00, 0xf3f3f300, 0xc5c5c500, 0xb0b0b000,
	0xbfbfbf00, 0xa4a4a400, 0x3b3b3b00, 0x71717100,
	0x44444400, 0x46464600, 0x2b2b2b00, 0xfcfcfc00,
	0xebebeb00, 0x6f6f6f00, 0xd5d5d500, 0xf6f6f600,
	0x14141400, 0xfefefe00, 0x7c7c7c00, 0x70707000,
	0x5a5a5a00, 0x7d7d7d00, 0xfdfdfd00, 0x2f2f2f00,
	0x18181800, 0x83838300, 0x16161600, 0xa5a5a500,
	0x91919100, 0x1f1f1f00, 0x05050500, 0x95959500,
	0x74747400, 0xa9a9a900, 0xc1c1c100, 0x5b5b5b00,
	0x4a4a4a00, 0x85858500, 0x6d6d6d00, 0x13131300,
	0x07070700, 0x4f4f4f00, 0x4e4e4e00, 0x45454500,
	0xb2b2b200, 0x0f0f0f00, 0xc9c9c900, 0x1c1c1c00,
	0xa6a6a600, 0xbcbcbc00, 0xececec00, 0x73737300,
	0x90909000, 0x7b7b7b00, 0xcfcfcf00, 0x59595900,
	0x8f8f8f00, 0xa1a1a100, 0xf9f9f900, 0x2d2d2d00,
	0xf2f2f200, 0xb1b1b100, 0x00000000, 0x94949400,
	0x37373700, 0x9f9f9f00, 0xd0d0d000, 0x2e2e2e00,
	0x9c9c9c00, 0x6e6e6e00, 0x28282800, 0x3f3f3f00,
	0x80808000, 0xf0f0f000, 0x3d3d3d00, 0xd3d3d300,
	0x25252500, 0x8a8a8a00, 0xb5b5b500, 0xe7e7e700,
	0x42424200, 0xb3b3b300, 0xc7c7c700, 0xeaeaea00,
	0xf7f7f700, 0x4c4c4c00, 0x11111100, 0x33333300,
	0x03030300, 0xa2a2a200, 0xacacac00, 0x60606000
};

static inline u32 rotl32(u32 v, u32 r)
{
	return ((v << r) | (v >> (32 - r)));
}

static inline u32 rotr32(u32 v, u32 r)
{
	return ((v >> r) | (v << (32 - r)));
}

static inline u32 bswap32(u32 v)
{
	return ((v << 24) ^
		(v >> 24) ^
		((v & 0x0000ff00) << 8) ^
		((v & 0x00ff0000) >> 8));
}

static inline u8 get_u8(u32 x, u32 y)
{
	return (x >> ((3 - y) * 8));
}

static inline u32 make_u32(u8 v0, u8 v1, u8 v2, u8 v3)
{
	return ((u32)v0 << 24) | ((u32)v1 << 16) | ((u32)v2 <<  8) | ((u32)v3);
}

static inline u32 aria_m(u32 t0)
{
	return rotr32(t0, 8) ^ rotr32(t0 ^ rotr32(t0, 8), 16);
}

/* S-Box Layer 1 + M */
static inline void aria_sbox_layer1_with_pre_diff(u32 *t0, u32 *t1, u32 *t2,
						  u32 *t3)
{
	*t0 = s1[get_u8(*t0, 0)] ^
	      s2[get_u8(*t0, 1)] ^
	      x1[get_u8(*t0, 2)] ^
	      x2[get_u8(*t0, 3)];
	*t1 = s1[get_u8(*t1, 0)] ^
	      s2[get_u8(*t1, 1)] ^
	      x1[get_u8(*t1, 2)] ^
	      x2[get_u8(*t1, 3)];
	*t2 = s1[get_u8(*t2, 0)] ^
	      s2[get_u8(*t2, 1)] ^
	      x1[get_u8(*t2, 2)] ^
	      x2[get_u8(*t2, 3)];
	*t3 = s1[get_u8(*t3, 0)] ^
	      s2[get_u8(*t3, 1)] ^
	      x1[get_u8(*t3, 2)] ^
	      x2[get_u8(*t3, 3)];
}

/* S-Box Layer 2 + M */
static inline void aria_sbox_layer2_with_pre_diff(u32 *t0, u32 *t1, u32 *t2,
						  u32 *t3)
{
	*t0 = x1[get_u8(*t0, 0)] ^
	      x2[get_u8(*t0, 1)] ^
	      s1[get_u8(*t0, 2)] ^
	      s2[get_u8(*t0, 3)];
	*t1 = x1[get_u8(*t1, 0)] ^
	      x2[get_u8(*t1, 1)] ^
	      s1[get_u8(*t1, 2)] ^
	      s2[get_u8(*t1, 3)];
	*t2 = x1[get_u8(*t2, 0)] ^
	      x2[get_u8(*t2, 1)] ^
	      s1[get_u8(*t2, 2)] ^
	      s2[get_u8(*t2, 3)];
	*t3 = x1[get_u8(*t3, 0)] ^
	      x2[get_u8(*t3, 1)] ^
	      s1[get_u8(*t3, 2)] ^
	      s2[get_u8(*t3, 3)];
}

/* Word-level diffusion */
static inline void aria_diff_word(u32 *t0, u32 *t1, u32 *t2, u32 *t3)
{
	*t1 ^= *t2;
	*t2 ^= *t3;
	*t0 ^= *t1;

	*t3 ^= *t1;
	*t2 ^= *t0;
	*t1 ^= *t2;
}

/* Byte-level diffusion */
static inline void aria_diff_byte(u32 *t1, u32 *t2, u32 *t3)
{
	*t1 = ((*t1 << 8) & 0xff00ff00) ^ ((*t1 >> 8) & 0x00ff00ff);
	*t2 = rotr32(*t2, 16);
	*t3 = bswap32(*t3);
}

/* Key XOR Layer */
static inline void aria_add_round_key(u32 *rk, u32 *t0, u32 *t1, u32 *t2,
				      u32 *t3)
{
	*t0 ^= rk[0];
	*t1 ^= rk[1];
	*t2 ^= rk[2];
	*t3 ^= rk[3];
}
/* Odd round Substitution & Diffusion */
static inline void aria_subst_diff_odd(u32 *t0, u32 *t1, u32 *t2, u32 *t3)
{
	aria_sbox_layer1_with_pre_diff(t0, t1, t2, t3);
	aria_diff_word(t0, t1, t2, t3);
	aria_diff_byte(t1, t2, t3);
	aria_diff_word(t0, t1, t2, t3);
}

/* Even round Substitution & Diffusion */
static inline void aria_subst_diff_even(u32 *t0, u32 *t1, u32 *t2, u32 *t3)
{
	aria_sbox_layer2_with_pre_diff(t0, t1, t2, t3);
	aria_diff_word(t0, t1, t2, t3);
	aria_diff_byte(t3, t0, t1);
	aria_diff_word(t0, t1, t2, t3);
}

/* Q, R Macro expanded ARIA GSRK */
static inline void aria_gsrk(u32 *rk, u32 *x, u32 *y, u32 n)
{
	int q = 4 - (n / 32);
	int r = n % 32;

	rk[0] = (x[0]) ^
		((y[q % 4]) >> r) ^
		((y[(q + 3) % 4]) << (32 - r));
	rk[1] = (x[1]) ^
		((y[(q + 1) % 4]) >> r) ^
		((y[q % 4]) << (32 - r));
	rk[2] = (x[2]) ^
		((y[(q + 2) % 4]) >> r) ^
		((y[(q + 1) % 4]) << (32 - r));
	rk[3] =	(x[3]) ^
		((y[(q + 3) % 4]) >> r) ^
		((y[(q + 2) % 4]) << (32 - r));
}

void aria_encrypt(void *ctx, u8 *out, const u8 *in);
void aria_decrypt(void *ctx, u8 *out, const u8 *in);
int aria_set_key(struct crypto_tfm *tfm, const u8 *in_key,
		 unsigned int key_len);

#endif
