test_crlentry.c (5243B)
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_crlentry.c 6 * 7 * Test CRLENTRY Type 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 static void *plContext = NULL; 15 16 static void 17 createCRLEntries( 18 char *dataDir, 19 char *crlInput, 20 PKIX_PL_CRL **pCrl, 21 PKIX_PL_CRLEntry **goodObject, 22 PKIX_PL_CRLEntry **equalObject, 23 PKIX_PL_CRLEntry **diffObject) 24 { 25 PKIX_PL_CRL *crl = NULL; 26 PKIX_PL_BigInt *firstSNBigInt = NULL; 27 PKIX_PL_BigInt *secondSNBigInt = NULL; 28 PKIX_PL_String *firstSNString = NULL; 29 PKIX_PL_String *secondSNString = NULL; 30 char *firstSNAscii = "010932"; 31 char *secondSNAscii = "3039"; 32 33 PKIX_TEST_STD_VARS(); 34 35 subTest("PKIX_PL_CRL_Create <crl>"); 36 crl = createCRL(dataDir, crlInput, plContext); 37 38 subTest("PKIX_PL_CRL_GetCRLEntryForSerialNumber"); 39 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create( 40 PKIX_ESCASCII, 41 firstSNAscii, 42 PL_strlen(firstSNAscii), 43 &firstSNString, 44 plContext)); 45 46 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create( 47 firstSNString, 48 &firstSNBigInt, 49 plContext)); 50 51 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber( 52 crl, firstSNBigInt, goodObject, plContext)); 53 54 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber( 55 crl, firstSNBigInt, equalObject, plContext)); 56 57 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create( 58 PKIX_ESCASCII, 59 secondSNAscii, 60 PL_strlen(secondSNAscii), 61 &secondSNString, 62 plContext)); 63 64 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create( 65 secondSNString, 66 &secondSNBigInt, 67 plContext)); 68 69 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber( 70 crl, secondSNBigInt, diffObject, plContext)); 71 72 *pCrl = crl; 73 74 cleanup: 75 PKIX_TEST_DECREF_AC(firstSNBigInt); 76 PKIX_TEST_DECREF_AC(secondSNBigInt); 77 PKIX_TEST_DECREF_AC(firstSNString); 78 PKIX_TEST_DECREF_AC(secondSNString); 79 PKIX_TEST_RETURN(); 80 } 81 82 static void 83 testGetReasonCode( 84 PKIX_PL_CRLEntry *goodObject) 85 { 86 PKIX_Int32 reasonCode = 0; 87 PKIX_Int32 expectedReasonCode = 260; 88 89 PKIX_TEST_STD_VARS(); 90 91 subTest("PKIX_PL_CRLEntry_GetCRLEntryReasonCode"); 92 93 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRLEntry_GetCRLEntryReasonCode( 94 goodObject, &reasonCode, plContext)); 95 96 if (reasonCode != expectedReasonCode) { 97 testError("unexpected value of CRL Entry Reason Code"); 98 (void)printf("Actual value:\t%d\n", reasonCode); 99 (void)printf("Expected value:\t%d\n", expectedReasonCode); 100 goto cleanup; 101 } 102 103 cleanup: 104 PKIX_TEST_RETURN(); 105 } 106 107 static void 108 testCritExtensionsAbsent(PKIX_PL_CRLEntry *crlEntry) 109 { 110 PKIX_List *oidList = NULL; 111 PKIX_UInt32 numOids = 0; 112 113 PKIX_TEST_STD_VARS(); 114 115 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRLEntry_GetCriticalExtensionOIDs(crlEntry, &oidList, plContext)); 116 117 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(oidList, &numOids, plContext)); 118 if (numOids != 0) { 119 pkixTestErrorMsg = "unexpected mismatch"; 120 } 121 122 cleanup: 123 124 PKIX_TEST_DECREF_AC(oidList); 125 126 PKIX_TEST_RETURN(); 127 } 128 129 static void 130 testGetCriticalExtensionOIDs(PKIX_PL_CRLEntry *goodObject) 131 { 132 subTest("PKIX_PL_CRL_GetCriticalExtensionOIDs " 133 "<CritExtensionsAbsent>"); 134 testCritExtensionsAbsent(goodObject); 135 } 136 137 static void 138 printUsage(void) 139 { 140 (void)printf("\nUSAGE:\ttest_crlentry <data-dir>\n\n"); 141 } 142 143 /* Functional tests for CRLENTRY public functions */ 144 145 int 146 test_crlentry(int argc, char *argv[]) 147 { 148 PKIX_PL_CRL *crl = NULL; 149 PKIX_PL_CRLEntry *goodObject = NULL; 150 PKIX_PL_CRLEntry *equalObject = NULL; 151 PKIX_PL_CRLEntry *diffObject = NULL; 152 PKIX_UInt32 actualMinorVersion; 153 PKIX_UInt32 j = 0; 154 155 char *dataDir = NULL; 156 char *goodInput = "crlgood.crl"; 157 char *expectedAscii = 158 "\n\t[\n" 159 "\tSerialNumber: 010932\n" 160 "\tReasonCode: 260\n" 161 "\tRevocationDate: Fri Jan 07 15:09:10 2005\n" 162 "\tCritExtOIDs: (EMPTY)\n" 163 "\t]\n\t"; 164 165 /* Note XXX serialnumber and reasoncode need debug */ 166 167 PKIX_TEST_STD_VARS(); 168 169 startTests("CRLEntry"); 170 171 PKIX_TEST_EXPECT_NO_ERROR( 172 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 173 174 if (argc < 1 + j) { 175 printUsage(); 176 return (0); 177 } 178 179 dataDir = argv[1 + j]; 180 181 createCRLEntries(dataDir, goodInput, &crl, &goodObject, &equalObject, &diffObject); 182 183 PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject, 184 equalObject, 185 diffObject, 186 NULL, /* expectedAscii, */ 187 CRLENTRY, 188 PKIX_TRUE); 189 190 testGetReasonCode(goodObject); 191 192 testGetCriticalExtensionOIDs(goodObject); 193 194 cleanup: 195 196 PKIX_TEST_DECREF_AC(crl); 197 PKIX_TEST_DECREF_AC(goodObject); 198 PKIX_TEST_DECREF_AC(equalObject); 199 PKIX_TEST_DECREF_AC(diffObject); 200 201 PKIX_Shutdown(plContext); 202 203 PKIX_TEST_RETURN(); 204 205 endTests("CRLEntry"); 206 207 return (0); 208 }