[efi] Include installed protocol list in unknown handle names
[ipxe.git] / 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 */