RetroZilla/security/nss/cmd/libpkix/pkix/params/test_procparams.c
2018-05-19 22:01:21 +08:00

520 lines
16 KiB
C

/* 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_procparams.c
*
* Test ProcessingParams Type
*
*/
#include "testutil.h"
#include "testutil_nss.h"
static void *plContext = NULL;
static void
testDestroy(void *goodObject, void *equalObject, void *diffObject)
{
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Destroy");
PKIX_TEST_DECREF_BC(goodObject);
PKIX_TEST_DECREF_BC(equalObject);
PKIX_TEST_DECREF_BC(diffObject);
cleanup:
PKIX_TEST_RETURN();
}
static
void testGetAnchors(
PKIX_ProcessingParams *goodObject,
PKIX_ProcessingParams *equalObject){
PKIX_List *goodAnchors = NULL;
PKIX_List *equalAnchors = NULL;
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_GetTrustAnchors");
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTrustAnchors
(goodObject, &goodAnchors, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetTrustAnchors
(equalObject, &equalAnchors, plContext));
testEqualsHelper((PKIX_PL_Object *)goodAnchors,
(PKIX_PL_Object *)equalAnchors,
PKIX_TRUE,
plContext);
cleanup:
PKIX_TEST_DECREF_AC(goodAnchors);
PKIX_TEST_DECREF_AC(equalAnchors);
PKIX_TEST_RETURN();
}
static
void testGetSetDate(
PKIX_ProcessingParams *goodObject,
PKIX_ProcessingParams *equalObject){
PKIX_PL_Date *setDate = NULL;
PKIX_PL_Date *getDate = NULL;
char *asciiDate = "040329134847Z";
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetDate");
setDate = createDate(asciiDate, plContext);
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_SetDate(goodObject, setDate, plContext));
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_GetDate
(goodObject, &getDate, plContext));
testEqualsHelper((PKIX_PL_Object *)setDate,
(PKIX_PL_Object *)getDate,
PKIX_TRUE,
plContext);
/* we want to make sure that goodObject and equalObject are "equal" */
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_SetDate
(equalObject, setDate, plContext));
cleanup:
PKIX_TEST_DECREF_AC(setDate);
PKIX_TEST_DECREF_AC(getDate);
PKIX_TEST_RETURN();
}
static
PKIX_Error *userChecker1cb(
PKIX_CertChainChecker *checker,
PKIX_PL_Cert *cert,
PKIX_List *unresolvedCriticalExtensions, /* list of PKIX_PL_OID */
void **pNBIOContext,
void *plContext)
{
return(NULL);
}
static
void testGetSetCertChainCheckers(
PKIX_ProcessingParams *goodObject,
PKIX_ProcessingParams *equalObject){
PKIX_CertChainChecker *checker = NULL;
PKIX_List *setCheckersList = NULL;
PKIX_List *getCheckersList = NULL;
PKIX_PL_Date *date = NULL;
char *asciiDate = "040329134847Z";
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetCertChainCheckers");
date = createDate(asciiDate, plContext);
PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertChainChecker_Create
(userChecker1cb,
PKIX_FALSE,
PKIX_FALSE,
NULL,
(PKIX_PL_Object *) date,
&checker,
plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create
(&setCheckersList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem
(setCheckersList, (PKIX_PL_Object *) checker, plContext));
PKIX_TEST_DECREF_BC(checker);
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetCertChainCheckers
(goodObject, setCheckersList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_CertChainChecker_Create
(userChecker1cb,
PKIX_FALSE,
PKIX_FALSE,
NULL,
(PKIX_PL_Object *) date,
&checker,
plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddCertChainChecker
(goodObject, checker, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetCertChainCheckers
(goodObject, &getCheckersList, plContext));
cleanup:
PKIX_TEST_DECREF_AC(setCheckersList);
PKIX_TEST_DECREF_AC(getCheckersList);
PKIX_TEST_DECREF_AC(date);
PKIX_TEST_DECREF_BC(checker);
PKIX_TEST_RETURN();
}
static
PKIX_Error *userChecker2cb(
PKIX_RevocationChecker *checker,
PKIX_PL_Cert *cert,
PKIX_UInt32 *pResult,
void *plContext)
{
return(NULL);
}
static
void testGetSetRevocationCheckers(
PKIX_ProcessingParams *goodObject,
PKIX_ProcessingParams *equalObject){
PKIX_RevocationChecker *checker = NULL;
PKIX_List *setCheckersList = NULL;
PKIX_List *getCheckersList = NULL;
PKIX_PL_Date *date = NULL;
char *asciiDate = "040329134847Z";
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetRevocationCheckers");
date = createDate(asciiDate, plContext);
PKIX_TEST_EXPECT_NO_ERROR(PKIX_RevocationChecker_Create
(userChecker2cb,
(PKIX_PL_Object *) date,
&checker,
plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create
(&setCheckersList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem
(setCheckersList,
(PKIX_PL_Object *) checker,
plContext));
PKIX_TEST_DECREF_BC(checker);
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetRevocationCheckers
(goodObject, setCheckersList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_RevocationChecker_Create
(userChecker2cb,
(PKIX_PL_Object *) date,
&checker,
plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_AddRevocationChecker
(goodObject, checker, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetRevocationCheckers
(goodObject, &getCheckersList, plContext));
cleanup:
PKIX_TEST_DECREF_AC(setCheckersList);
PKIX_TEST_DECREF_AC(getCheckersList);
PKIX_TEST_DECREF_AC(date);
PKIX_TEST_DECREF_BC(checker);
PKIX_TEST_RETURN();
}
static
void testGetSetResourceLimits(
PKIX_ProcessingParams *goodObject,
PKIX_ProcessingParams *equalObject)
{
PKIX_ResourceLimits *resourceLimits1 = NULL;
PKIX_ResourceLimits *resourceLimits2 = NULL;
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetResourceLimits");
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_Create
(&resourceLimits1, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_Create
(&resourceLimits2, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxFanout
(resourceLimits1, 3, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxDepth
(resourceLimits1, 3, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ResourceLimits_SetMaxTime
(resourceLimits1, 2, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetResourceLimits
(goodObject, resourceLimits1, plContext));
PKIX_TEST_DECREF_BC(resourceLimits2);
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetResourceLimits
(goodObject, &resourceLimits2, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetResourceLimits
(equalObject, resourceLimits2, plContext));
cleanup:
PKIX_TEST_DECREF_AC(resourceLimits1);
PKIX_TEST_DECREF_AC(resourceLimits2);
PKIX_TEST_RETURN();
}
static
void testGetSetConstraints(PKIX_ProcessingParams *goodObject){
PKIX_CertSelector *setConstraints = NULL;
PKIX_CertSelector *getConstraints = NULL;
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetTargetCertConstraints");
/*
* After createConstraints is implemented
* setConstraints = createConstraints();
*/
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_SetTargetCertConstraints
(goodObject, setConstraints, plContext));
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_GetTargetCertConstraints
(goodObject, &getConstraints, plContext));
testEqualsHelper((PKIX_PL_Object *)setConstraints,
(PKIX_PL_Object *)getConstraints,
PKIX_TRUE,
plContext);
cleanup:
PKIX_TEST_DECREF_AC(setConstraints);
PKIX_TEST_DECREF_AC(getConstraints);
PKIX_TEST_RETURN();
}
static
void testGetSetInitialPolicies(
PKIX_ProcessingParams *goodObject,
char *asciiPolicyOID)
{
PKIX_PL_OID *policyOID = NULL;
PKIX_List* setPolicyList = NULL;
PKIX_List* getPolicyList = NULL;
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetInitialPolicies");
PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_OID_Create
(asciiPolicyOID, &policyOID, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_Create(&setPolicyList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_List_AppendItem
(setPolicyList, (PKIX_PL_Object *)policyOID, plContext));
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_List_SetImmutable(setPolicyList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_SetInitialPolicies
(goodObject, setPolicyList, plContext));
PKIX_TEST_EXPECT_NO_ERROR(PKIX_ProcessingParams_GetInitialPolicies
(goodObject, &getPolicyList, plContext));
testEqualsHelper
((PKIX_PL_Object *)setPolicyList,
(PKIX_PL_Object *)getPolicyList,
PKIX_TRUE,
plContext);
cleanup:
PKIX_TEST_DECREF_AC(policyOID);
PKIX_TEST_DECREF_AC(setPolicyList);
PKIX_TEST_DECREF_AC(getPolicyList);
PKIX_TEST_RETURN();
}
static
void testGetSetPolicyQualifiersRejected(
PKIX_ProcessingParams *goodObject,
PKIX_Boolean rejected)
{
PKIX_Boolean getRejected = PKIX_FALSE;
PKIX_TEST_STD_VARS();
subTest("PKIX_ProcessingParams_Get/SetPolicyQualifiersRejected");
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_SetPolicyQualifiersRejected
(goodObject, rejected, plContext));
PKIX_TEST_EXPECT_NO_ERROR
(PKIX_ProcessingParams_GetPolicyQualifiersRejected
(goodObject, &getRejected, plContext));
if (rejected != getRejected) {
testError
("GetPolicyQualifiersRejected returned unexpected value");
}
cleanup:
PKIX_TEST_RETURN();
}
static
void printUsage(char *pName){
printf("\nUSAGE: %s <central-data-dir>\n\n", pName);
}
int test_procparams(int argc, char *argv[]) {
PKIX_ProcessingParams *goodObject = NULL;
PKIX_ProcessingParams *equalObject = NULL;
PKIX_ProcessingParams *diffObject = NULL;
PKIX_UInt32 actualMinorVersion;
char *dataCentralDir = NULL;
PKIX_UInt32 j = 0;
char *oidAnyPolicy = PKIX_CERTIFICATEPOLICIES_ANYPOLICY_OID;
char *oidNist1Policy = "2.16.840.1.101.3.2.1.48.2";
char *goodInput = "yassir2yassir";
char *diffInput = "yassir2bcn";
char *expectedAscii =
"[\n"
"\tTrust Anchors: \n"
"\t********BEGIN LIST OF TRUST ANCHORS********\n"
"\t\t"
"([\n"
"\tTrusted CA Name: "
"CN=yassir,OU=bcn,OU=east,O=sun,C=us\n"
"\tTrusted CA PublicKey: ANSI X9.57 DSA Signature\n"
"\tInitial Name Constraints:(null)\n"
"]\n"
", [\n"
"\tTrusted CA Name: OU=bcn,OU=east,O=sun,C=us\n"
"\tTrusted CA PublicKey: ANSI X9.57 DSA Signature\n"
"\tInitial Name Constraints:(null)\n"
"]\n"
")\n"
"\t********END LIST OF TRUST ANCHORS********\n"
"\tDate: \t\tMon Mar 29 08:48:47 2004\n"
"\tTarget Constraints: (null)\n"
"\tInitial Policies: (2.5.29.32.0)\n"
"\tQualifiers Rejected: FALSE\n"
"\tCert Stores: (EMPTY)\n"
"\tResource Limits: [\n"
"\tMaxTime: 2\n"
"\tMaxFanout: 3\n"
"\tMaxDepth: 3\n"
"]\n\n"
"\tCRL Checking Enabled: 0\n"
"]\n";
PKIX_TEST_STD_VARS();
startTests("ProcessingParams");
PKIX_TEST_EXPECT_NO_ERROR(
PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));
if (argc < 2){
printUsage(argv[0]);
return (0);
}
dataCentralDir = argv[j+1];
subTest("PKIX_ProcessingParams_Create");
goodObject = createProcessingParams
(dataCentralDir,
goodInput,
diffInput,
NULL,
NULL,
PKIX_FALSE,
plContext);
equalObject = createProcessingParams
(dataCentralDir,
goodInput,
diffInput,
NULL,
NULL,
PKIX_FALSE,
plContext);
diffObject = createProcessingParams
(dataCentralDir,
diffInput,
goodInput,
NULL,
NULL,
PKIX_FALSE,
plContext);
testGetAnchors(goodObject, equalObject);
testGetSetDate(goodObject, equalObject);
testGetSetCertChainCheckers(goodObject, equalObject);
testGetSetRevocationCheckers(goodObject, equalObject);
testGetSetResourceLimits(goodObject, equalObject);
/*
* XXX testGetSetConstraints(goodObject);
*/
testGetSetInitialPolicies(goodObject, oidAnyPolicy);
testGetSetInitialPolicies(equalObject, oidAnyPolicy);
testGetSetInitialPolicies(diffObject, oidNist1Policy);
testGetSetPolicyQualifiersRejected(goodObject, PKIX_FALSE);
testGetSetPolicyQualifiersRejected(equalObject, PKIX_FALSE);
testGetSetPolicyQualifiersRejected(diffObject, PKIX_TRUE);
PKIX_TEST_EQ_HASH_TOSTR_DUP
(goodObject,
equalObject,
diffObject,
NULL, /* expectedAscii, */
ProcessingParams,
PKIX_FALSE);
testDestroy(goodObject, equalObject, diffObject);
cleanup:
PKIX_Shutdown(plContext);
PKIX_TEST_RETURN();
endTests("ProcessingParams");
return (0);
}