tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_subjectinfoaccess.c (3684B)


      1 /* This Source Code Form is subject to the terms of the Mozilla Public
      2 * License, v. 2.0. If a copy of the MPL was not distributed with this
      3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      4 /*
      5 * test_subjectinfoaccess.c
      6 *
      7 * Test Subject InfoAccess Type
      8 *
      9 */
     10 
     11 #include "testutil.h"
     12 #include "testutil_nss.h"
     13 
     14 static void *plContext = NULL;
     15 
     16 int
     17 test_subjectinfoaccess(int argc, char *argv[])
     18 {
     19 
     20    PKIX_PL_Cert *cert = NULL;
     21    PKIX_PL_Cert *certDiff = NULL;
     22    PKIX_List *aiaList = NULL;
     23    PKIX_List *siaList = NULL;
     24    PKIX_PL_InfoAccess *sia = NULL;
     25    PKIX_PL_InfoAccess *siaDup = NULL;
     26    PKIX_PL_InfoAccess *siaDiff = NULL;
     27    PKIX_PL_GeneralName *location = NULL;
     28    char *certPathName = NULL;
     29    char *dirName = NULL;
     30    PKIX_UInt32 method = 0;
     31    PKIX_UInt32 actualMinorVersion;
     32    PKIX_UInt32 size, i;
     33    PKIX_UInt32 j = 0;
     34    char *expectedAscii = "[method:caRepository, "
     35                          "location:http://betty.nist.gov/pathdiscoverytestsuite/"
     36                          "p7cfiles/IssuedByTrustAnchor1.p7c]";
     37 
     38    PKIX_TEST_STD_VARS();
     39 
     40    startTests("SubjectInfoAccess");
     41 
     42    PKIX_TEST_EXPECT_NO_ERROR(
     43        PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
     44 
     45    if (argc < 5 + j) {
     46        printf("Usage: %s <test-purpose> <cert> <diff-cert>\n", argv[0]);
     47    }
     48 
     49    dirName = argv[2 + j];
     50    certPathName = argv[3 + j];
     51 
     52    subTest("Creating Cert with Subject Info Access");
     53    cert = createCert(dirName, certPathName, plContext);
     54 
     55    certPathName = argv[4 + j];
     56 
     57    subTest("Creating Cert with Subject Info Access");
     58    certDiff = createCert(dirName, certPathName, plContext);
     59 
     60    subTest("Getting Subject Info Access");
     61    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Cert_GetSubjectInfoAccess(cert, &siaList, plContext));
     62 
     63    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(siaList, &size, plContext));
     64 
     65    if (size != 1) {
     66        pkixTestErrorMsg = "unexpected number of AIA";
     67        goto cleanup;
     68    }
     69 
     70    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(siaList, 0, (PKIX_PL_Object **)&sia, plContext));
     71 
     72    subTest("PKIX_PL_InfoAccess_GetMethod");
     73    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_InfoAccess_GetMethod(sia, &method, plContext));
     74    if (method != PKIX_INFOACCESS_CA_REPOSITORY) {
     75        pkixTestErrorMsg = "unexpected method of AIA";
     76        goto cleanup;
     77    }
     78 
     79    subTest("PKIX_PL_InfoAccess_GetLocation");
     80    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_InfoAccess_GetLocation(sia, &location, plContext));
     81    if (!location) {
     82        pkixTestErrorMsg = "Cannot get AIA location";
     83        goto cleanup;
     84    }
     85 
     86    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(siaList, 0, (PKIX_PL_Object **)&siaDup, plContext));
     87 
     88    subTest("Getting Authority Info Access as difference comparison");
     89    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Cert_GetAuthorityInfoAccess(certDiff, &aiaList, plContext));
     90 
     91    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(aiaList, &size, plContext));
     92 
     93    if (size != 1) {
     94        pkixTestErrorMsg = "unexpected number of AIA";
     95        goto cleanup;
     96    }
     97 
     98    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetItem(aiaList, 0, (PKIX_PL_Object **)&siaDiff, plContext));
     99 
    100    subTest("Checking: Equal, Hash and ToString");
    101    PKIX_TEST_EQ_HASH_TOSTR_DUP(sia, siaDup, siaDiff, expectedAscii, InfoAccess, PKIX_FALSE);
    102 
    103 cleanup:
    104 
    105    PKIX_TEST_DECREF_AC(location);
    106    PKIX_TEST_DECREF_AC(sia);
    107    PKIX_TEST_DECREF_AC(siaDup);
    108    PKIX_TEST_DECREF_AC(siaDiff);
    109    PKIX_TEST_DECREF_AC(aiaList);
    110    PKIX_TEST_DECREF_AC(siaList);
    111    PKIX_TEST_DECREF_AC(cert);
    112    PKIX_TEST_DECREF_AC(certDiff);
    113 
    114    PKIX_Shutdown(plContext);
    115 
    116    PKIX_TEST_RETURN();
    117 
    118    endTests("Subjectinfoaccess");
    119 
    120    return (0);
    121 }