mirror of
https://github.com/rn10950/RetroZilla.git
synced 2024-11-12 19:00:11 +01:00
553 lines
17 KiB
C
553 lines
17 KiB
C
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is the PKIX-C library.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Sun Microsystems, Inc.
|
|
* Portions created by the Initial Developer are
|
|
* Copyright 2004-2007 Sun Microsystems, Inc. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
* Sun Microsystems, Inc.
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
/*
|
|
* 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);
|
|
}
|