+static int assert_validity(CT_TEST_FIXTURE *fixture, STACK_OF(SCT) *scts,
+ CT_POLICY_EVAL_CTX *policy_ctx)
+{
+ int invalid_sct_count = 0;
+ int valid_sct_count = 0;
+ int i;
+
+ if (!TEST_int_ge(SCT_LIST_validate(scts, policy_ctx), 0))
+ return 0;
+
+ for (i = 0; i < sk_SCT_num(scts); ++i) {
+ SCT *sct_i = sk_SCT_value(scts, i);
+
+ switch (SCT_get_validation_status(sct_i)) {
+ case SCT_VALIDATION_STATUS_VALID:
+ ++valid_sct_count;
+ break;
+ case SCT_VALIDATION_STATUS_INVALID:
+ ++invalid_sct_count;
+ break;
+ case SCT_VALIDATION_STATUS_NOT_SET:
+ case SCT_VALIDATION_STATUS_UNKNOWN_LOG:
+ case SCT_VALIDATION_STATUS_UNVERIFIED:
+ case SCT_VALIDATION_STATUS_UNKNOWN_VERSION:
+ /* Ignore other validation statuses. */
+ break;
+ }
+ }
+
+ if (!TEST_int_eq(valid_sct_count, fixture->expected_valid_sct_count)) {
+ int unverified_sct_count = sk_SCT_num(scts) -
+ invalid_sct_count - valid_sct_count;
+
+ TEST_info("%d SCTs failed, %d SCTs unverified",
+ invalid_sct_count, unverified_sct_count);
+ return 0;
+ }
+
+ return 1;
+}
+
+static int execute_cert_test(CT_TEST_FIXTURE *fixture)