mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-01 13:28:39 +09:00
478 lines
15 KiB
C
478 lines
15 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);
|
|
}
|