/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* * test_crlentry.c * * Test CRLENTRY Type * */ #include "testutil.h" #include "testutil_nss.h" static void *plContext = NULL; static void createCRLEntries( char *dataDir, char *crlInput, PKIX_PL_CRL **pCrl, PKIX_PL_CRLEntry **goodObject, PKIX_PL_CRLEntry **equalObject, PKIX_PL_CRLEntry **diffObject) { PKIX_PL_CRL *crl = NULL; PKIX_PL_BigInt *firstSNBigInt = NULL; PKIX_PL_BigInt *secondSNBigInt = NULL; PKIX_PL_String *firstSNString = NULL; PKIX_PL_String *secondSNString = NULL; char *firstSNAscii = "010932"; char *secondSNAscii = "3039"; PKIX_TEST_STD_VARS(); subTest("PKIX_PL_CRL_Create "); crl = createCRL(dataDir, crlInput, plContext); subTest("PKIX_PL_CRL_GetCRLEntryForSerialNumber"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create( PKIX_ESCASCII, firstSNAscii, PL_strlen(firstSNAscii), &firstSNString, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create( firstSNString, &firstSNBigInt, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber( crl, firstSNBigInt, goodObject, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber( crl, firstSNBigInt, equalObject, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create( PKIX_ESCASCII, secondSNAscii, PL_strlen(secondSNAscii), &secondSNString, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create( secondSNString, &secondSNBigInt, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber( crl, secondSNBigInt, diffObject, plContext)); *pCrl = crl; cleanup: PKIX_TEST_DECREF_AC(firstSNBigInt); PKIX_TEST_DECREF_AC(secondSNBigInt); PKIX_TEST_DECREF_AC(firstSNString); PKIX_TEST_DECREF_AC(secondSNString); PKIX_TEST_RETURN(); } static void testGetReasonCode( PKIX_PL_CRLEntry *goodObject) { PKIX_Int32 reasonCode = 0; PKIX_Int32 expectedReasonCode = 260; PKIX_TEST_STD_VARS(); subTest("PKIX_PL_CRLEntry_GetCRLEntryReasonCode"); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRLEntry_GetCRLEntryReasonCode( goodObject, &reasonCode, plContext)); if (reasonCode != expectedReasonCode) { testError("unexpected value of CRL Entry Reason Code"); (void)printf("Actual value:\t%d\n", reasonCode); (void)printf("Expected value:\t%d\n", expectedReasonCode); goto cleanup; } cleanup: PKIX_TEST_RETURN(); } static void testCritExtensionsAbsent(PKIX_PL_CRLEntry *crlEntry) { PKIX_List *oidList = NULL; PKIX_UInt32 numOids = 0; PKIX_TEST_STD_VARS(); PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRLEntry_GetCriticalExtensionOIDs(crlEntry, &oidList, plContext)); PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength(oidList, &numOids, plContext)); if (numOids != 0) { pkixTestErrorMsg = "unexpected mismatch"; } cleanup: PKIX_TEST_DECREF_AC(oidList); PKIX_TEST_RETURN(); } static void testGetCriticalExtensionOIDs(PKIX_PL_CRLEntry *goodObject) { subTest("PKIX_PL_CRL_GetCriticalExtensionOIDs " ""); testCritExtensionsAbsent(goodObject); } static void printUsage(void) { (void)printf("\nUSAGE:\ttest_crlentry \n\n"); } /* Functional tests for CRLENTRY public functions */ int test_crlentry(int argc, char *argv[]) { PKIX_PL_CRL *crl = NULL; PKIX_PL_CRLEntry *goodObject = NULL; PKIX_PL_CRLEntry *equalObject = NULL; PKIX_PL_CRLEntry *diffObject = NULL; PKIX_UInt32 actualMinorVersion; PKIX_UInt32 j = 0; char *dataDir = NULL; char *goodInput = "crlgood.crl"; char *expectedAscii = "\n\t[\n" "\tSerialNumber: 010932\n" "\tReasonCode: 260\n" "\tRevocationDate: Fri Jan 07 15:09:10 2005\n" "\tCritExtOIDs: (EMPTY)\n" "\t]\n\t"; /* Note XXX serialnumber and reasoncode need debug */ PKIX_TEST_STD_VARS(); startTests("CRLEntry"); PKIX_TEST_EXPECT_NO_ERROR( PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext)); if (argc < 1 + j) { printUsage(); return (0); } dataDir = argv[1 + j]; createCRLEntries(dataDir, goodInput, &crl, &goodObject, &equalObject, &diffObject); PKIX_TEST_EQ_HASH_TOSTR_DUP(goodObject, equalObject, diffObject, NULL, /* expectedAscii, */ CRLENTRY, PKIX_TRUE); testGetReasonCode(goodObject); testGetCriticalExtensionOIDs(goodObject); cleanup: PKIX_TEST_DECREF_AC(crl); PKIX_TEST_DECREF_AC(goodObject); PKIX_TEST_DECREF_AC(equalObject); PKIX_TEST_DECREF_AC(diffObject); PKIX_Shutdown(plContext); PKIX_TEST_RETURN(); endTests("CRLEntry"); return (0); }