These changes are the raw update to qemu-2.6.
[kvmfornfv.git] / qemu / roms / ipxe / src / include / ipxe / aes.h
1 #ifndef _IPXE_AES_H
2 #define _IPXE_AES_H
3
4 /** @file
5  *
6  * AES algorithm
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11
12 #include <ipxe/crypto.h>
13
14 /** AES blocksize */
15 #define AES_BLOCKSIZE 16
16
17 /** Maximum number of AES rounds */
18 #define AES_MAX_ROUNDS 15
19
20 /** AES matrix */
21 union aes_matrix {
22         /** Viewed as an array of bytes */
23         uint8_t byte[16];
24         /** Viewed as an array of four-byte columns */
25         uint32_t column[4];
26 } __attribute__ (( packed ));
27
28 /** AES round keys */
29 struct aes_round_keys {
30         /** Round keys */
31         union aes_matrix key[AES_MAX_ROUNDS];
32 };
33
34 /** AES context */
35 struct aes_context {
36         /** Encryption keys */
37         struct aes_round_keys encrypt;
38         /** Decryption keys */
39         struct aes_round_keys decrypt;
40         /** Number of rounds */
41         unsigned int rounds;
42 };
43
44 /** AES context size */
45 #define AES_CTX_SIZE sizeof ( struct aes_context )
46
47 extern struct cipher_algorithm aes_algorithm;
48 extern struct cipher_algorithm aes_ecb_algorithm;
49 extern struct cipher_algorithm aes_cbc_algorithm;
50
51 int aes_wrap ( const void *kek, const void *src, void *dest, int nblk );
52 int aes_unwrap ( const void *kek, const void *src, void *dest, int nblk );
53
54 #endif /* _IPXE_AES_H */