123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- #ifndef _CIPHER_TEST_H
- #define _CIPHER_TEST_H
-
- /** @file
- *
- * Cipher self-tests
- *
- */
-
- FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
-
- #include <stdint.h>
- #include <ipxe/crypto.h>
- #include <ipxe/test.h>
-
- /** A cipher test */
- struct cipher_test {
- /** Cipher algorithm */
- struct cipher_algorithm *cipher;
- /** Key */
- const void *key;
- /** Length of key */
- size_t key_len;
- /** Initialisation vector */
- const void *iv;
- /** Length of initialisation vector */
- size_t iv_len;
- /** Plaintext */
- const void *plaintext;
- /** Ciphertext */
- const void *ciphertext;
- /** Length of text */
- size_t len;
- };
-
- /** Define inline key */
- #define KEY(...) { __VA_ARGS__ }
-
- /** Define inline initialisation vector */
- #define IV(...) { __VA_ARGS__ }
-
- /** Define inline plaintext data */
- #define PLAINTEXT(...) { __VA_ARGS__ }
-
- /** Define inline ciphertext data */
- #define CIPHERTEXT(...) { __VA_ARGS__ }
-
- /**
- * Define a cipher test
- *
- * @v name Test name
- * @v CIPHER Cipher algorithm
- * @v KEY Key
- * @v IV Initialisation vector
- * @v PLAINTEXT Plaintext
- * @v CIPHERTEXT Ciphertext
- * @ret test Cipher test
- */
- #define CIPHER_TEST( name, CIPHER, KEY, IV, PLAINTEXT, CIPHERTEXT ) \
- static const uint8_t name ## _key [] = KEY; \
- static const uint8_t name ## _iv [] = IV; \
- static const uint8_t name ## _plaintext [] = PLAINTEXT; \
- static const uint8_t name ## _ciphertext \
- [ sizeof ( name ## _plaintext ) ] = CIPHERTEXT; \
- static struct cipher_test name = { \
- .cipher = CIPHER, \
- .key = name ## _key, \
- .key_len = sizeof ( name ## _key ), \
- .iv = name ## _iv, \
- .iv_len = sizeof ( name ## _iv ), \
- .plaintext = name ## _plaintext, \
- .ciphertext = name ## _ciphertext, \
- .len = sizeof ( name ## _plaintext ), \
- }
-
- extern void cipher_encrypt_okx ( struct cipher_test *test, const char *file,
- unsigned int line );
- extern void cipher_decrypt_okx ( struct cipher_test *test, const char *file,
- unsigned int line );
- extern void cipher_okx ( struct cipher_test *test, const char *file,
- unsigned int line );
- extern unsigned long cipher_cost_encrypt ( struct cipher_algorithm *cipher,
- size_t key_len );
- extern unsigned long cipher_cost_decrypt ( struct cipher_algorithm *cipher,
- size_t key_len );
-
- /**
- * Report a cipher encryption test result
- *
- * @v test Cipher test
- */
- #define cipher_encrypt_ok( test ) \
- cipher_encrypt_okx ( test, __FILE__, __LINE__ )
-
- /**
- * Report a cipher decryption test result
- *
- * @v test Cipher test
- */
- #define cipher_decrypt_ok( test ) \
- cipher_decrypt_okx ( test, __FILE__, __LINE__ )
-
- /**
- * Report a cipher encryption and decryption test result
- *
- * @v test Cipher test
- */
- #define cipher_ok( test ) \
- cipher_okx ( test, __FILE__, __LINE__ )
-
- #endif /* _CIPHER_TEST_H */
|