mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-15 20:10:33 +01:00
520 lines
16 KiB
C
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);
|
|
}
|