/* 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 <crypto/algapi.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/types.h>
#include <linux/errno.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 ] = {
0 x00636363, 0 x007c7c7c, 0 x00777777, 0 x007b7b7b,
0 x00f2f2f2, 0 x006b6b6b, 0 x006f6f6f, 0 x00c5c5c5,
0 x00303030, 0 x00010101, 0 x00676767, 0 x002b2b2b,
0 x00fefefe, 0 x00d7d7d7, 0 x00ababab, 0 x00767676,
0 x00cacaca, 0 x00828282, 0 x00c9c9c9, 0 x007d7d7d,
0 x00fafafa, 0 x00595959, 0 x00474747, 0 x00f0f0f0,
0 x00adadad, 0 x00d4d4d4, 0 x00a2a2a2, 0 x00afafaf,
0 x009c9c9c, 0 x00a4a4a4, 0 x00727272, 0 x00c0c0c0,
0 x00b7b7b7, 0 x00fdfdfd, 0 x00939393, 0 x00262626,
0 x00363636, 0 x003f3f3f, 0 x00f7f7f7, 0 x00cccccc,
0 x00343434, 0 x00a5a5a5, 0 x00e5e5e5, 0 x00f1f1f1,
0 x00717171, 0 x00d8d8d8, 0 x00313131, 0 x00151515,
0 x00040404, 0 x00c7c7c7, 0 x00232323, 0 x00c3c3c3,
0 x00181818, 0 x00969696, 0 x00050505, 0 x009a9a9a,
0 x00070707, 0 x00121212, 0 x00808080, 0 x00e2e2e2,
0 x00ebebeb, 0 x00272727, 0 x00b2b2b2, 0 x00757575,
0 x00090909, 0 x00838383, 0 x002c2c2c, 0 x001a1a1a,
0 x001b1b1b, 0 x006e6e6e, 0 x005a5a5a, 0 x00a0a0a0,
0 x00525252, 0 x003b3b3b, 0 x00d6d6d6, 0 x00b3b3b3,
0 x00292929, 0 x00e3e3e3, 0 x002f2f2f, 0 x00848484,
0 x00535353, 0 x00d1d1d1, 0 x00000000, 0 x00ededed,
0 x00202020, 0 x00fcfcfc, 0 x00b1b1b1, 0 x005b5b5b,
0 x006a6a6a, 0 x00cbcbcb, 0 x00bebebe, 0 x00393939,
0 x004a4a4a, 0 x004c4c4c, 0 x00585858, 0 x00cfcfcf,
0 x00d0d0d0, 0 x00efefef, 0 x00aaaaaa, 0 x00fbfbfb,
0 x00434343, 0 x004d4d4d, 0 x00333333, 0 x00858585,
0 x00454545, 0 x00f9f9f9, 0 x00020202, 0 x007f7f7f,
0 x00505050, 0 x003c3c3c, 0 x009f9f9f, 0 x00a8a8a8,
0 x00515151, 0 x00a3a3a3, 0 x00404040, 0 x008f8f8f,
0 x00929292, 0 x009d9d9d, 0 x00383838, 0 x00f5f5f5,
0 x00bcbcbc, 0 x00b6b6b6, 0 x00dadada, 0 x00212121,
0 x00101010, 0 x00ffffff, 0 x00f3f3f3, 0 x00d2d2d2,
0 x00cdcdcd, 0 x000c0c0c, 0 x00131313, 0 x00ececec,
0 x005f5f5f, 0 x00979797, 0 x00444444, 0 x00171717,
0 x00c4c4c4, 0 x00a7a7a7, 0 x007e7e7e, 0 x003d3d3d,
0 x00646464, 0 x005d5d5d, 0 x00191919, 0 x00737373,
0 x00606060, 0 x00818181, 0 x004f4f4f, 0 x00dcdcdc,
0 x00222222, 0 x002a2a2a, 0 x00909090, 0 x00888888,
0 x00464646, 0 x00eeeeee, 0 x00b8b8b8, 0 x00141414,
0 x00dedede, 0 x005e5e5e, 0 x000b0b0b, 0 x00dbdbdb,
0 x00e0e0e0, 0 x00323232, 0 x003a3a3a, 0 x000a0a0a,
0 x00494949, 0 x00060606, 0 x00242424, 0 x005c5c5c,
0 x00c2c2c2, 0 x00d3d3d3, 0 x00acacac, 0 x00626262,
0 x00919191, 0 x00959595, 0 x00e4e4e4, 0 x00797979,
0 x00e7e7e7, 0 x00c8c8c8, 0 x00373737, 0 x006d6d6d,
0 x008d8d8d, 0 x00d5d5d5, 0 x004e4e4e, 0 x00a9a9a9,
0 x006c6c6c, 0 x00565656, 0 x00f4f4f4, 0 x00eaeaea,
0 x00656565, 0 x007a7a7a, 0 x00aeaeae, 0 x00080808,
0 x00bababa, 0 x00787878, 0 x00252525, 0 x002e2e2e,
0 x001c1c1c, 0 x00a6a6a6, 0 x00b4b4b4, 0 x00c6c6c6,
0 x00e8e8e8, 0 x00dddddd, 0 x00747474, 0 x001f1f1f,
0 x004b4b4b, 0 x00bdbdbd, 0 x008b8b8b, 0 x008a8a8a,
0 x00707070, 0 x003e3e3e, 0 x00b5b5b5, 0 x00666666,
0 x00484848, 0 x00030303, 0 x00f6f6f6, 0 x000e0e0e,
0 x00616161, 0 x00353535, 0 x00575757, 0 x00b9b9b9,
0 x00868686, 0 x00c1c1c1, 0 x001d1d1d, 0 x009e9e9e,
0 x00e1e1e1, 0 x00f8f8f8, 0 x00989898, 0 x00111111,
0 x00696969, 0 x00d9d9d9, 0 x008e8e8e, 0 x00949494,
0 x009b9b9b, 0 x001e1e1e, 0 x00878787, 0 x00e9e9e9,
0 x00cecece, 0 x00555555, 0 x00282828, 0 x00dfdfdf,
0 x008c8c8c, 0 x00a1a1a1, 0 x00898989, 0 x000d0d0d,
0 x00bfbfbf, 0 x00e6e6e6, 0 x00424242, 0 x00686868,
0 x00414141, 0 x00999999, 0 x002d2d2d, 0 x000f0f0f,
0 x00b0b0b0, 0 x00545454, 0 x00bbbbbb, 0 x00161616
};
static const u32 s2[256 ] = {
0 xe200e2e2, 0 x4e004e4e, 0 x54005454, 0 xfc00fcfc,
0 x94009494, 0 xc200c2c2, 0 x4a004a4a, 0 xcc00cccc,
0 x62006262, 0 x0d000d0d, 0 x6a006a6a, 0 x46004646,
0 x3c003c3c, 0 x4d004d4d, 0 x8b008b8b, 0 xd100d1d1,
0 x5e005e5e, 0 xfa00fafa, 0 x64006464, 0 xcb00cbcb,
0 xb400b4b4, 0 x97009797, 0 xbe00bebe, 0 x2b002b2b,
0 xbc00bcbc, 0 x77007777, 0 x2e002e2e, 0 x03000303,
0 xd300d3d3, 0 x19001919, 0 x59005959, 0 xc100c1c1,
0 x1d001d1d, 0 x06000606, 0 x41004141, 0 x6b006b6b,
0 x55005555, 0 xf000f0f0, 0 x99009999, 0 x69006969,
0 xea00eaea, 0 x9c009c9c, 0 x18001818, 0 xae00aeae,
0 x63006363, 0 xdf00dfdf, 0 xe700e7e7, 0 xbb00bbbb,
0 x00000000, 0 x73007373, 0 x66006666, 0 xfb00fbfb,
0 x96009696, 0 x4c004c4c, 0 x85008585, 0 xe400e4e4,
0 x3a003a3a, 0 x09000909, 0 x45004545, 0 xaa00aaaa,
0 x0f000f0f, 0 xee00eeee, 0 x10001010, 0 xeb00ebeb,
0 x2d002d2d, 0 x7f007f7f, 0 xf400f4f4, 0 x29002929,
0 xac00acac, 0 xcf00cfcf, 0 xad00adad, 0 x91009191,
0 x8d008d8d, 0 x78007878, 0 xc800c8c8, 0 x95009595,
0 xf900f9f9, 0 x2f002f2f, 0 xce00cece, 0 xcd00cdcd,
0 x08000808, 0 x7a007a7a, 0 x88008888, 0 x38003838,
0 x5c005c5c, 0 x83008383, 0 x2a002a2a, 0 x28002828,
0 x47004747, 0 xdb00dbdb, 0 xb800b8b8, 0 xc700c7c7,
0 x93009393, 0 xa400a4a4, 0 x12001212, 0 x53005353,
0 xff00ffff, 0 x87008787, 0 x0e000e0e, 0 x31003131,
0 x36003636, 0 x21002121, 0 x58005858, 0 x48004848,
0 x01000101, 0 x8e008e8e, 0 x37003737, 0 x74007474,
0 x32003232, 0 xca00caca, 0 xe900e9e9, 0 xb100b1b1,
0 xb700b7b7, 0 xab00abab, 0 x0c000c0c, 0 xd700d7d7,
0 xc400c4c4, 0 x56005656, 0 x42004242, 0 x26002626,
0 x07000707, 0 x98009898, 0 x60006060, 0 xd900d9d9,
0 xb600b6b6, 0 xb900b9b9, 0 x11001111, 0 x40004040,
0 xec00ecec, 0 x20002020, 0 x8c008c8c, 0 xbd00bdbd,
0 xa000a0a0, 0 xc900c9c9, 0 x84008484, 0 x04000404,
0 x49004949, 0 x23002323, 0 xf100f1f1, 0 x4f004f4f,
0 x50005050, 0 x1f001f1f, 0 x13001313, 0 xdc00dcdc,
0 xd800d8d8, 0 xc000c0c0, 0 x9e009e9e, 0 x57005757,
0 xe300e3e3, 0 xc300c3c3, 0 x7b007b7b, 0 x65006565,
0 x3b003b3b, 0 x02000202, 0 x8f008f8f, 0 x3e003e3e,
0 xe800e8e8, 0 x25002525, 0 x92009292, 0 xe500e5e5,
0 x15001515, 0 xdd00dddd, 0 xfd00fdfd, 0 x17001717,
0 xa900a9a9, 0 xbf00bfbf, 0 xd400d4d4, 0 x9a009a9a,
0 x7e007e7e, 0 xc500c5c5, 0 x39003939, 0 x67006767,
0 xfe00fefe, 0 x76007676, 0 x9d009d9d, 0 x43004343,
0 xa700a7a7, 0 xe100e1e1, 0 xd000d0d0, 0 xf500f5f5,
0 x68006868, 0 xf200f2f2, 0 x1b001b1b, 0 x34003434,
0 x70007070, 0 x05000505, 0 xa300a3a3, 0 x8a008a8a,
0 xd500d5d5, 0 x79007979, 0 x86008686, 0 xa800a8a8,
0 x30003030, 0 xc600c6c6, 0 x51005151, 0 x4b004b4b,
0 x1e001e1e, 0 xa600a6a6, 0 x27002727, 0 xf600f6f6,
0 x35003535, 0 xd200d2d2, 0 x6e006e6e, 0 x24002424,
0 x16001616, 0 x82008282, 0 x5f005f5f, 0 xda00dada,
0 xe600e6e6, 0 x75007575, 0 xa200a2a2, 0 xef00efef,
0 x2c002c2c, 0 xb200b2b2, 0 x1c001c1c, 0 x9f009f9f,
0 x5d005d5d, 0 x6f006f6f, 0 x80008080, 0 x0a000a0a,
0 x72007272, 0 x44004444, 0 x9b009b9b, 0 x6c006c6c,
0 x90009090, 0 x0b000b0b, 0 x5b005b5b, 0 x33003333,
0 x7d007d7d, 0 x5a005a5a, 0 x52005252, 0 xf300f3f3,
0 x61006161, 0 xa100a1a1, 0 xf700f7f7, 0 xb000b0b0,
0 xd600d6d6, 0 x3f003f3f, 0 x7c007c7c, 0 x6d006d6d,
0 xed00eded, 0 x14001414, 0 xe000e0e0, 0 xa500a5a5,
0 x3d003d3d, 0 x22002222, 0 xb300b3b3, 0 xf800f8f8,
0 x89008989, 0 xde00dede, 0 x71007171, 0 x1a001a1a,
0 xaf00afaf, 0 xba00baba, 0 xb500b5b5, 0 x81008181
};
static const u32 x1[256 ] = {
0 x52520052, 0 x09090009, 0 x6a6a006a, 0 xd5d500d5,
0 x30300030, 0 x36360036, 0 xa5a500a5, 0 x38380038,
0 xbfbf00bf, 0 x40400040, 0 xa3a300a3, 0 x9e9e009e,
0 x81810081, 0 xf3f300f3, 0 xd7d700d7, 0 xfbfb00fb,
0 x7c7c007c, 0 xe3e300e3, 0 x39390039, 0 x82820082,
0 x9b9b009b, 0 x2f2f002f, 0 xffff00ff, 0 x87870087,
0 x34340034, 0 x8e8e008e, 0 x43430043, 0 x44440044,
0 xc4c400c4, 0 xdede00de, 0 xe9e900e9, 0 xcbcb00cb,
0 x54540054, 0 x7b7b007b, 0 x94940094, 0 x32320032,
0 xa6a600a6, 0 xc2c200c2, 0 x23230023, 0 x3d3d003d,
0 xeeee00ee, 0 x4c4c004c, 0 x95950095, 0 x0b0b000b,
0 x42420042, 0 xfafa00fa, 0 xc3c300c3, 0 x4e4e004e,
0 x08080008, 0 x2e2e002e, 0 xa1a100a1, 0 x66660066,
0 x28280028, 0 xd9d900d9, 0 x24240024, 0 xb2b200b2,
0 x76760076, 0 x5b5b005b, 0 xa2a200a2, 0 x49490049,
0 x6d6d006d, 0 x8b8b008b, 0 xd1d100d1, 0 x25250025,
0 x72720072, 0 xf8f800f8, 0 xf6f600f6, 0 x64640064,
0 x86860086, 0 x68680068, 0 x98980098, 0 x16160016,
0 xd4d400d4, 0 xa4a400a4, 0 x5c5c005c, 0 xcccc00cc,
0 x5d5d005d, 0 x65650065, 0 xb6b600b6, 0 x92920092,
0 x6c6c006c, 0 x70700070, 0 x48480048, 0 x50500050,
0 xfdfd00fd, 0 xeded00ed, 0 xb9b900b9, 0 xdada00da,
0 x5e5e005e, 0 x15150015, 0 x46460046, 0 x57570057,
0 xa7a700a7, 0 x8d8d008d, 0 x9d9d009d, 0 x84840084,
0 x90900090, 0 xd8d800d8, 0 xabab00ab, 0 x00000000,
0 x8c8c008c, 0 xbcbc00bc, 0 xd3d300d3, 0 x0a0a000a,
0 xf7f700f7, 0 xe4e400e4, 0 x58580058, 0 x05050005,
0 xb8b800b8, 0 xb3b300b3, 0 x45450045, 0 x06060006,
0 xd0d000d0, 0 x2c2c002c, 0 x1e1e001e, 0 x8f8f008f,
0 xcaca00ca, 0 x3f3f003f, 0 x0f0f000f, 0 x02020002,
0 xc1c100c1, 0 xafaf00af, 0 xbdbd00bd, 0 x03030003,
0 x01010001, 0 x13130013, 0 x8a8a008a, 0 x6b6b006b,
0 x3a3a003a, 0 x91910091, 0 x11110011, 0 x41410041,
0 x4f4f004f, 0 x67670067, 0 xdcdc00dc, 0 xeaea00ea,
0 x97970097, 0 xf2f200f2, 0 xcfcf00cf, 0 xcece00ce,
0 xf0f000f0, 0 xb4b400b4, 0 xe6e600e6, 0 x73730073,
0 x96960096, 0 xacac00ac, 0 x74740074, 0 x22220022,
0 xe7e700e7, 0 xadad00ad, 0 x35350035, 0 x85850085,
0 xe2e200e2, 0 xf9f900f9, 0 x37370037, 0 xe8e800e8,
0 x1c1c001c, 0 x75750075, 0 xdfdf00df, 0 x6e6e006e,
0 x47470047, 0 xf1f100f1, 0 x1a1a001a, 0 x71710071,
0 x1d1d001d, 0 x29290029, 0 xc5c500c5, 0 x89890089,
0 x6f6f006f, 0 xb7b700b7, 0 x62620062, 0 x0e0e000e,
0 xaaaa00aa, 0 x18180018, 0 xbebe00be, 0 x1b1b001b,
0 xfcfc00fc, 0 x56560056, 0 x3e3e003e, 0 x4b4b004b,
0 xc6c600c6, 0 xd2d200d2, 0 x79790079, 0 x20200020,
0 x9a9a009a, 0 xdbdb00db, 0 xc0c000c0, 0 xfefe00fe,
0 x78780078, 0 xcdcd00cd, 0 x5a5a005a, 0 xf4f400f4,
0 x1f1f001f, 0 xdddd00dd, 0 xa8a800a8, 0 x33330033,
0 x88880088, 0 x07070007, 0 xc7c700c7, 0 x31310031,
0 xb1b100b1, 0 x12120012, 0 x10100010, 0 x59590059,
0 x27270027, 0 x80800080, 0 xecec00ec, 0 x5f5f005f,
0 x60600060, 0 x51510051, 0 x7f7f007f, 0 xa9a900a9,
0 x19190019, 0 xb5b500b5, 0 x4a4a004a, 0 x0d0d000d,
0 x2d2d002d, 0 xe5e500e5, 0 x7a7a007a, 0 x9f9f009f,
0 x93930093, 0 xc9c900c9, 0 x9c9c009c, 0 xefef00ef,
0 xa0a000a0, 0 xe0e000e0, 0 x3b3b003b, 0 x4d4d004d,
0 xaeae00ae, 0 x2a2a002a, 0 xf5f500f5, 0 xb0b000b0,
0 xc8c800c8, 0 xebeb00eb, 0 xbbbb00bb, 0 x3c3c003c,
0 x83830083, 0 x53530053, 0 x99990099, 0 x61610061,
0 x17170017, 0 x2b2b002b, 0 x04040004, 0 x7e7e007e,
0 xbaba00ba, 0 x77770077, 0 xd6d600d6, 0 x26260026,
0 xe1e100e1, 0 x69690069, 0 x14140014, 0 x63630063,
0 x55550055, 0 x21210021, 0 x0c0c000c, 0 x7d7d007d
};
static const u32 x2[256 ] = {
0 x30303000, 0 x68686800, 0 x99999900, 0 x1b1b1b00,
0 x87878700, 0 xb9b9b900, 0 x21212100, 0 x78787800,
0 x50505000, 0 x39393900, 0 xdbdbdb00, 0 xe1e1e100,
0 x72727200, 0 x09090900, 0 x62626200, 0 x3c3c3c00,
0 x3e3e3e00, 0 x7e7e7e00, 0 x5e5e5e00, 0 x8e8e8e00,
0 xf1f1f100, 0 xa0a0a000, 0 xcccccc00, 0 xa3a3a300,
0 x2a2a2a00, 0 x1d1d1d00, 0 xfbfbfb00, 0 xb6b6b600,
0 xd6d6d600, 0 x20202000, 0 xc4c4c400, 0 x8d8d8d00,
0 x81818100, 0 x65656500, 0 xf5f5f500, 0 x89898900,
0 xcbcbcb00, 0 x9d9d9d00, 0 x77777700, 0 xc6c6c600,
0 x57575700, 0 x43434300, 0 x56565600, 0 x17171700,
0 xd4d4d400, 0 x40404000, 0 x1a1a1a00, 0 x4d4d4d00,
0 xc0c0c000, 0 x63636300, 0 x6c6c6c00, 0 xe3e3e300,
0 xb7b7b700, 0 xc8c8c800, 0 x64646400, 0 x6a6a6a00,
0 x53535300, 0 xaaaaaa00, 0 x38383800, 0 x98989800,
0 x0c0c0c00, 0 xf4f4f400, 0 x9b9b9b00, 0 xededed00,
0 x7f7f7f00, 0 x22222200, 0 x76767600, 0 xafafaf00,
0 xdddddd00, 0 x3a3a3a00, 0 x0b0b0b00, 0 x58585800,
0 x67676700, 0 x88888800, 0 x06060600, 0 xc3c3c300,
0 x35353500, 0 x0d0d0d00, 0 x01010100, 0 x8b8b8b00,
0 x8c8c8c00, 0 xc2c2c200, 0 xe6e6e600, 0 x5f5f5f00,
0 x02020200, 0 x24242400, 0 x75757500, 0 x93939300,
0 x66666600, 0 x1e1e1e00, 0 xe5e5e500, 0 xe2e2e200,
0 x54545400, 0 xd8d8d800, 0 x10101000, 0 xcecece00,
0 x7a7a7a00, 0 xe8e8e800, 0 x08080800, 0 x2c2c2c00,
0 x12121200, 0 x97979700, 0 x32323200, 0 xababab00,
0 xb4b4b400, 0 x27272700, 0 x0a0a0a00, 0 x23232300,
0 xdfdfdf00, 0 xefefef00, 0 xcacaca00, 0 xd9d9d900,
0 xb8b8b800, 0 xfafafa00, 0 xdcdcdc00, 0 x31313100,
0 x6b6b6b00, 0 xd1d1d100, 0 xadadad00, 0 x19191900,
0 x49494900, 0 xbdbdbd00, 0 x51515100, 0 x96969600,
0 xeeeeee00, 0 xe4e4e400, 0 xa8a8a800, 0 x41414100,
0 xdadada00, 0 xffffff00, 0 xcdcdcd00, 0 x55555500,
0 x86868600, 0 x36363600, 0 xbebebe00, 0 x61616100,
0 x52525200, 0 xf8f8f800, 0 xbbbbbb00, 0 x0e0e0e00,
0 x82828200, 0 x48484800, 0 x69696900, 0 x9a9a9a00,
0 xe0e0e000, 0 x47474700, 0 x9e9e9e00, 0 x5c5c5c00,
0 x04040400, 0 x4b4b4b00, 0 x34343400, 0 x15151500,
0 x79797900, 0 x26262600, 0 xa7a7a700, 0 xdedede00,
0 x29292900, 0 xaeaeae00, 0 x92929200, 0 xd7d7d700,
0 x84848400, 0 xe9e9e900, 0 xd2d2d200, 0 xbababa00,
0 x5d5d5d00, 0 xf3f3f300, 0 xc5c5c500, 0 xb0b0b000,
0 xbfbfbf00, 0 xa4a4a400, 0 x3b3b3b00, 0 x71717100,
0 x44444400, 0 x46464600, 0 x2b2b2b00, 0 xfcfcfc00,
0 xebebeb00, 0 x6f6f6f00, 0 xd5d5d500, 0 xf6f6f600,
0 x14141400, 0 xfefefe00, 0 x7c7c7c00, 0 x70707000,
0 x5a5a5a00, 0 x7d7d7d00, 0 xfdfdfd00, 0 x2f2f2f00,
0 x18181800, 0 x83838300, 0 x16161600, 0 xa5a5a500,
0 x91919100, 0 x1f1f1f00, 0 x05050500, 0 x95959500,
0 x74747400, 0 xa9a9a900, 0 xc1c1c100, 0 x5b5b5b00,
0 x4a4a4a00, 0 x85858500, 0 x6d6d6d00, 0 x13131300,
0 x07070700, 0 x4f4f4f00, 0 x4e4e4e00, 0 x45454500,
0 xb2b2b200, 0 x0f0f0f00, 0 xc9c9c900, 0 x1c1c1c00,
0 xa6a6a600, 0 xbcbcbc00, 0 xececec00, 0 x73737300,
0 x90909000, 0 x7b7b7b00, 0 xcfcfcf00, 0 x59595900,
0 x8f8f8f00, 0 xa1a1a100, 0 xf9f9f900, 0 x2d2d2d00,
0 xf2f2f200, 0 xb1b1b100, 0 x00000000, 0 x94949400,
0 x37373700, 0 x9f9f9f00, 0 xd0d0d000, 0 x2e2e2e00,
0 x9c9c9c00, 0 x6e6e6e00, 0 x28282800, 0 x3f3f3f00,
0 x80808000, 0 xf0f0f000, 0 x3d3d3d00, 0 xd3d3d300,
0 x25252500, 0 x8a8a8a00, 0 xb5b5b500, 0 xe7e7e700,
0 x42424200, 0 xb3b3b300, 0 xc7c7c700, 0 xeaeaea00,
0 xf7f7f700, 0 x4c4c4c00, 0 x11111100, 0 x33333300,
0 x03030300, 0 xa2a2a200, 0 xacacac00, 0 x60606000
};
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 & 0 x0000ff00) << 8 ) ^
((v & 0 x00ff0000) >> 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 ) & 0 xff00ff00) ^ ((*t1 >> 8 ) & 0 x00ff00ff);
*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
Messung V0.5 in Prozent C=98 H=98 G=97
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland