These changes are the raw update to qemu-2.6.
[kvmfornfv.git] / qemu / roms / ipxe / src / tests / cipher_test.h
1 #ifndef _CIPHER_TEST_H
2 #define _CIPHER_TEST_H
3
4 /** @file
5  *
6  * Cipher self-tests
7  *
8  */
9
10 FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
11
12 #include <stdint.h>
13 #include <ipxe/crypto.h>
14 #include <ipxe/test.h>
15
16 /** A cipher test */
17 struct cipher_test {
18         /** Cipher algorithm */
19         struct cipher_algorithm *cipher;
20         /** Key */
21         const void *key;
22         /** Length of key */
23         size_t key_len;
24         /** Initialisation vector */
25         const void *iv;
26         /** Length of initialisation vector */
27         size_t iv_len;
28         /** Plaintext */
29         const void *plaintext;
30         /** Ciphertext */
31         const void *ciphertext;
32         /** Length of text */
33         size_t len;
34 };
35
36 /** Define inline key */
37 #define KEY(...) { __VA_ARGS__ }
38
39 /** Define inline initialisation vector */
40 #define IV(...) { __VA_ARGS__ }
41
42 /** Define inline plaintext data */
43 #define PLAINTEXT(...) { __VA_ARGS__ }
44
45 /** Define inline ciphertext data */
46 #define CIPHERTEXT(...) { __VA_ARGS__ }
47
48 /**
49  * Define a cipher test
50  *
51  * @v name              Test name
52  * @v CIPHER            Cipher algorithm
53  * @v KEY               Key
54  * @v IV                Initialisation vector
55  * @v PLAINTEXT         Plaintext
56  * @v CIPHERTEXT        Ciphertext
57  * @ret test            Cipher test
58  */
59 #define CIPHER_TEST( name, CIPHER, KEY, IV, PLAINTEXT, CIPHERTEXT )     \
60         static const uint8_t name ## _key [] = KEY;                     \
61         static const uint8_t name ## _iv [] = IV;                       \
62         static const uint8_t name ## _plaintext [] = PLAINTEXT;         \
63         static const uint8_t name ## _ciphertext                        \
64                 [ sizeof ( name ## _plaintext ) ] = CIPHERTEXT;         \
65         static struct cipher_test name = {                              \
66                 .cipher = CIPHER,                                       \
67                 .key = name ## _key,                                    \
68                 .key_len = sizeof ( name ## _key ),                     \
69                 .iv = name ## _iv,                                      \
70                 .iv_len = sizeof ( name ## _iv ),                       \
71                 .plaintext = name ## _plaintext,                        \
72                 .ciphertext = name ## _ciphertext,                      \
73                 .len = sizeof ( name ## _plaintext ),                   \
74         }
75
76 extern void cipher_encrypt_okx ( struct cipher_test *test, const char *file,
77                                  unsigned int line );
78 extern void cipher_decrypt_okx ( struct cipher_test *test, const char *file,
79                                  unsigned int line );
80 extern void cipher_okx ( struct cipher_test *test, const char *file,
81                          unsigned int line );
82 extern unsigned long cipher_cost_encrypt ( struct cipher_algorithm *cipher,
83                                            size_t key_len );
84 extern unsigned long cipher_cost_decrypt ( struct cipher_algorithm *cipher,
85                                            size_t key_len );
86
87 /**
88  * Report a cipher encryption test result
89  *
90  * @v test              Cipher test
91  */
92 #define cipher_encrypt_ok( test ) \
93         cipher_encrypt_okx ( test, __FILE__, __LINE__ )
94
95 /**
96  * Report a cipher decryption test result
97  *
98  * @v test              Cipher test
99  */
100 #define cipher_decrypt_ok( test ) \
101         cipher_decrypt_okx ( test, __FILE__, __LINE__ )
102
103 /**
104  * Report a cipher encryption and decryption test result
105  *
106  * @v test              Cipher test
107  */
108 #define cipher_ok( test ) \
109         cipher_okx ( test, __FILE__, __LINE__ )
110
111 #endif /* _CIPHER_TEST_H */