tor-browser

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

test_procparams.c (15218B)


      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_procparams.c
      6 *
      7 * Test ProcessingParams Type
      8 *
      9 */
     10 
     11 #include "testutil.h"
     12 #include "testutil_nss.h"
     13 
     14 static void *plContext = NULL;
     15 
     16 static void
     17 testDestroy(void *goodObject, void *equalObject, void *diffObject)
     18 {
     19    PKIX_TEST_STD_VARS();
     20 
     21    subTest("PKIX_ProcessingParams_Destroy");
     22 
     23    PKIX_TEST_DECREF_BC(goodObject);
     24    PKIX_TEST_DECREF_BC(equalObject);
     25    PKIX_TEST_DECREF_BC(diffObject);
     26 
     27 cleanup:
     28 
     29    PKIX_TEST_RETURN();
     30 }
     31 
     32 static void
     33 testGetAnchors(
     34    PKIX_ProcessingParams *goodObject,
     35    PKIX_ProcessingParams *equalObject)
     36 {
     37 
     38    PKIX_List *goodAnchors = NULL;
     39    PKIX_List *equalAnchors = NULL;
     40 
     41    PKIX_TEST_STD_VARS();
     42    subTest("PKIX_ProcessingParams_GetTrustAnchors");
     43 
     44    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTrustAnchors(goodObject, &goodAnchors, plContext));
     45 
     46    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTrustAnchors(equalObject, &equalAnchors, plContext));
     47 
     48    testEqualsHelper((PKIX_PL_Object *)goodAnchors,
     49                     (PKIX_PL_Object *)equalAnchors,
     50                     PKIX_TRUE,
     51                     plContext);
     52 
     53 cleanup:
     54 
     55    PKIX_TEST_DECREF_AC(goodAnchors);
     56    PKIX_TEST_DECREF_AC(equalAnchors);
     57 
     58    PKIX_TEST_RETURN();
     59 }
     60 
     61 static void
     62 testGetSetDate(
     63    PKIX_ProcessingParams *goodObject,
     64    PKIX_ProcessingParams *equalObject)
     65 {
     66 
     67    PKIX_PL_Date *setDate = NULL;
     68    PKIX_PL_Date *getDate = NULL;
     69    char *asciiDate = "040329134847Z";
     70 
     71    PKIX_TEST_STD_VARS();
     72    subTest("PKIX_ProcessingParams_Get/SetDate");
     73 
     74    setDate = createDate(asciiDate, plContext);
     75 
     76    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetDate(goodObject, setDate, plContext));
     77 
     78    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetDate(goodObject, &getDate, plContext));
     79 
     80    testEqualsHelper((PKIX_PL_Object *)setDate,
     81                     (PKIX_PL_Object *)getDate,
     82                     PKIX_TRUE,
     83                     plContext);
     84 
     85    /* we want to make sure that goodObject and equalObject are "equal" */
     86    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetDate(equalObject, setDate, plContext));
     87 
     88 cleanup:
     89 
     90    PKIX_TEST_DECREF_AC(setDate);
     91    PKIX_TEST_DECREF_AC(getDate);
     92 
     93    PKIX_TEST_RETURN();
     94 }
     95 
     96 static PKIX_Error *
     97 userChecker1cb(
     98    PKIX_CertChainChecker *checker,
     99    PKIX_PL_Cert *cert,
    100    PKIX_List *unresolvedCriticalExtensions, /* list of PKIX_PL_OID */
    101    void **pNBIOContext,
    102    void *plContext)
    103 {
    104    return (NULL);
    105 }
    106 
    107 static void
    108 testGetSetCertChainCheckers(
    109    PKIX_ProcessingParams *goodObject,
    110    PKIX_ProcessingParams *equalObject)
    111 {
    112 
    113    PKIX_CertChainChecker *checker = NULL;
    114    PKIX_List *setCheckersList = NULL;
    115    PKIX_List *getCheckersList = NULL;
    116    PKIX_PL_Date *date = NULL;
    117    char *asciiDate = "040329134847Z";
    118 
    119    PKIX_TEST_STD_VARS();
    120    subTest("PKIX_ProcessingParams_Get/SetCertChainCheckers");
    121 
    122    date = createDate(asciiDate, plContext);
    123 
    124    PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertChainChecker_Create(userChecker1cb,
    125                                                           PKIX_FALSE,
    126                                                           PKIX_FALSE,
    127                                                           NULL,
    128                                                           (PKIX_PL_Object *)date,
    129                                                           &checker,
    130                                                           plContext));
    131 
    132    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setCheckersList, plContext));
    133 
    134    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setCheckersList, (PKIX_PL_Object *)checker, plContext));
    135    PKIX_TEST_DECREF_BC(checker);
    136 
    137    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetCertChainCheckers(goodObject, setCheckersList, plContext));
    138 
    139    PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertChainChecker_Create(userChecker1cb,
    140                                                           PKIX_FALSE,
    141                                                           PKIX_FALSE,
    142                                                           NULL,
    143                                                           (PKIX_PL_Object *)date,
    144                                                           &checker,
    145                                                           plContext));
    146 
    147    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddCertChainChecker(goodObject, checker, plContext));
    148 
    149    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetCertChainCheckers(goodObject, &getCheckersList, plContext));
    150 
    151 cleanup:
    152 
    153    PKIX_TEST_DECREF_AC(setCheckersList);
    154    PKIX_TEST_DECREF_AC(getCheckersList);
    155    PKIX_TEST_DECREF_AC(date);
    156    PKIX_TEST_DECREF_BC(checker);
    157 
    158    PKIX_TEST_RETURN();
    159 }
    160 
    161 static PKIX_Error *
    162 userChecker2cb(
    163    PKIX_RevocationChecker *checker,
    164    PKIX_PL_Cert *cert,
    165    PKIX_UInt32 *pResult,
    166    void *plContext)
    167 {
    168    return (NULL);
    169 }
    170 
    171 static void
    172 testGetSetRevocationCheckers(
    173    PKIX_ProcessingParams *goodObject,
    174    PKIX_ProcessingParams *equalObject)
    175 {
    176 
    177    PKIX_RevocationChecker *checker = NULL;
    178    PKIX_List *setCheckersList = NULL;
    179    PKIX_List *getCheckersList = NULL;
    180    PKIX_PL_Date *date = NULL;
    181    char *asciiDate = "040329134847Z";
    182 
    183    PKIX_TEST_STD_VARS();
    184    subTest("PKIX_ProcessingParams_Get/SetRevocationCheckers");
    185 
    186    date = createDate(asciiDate, plContext);
    187 
    188    PKIX_TEST_EXPECT_NO_ERROR(PKIX_RevocationChecker_Create(userChecker2cb,
    189                                                            (PKIX_PL_Object *)date,
    190                                                            &checker,
    191                                                            plContext));
    192 
    193    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setCheckersList, plContext));
    194 
    195    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setCheckersList,
    196                                                   (PKIX_PL_Object *)checker,
    197                                                   plContext));
    198    PKIX_TEST_DECREF_BC(checker);
    199 
    200    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetRevocationCheckers(goodObject, setCheckersList, plContext));
    201 
    202    PKIX_TEST_EXPECT_NO_ERROR(PKIX_RevocationChecker_Create(userChecker2cb,
    203                                                            (PKIX_PL_Object *)date,
    204                                                            &checker,
    205                                                            plContext));
    206 
    207    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddRevocationChecker(goodObject, checker, plContext));
    208 
    209    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetRevocationCheckers(goodObject, &getCheckersList, plContext));
    210 
    211 cleanup:
    212 
    213    PKIX_TEST_DECREF_AC(setCheckersList);
    214    PKIX_TEST_DECREF_AC(getCheckersList);
    215    PKIX_TEST_DECREF_AC(date);
    216    PKIX_TEST_DECREF_BC(checker);
    217 
    218    PKIX_TEST_RETURN();
    219 }
    220 
    221 static void
    222 testGetSetResourceLimits(
    223    PKIX_ProcessingParams *goodObject,
    224    PKIX_ProcessingParams *equalObject)
    225 
    226 {
    227    PKIX_ResourceLimits *resourceLimits1 = NULL;
    228    PKIX_ResourceLimits *resourceLimits2 = NULL;
    229 
    230    PKIX_TEST_STD_VARS();
    231    subTest("PKIX_ProcessingParams_Get/SetResourceLimits");
    232 
    233    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_Create(&resourceLimits1, plContext));
    234 
    235    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_Create(&resourceLimits2, plContext));
    236 
    237    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxFanout(resourceLimits1, 3, plContext));
    238 
    239    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxDepth(resourceLimits1, 3, plContext));
    240 
    241    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxTime(resourceLimits1, 2, plContext));
    242 
    243    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetResourceLimits(goodObject, resourceLimits1, plContext));
    244 
    245    PKIX_TEST_DECREF_BC(resourceLimits2);
    246    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetResourceLimits(goodObject, &resourceLimits2, plContext));
    247 
    248    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetResourceLimits(equalObject, resourceLimits2, plContext));
    249 
    250 cleanup:
    251 
    252    PKIX_TEST_DECREF_AC(resourceLimits1);
    253    PKIX_TEST_DECREF_AC(resourceLimits2);
    254 
    255    PKIX_TEST_RETURN();
    256 }
    257 
    258 static void
    259 testGetSetConstraints(PKIX_ProcessingParams *goodObject)
    260 {
    261 
    262    PKIX_CertSelector *setConstraints = NULL;
    263    PKIX_CertSelector *getConstraints = NULL;
    264 
    265    PKIX_TEST_STD_VARS();
    266    subTest("PKIX_ProcessingParams_Get/SetTargetCertConstraints");
    267 
    268    /*
    269     * After createConstraints is implemented
    270     * setConstraints = createConstraints();
    271     */
    272 
    273    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetTargetCertConstraints(goodObject, setConstraints, plContext));
    274 
    275    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTargetCertConstraints(goodObject, &getConstraints, plContext));
    276 
    277    testEqualsHelper((PKIX_PL_Object *)setConstraints,
    278                     (PKIX_PL_Object *)getConstraints,
    279                     PKIX_TRUE,
    280                     plContext);
    281 
    282 cleanup:
    283 
    284    PKIX_TEST_DECREF_AC(setConstraints);
    285    PKIX_TEST_DECREF_AC(getConstraints);
    286 
    287    PKIX_TEST_RETURN();
    288 }
    289 
    290 static void
    291 testGetSetInitialPolicies(
    292    PKIX_ProcessingParams *goodObject,
    293    char *asciiPolicyOID)
    294 {
    295    PKIX_PL_OID *policyOID = NULL;
    296    PKIX_List *setPolicyList = NULL;
    297    PKIX_List *getPolicyList = NULL;
    298 
    299    PKIX_TEST_STD_VARS();
    300    subTest("PKIX_ProcessingParams_Get/SetInitialPolicies");
    301 
    302    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create(asciiPolicyOID, &policyOID, plContext));
    303 
    304    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setPolicyList, plContext));
    305 
    306    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(setPolicyList, (PKIX_PL_Object *)policyOID, plContext));
    307 
    308    PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_SetImmutable(setPolicyList, plContext));
    309 
    310    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetInitialPolicies(goodObject, setPolicyList, plContext));
    311 
    312    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetInitialPolicies(goodObject, &getPolicyList, plContext));
    313 
    314    testEqualsHelper((PKIX_PL_Object *)setPolicyList,
    315                     (PKIX_PL_Object *)getPolicyList,
    316                     PKIX_TRUE,
    317                     plContext);
    318 
    319 cleanup:
    320    PKIX_TEST_DECREF_AC(policyOID);
    321    PKIX_TEST_DECREF_AC(setPolicyList);
    322    PKIX_TEST_DECREF_AC(getPolicyList);
    323 
    324    PKIX_TEST_RETURN();
    325 }
    326 
    327 static void
    328 testGetSetPolicyQualifiersRejected(
    329    PKIX_ProcessingParams *goodObject,
    330    PKIX_Boolean rejected)
    331 {
    332    PKIX_Boolean getRejected = PKIX_FALSE;
    333 
    334    PKIX_TEST_STD_VARS();
    335    subTest("PKIX_ProcessingParams_Get/SetPolicyQualifiersRejected");
    336 
    337    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetPolicyQualifiersRejected(goodObject, rejected, plContext));
    338 
    339    PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetPolicyQualifiersRejected(goodObject, &getRejected, plContext));
    340 
    341    if (rejected != getRejected) {
    342        testError("GetPolicyQualifiersRejected returned unexpected value");
    343    }
    344 
    345 cleanup:
    346 
    347    PKIX_TEST_RETURN();
    348 }
    349 
    350 static void
    351 printUsage(char *pName)
    352 {
    353    printf("\nUSAGE: %s <central-data-dir>\n\n", pName);
    354 }
    355 
    356 int
    357 test_procparams(int argc, char *argv[])
    358 {
    359 
    360    PKIX_ProcessingParams *goodObject = NULL;
    361    PKIX_ProcessingParams *equalObject = NULL;
    362    PKIX_ProcessingParams *diffObject = NULL;
    363    PKIX_UInt32 actualMinorVersion;
    364    char *dataCentralDir = NULL;
    365    PKIX_UInt32 j = 0;
    366 
    367    char *oidAnyPolicy = PKIX_CERTIFICATEPOLICIES_ANYPOLICY_OID;
    368    char *oidNist1Policy = "2.16.840.1.101.3.2.1.48.2";
    369 
    370    char *goodInput = "yassir2yassir";
    371    char *diffInput = "yassir2bcn";
    372 
    373    char *expectedAscii =
    374        "[\n"
    375        "\tTrust Anchors: \n"
    376        "\t********BEGIN LIST OF TRUST ANCHORS********\n"
    377        "\t\t"
    378        "([\n"
    379        "\tTrusted CA Name:         "
    380        "CN=yassir,OU=bcn,OU=east,O=sun,C=us\n"
    381        "\tTrusted CA PublicKey:    ANSI X9.57 DSA Signature\n"
    382        "\tInitial Name Constraints:(null)\n"
    383        "]\n"
    384        ", [\n"
    385        "\tTrusted CA Name:         OU=bcn,OU=east,O=sun,C=us\n"
    386        "\tTrusted CA PublicKey:    ANSI X9.57 DSA Signature\n"
    387        "\tInitial Name Constraints:(null)\n"
    388        "]\n"
    389        ")\n"
    390        "\t********END LIST OF TRUST ANCHORS********\n"
    391        "\tDate:    \t\tMon Mar 29 08:48:47 2004\n"
    392        "\tTarget Constraints:    (null)\n"
    393        "\tInitial Policies:      (2.5.29.32.0)\n"
    394        "\tQualifiers Rejected:   FALSE\n"
    395        "\tCert Stores:           (EMPTY)\n"
    396        "\tResource Limits:       [\n"
    397        "\tMaxTime:                     2\n"
    398        "\tMaxFanout:                   3\n"
    399        "\tMaxDepth:                    3\n"
    400        "]\n\n"
    401        "\tCRL Checking Enabled:  0\n"
    402        "]\n";
    403 
    404    PKIX_TEST_STD_VARS();
    405 
    406    startTests("ProcessingParams");
    407 
    408    PKIX_TEST_EXPECT_NO_ERROR(
    409        PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
    410 
    411    if (argc < 2) {
    412        printUsage(argv[0]);
    413        return (0);
    414    }
    415 
    416    dataCentralDir = argv[j + 1];
    417 
    418    subTest("PKIX_ProcessingParams_Create");
    419    goodObject = createProcessingParams(dataCentralDir,
    420                                        goodInput,
    421                                        diffInput,
    422                                        NULL,
    423                                        NULL,
    424                                        PKIX_FALSE,
    425                                        plContext);
    426 
    427    equalObject = createProcessingParams(dataCentralDir,
    428                                         goodInput,
    429                                         diffInput,
    430                                         NULL,
    431                                         NULL,
    432                                         PKIX_FALSE,
    433                                         plContext);
    434 
    435    diffObject = createProcessingParams(dataCentralDir,
    436                                        diffInput,
    437                                        goodInput,
    438                                        NULL,
    439                                        NULL,
    440                                        PKIX_FALSE,
    441                                        plContext);
    442 
    443    testGetAnchors(goodObject, equalObject);
    444    testGetSetDate(goodObject, equalObject);
    445    testGetSetCertChainCheckers(goodObject, equalObject);
    446    testGetSetRevocationCheckers(goodObject, equalObject);
    447    testGetSetResourceLimits(goodObject, equalObject);
    448 
    449    /*
    450     * XXX testGetSetConstraints(goodObject);
    451     */
    452 
    453    testGetSetInitialPolicies(goodObject, oidAnyPolicy);
    454    testGetSetInitialPolicies(equalObject, oidAnyPolicy);
    455    testGetSetInitialPolicies(diffObject, oidNist1Policy);
    456    testGetSetPolicyQualifiersRejected(goodObject, PKIX_FALSE);
    457    testGetSetPolicyQualifiersRejected(equalObject, PKIX_FALSE);
    458    testGetSetPolicyQualifiersRejected(diffObject, PKIX_TRUE);
    459 
    460    PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject,
    461                                equalObject,
    462                                diffObject,
    463                                NULL, /* expectedAscii, */
    464                                ProcessingParams,
    465                                PKIX_FALSE);
    466 
    467    testDestroy(goodObject, equalObject, diffObject);
    468 
    469 cleanup:
    470 
    471    PKIX_Shutdown(plContext);
    472 
    473    PKIX_TEST_RETURN();
    474 
    475    endTests("ProcessingParams");
    476 
    477    return (0);
    478 }