summaryrefslogtreecommitdiffstats
path: root/src/tests/cms_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/tests/cms_test.c')
-rw-r--r--src/tests/cms_test.c46
1 files changed, 29 insertions, 17 deletions
diff --git a/src/tests/cms_test.c b/src/tests/cms_test.c
index 9899b06aa..b96decfc9 100644
--- a/src/tests/cms_test.c
+++ b/src/tests/cms_test.c
@@ -1305,7 +1305,13 @@ static uint8_t root_crt_fingerprint[] =
0x96, 0xe7, 0xa8, 0x6d, 0x63, 0x2d, 0x32, 0x38,
0xaf, 0x00, 0xc4, 0x1a, 0xfc, 0xd8, 0xac, 0xc3 );
-/** Certificate store containing the iPXE self-test root CA */
+/** Empty certificate store */
+static struct x509_chain empty_store = {
+ .refcnt = REF_INIT ( ref_no_free ),
+ .links = LIST_HEAD_INIT ( empty_store.links ),
+};
+
+/** Root certificate list containing the iPXE self-test root CA */
static struct x509_root test_root = {
.digest = &cms_test_algorithm,
.count = 1,
@@ -1349,12 +1355,13 @@ static time_t test_expired = 1375573111ULL; /* Sat Aug 3 23:38:31 2013 */
* @v code Test signed code
* @v name Test verification name
* @v time Test verification time
- * @v root Test root certificate store
+ * @v store Test certificate store
+ * @v root Test root certificate list
*/
-#define cms_verify_ok( sgn, code, name, time, root ) do { \
+#define cms_verify_ok( sgn, code, name, time, store, root ) do { \
x509_invalidate_chain ( (sgn)->sig->certificates ); \
ok ( cms_verify ( (sgn)->sig, virt_to_user ( (code)->data ), \
- (code)->len, name, time, root ) == 0 ); \
+ (code)->len, name, time, store, root ) == 0 );\
} while ( 0 )
/**
@@ -1364,12 +1371,13 @@ static time_t test_expired = 1375573111ULL; /* Sat Aug 3 23:38:31 2013 */
* @v code Test signed code
* @v name Test verification name
* @v time Test verification time
- * @v root Test root certificate store
+ * @v store Test certificate store
+ * @v root Test root certificate list
*/
-#define cms_verify_fail_ok( sgn, code, name, time, root ) do { \
+#define cms_verify_fail_ok( sgn, code, name, time, store, root ) do { \
x509_invalidate_chain ( (sgn)->sig->certificates ); \
ok ( cms_verify ( (sgn)->sig, virt_to_user ( (code)->data ), \
- (code)->len, name, time, root ) != 0 ); \
+ (code)->len, name, time, store, root ) != 0 );\
} while ( 0 )
/**
@@ -1385,38 +1393,42 @@ static void cms_test_exec ( void ) {
cms_signature_ok ( &nonsigned_sig );
/* Check good signature */
+ cms_verify_ok ( &codesigned_sig, &test_code, "codesign.test.ipxe.org",
+ test_time, &empty_store, &test_root );
cms_verify_ok ( &codesigned_sig, &test_code,
- "codesign.test.ipxe.org", test_time, &test_root );
- cms_verify_ok ( &codesigned_sig, &test_code,
- NULL, test_time, &test_root );
+ NULL, test_time, &empty_store, &test_root );
/* Check incorrect signer name */
cms_verify_fail_ok ( &codesigned_sig, &test_code,
- "wrongname.test.ipxe.org", test_time, &test_root );
+ "wrongname.test.ipxe.org", test_time,
+ &empty_store, &test_root );
/* Check non-code-signing certificate */
cms_verify_fail_ok ( &genericsigned_sig, &test_code,
- NULL, test_time, &test_root );
+ NULL, test_time, &empty_store, &test_root );
/* Check non-signing certificate */
cms_verify_fail_ok ( &nonsigned_sig, &test_code,
- NULL, test_time, &test_root );
+ NULL, test_time, &empty_store, &test_root );
/* Check broken chain */
cms_verify_fail_ok ( &brokenchain_sig, &test_code,
- NULL, test_time, &test_root );
+ NULL, test_time, &empty_store, &test_root );
/* Check untrusted signature */
cms_verify_fail_ok ( &codesigned_sig, &test_code,
- NULL, test_time, &dummy_root );
+ NULL, test_time, &empty_store, &dummy_root );
/* Check incorrect signed content */
cms_verify_fail_ok ( &codesigned_sig, &bad_code,
- NULL, test_time, &test_root );
+ NULL, test_time, &empty_store, &test_root );
/* Check expired signature */
cms_verify_fail_ok ( &codesigned_sig, &test_code,
- NULL, test_expired, &test_root );
+ NULL, test_expired, &empty_store, &test_root );
+
+ /* Sanity check */
+ assert ( list_empty ( &empty_store.links ) );
/* Drop signature references */
cms_put ( nonsigned_sig.sig );