Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  aria.h   Sprache: C

 
/* 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] = {
 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

Messung V0.5
C=98 H=98 G=97

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge