tor-browser

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

test_oid.c (5366B)


      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_oid.c
      6 *
      7 * Test OID Types
      8 *
      9 */
     10 
     11 #include "testutil.h"
     12 #include "testutil_nss.h"
     13 
     14 static void *plContext = NULL;
     15 
     16 static void
     17 createOID(
     18    PKIX_PL_OID **testOID,
     19    char *oidAscii,
     20    PKIX_Boolean errorHandling)
     21 {
     22    PKIX_TEST_STD_VARS();
     23 
     24    if (errorHandling) {
     25        PKIX_TEST_EXPECT_ERROR(PKIX_PL_OID_Create(oidAscii, testOID, plContext));
     26    } else {
     27        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create(oidAscii, testOID, plContext));
     28    }
     29 
     30 cleanup:
     31 
     32    PKIX_TEST_RETURN();
     33 }
     34 
     35 static void
     36 testToString(
     37    PKIX_PL_OID *oid,
     38    char *expAscii)
     39 {
     40    PKIX_PL_String *oidString = NULL;
     41    char *temp = NULL;
     42 
     43    PKIX_TEST_STD_VARS();
     44 
     45    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)oid,
     46                                                      &oidString, plContext));
     47 
     48    temp = PKIX_String2ASCII(oidString, plContext);
     49    if (temp == NULL) {
     50        testError("PKIX_String2Ascii failed");
     51        goto cleanup;
     52    }
     53 
     54    if (PL_strcmp(temp, expAscii) != 0) {
     55        (void)printf("\tOid ToString: %s %s\n", temp, expAscii);
     56        testError("Output string does not match source");
     57    }
     58 
     59    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(temp, plContext));
     60 
     61 cleanup:
     62 
     63    PKIX_TEST_DECREF_AC(oidString);
     64 
     65    PKIX_TEST_RETURN();
     66 }
     67 
     68 static void
     69 testCompare(
     70    PKIX_PL_OID *oid0,
     71    PKIX_PL_OID *oid1,
     72    PKIX_PL_OID *oid2,
     73    PKIX_PL_OID *oid3)
     74 {
     75    PKIX_Int32 cmpResult;
     76    PKIX_TEST_STD_VARS();
     77 
     78    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object *)oid0,
     79                                                     (PKIX_PL_Object *)oid1,
     80                                                     &cmpResult, plContext));
     81    if (cmpResult <= 0)
     82        testError("Invalid Result from OID Compare");
     83 
     84    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object *)oid1,
     85                                                     (PKIX_PL_Object *)oid0,
     86                                                     &cmpResult, plContext));
     87    if (cmpResult >= 0)
     88        testError("Invalid Result from OID Compare");
     89 
     90    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object *)oid1,
     91                                                     (PKIX_PL_Object *)oid2,
     92                                                     &cmpResult, plContext));
     93    if (cmpResult >= 0)
     94        testError("Invalid Result from OID Compare");
     95 
     96    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object *)oid2,
     97                                                     (PKIX_PL_Object *)oid1,
     98                                                     &cmpResult, plContext));
     99    if (cmpResult <= 0)
    100        testError("Invalid Result from OID Compare");
    101 
    102    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_Compare((PKIX_PL_Object *)oid1,
    103                                                     (PKIX_PL_Object *)oid3,
    104                                                     &cmpResult, plContext));
    105    if (cmpResult != 0)
    106        testError("Invalid Result from OID Compare");
    107 
    108 cleanup:
    109 
    110    PKIX_TEST_RETURN();
    111 }
    112 
    113 static void
    114 testDestroy(
    115    PKIX_PL_OID *oid)
    116 {
    117    PKIX_TEST_STD_VARS();
    118 
    119    PKIX_TEST_DECREF_BC(oid);
    120 
    121 cleanup:
    122 
    123    PKIX_TEST_RETURN();
    124 }
    125 
    126 int
    127 test_oid(int argc, char *argv[])
    128 {
    129 
    130    PKIX_PL_OID *testOID[6] = { NULL };
    131    PKIX_PL_OID *badTestOID = NULL;
    132    PKIX_UInt32 i, size = 6;
    133    PKIX_UInt32 actualMinorVersion;
    134    PKIX_UInt32 j = 0;
    135 
    136    char *validOID[6] = {
    137        "2.11.22222.33333",
    138        "1.2.3.004.5.6.7",
    139        "2.11.22222.33333",
    140        "1.2.3.4.5.6.7",
    141        "1.2.3",
    142        "2.39.3"
    143    };
    144 
    145    char *expected[6] = {
    146        "2.11.22222.33333",
    147        "1.2.3.4.5.6.7",
    148        "2.11.22222.33333",
    149        "1.2.3.4.5.6.7",
    150        "1.2.3",
    151        "2.39.3"
    152    };
    153 
    154    char *badOID[11] = {
    155        "1.2.4294967299",
    156        "this. is. a. bad. oid",
    157        "00a1000.002b",
    158        "100.-5.10",
    159        "1.2..3",
    160        ".1.2.3",
    161        "1.2.3.",
    162        "00010.1.2.3",
    163        "1.000041.2.3",
    164        "000000000000000000000000000000000000000010.3.2",
    165        "1"
    166    };
    167 
    168    PKIX_TEST_STD_VARS();
    169 
    170    startTests("OIDs");
    171 
    172    PKIX_TEST_EXPECT_NO_ERROR(
    173        PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
    174 
    175    for (i = 0; i < size; i++) {
    176        subTest("PKIX_PL_OID_Create");
    177        createOID(&testOID[i], validOID[i], PKIX_FALSE);
    178    }
    179 
    180    PKIX_TEST_EQ_HASH_TOSTR_DUP(testOID[0],
    181                                testOID[2],
    182                                testOID[1],
    183                                NULL,
    184                                OID,
    185                                PKIX_FALSE);
    186 
    187    for (i = 0; i < size; i++) {
    188        subTest("PKIX_PL_OID_ToString");
    189        testToString(testOID[i], expected[i]);
    190    }
    191 
    192    subTest("PKIX_PL_OID_Compare");
    193    testCompare(testOID[0], testOID[1], testOID[2], testOID[3]);
    194 
    195    for (i = 0; i < size; i++) {
    196        subTest("PKIX_PL_OID_Destroy");
    197        testDestroy(testOID[i]);
    198    }
    199 
    200    for (i = 0; i < 11; i++) {
    201        subTest("PKIX_PL_OID Error Handling");
    202        createOID(&badTestOID, badOID[i], PKIX_TRUE);
    203    }
    204 
    205 cleanup:
    206 
    207    PKIX_Shutdown(plContext);
    208 
    209    endTests("OIDs");
    210 
    211    return (0);
    212 }