cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

aes.h (2563B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Common values for AES algorithms
      4 */
      5
      6#ifndef _CRYPTO_AES_H
      7#define _CRYPTO_AES_H
      8
      9#include <linux/types.h>
     10#include <linux/crypto.h>
     11
     12#define AES_MIN_KEY_SIZE	16
     13#define AES_MAX_KEY_SIZE	32
     14#define AES_KEYSIZE_128		16
     15#define AES_KEYSIZE_192		24
     16#define AES_KEYSIZE_256		32
     17#define AES_BLOCK_SIZE		16
     18#define AES_MAX_KEYLENGTH	(15 * 16)
     19#define AES_MAX_KEYLENGTH_U32	(AES_MAX_KEYLENGTH / sizeof(u32))
     20
     21/*
     22 * Please ensure that the first two fields are 16-byte aligned
     23 * relative to the start of the structure, i.e., don't move them!
     24 */
     25struct crypto_aes_ctx {
     26	u32 key_enc[AES_MAX_KEYLENGTH_U32];
     27	u32 key_dec[AES_MAX_KEYLENGTH_U32];
     28	u32 key_length;
     29};
     30
     31extern const u32 crypto_ft_tab[4][256] ____cacheline_aligned;
     32extern const u32 crypto_it_tab[4][256] ____cacheline_aligned;
     33
     34/*
     35 * validate key length for AES algorithms
     36 */
     37static inline int aes_check_keylen(unsigned int keylen)
     38{
     39	switch (keylen) {
     40	case AES_KEYSIZE_128:
     41	case AES_KEYSIZE_192:
     42	case AES_KEYSIZE_256:
     43		break;
     44	default:
     45		return -EINVAL;
     46	}
     47
     48	return 0;
     49}
     50
     51int crypto_aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
     52		unsigned int key_len);
     53
     54/**
     55 * aes_expandkey - Expands the AES key as described in FIPS-197
     56 * @ctx:	The location where the computed key will be stored.
     57 * @in_key:	The supplied key.
     58 * @key_len:	The length of the supplied key.
     59 *
     60 * Returns 0 on success. The function fails only if an invalid key size (or
     61 * pointer) is supplied.
     62 * The expanded key size is 240 bytes (max of 14 rounds with a unique 16 bytes
     63 * key schedule plus a 16 bytes key which is used before the first round).
     64 * The decryption key is prepared for the "Equivalent Inverse Cipher" as
     65 * described in FIPS-197. The first slot (16 bytes) of each key (enc or dec) is
     66 * for the initial combination, the second slot for the first round and so on.
     67 */
     68int aes_expandkey(struct crypto_aes_ctx *ctx, const u8 *in_key,
     69		  unsigned int key_len);
     70
     71/**
     72 * aes_encrypt - Encrypt a single AES block
     73 * @ctx:	Context struct containing the key schedule
     74 * @out:	Buffer to store the ciphertext
     75 * @in:		Buffer containing the plaintext
     76 */
     77void aes_encrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);
     78
     79/**
     80 * aes_decrypt - Decrypt a single AES block
     81 * @ctx:	Context struct containing the key schedule
     82 * @out:	Buffer to store the plaintext
     83 * @in:		Buffer containing the ciphertext
     84 */
     85void aes_decrypt(const struct crypto_aes_ctx *ctx, u8 *out, const u8 *in);
     86
     87extern const u8 crypto_aes_sbox[];
     88extern const u8 crypto_aes_inv_sbox[];
     89
     90#endif