Blame nss/cmd/libpkix/pkix_pl/pki/test_crl.c

Packit 40b132
/* This Source Code Form is subject to the terms of the Mozilla Public
Packit 40b132
 * License, v. 2.0. If a copy of the MPL was not distributed with this
Packit 40b132
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
Packit 40b132
/*
Packit 40b132
 * test_crl.c
Packit 40b132
 *
Packit 40b132
 * Test CRL Type
Packit 40b132
 *
Packit 40b132
 */
Packit 40b132
Packit 40b132
#include "testutil.h"
Packit 40b132
#include "testutil_nss.h"
Packit 40b132
Packit 40b132
static void *plContext = NULL;
Packit 40b132
Packit 40b132
static
Packit 40b132
void createCRLs(
Packit 40b132
        char *dataDir,
Packit 40b132
        char *goodInput,
Packit 40b132
        char *diffInput,
Packit 40b132
        PKIX_PL_CRL **goodObject,
Packit 40b132
        PKIX_PL_CRL **equalObject,
Packit 40b132
        PKIX_PL_CRL **diffObject)
Packit 40b132
{
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_Create <goodObject>");
Packit 40b132
        *goodObject = createCRL(dataDir, goodInput, plContext);
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_Create <equalObject>");
Packit 40b132
        *equalObject = createCRL(dataDir, goodInput, plContext);
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_Create <diffObject>");
Packit 40b132
        *diffObject = createCRL(dataDir, diffInput, plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void testGetCRLEntryForSerialNumber(
Packit 40b132
        PKIX_PL_CRL *goodObject)
Packit 40b132
{
Packit 40b132
        PKIX_PL_BigInt *bigInt;
Packit 40b132
        PKIX_PL_String *bigIntString = NULL;
Packit 40b132
        PKIX_PL_CRLEntry *crlEntry = NULL;
Packit 40b132
        PKIX_PL_String *crlEntryString = NULL;
Packit 40b132
        char *snAscii = "3039";
Packit 40b132
        char *expectedAscii =
Packit 40b132
                "\n\t[\n"
Packit 40b132
                "\tSerialNumber:    3039\n"
Packit 40b132
                "\tReasonCode:      257\n"
Packit 40b132
                "\tRevocationDate:  Fri Jan 07, 2005\n"
Packit 40b132
        /*      "\tRevocationDate:  Fri Jan 07 15:09:10 2005\n" */
Packit 40b132
                "\tCritExtOIDs:     (EMPTY)\n"
Packit 40b132
                "\t]\n\t";
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_GetCRLEntryForSerialNumber");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_String_Create(
Packit 40b132
                                    PKIX_ESCASCII,
Packit 40b132
                                    snAscii,
Packit 40b132
                                    PL_strlen(snAscii),
Packit 40b132
                                    &bigIntString,
Packit 40b132
                                    plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_BigInt_Create(
Packit 40b132
                            bigIntString,
Packit 40b132
                            &bigInt,
Packit 40b132
                            plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCRLEntryForSerialNumber(
Packit 40b132
                            goodObject, bigInt, &crlEntry, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Object_ToString(
Packit 40b132
                                    (PKIX_PL_Object *)crlEntry,
Packit 40b132
                                    &crlEntryString,
Packit 40b132
                                    plContext));
Packit 40b132
Packit 40b132
        testToStringHelper((PKIX_PL_Object *)crlEntryString,
Packit 40b132
                            expectedAscii, plContext);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(bigIntString);
Packit 40b132
        PKIX_TEST_DECREF_AC(bigInt);
Packit 40b132
        PKIX_TEST_DECREF_AC(crlEntryString);
Packit 40b132
        PKIX_TEST_DECREF_AC(crlEntry);
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void testGetIssuer(
Packit 40b132
        PKIX_PL_CRL *goodObject,
Packit 40b132
        PKIX_PL_CRL *equalObject,
Packit 40b132
        PKIX_PL_CRL *diffObject)
Packit 40b132
{
Packit 40b132
        PKIX_PL_X500Name *goodIssuer = NULL;
Packit 40b132
        PKIX_PL_X500Name *equalIssuer = NULL;
Packit 40b132
        PKIX_PL_X500Name *diffIssuer = NULL;
Packit 40b132
        char *expectedAscii = "CN=hanfeiyu,O=sun,C=us";
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_GetIssuer");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
                PKIX_PL_CRL_GetIssuer(goodObject, &goodIssuer, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
                PKIX_PL_CRL_GetIssuer(equalObject, &equalIssuer, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
                PKIX_PL_CRL_GetIssuer(diffObject, &diffIssuer, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodIssuer,
Packit 40b132
                equalIssuer,
Packit 40b132
                diffIssuer,
Packit 40b132
                expectedAscii,
Packit 40b132
                X500Name,
Packit 40b132
                PKIX_TRUE);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(goodIssuer);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalIssuer);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffIssuer);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
testCritExtensionsAbsent(PKIX_PL_CRL *crl)
Packit 40b132
{
Packit 40b132
        PKIX_List *oidList = NULL;
Packit 40b132
        PKIX_UInt32 numOids = 0;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_CRL_GetCriticalExtensionOIDs
Packit 40b132
                                    (crl, &oidList, plContext));
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_GetLength
Packit 40b132
                                    (oidList, &numOids, plContext));
Packit 40b132
        if (numOids != 0){
Packit 40b132
                pkixTestErrorMsg = "unexpected mismatch";
Packit 40b132
        }
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(oidList);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static void
Packit 40b132
testGetCriticalExtensionOIDs(PKIX_PL_CRL *goodObject)
Packit 40b132
{
Packit 40b132
        subTest("PKIX_PL_CRL_GetCriticalExtensionOIDs "
Packit 40b132
                "<0 element>");
Packit 40b132
        testCritExtensionsAbsent(goodObject);
Packit 40b132
Packit 40b132
}
Packit 40b132
Packit 40b132
static void testVerifySignature(char *dataCentralDir, PKIX_PL_CRL *crl){
Packit 40b132
        PKIX_PL_Cert *firstCert = NULL;
Packit 40b132
        PKIX_PL_Cert *secondCert = NULL;
Packit 40b132
        PKIX_PL_PublicKey *firstPubKey = NULL;
Packit 40b132
        PKIX_PL_PublicKey *secondPubKey = NULL;
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_Cert_Create <hanfeiyu2hanfeiyu>");
Packit 40b132
        firstCert = createCert(dataCentralDir, "hanfeiyu2hanfeiyu", plContext);
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_Cert_Create <hy2hy-bc0>");
Packit 40b132
        secondCert = createCert(dataCentralDir, "hy2hy-bc0", plContext);
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_Cert_GetSubjectPublicKey <hanfeiyu2hanfeiyu>");
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_PL_Cert_GetSubjectPublicKey
Packit 40b132
                (firstCert, &firstPubKey, plContext));
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_Cert_GetSubjectPublicKey <hanfei2hanfei>");
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_PL_Cert_GetSubjectPublicKey
Packit 40b132
                (secondCert, &secondPubKey, plContext));
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_VerifySignature <positive>");
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR
Packit 40b132
                (PKIX_PL_CRL_VerifySignature(crl, firstPubKey, plContext));
Packit 40b132
Packit 40b132
        subTest("PKIX_PL_CRL_VerifySignature <negative>");
Packit 40b132
        PKIX_TEST_EXPECT_ERROR
Packit 40b132
                (PKIX_PL_CRL_VerifySignature(crl, secondPubKey, plContext));
Packit 40b132
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(firstCert);
Packit 40b132
        PKIX_TEST_DECREF_AC(secondCert);
Packit 40b132
        PKIX_TEST_DECREF_AC(firstPubKey);
Packit 40b132
        PKIX_TEST_DECREF_AC(secondPubKey);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
}
Packit 40b132
Packit 40b132
static
Packit 40b132
void printUsage(void) {
Packit 40b132
        (void) printf("\nUSAGE:\ttest_crl <test-purpose> <data-central-dir>\n\n");
Packit 40b132
}
Packit 40b132
Packit 40b132
/* Functional tests for CRL public functions */
Packit 40b132
Packit 40b132
int test_crl(int argc, char *argv[]) {
Packit 40b132
        PKIX_PL_CRL *goodObject = NULL;
Packit 40b132
        PKIX_PL_CRL *equalObject = NULL;
Packit 40b132
        PKIX_PL_CRL *diffObject = NULL;
Packit 40b132
        PKIX_UInt32 actualMinorVersion;
Packit 40b132
        PKIX_UInt32 j = 0;
Packit 40b132
Packit 40b132
        char *dataCentralDir = NULL;
Packit 40b132
        char *goodInput = "crlgood.crl";
Packit 40b132
        char *diffInput = "crldiff.crl";
Packit 40b132
        char *expectedAscii =
Packit 40b132
                "[\n"
Packit 40b132
                "\tVersion:         v2\n"
Packit 40b132
                "\tIssuer:          CN=hanfeiyu,O=sun,C=us\n"
Packit 40b132
                "\tUpdate:   [Last: Fri Jan 07, 2005\n"
Packit 40b132
        /*      "\tUpdate:   [Last: Fri Jan 07 15:09:10 2005\n" */
Packit 40b132
                "\t           Next: Sat Jan 07, 2006]\n"
Packit 40b132
        /*      "\t           Next: Sat Jan 07 15:09:10 2006]\n" */
Packit 40b132
                "\tSignatureAlgId:  1.2.840.10040.4.3\n"
Packit 40b132
                "\tCRL Number     : (null)\n"
Packit 40b132
                "\n\tEntry List:      (\n"
Packit 40b132
                "\t[\n"
Packit 40b132
                "\tSerialNumber:    010932\n"
Packit 40b132
                "\tReasonCode:      260\n"
Packit 40b132
                "\tRevocationDate:  Fri Jan 07, 2005\n"
Packit 40b132
        /*      "\tRevocationDate:  Fri Jan 07 15:09:10 2005\n" */
Packit 40b132
                "\tCritExtOIDs:     (EMPTY)\n"
Packit 40b132
                "\t]\n\t"
Packit 40b132
                ", "
Packit 40b132
                "\n\t[\n"
Packit 40b132
                "\tSerialNumber:    3039\n"
Packit 40b132
                "\tReasonCode:      257\n"
Packit 40b132
                "\tRevocationDate:  Fri Jan 07, 2005\n"
Packit 40b132
        /*      "\tRevocationDate:  Fri Jan 07 15:09:10 2005\n" */
Packit 40b132
                "\tCritExtOIDs:     (EMPTY)\n"
Packit 40b132
                "\t]\n\t"
Packit 40b132
                ")"
Packit 40b132
                "\n\n"
Packit 40b132
                "\tCritExtOIDs:     (EMPTY)\n"
Packit 40b132
                "]\n";
Packit 40b132
        /* Note XXX serialnumber and reasoncode need debug */
Packit 40b132
Packit 40b132
        PKIX_TEST_STD_VARS();
Packit 40b132
Packit 40b132
        startTests("CRL");
Packit 40b132
Packit 40b132
        PKIX_TEST_EXPECT_NO_ERROR(
Packit 40b132
            PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
Packit 40b132
Packit 40b132
        if (argc < 3+j) {
Packit 40b132
                printUsage();
Packit 40b132
                return (0);
Packit 40b132
        }
Packit 40b132
Packit 40b132
        dataCentralDir = argv[2+j];
Packit 40b132
Packit 40b132
        createCRLs
Packit 40b132
                (dataCentralDir,
Packit 40b132
                goodInput,
Packit 40b132
                diffInput,
Packit 40b132
                &goodObject,
Packit 40b132
                &equalObject,
Packit 40b132
                &diffObject);
Packit 40b132
Packit 40b132
        PKIX_TEST_EQ_HASH_TOSTR_DUP
Packit 40b132
                (goodObject,
Packit 40b132
                equalObject,
Packit 40b132
                diffObject,
Packit 40b132
                expectedAscii,
Packit 40b132
                CRL,
Packit 40b132
                PKIX_TRUE);
Packit 40b132
Packit 40b132
        testGetIssuer(goodObject, equalObject, diffObject);
Packit 40b132
Packit 40b132
        testGetCriticalExtensionOIDs(goodObject);
Packit 40b132
Packit 40b132
        testGetCRLEntryForSerialNumber(goodObject);
Packit 40b132
Packit 40b132
        testVerifySignature(dataCentralDir, goodObject);
Packit 40b132
Packit 40b132
cleanup:
Packit 40b132
Packit 40b132
        PKIX_TEST_DECREF_AC(goodObject);
Packit 40b132
        PKIX_TEST_DECREF_AC(equalObject);
Packit 40b132
        PKIX_TEST_DECREF_AC(diffObject);
Packit 40b132
Packit 40b132
        PKIX_Shutdown(plContext);
Packit 40b132
Packit 40b132
        PKIX_TEST_RETURN();
Packit 40b132
Packit 40b132
        endTests("CRL");
Packit 40b132
Packit 40b132
        return (0);
Packit 40b132
}