tor-browser

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

test_x500name.c (4772B)


      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_x500name.c
      6 *
      7 * Test X500Name Type
      8 *
      9 */
     10 
     11 #include "testutil.h"
     12 #include "testutil_nss.h"
     13 
     14 static void *plContext = NULL;
     15 
     16 static PKIX_PL_X500Name *
     17 createX500Name(char *asciiName, PKIX_Boolean expectedToPass)
     18 {
     19 
     20    PKIX_PL_X500Name *x500Name = NULL;
     21    PKIX_PL_String *plString = NULL;
     22 
     23    PKIX_TEST_STD_VARS();
     24 
     25    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, asciiName, 0, &plString, plContext));
     26 
     27    if (expectedToPass) {
     28        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Create(plString, &x500Name, plContext));
     29    } else {
     30        PKIX_TEST_EXPECT_ERROR(PKIX_PL_X500Name_Create(plString, &x500Name, plContext));
     31    }
     32 
     33 cleanup:
     34 
     35    PKIX_TEST_DECREF_AC(plString);
     36 
     37    PKIX_TEST_RETURN();
     38 
     39    return (x500Name);
     40 }
     41 
     42 static void
     43 createX500Names(char *goodInput, char *diffInput, char *diffInputMatch,
     44                PKIX_PL_X500Name **goodObject,
     45                PKIX_PL_X500Name **equalObject,
     46                PKIX_PL_X500Name **diffObject,
     47                PKIX_PL_X500Name **diffObjectMatch)
     48 {
     49    char *badAscii = "cn=yas#sir,ou=labs,o=sun,c=us";
     50    PKIX_PL_X500Name *badObject = NULL;
     51 
     52    subTest("PKIX_PL_X500Name_Create <goodObject>");
     53    *goodObject = createX500Name(goodInput, PKIX_TRUE);
     54 
     55    subTest("PKIX_PL_X500Name_Create <equalObject>");
     56    *equalObject = createX500Name(goodInput, PKIX_TRUE);
     57 
     58    subTest("PKIX_PL_X500Name_Create <diffObject>");
     59    *diffObject = createX500Name(diffInput, PKIX_TRUE);
     60 
     61    subTest("PKIX_PL_X500Name_Create <diffObjectMatch>");
     62    *diffObjectMatch = createX500Name(diffInputMatch, PKIX_TRUE);
     63 
     64    subTest("PKIX_PL_X500Name_Create <negative>");
     65    badObject = createX500Name(badAscii, PKIX_FALSE);
     66 }
     67 
     68 static void
     69 testMatchHelper(PKIX_PL_X500Name *goodName, PKIX_PL_X500Name *otherName, PKIX_Boolean match)
     70 {
     71    PKIX_Boolean cmpResult;
     72 
     73    PKIX_TEST_STD_VARS();
     74 
     75    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_X500Name_Match(goodName,
     76                                                     otherName,
     77                                                     &cmpResult,
     78                                                     plContext));
     79 
     80    if ((match && !cmpResult) || (!match && cmpResult)) {
     81        testError("unexpected mismatch");
     82        (void)printf("Actual value:\t%d\n", cmpResult);
     83        (void)printf("Expected value:\t%d\n", match);
     84    }
     85 
     86 cleanup:
     87 
     88    PKIX_TEST_RETURN();
     89 }
     90 
     91 static void
     92 testMatch(void *goodObject, void *diffObject, void *diffObjectMatch)
     93 {
     94    subTest("PKIX_PL_X500Name_Match <match>");
     95    testMatchHelper((PKIX_PL_X500Name *)diffObject,
     96                    (PKIX_PL_X500Name *)diffObjectMatch,
     97                    PKIX_TRUE);
     98 
     99    subTest("PKIX_PL_X500Name_Match <non-match>");
    100    testMatchHelper((PKIX_PL_X500Name *)goodObject,
    101                    (PKIX_PL_X500Name *)diffObject,
    102                    PKIX_FALSE);
    103 }
    104 
    105 static void
    106 testDestroy(void *goodObject, void *equalObject, void *diffObject, void *diffObjectMatch)
    107 {
    108    PKIX_TEST_STD_VARS();
    109 
    110    subTest("PKIX_PL_X500Name_Destroy");
    111 
    112    PKIX_TEST_DECREF_BC(goodObject);
    113    PKIX_TEST_DECREF_BC(equalObject);
    114    PKIX_TEST_DECREF_BC(diffObject);
    115    PKIX_TEST_DECREF_BC(diffObjectMatch);
    116 
    117 cleanup:
    118 
    119    PKIX_TEST_RETURN();
    120 }
    121 
    122 int
    123 test_x500name(int argc, char *argv[])
    124 {
    125 
    126    PKIX_PL_X500Name *goodObject = NULL;
    127    PKIX_PL_X500Name *equalObject = NULL;
    128    PKIX_PL_X500Name *diffObject = NULL;
    129    PKIX_PL_X500Name *diffObjectMatch = NULL;
    130    PKIX_UInt32 actualMinorVersion;
    131    PKIX_UInt32 j = 0;
    132 
    133    /* goodInput is encoded in PKIX_ESCASCII */
    134    char *goodInput = "cn=Strau&#x00Df;,ou=labs,o=sun,c=us";
    135    char *diffInput = "cn=steve,ou=labs,o=sun,c=us";
    136    char *diffInputMatch = "Cn=SteVe,Ou=lABs,o=SUn,c=uS";
    137    char *expectedAscii = "CN=Strau&#x00DF;,OU=labs,O=sun,C=us";
    138 
    139    PKIX_TEST_STD_VARS();
    140 
    141    startTests("X500Name");
    142 
    143    PKIX_TEST_EXPECT_NO_ERROR(
    144        PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
    145 
    146    createX500Names(goodInput, diffInput, diffInputMatch,
    147                    &goodObject, &equalObject, &diffObject, &diffObjectMatch);
    148 
    149    PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject,
    150                                equalObject,
    151                                diffObject,
    152                                expectedAscii,
    153                                X500Name,
    154                                PKIX_TRUE);
    155 
    156    testMatch(goodObject, diffObject, diffObjectMatch);
    157 
    158    testDestroy(goodObject, equalObject, diffObject, diffObjectMatch);
    159 
    160 cleanup:
    161 
    162    PKIX_Shutdown(plContext);
    163 
    164    PKIX_TEST_RETURN();
    165 
    166    endTests("X500Name");
    167 
    168    return (0);
    169 }