2022-07-04 12:42:48 +03:00
/* 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
2022-11-25 07:36:28 +03:00
# include <crypto/algapi.h>
2022-07-04 12:42:48 +03:00
# 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 ] ;
2022-09-16 15:57:34 +03:00
int rounds ;
int key_length ;
2022-07-04 12:42:48 +03:00
} ;
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 ) ) ;
}
2022-09-16 15:57:34 +03:00
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 ) ;
2022-07-04 12:42:48 +03:00
# endif