#ifndef _ASN1_TEST_H #define _ASN1_TEST_H FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #include #include #include #include /** Digest algorithm used for ASN.1 tests */ #define asn1_test_digest_algorithm sha1_algorithm /** Digest size used for ASN.1 tests */ #define ASN1_TEST_DIGEST_SIZE SHA1_DIGEST_SIZE /** An ASN.1 test digest */ struct asn1_test_digest { /** Digest value */ uint8_t digest[ASN1_TEST_DIGEST_SIZE]; }; /** An ASN.1 test */ struct asn1_test { /** Image type */ struct image_type *type; /** Source image */ struct image *image; /** Expected digests of ASN.1 objects */ struct asn1_test_digest *expected; /** Number of ASN.1 objects */ unsigned int count; }; /** * Define an ASN.1 test * * @v _name Test name * @v _type Test image file type * @v _file Test image file data * @v ... Expected ASN.1 object digests * @ret test ASN.1 test */ #define ASN1( _name, _type, _file, ... ) \ static const char _name ## __file[] = _file; \ static struct image _name ## __image = { \ .refcnt = REF_INIT ( ref_no_free ), \ .name = #_name, \ .data = ( userptr_t ) ( _name ## __file ), \ .len = sizeof ( _name ## __file ), \ }; \ static struct asn1_test_digest _name ## _expected[] = { \ __VA_ARGS__ \ }; \ static struct asn1_test _name = { \ .type = _type, \ .image = & _name ## __image, \ .expected = _name ## _expected, \ .count = ( sizeof ( _name ## _expected ) / \ sizeof ( _name ## _expected[0] ) ), \ }; extern void asn1_okx ( struct asn1_test *test, const char *file, unsigned int line ); /** * Report ASN.1 test result * * @v test ASN.1 test */ #define asn1_ok( test ) asn1_okx ( test, __FILE__, __LINE__ ) #endif /* _ASN1_TEST_H */