test_defaultcrlchecker2stores.c (7275B)
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_defaultcrlchecker2stores.c 6 * 7 * Test Default CRL with multiple CertStore Checking 8 * 9 */ 10 11 #include "testutil.h" 12 #include "testutil_nss.h" 13 14 #define PKIX_TEST_MAX_CERTS 10 15 16 static void *plContext = NULL; 17 18 static void 19 printUsage1(char *pName) 20 { 21 printf("\nUSAGE: %s test-purpose [ENE|EE] ", pName); 22 printf("crl-directory cert [certs].\n"); 23 } 24 25 static void 26 printUsageMax(PKIX_UInt32 numCerts) 27 { 28 printf("\nUSAGE ERROR: number of certs %d exceed maximum %d\n", 29 numCerts, PKIX_TEST_MAX_CERTS); 30 } 31 32 static PKIX_Error * 33 getCertCallback( 34 PKIX_CertStore *store, 35 PKIX_CertSelector *certSelector, 36 PKIX_List **pCerts, 37 void *plContext) 38 { 39 return (NULL); 40 } 41 42 static PKIX_Error * 43 testDefaultMultipleCertStores(PKIX_ValidateParams *valParams, 44 char *crlDir1, 45 char *crlDir2) 46 { 47 PKIX_PL_String *dirString1 = NULL; 48 PKIX_PL_String *dirString2 = NULL; 49 PKIX_CertStore *certStore1 = NULL; 50 PKIX_CertStore *certStore2 = NULL; 51 PKIX_List *certStoreList = NULL; 52 PKIX_ProcessingParams *procParams = NULL; 53 54 PKIX_TEST_STD_VARS(); 55 56 subTest("PKIX_PL_CollectionCertStore_Create"); 57 58 /* Create CollectionCertStore */ 59 60 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, 61 crlDir1, 62 0, 63 &dirString1, 64 plContext)); 65 66 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CollectionCertStore_Create(dirString1, 67 &certStore1, 68 plContext)); 69 70 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(PKIX_ESCASCII, 71 crlDir2, 72 0, 73 &dirString2, 74 plContext)); 75 76 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CollectionCertStore_Create(dirString2, 77 &certStore2, 78 plContext)); 79 80 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ValidateParams_GetProcessingParams(valParams, &procParams, plContext)); 81 82 /* Add multiple CollectionCertStores */ 83 84 subTest("PKIX_ProcessingParams_SetCertStores"); 85 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&certStoreList, plContext)); 86 PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem(certStoreList, (PKIX_PL_Object *)certStore1, plContext)); 87 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetCertStores(procParams, certStoreList, plContext)); 88 89 subTest("PKIX_ProcessingParams_AddCertStore"); 90 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddCertStore(procParams, certStore2, plContext)); 91 92 subTest("PKIX_ProcessingParams_SetRevocationEnabled"); 93 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetRevocationEnabled(procParams, PKIX_TRUE, plContext)); 94 95 cleanup: 96 97 PKIX_TEST_DECREF_AC(dirString1); 98 PKIX_TEST_DECREF_AC(dirString2); 99 PKIX_TEST_DECREF_AC(certStore1); 100 PKIX_TEST_DECREF_AC(certStore2); 101 PKIX_TEST_DECREF_AC(certStoreList); 102 PKIX_TEST_DECREF_AC(procParams); 103 104 PKIX_TEST_RETURN(); 105 106 return (0); 107 } 108 109 /* 110 * Validate Certificate Chain with Certificate Revocation List 111 * Certificate Chain is build based on input certs' sequence. 112 * CRL is fetched from the directory specified in CollectionCertStore. 113 * while CollectionCertStore is linked in CertStore Object which then 114 * linked in ProcessParam. During validation, CRLChecker will invoke 115 * the crlCallback (this test uses PKIX_PL_CollectionCertStore_GetCRL) 116 * to get CRL data for revocation check. 117 * This test gets CRL's from two CertStores, each has a valid CRL 118 * required for revocation check to pass. 119 */ 120 121 int 122 test_defaultcrlchecker2stores(int argc, char *argv[]) 123 { 124 125 PKIX_List *chain = NULL; 126 PKIX_ValidateParams *valParams = NULL; 127 PKIX_ValidateResult *valResult = NULL; 128 PKIX_UInt32 actualMinorVersion; 129 char *certNames[PKIX_TEST_MAX_CERTS]; 130 PKIX_PL_Cert *certs[PKIX_TEST_MAX_CERTS]; 131 PKIX_VerifyNode *verifyTree = NULL; 132 PKIX_PL_String *verifyString = NULL; 133 PKIX_UInt32 chainLength = 0; 134 PKIX_UInt32 i = 0; 135 PKIX_UInt32 j = 0; 136 PKIX_Boolean testValid = PKIX_TRUE; 137 char *dirName = NULL; 138 char *anchorName = NULL; 139 140 PKIX_TEST_STD_VARS(); 141 142 if (argc < 6) { 143 printUsage1(argv[0]); 144 return (0); 145 } 146 147 startTests("CRL Checker"); 148 149 PKIX_TEST_EXPECT_NO_ERROR( 150 PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); 151 152 /* ENE = expect no error; EE = expect error */ 153 if (PORT_Strcmp(argv[2 + j], "ENE") == 0) { 154 testValid = PKIX_TRUE; 155 } else if (PORT_Strcmp(argv[2 + j], "EE") == 0) { 156 testValid = PKIX_FALSE; 157 } else { 158 printUsage1(argv[0]); 159 return (0); 160 } 161 162 chainLength = (argc - j) - 7; 163 if (chainLength > PKIX_TEST_MAX_CERTS) { 164 printUsageMax(chainLength); 165 } 166 167 for (i = 0; i < chainLength; i++) { 168 169 certNames[i] = argv[(7 + j) + i]; 170 certs[i] = NULL; 171 } 172 173 subTest(argv[1 + j]); 174 175 subTest("Default-CRL-Checker"); 176 177 subTest("Default-CRL-Checker - Create Cert Chain"); 178 179 dirName = argv[3 + j]; 180 181 chain = createCertChainPlus(dirName, certNames, certs, chainLength, plContext); 182 183 subTest("Default-CRL-Checker - Create Params"); 184 185 anchorName = argv[6 + j]; 186 187 valParams = createValidateParams(dirName, 188 anchorName, 189 NULL, 190 NULL, 191 NULL, 192 PKIX_FALSE, 193 PKIX_FALSE, 194 PKIX_FALSE, 195 PKIX_FALSE, 196 chain, 197 plContext); 198 199 subTest("Multiple-CertStores"); 200 201 testDefaultMultipleCertStores(valParams, argv[4 + j], argv[5 + j]); 202 203 subTest("Default-CRL-Checker - Validate Chain"); 204 205 if (testValid == PKIX_TRUE) { 206 PKIX_TEST_EXPECT_NO_ERROR(PKIX_ValidateChain(valParams, &valResult, &verifyTree, plContext)); 207 } else { 208 PKIX_TEST_EXPECT_ERROR(PKIX_ValidateChain(valParams, &valResult, &verifyTree, plContext)); 209 } 210 211 PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString((PKIX_PL_Object *)verifyTree, &verifyString, plContext)); 212 (void)printf("verifyTree is\n%s\n", verifyString->escAsciiString); 213 214 cleanup: 215 216 PKIX_TEST_DECREF_AC(verifyString); 217 PKIX_TEST_DECREF_AC(verifyTree); 218 219 PKIX_TEST_DECREF_AC(valParams); 220 PKIX_TEST_DECREF_AC(valResult); 221 PKIX_TEST_DECREF_AC(chain); 222 223 PKIX_Shutdown(plContext); 224 225 PKIX_TEST_RETURN(); 226 227 endTests("CRL Checker"); 228 229 return (0); 230 }