iPXE
cipher_test.h
Go to the documentation of this file.
1#ifndef _CIPHER_TEST_H
2#define _CIPHER_TEST_H
3
4/** @file
5 *
6 * Cipher self-tests
7 *
8 */
9
10FILE_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 */
18 /** Cipher algorithm */
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 /** Additional data */
29 const void *additional;
30 /** Length of additional data */
32 /** Plaintext */
33 const void *plaintext;
34 /** Ciphertext */
35 const void *ciphertext;
36 /** Length of text */
37 size_t len;
38 /** Authentication tag */
39 const void *auth;
40 /** Length of authentication tag */
41 size_t auth_len;
42};
43
44/** Define inline key */
45#define KEY(...) { __VA_ARGS__ }
46
47/** Define inline initialisation vector */
48#define IV(...) { __VA_ARGS__ }
49
50/** Define inline additional data */
51#define ADDITIONAL(...) { __VA_ARGS__ }
52
53/** Define inline plaintext data */
54#define PLAINTEXT(...) { __VA_ARGS__ }
55
56/** Define inline ciphertext data */
57#define CIPHERTEXT(...) { __VA_ARGS__ }
58
59/** Define inline authentication tag */
60#define AUTH(...) { __VA_ARGS__ }
61
62/**
63 * Define a cipher test
64 *
65 * @v name Test name
66 * @v CIPHER Cipher algorithm
67 * @v KEY Key
68 * @v IV Initialisation vector
69 * @v ADDITIONAL Additional data
70 * @v PLAINTEXT Plaintext
71 * @v CIPHERTEXT Ciphertext
72 * @v AUTH Authentication tag
73 * @ret test Cipher test
74 */
75#define CIPHER_TEST( name, CIPHER, KEY, IV, ADDITIONAL, PLAINTEXT, \
76 CIPHERTEXT, AUTH ) \
77 static const uint8_t name ## _key [] = KEY; \
78 static const uint8_t name ## _iv [] = IV; \
79 static const uint8_t name ## _additional [] = ADDITIONAL; \
80 static const uint8_t name ## _plaintext [] = PLAINTEXT; \
81 static const uint8_t name ## _ciphertext \
82 [ sizeof ( name ## _plaintext ) ] = CIPHERTEXT; \
83 static const uint8_t name ## _auth [] = AUTH; \
84 static struct cipher_test name = { \
85 .cipher = CIPHER, \
86 .key = name ## _key, \
87 .key_len = sizeof ( name ## _key ), \
88 .iv = name ## _iv, \
89 .iv_len = sizeof ( name ## _iv ), \
90 .additional = name ## _additional, \
91 .additional_len = sizeof ( name ## _additional ), \
92 .plaintext = name ## _plaintext, \
93 .ciphertext = name ## _ciphertext, \
94 .len = sizeof ( name ## _plaintext ), \
95 .auth = name ## _auth, \
96 .auth_len = sizeof ( name ## _auth ), \
97 }
98
99extern void cipher_encrypt_okx ( struct cipher_test *test, const char *file,
100 unsigned int line );
101extern void cipher_decrypt_okx ( struct cipher_test *test, const char *file,
102 unsigned int line );
103extern void cipher_okx ( struct cipher_test *test, const char *file,
104 unsigned int line );
105extern unsigned long cipher_cost_encrypt ( struct cipher_algorithm *cipher,
106 size_t key_len );
107extern unsigned long cipher_cost_decrypt ( struct cipher_algorithm *cipher,
108 size_t key_len );
109
110/**
111 * Report a cipher encryption test result
112 *
113 * @v test Cipher test
114 */
115#define cipher_encrypt_ok( test ) \
116 cipher_encrypt_okx ( test, __FILE__, __LINE__ )
117
118/**
119 * Report a cipher decryption test result
120 *
121 * @v test Cipher test
122 */
123#define cipher_decrypt_ok( test ) \
124 cipher_decrypt_okx ( test, __FILE__, __LINE__ )
125
126/**
127 * Report a cipher encryption and decryption test result
128 *
129 * @v test Cipher test
130 */
131#define cipher_ok( test ) \
132 cipher_okx ( test, __FILE__, __LINE__ )
133
134#endif /* _CIPHER_TEST_H */
unsigned long cipher_cost_decrypt(struct cipher_algorithm *cipher, size_t key_len)
Calculate cipher decryption cost.
unsigned long cipher_cost_encrypt(struct cipher_algorithm *cipher, size_t key_len)
Calculate cipher encryption cost.
void cipher_decrypt_okx(struct cipher_test *test, const char *file, unsigned int line)
Report a cipher decryption test result.
void cipher_encrypt_okx(struct cipher_test *test, const char *file, unsigned int line)
Report a cipher encryption test result.
Definition cipher_test.c:54
void cipher_okx(struct cipher_test *test, const char *file, unsigned int line)
Report a cipher encryption and decryption test result.
static int test
Definition epic100.c:73
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
Definition compiler.h:896
Cryptographic API.
A cipher algorithm.
Definition crypto.h:51
A cipher test.
Definition cipher_test.h:17
const void * plaintext
Plaintext.
Definition cipher_test.h:33
const void * ciphertext
Ciphertext.
Definition cipher_test.h:35
size_t auth_len
Length of authentication tag.
Definition cipher_test.h:41
struct cipher_algorithm * cipher
Cipher algorithm.
Definition cipher_test.h:19
const void * iv
Initialisation vector.
Definition cipher_test.h:25
size_t key_len
Length of key.
Definition cipher_test.h:23
const void * key
Key.
Definition cipher_test.h:21
size_t len
Length of text.
Definition cipher_test.h:37
size_t additional_len
Length of additional data.
Definition cipher_test.h:31
const void * auth
Authentication tag.
Definition cipher_test.h:39
const void * additional
Additional data.
Definition cipher_test.h:29
size_t iv_len
Length of initialisation vector.
Definition cipher_test.h:27
Self-test infrastructure.