]> git.kernelconcepts.de Git - karo-tx-uboot.git/blob - include/aes.h
aes: Implement AES-128-CBC decryption function
[karo-tx-uboot.git] / include / aes.h
1 /*
2  * Copyright (c) 2011 The Chromium OS Authors.
3  * (C) Copyright 2010 - 2011 NVIDIA Corporation <www.nvidia.com>
4  *
5  * SPDX-License-Identifier:     GPL-2.0+
6  */
7
8 #ifndef _AES_REF_H_
9 #define _AES_REF_H_
10
11 /*
12  * AES encryption library, with small code size, supporting only 128-bit AES
13  *
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.
16  */
17
18 enum {
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 */
22
23         AES_KEY_LENGTH  = 128 / 8,
24         AES_EXPAND_KEY_LENGTH   = 4 * AES_STATECOLS * (AES_ROUNDS + 1),
25 };
26
27 /**
28  * aes_expand_key() - Expand the AES key
29  *
30  * Expand a key into a key schedule, which is then used for the other
31  * operations.
32  *
33  * @key         Key, of length AES_KEY_LENGTH bytes
34  * @expkey      Buffer to place expanded key, AES_EXPAND_KEY_LENGTH
35  */
36 void aes_expand_key(u8 *key, u8 *expkey);
37
38 /**
39  * aes_encrypt() - Encrypt single block of data with AES 128
40  *
41  * @in          Input data
42  * @expkey      Expanded key to use for encryption (from aes_expand_key())
43  * @out         Output data
44  */
45 void aes_encrypt(u8 *in, u8 *expkey, u8 *out);
46
47 /**
48  * aes_decrypt() - Decrypt single block of data with AES 128
49  *
50  * @in          Input data
51  * @expkey      Expanded key to use for decryption (from aes_expand_key())
52  * @out         Output data
53  */
54 void aes_decrypt(u8 *in, u8 *expkey, u8 *out);
55
56 /**
57  * aes_cbc_encrypt_blocks() - Encrypt multiple blocks of data with AES CBC.
58  *
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
63  */
64 void aes_cbc_encrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks);
65
66 /**
67  * Decrypt multiple blocks of data with AES CBC.
68  *
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
73  */
74 void aes_cbc_decrypt_blocks(u8 *key_exp, u8 *src, u8 *dst, u32 num_aes_blocks);
75
76 #endif /* _AES_REF_H_ */