2 * Copyright (c) 2011 The Chromium OS Authors.
3 * (C) Copyright 2010 - 2011 NVIDIA Corporation <www.nvidia.com>
5 * SPDX-License-Identifier: GPL-2.0+
12 * AES encryption library, with small code size, supporting only 128-bit AES
14 * AES is a stream cipher which works a block at a time, with each block
15 * in this case being AES_KEY_LENGTH bytes.
19 AES_STATECOLS = 4, /* columns in the state & expanded key */
20 AES_KEYCOLS = 4, /* columns in a key */
21 AES_ROUNDS = 10, /* rounds in encryption */
23 AES_KEY_LENGTH = 128 / 8,
24 AES_EXPAND_KEY_LENGTH = 4 * AES_STATECOLS * (AES_ROUNDS + 1),
28 * aes_expand_key() - Expand the AES key
30 * Expand a key into a key schedule, which is then used for the other
33 * @key Key, of length AES_KEY_LENGTH bytes
34 * @expkey Buffer to place expanded key, AES_EXPAND_KEY_LENGTH
36 void aes_expand_key(u8 *key, u8 *expkey);
39 * aes_encrypt() - Encrypt single block of data with AES 128
42 * @expkey Expanded key to use for encryption (from aes_expand_key())
45 void aes_encrypt(u8 *in, u8 *expkey, u8 *out);
48 * aes_decrypt() - Decrypt single block of data with AES 128
51 * @expkey Expanded key to use for decryption (from aes_expand_key())
54 void aes_decrypt(u8 *in, u8 *expkey, u8 *out);
57 * aes_cbc_encrypt_blocks() - Encrypt multiple blocks of data with AES CBC.
59 * @key_exp Expanded key to use
60 * @src Source data to encrypt
61 * @dst Destination buffer
62 * @num_aes_blocks Number of AES blocks to encrypt
64 void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks);
67 * Decrypt multiple blocks of data with AES CBC.
69 * @key_exp Expanded key to use
70 * @src Source data to decrypt
71 * @dst Destination buffer
72 * @num_aes_blocks Number of AES blocks to decrypt
74 void aes_cbc_decrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks);
76 #endif /* _AES_REF_H_ */