1 /* ***** BEGIN LICENSE BLOCK *****
2 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
4 * The contents of this file are subject to the Mozilla Public License Version
5 * 1.1 (the "License"); you may not use this file except in compliance with
6 * the License. You may obtain a copy of the License at
7 * http://www.mozilla.org/MPL/
9 * Software distributed under the License is distributed on an "AS IS" basis,
10 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11 * for the specific language governing rights and limitations under the
14 * The Original Code is the Netscape security libraries.
16 * The Initial Developer of the Original Code is
17 * Netscape Communications Corporation.
18 * Portions created by the Initial Developer are Copyright (C) 1994-2000
19 * the Initial Developer. All Rights Reserved.
24 * Alternatively, the contents of this file may be used under the terms of
25 * either the GNU General Public License Version 2 or later (the "GPL"), or
26 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
27 * in which case the provisions of the GPL or the LGPL are applicable instead
28 * of those above. If you wish to allow use of your version of this file only
29 * under the terms of either the GPL or the LGPL, and not to allow others to
30 * use your version of this file under the terms of the MPL, indicate your
31 * decision by deleting the provisions above and replace them with the notice
32 * and other provisions required by the GPL or the LGPL. If you do not delete
33 * the provisions above, a recipient may use your version of this file under
34 * the terms of any one of the MPL, the GPL or the LGPL.
36 * ***** END LICENSE BLOCK ***** */
40 * ProcessingParams Object Functions
44 #include "pkix_procparams.h"
46 /* --Private-Functions-------------------------------------------- */
49 * FUNCTION: pkix_ProcessingParams_Destroy
50 * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h)
53 pkix_ProcessingParams_Destroy(
54 PKIX_PL_Object
*object
,
57 PKIX_ProcessingParams
*params
= NULL
;
59 PKIX_ENTER(PROCESSINGPARAMS
, "pkix_ProcessingParams_Destroy");
60 PKIX_NULLCHECK_ONE(object
);
62 /* Check that this object is a processing params object */
63 PKIX_CHECK(pkix_CheckType
64 (object
, PKIX_PROCESSINGPARAMS_TYPE
, plContext
),
65 PKIX_OBJECTNOTPROCESSINGPARAMS
);
67 params
= (PKIX_ProcessingParams
*)object
;
69 PKIX_DECREF(params
->trustAnchors
);
70 PKIX_DECREF(params
->hintCerts
);
71 PKIX_DECREF(params
->constraints
);
72 PKIX_DECREF(params
->date
);
73 PKIX_DECREF(params
->initialPolicies
);
74 PKIX_DECREF(params
->certChainCheckers
);
75 PKIX_DECREF(params
->revCheckers
);
76 PKIX_DECREF(params
->certStores
);
77 PKIX_DECREF(params
->resourceLimits
);
81 PKIX_RETURN(PROCESSINGPARAMS
);
85 * FUNCTION: pkix_ProcessingParams_Equals
86 * (see comments for PKIX_PL_EqualsCallback in pkix_pl_system.h)
89 pkix_ProcessingParams_Equals(
90 PKIX_PL_Object
*first
,
91 PKIX_PL_Object
*second
,
92 PKIX_Boolean
*pResult
,
95 PKIX_UInt32 secondType
;
96 PKIX_Boolean cmpResult
;
97 PKIX_ProcessingParams
*firstProcParams
= NULL
;
98 PKIX_ProcessingParams
*secondProcParams
= NULL
;
100 PKIX_ENTER(PROCESSINGPARAMS
, "pkix_ProcessingParams_Equals");
101 PKIX_NULLCHECK_THREE(first
, second
, pResult
);
103 PKIX_CHECK(pkix_CheckType(first
, PKIX_PROCESSINGPARAMS_TYPE
, plContext
),
104 PKIX_FIRSTOBJECTNOTPROCESSINGPARAMS
);
106 PKIX_CHECK(PKIX_PL_Object_GetType(second
, &secondType
, plContext
),
107 PKIX_COULDNOTGETTYPEOFSECONDARGUMENT
);
109 *pResult
= PKIX_FALSE
;
111 if (secondType
!= PKIX_PROCESSINGPARAMS_TYPE
) goto cleanup
;
113 firstProcParams
= (PKIX_ProcessingParams
*)first
;
114 secondProcParams
= (PKIX_ProcessingParams
*)second
;
116 /* Do the simplest tests first */
117 if ((firstProcParams
->qualifiersRejected
) !=
118 (secondProcParams
->qualifiersRejected
)) {
122 if (firstProcParams
->isCrlRevocationCheckingEnabled
!=
123 secondProcParams
->isCrlRevocationCheckingEnabled
) {
127 /* trustAnchors can never be NULL */
130 (firstProcParams
->trustAnchors
,
131 secondProcParams
->trustAnchors
,
134 PKIX_OBJECTEQUALSFAILED
);
136 if (!cmpResult
) goto cleanup
;
139 (firstProcParams
->hintCerts
,
140 secondProcParams
->hintCerts
,
143 PKIX_OBJECTEQUALSFAILED
);
145 if (!cmpResult
) goto cleanup
;
148 (firstProcParams
->date
,
149 secondProcParams
->date
,
152 PKIX_OBJECTEQUALSFAILED
);
154 if (!cmpResult
) goto cleanup
;
157 (firstProcParams
->constraints
,
158 secondProcParams
->constraints
,
161 PKIX_OBJECTEQUALSFAILED
);
163 if (!cmpResult
) goto cleanup
;
166 (firstProcParams
->initialPolicies
,
167 secondProcParams
->initialPolicies
,
170 PKIX_OBJECTEQUALSFAILED
);
172 if (!cmpResult
) goto cleanup
;
174 /* There is no Equals function for CertChainCheckers */
177 ((PKIX_PL_Object
*)firstProcParams
->certStores
,
178 (PKIX_PL_Object
*)secondProcParams
->certStores
,
181 PKIX_OBJECTEQUALSFAILED
);
183 if (!cmpResult
) goto cleanup
;
186 (firstProcParams
->resourceLimits
,
187 secondProcParams
->resourceLimits
,
190 PKIX_OBJECTEQUALSFAILED
);
192 if (cmpResult
== PKIX_FALSE
) {
193 *pResult
= PKIX_FALSE
;
197 *pResult
= cmpResult
;
201 PKIX_RETURN(PROCESSINGPARAMS
);
205 * FUNCTION: pkix_ProcessingParams_Hashcode
206 * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h)
209 pkix_ProcessingParams_Hashcode(
210 PKIX_PL_Object
*object
,
211 PKIX_UInt32
*pHashcode
,
214 PKIX_ProcessingParams
*procParams
= NULL
;
215 PKIX_UInt32 hash
= 0;
216 PKIX_UInt32 anchorsHash
= 0;
217 PKIX_UInt32 hintCertsHash
= 0;
218 PKIX_UInt32 dateHash
= 0;
219 PKIX_UInt32 constraintsHash
= 0;
220 PKIX_UInt32 initialHash
= 0;
221 PKIX_UInt32 rejectedHash
= 0;
222 PKIX_UInt32 certChainCheckersHash
= 0;
223 PKIX_UInt32 revCheckersHash
= 0;
224 PKIX_UInt32 certStoresHash
= 0;
225 PKIX_UInt32 resourceLimitsHash
= 0;
227 PKIX_ENTER(PROCESSINGPARAMS
, "pkix_ProcessingParams_Hashcode");
228 PKIX_NULLCHECK_TWO(object
, pHashcode
);
230 PKIX_CHECK(pkix_CheckType
231 (object
, PKIX_PROCESSINGPARAMS_TYPE
, plContext
),
232 PKIX_OBJECTNOTPROCESSINGPARAMS
);
234 procParams
= (PKIX_ProcessingParams
*)object
;
236 PKIX_HASHCODE(procParams
->trustAnchors
, &anchorsHash
, plContext
,
237 PKIX_OBJECTHASHCODEFAILED
);
239 PKIX_HASHCODE(procParams
->hintCerts
, &hintCertsHash
, plContext
,
240 PKIX_OBJECTHASHCODEFAILED
);
242 PKIX_HASHCODE(procParams
->date
, &dateHash
, plContext
,
243 PKIX_OBJECTHASHCODEFAILED
);
245 PKIX_HASHCODE(procParams
->constraints
, &constraintsHash
, plContext
,
246 PKIX_OBJECTHASHCODEFAILED
);
248 PKIX_HASHCODE(procParams
->initialPolicies
, &initialHash
, plContext
,
249 PKIX_OBJECTHASHCODEFAILED
);
251 rejectedHash
= procParams
->qualifiersRejected
;
253 /* There is no Hash function for CertChainCheckers */
255 PKIX_HASHCODE(procParams
->certStores
, &certStoresHash
, plContext
,
256 PKIX_OBJECTHASHCODEFAILED
);
258 PKIX_HASHCODE(procParams
->resourceLimits
,
261 PKIX_OBJECTHASHCODEFAILED
);
263 hash
= (31 * ((31 * anchorsHash
) + hintCertsHash
+ dateHash
)) +
264 constraintsHash
+ initialHash
+ rejectedHash
;
266 hash
+= ((((certStoresHash
+ resourceLimitsHash
) << 7) +
267 certChainCheckersHash
+ revCheckersHash
+
268 procParams
->isCrlRevocationCheckingEnabled
) << 7);
274 PKIX_RETURN(PROCESSINGPARAMS
);
278 * FUNCTION: pkix_ProcessingParams_ToString
279 * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h)
282 pkix_ProcessingParams_ToString(
283 PKIX_PL_Object
*object
,
284 PKIX_PL_String
**pString
,
287 PKIX_ProcessingParams
*procParams
= NULL
;
288 char *asciiFormat
= NULL
;
289 PKIX_PL_String
*formatString
= NULL
;
290 PKIX_PL_String
*procParamsString
= NULL
;
291 PKIX_PL_String
*anchorsString
= NULL
;
292 PKIX_PL_String
*dateString
= NULL
;
293 PKIX_PL_String
*constraintsString
= NULL
;
294 PKIX_PL_String
*InitialPoliciesString
= NULL
;
295 PKIX_PL_String
*qualsRejectedString
= NULL
;
296 PKIX_List
*certStores
= NULL
;
297 PKIX_PL_String
*certStoresString
= NULL
;
298 PKIX_PL_String
*resourceLimitsString
= NULL
;
300 PKIX_ENTER(PROCESSINGPARAMS
, "pkix_ProcessingParams_ToString");
301 PKIX_NULLCHECK_TWO(object
, pString
);
303 PKIX_CHECK(pkix_CheckType
304 (object
, PKIX_PROCESSINGPARAMS_TYPE
, plContext
),
305 PKIX_OBJECTNOTPROCESSINGPARAMS
);
309 "\tTrust Anchors: \n"
310 "\t********BEGIN LIST OF TRUST ANCHORS********\n"
312 "\t********END LIST OF TRUST ANCHORS********\n"
314 "\tTarget Constraints: %s\n"
315 "\tInitial Policies: %s\n"
316 "\tQualifiers Rejected: %s\n"
317 "\tCert Stores: %s\n"
318 "\tResource Limits: %s\n"
319 "\tCRL Checking Enabled: %d\n"
322 PKIX_CHECK(PKIX_PL_String_Create
328 PKIX_STRINGCREATEFAILED
);
330 procParams
= (PKIX_ProcessingParams
*)object
;
332 PKIX_TOSTRING(procParams
->trustAnchors
, &anchorsString
, plContext
,
333 PKIX_OBJECTTOSTRINGFAILED
);
335 PKIX_TOSTRING(procParams
->date
, &dateString
, plContext
,
336 PKIX_OBJECTTOSTRINGFAILED
);
338 PKIX_TOSTRING(procParams
->constraints
, &constraintsString
, plContext
,
339 PKIX_OBJECTTOSTRINGFAILED
);
342 (procParams
->initialPolicies
, &InitialPoliciesString
, plContext
,
343 PKIX_OBJECTTOSTRINGFAILED
);
345 PKIX_CHECK(PKIX_PL_String_Create
347 (procParams
->qualifiersRejected
)?"TRUE":"FALSE",
349 &qualsRejectedString
,
351 PKIX_STRINGCREATEFAILED
);
353 /* There is no ToString function for CertChainCheckers */
355 PKIX_CHECK(PKIX_ProcessingParams_GetCertStores
356 (procParams
, &certStores
, plContext
),
357 PKIX_PROCESSINGPARAMSGETCERTSTORESFAILED
);
359 PKIX_TOSTRING(certStores
, &certStoresString
, plContext
,
360 PKIX_LISTTOSTRINGFAILED
);
362 PKIX_TOSTRING(procParams
->resourceLimits
,
363 &resourceLimitsString
,
365 PKIX_OBJECTTOSTRINGFAILED
);
367 PKIX_CHECK(PKIX_PL_Sprintf
374 InitialPoliciesString
,
377 resourceLimitsString
,
378 procParams
->isCrlRevocationCheckingEnabled
),
381 *pString
= procParamsString
;
385 PKIX_DECREF(formatString
);
386 PKIX_DECREF(anchorsString
);
387 PKIX_DECREF(dateString
);
388 PKIX_DECREF(constraintsString
);
389 PKIX_DECREF(InitialPoliciesString
);
390 PKIX_DECREF(qualsRejectedString
);
391 PKIX_DECREF(certStores
);
392 PKIX_DECREF(certStoresString
);
393 PKIX_DECREF(resourceLimitsString
);
395 PKIX_RETURN(PROCESSINGPARAMS
);
399 * FUNCTION: pkix_ProcessingParams_Duplicate
400 * (see comments for PKIX_PL_DuplicateCallback in pkix_pl_system.h)
403 pkix_ProcessingParams_Duplicate(
404 PKIX_PL_Object
*object
,
405 PKIX_PL_Object
**pNewObject
,
408 PKIX_ProcessingParams
*params
= NULL
;
409 PKIX_ProcessingParams
*paramsDuplicate
= NULL
;
411 PKIX_ENTER(PROCESSINGPARAMS
, "pkix_ProcessingParams_Duplicate");
412 PKIX_NULLCHECK_TWO(object
, pNewObject
);
414 PKIX_CHECK(pkix_CheckType
415 (object
, PKIX_PROCESSINGPARAMS_TYPE
, plContext
),
416 PKIX_OBJECTNOTPROCESSINGPARAMS
);
418 params
= (PKIX_ProcessingParams
*)object
;
420 PKIX_CHECK(PKIX_PL_Object_Alloc
421 (PKIX_PROCESSINGPARAMS_TYPE
,
422 sizeof (PKIX_ProcessingParams
),
423 (PKIX_PL_Object
**)¶msDuplicate
,
425 PKIX_PROCESSINGPARAMSCREATEFAILED
);
427 /* initialize fields */
429 (params
->trustAnchors
,
430 &(paramsDuplicate
->trustAnchors
),
432 PKIX_OBJECTDUPLICATEFAILED
);
435 (params
->hintCerts
, &(paramsDuplicate
->hintCerts
), plContext
,
436 PKIX_OBJECTDUPLICATEFAILED
);
439 (params
->constraints
,
440 &(paramsDuplicate
->constraints
),
442 PKIX_OBJECTDUPLICATEFAILED
);
445 (params
->date
, &(paramsDuplicate
->date
), plContext
,
446 PKIX_OBJECTDUPLICATEFAILED
);
449 (params
->initialPolicies
,
450 &(paramsDuplicate
->initialPolicies
),
452 PKIX_OBJECTDUPLICATEFAILED
);
454 paramsDuplicate
->initialPolicyMappingInhibit
=
455 params
->initialPolicyMappingInhibit
;
456 paramsDuplicate
->initialAnyPolicyInhibit
=
457 params
->initialAnyPolicyInhibit
;
458 paramsDuplicate
->initialExplicitPolicy
= params
->initialExplicitPolicy
;
459 paramsDuplicate
->qualifiersRejected
= params
->qualifiersRejected
;
462 (params
->certChainCheckers
,
463 &(paramsDuplicate
->certChainCheckers
),
465 PKIX_OBJECTDUPLICATEFAILED
);
468 (params
->revCheckers
,
469 &(paramsDuplicate
->revCheckers
),
471 PKIX_OBJECTDUPLICATEFAILED
);
474 (params
->certStores
, &(paramsDuplicate
->certStores
), plContext
,
475 PKIX_OBJECTDUPLICATEFAILED
);
478 (params
->resourceLimits
,
479 &(paramsDuplicate
->resourceLimits
),
481 PKIX_OBJECTDUPLICATEFAILED
);
483 paramsDuplicate
->isCrlRevocationCheckingEnabled
=
484 params
->isCrlRevocationCheckingEnabled
;
486 *pNewObject
= (PKIX_PL_Object
*)paramsDuplicate
;
490 if (PKIX_ERROR_RECEIVED
){
491 PKIX_DECREF(paramsDuplicate
);
494 PKIX_RETURN(PROCESSINGPARAMS
);
499 * FUNCTION: pkix_ProcessingParams_RegisterSelf
501 * Registers PKIX_PROCESSINGPARAMS_TYPE and its related functions with
504 * Not Thread Safe - for performance and complexity reasons
506 * Since this function is only called by PKIX_PL_Initialize, which should
507 * only be called once, it is acceptable that this function is not
511 pkix_ProcessingParams_RegisterSelf(void *plContext
)
513 extern pkix_ClassTable_Entry systemClasses
[PKIX_NUMTYPES
];
514 pkix_ClassTable_Entry entry
;
516 PKIX_ENTER(PROCESSINGPARAMS
, "pkix_ProcessingParams_RegisterSelf");
518 entry
.description
= "ProcessingParams";
519 entry
.destructor
= pkix_ProcessingParams_Destroy
;
520 entry
.equalsFunction
= pkix_ProcessingParams_Equals
;
521 entry
.hashcodeFunction
= pkix_ProcessingParams_Hashcode
;
522 entry
.toStringFunction
= pkix_ProcessingParams_ToString
;
523 entry
.comparator
= NULL
;
524 entry
.duplicateFunction
= pkix_ProcessingParams_Duplicate
;
526 systemClasses
[PKIX_PROCESSINGPARAMS_TYPE
] = entry
;
528 PKIX_RETURN(PROCESSINGPARAMS
);
531 /* --Public-Functions--------------------------------------------- */
534 * FUNCTION: PKIX_ProcessingParams_Create (see comments in pkix_params.h)
537 PKIX_ProcessingParams_Create(
538 PKIX_List
*anchors
, /* list of TrustAnchor */
539 PKIX_ProcessingParams
**pParams
,
542 PKIX_ProcessingParams
*params
= NULL
;
544 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_Create");
545 PKIX_NULLCHECK_TWO(pParams
, anchors
);
547 PKIX_CHECK(PKIX_PL_Object_Alloc
548 (PKIX_PROCESSINGPARAMS_TYPE
,
549 sizeof (PKIX_ProcessingParams
),
550 (PKIX_PL_Object
**)¶ms
,
552 PKIX_COULDNOTCREATEPROCESSINGPARAMSOBJECT
);
554 /* initialize fields */
555 PKIX_INCREF(anchors
);
556 params
->trustAnchors
= anchors
;
557 PKIX_CHECK(PKIX_List_SetImmutable(params
->trustAnchors
, plContext
),
558 PKIX_LISTSETIMMUTABLEFAILED
);
560 params
->hintCerts
= NULL
;
561 params
->constraints
= NULL
;
563 params
->initialPolicies
= NULL
;
564 params
->initialPolicyMappingInhibit
= PKIX_FALSE
;
565 params
->initialAnyPolicyInhibit
= PKIX_FALSE
;
566 params
->initialExplicitPolicy
= PKIX_FALSE
;
567 params
->qualifiersRejected
= PKIX_FALSE
;
568 params
->certChainCheckers
= NULL
;
569 params
->revCheckers
= NULL
;
570 params
->certStores
= NULL
;
571 params
->resourceLimits
= NULL
;
574 * XXX CRL checking should be enabled as default, but before
575 * we encorporate CRL in all our tests, take it as disable for now
577 params
->isCrlRevocationCheckingEnabled
= PKIX_TRUE
;
583 if (PKIX_ERROR_RECEIVED
){
587 PKIX_RETURN(PROCESSINGPARAMS
);
592 * FUNCTION: PKIX_ProcessingParams_GetTrustAnchors
593 * (see comments in pkix_params.h)
596 PKIX_ProcessingParams_GetTrustAnchors(
597 PKIX_ProcessingParams
*params
,
598 PKIX_List
**pAnchors
, /* list of TrustAnchor */
601 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetTrustAnchors");
602 PKIX_NULLCHECK_TWO(params
, pAnchors
);
604 PKIX_INCREF(params
->trustAnchors
);
606 *pAnchors
= params
->trustAnchors
;
608 PKIX_RETURN(PROCESSINGPARAMS
);
612 * FUNCTION: PKIX_ProcessingParams_GetDate (see comments in pkix_params.h)
615 PKIX_ProcessingParams_GetDate(
616 PKIX_ProcessingParams
*params
,
617 PKIX_PL_Date
**pDate
,
620 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetDate");
621 PKIX_NULLCHECK_TWO(params
, pDate
);
623 PKIX_INCREF(params
->date
);
624 *pDate
= params
->date
;
626 PKIX_RETURN(PROCESSINGPARAMS
);
630 * FUNCTION: PKIX_ProcessingParams_SetDate (see comments in pkix_params.h)
633 PKIX_ProcessingParams_SetDate(
634 PKIX_ProcessingParams
*params
,
638 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_SetDate");
639 PKIX_NULLCHECK_ONE(params
);
641 PKIX_DECREF(params
->date
);
647 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
648 ((PKIX_PL_Object
*)params
, plContext
),
649 PKIX_OBJECTINVALIDATECACHEFAILED
);
652 if (PKIX_ERROR_RECEIVED
){
656 PKIX_RETURN(PROCESSINGPARAMS
);
660 * FUNCTION: PKIX_ProcessingParams_GetTargetCertConstraints
661 * (see comments in pkix_params.h)
664 PKIX_ProcessingParams_GetTargetCertConstraints(
665 PKIX_ProcessingParams
*params
,
666 PKIX_CertSelector
**pConstraints
,
669 PKIX_ENTER(PROCESSINGPARAMS
,
670 "PKIX_ProcessingParams_GetTargetCertConstraints");
672 PKIX_NULLCHECK_TWO(params
, pConstraints
);
674 PKIX_INCREF(params
->constraints
);
675 *pConstraints
= params
->constraints
;
677 PKIX_RETURN(PROCESSINGPARAMS
);
681 * FUNCTION: PKIX_ProcessingParams_SetTargetCertConstraints
682 * (see comments in pkix_params.h)
685 PKIX_ProcessingParams_SetTargetCertConstraints(
686 PKIX_ProcessingParams
*params
,
687 PKIX_CertSelector
*constraints
,
691 PKIX_ENTER(PROCESSINGPARAMS
,
692 "PKIX_ProcessingParams_SetTargetCertConstraints");
694 PKIX_NULLCHECK_ONE(params
);
696 PKIX_DECREF(params
->constraints
);
698 PKIX_INCREF(constraints
);
700 params
->constraints
= constraints
;
702 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
703 ((PKIX_PL_Object
*)params
, plContext
),
704 PKIX_OBJECTINVALIDATECACHEFAILED
);
708 PKIX_RETURN(PROCESSINGPARAMS
);
712 * FUNCTION: PKIX_ProcessingParams_GetInitialPolicies
713 * (see comments in pkix_params.h)
716 PKIX_ProcessingParams_GetInitialPolicies(
717 PKIX_ProcessingParams
*params
,
718 PKIX_List
**pInitPolicies
, /* list of PKIX_PL_OID */
722 PKIX_ENTER(PROCESSINGPARAMS
,
723 "PKIX_ProcessingParams_GetInitialPolicies");
725 PKIX_NULLCHECK_TWO(params
, pInitPolicies
);
727 if (params
->initialPolicies
== NULL
) {
728 PKIX_CHECK(PKIX_List_Create
729 (¶ms
->initialPolicies
, plContext
),
730 PKIX_UNABLETOCREATELIST
);
731 PKIX_CHECK(PKIX_List_SetImmutable
732 (params
->initialPolicies
, plContext
),
733 PKIX_UNABLETOMAKELISTIMMUTABLE
);
734 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
735 ((PKIX_PL_Object
*)params
, plContext
),
736 PKIX_OBJECTINVALIDATECACHEFAILED
);
739 PKIX_INCREF(params
->initialPolicies
);
740 *pInitPolicies
= params
->initialPolicies
;
744 PKIX_RETURN(PROCESSINGPARAMS
);
748 * FUNCTION: PKIX_ProcessingParams_SetInitialPolicies
749 * (see comments in pkix_params.h)
752 PKIX_ProcessingParams_SetInitialPolicies(
753 PKIX_ProcessingParams
*params
,
754 PKIX_List
*initPolicies
, /* list of PKIX_PL_OID */
757 PKIX_ENTER(PROCESSINGPARAMS
,
758 "PKIX_ProcessingParams_SetInitialPolicies");
760 PKIX_NULLCHECK_ONE(params
);
762 PKIX_DECREF(params
->initialPolicies
);
764 PKIX_INCREF(initPolicies
);
765 params
->initialPolicies
= initPolicies
;
767 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
768 ((PKIX_PL_Object
*)params
, plContext
),
769 PKIX_OBJECTINVALIDATECACHEFAILED
);
773 PKIX_RETURN(PROCESSINGPARAMS
);
777 * FUNCTION: PKIX_ProcessingParams_GetPolicyQualifiersRejected
778 * (see comments in pkix_params.h)
781 PKIX_ProcessingParams_GetPolicyQualifiersRejected(
782 PKIX_ProcessingParams
*params
,
783 PKIX_Boolean
*pRejected
,
786 PKIX_ENTER(PROCESSINGPARAMS
,
787 "PKIX_ProcessingParams_GetPolicyQualifiersRejected");
789 PKIX_NULLCHECK_TWO(params
, pRejected
);
791 *pRejected
= params
->qualifiersRejected
;
793 PKIX_RETURN(PROCESSINGPARAMS
);
797 * FUNCTION: PKIX_ProcessingParams_SetPolicyQualifiersRejected
798 * (see comments in pkix_params.h)
801 PKIX_ProcessingParams_SetPolicyQualifiersRejected(
802 PKIX_ProcessingParams
*params
,
803 PKIX_Boolean rejected
,
806 PKIX_ENTER(PROCESSINGPARAMS
,
807 "PKIX_ProcessingParams_SetPolicyQualifiersRejected");
809 PKIX_NULLCHECK_ONE(params
);
811 params
->qualifiersRejected
= rejected
;
813 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
814 ((PKIX_PL_Object
*)params
, plContext
),
815 PKIX_OBJECTINVALIDATECACHEFAILED
);
819 PKIX_RETURN(PROCESSINGPARAMS
);
823 * FUNCTION: PKIX_ProcessingParams_GetCertChainCheckers
824 * (see comments in pkix_params.h)
827 PKIX_ProcessingParams_GetCertChainCheckers(
828 PKIX_ProcessingParams
*params
,
829 PKIX_List
**pCheckers
, /* list of PKIX_CertChainChecker */
834 (PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetCertChainCheckers");
835 PKIX_NULLCHECK_TWO(params
, pCheckers
);
837 if (params
->certChainCheckers
) {
838 PKIX_INCREF(params
->certChainCheckers
);
841 *pCheckers
= params
->certChainCheckers
;
843 PKIX_RETURN(PROCESSINGPARAMS
);
847 * FUNCTION: PKIX_ProcessingParams_SetCertChainCheckers
848 * (see comments in pkix_params.h)
851 PKIX_ProcessingParams_SetCertChainCheckers(
852 PKIX_ProcessingParams
*params
,
853 PKIX_List
*checkers
, /* list of PKIX_CertChainChecker */
858 (PROCESSINGPARAMS
, "PKIX_ProcessingParams_SetCertChainCheckers");
859 PKIX_NULLCHECK_ONE(params
);
861 if (checkers
== NULL
) {
862 /* accordingly to spec, nothing done */
867 PKIX_INCREF(checkers
);
869 params
->certChainCheckers
= checkers
;
872 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
873 ((PKIX_PL_Object
*)params
, plContext
),
874 PKIX_OBJECTINVALIDATECACHEFAILED
);
878 PKIX_RETURN(PROCESSINGPARAMS
);
882 * FUNCTION: PKIX_ProcessingParams_AddCertChainCheckers
883 * (see comments in pkix_params.h)
886 PKIX_ProcessingParams_AddCertChainChecker(
887 PKIX_ProcessingParams
*params
,
888 PKIX_CertChainChecker
*checker
,
891 PKIX_List
*list
= NULL
;
894 (PROCESSINGPARAMS
, "PKIX_ProcessingParams_AddCertChainChecker");
895 PKIX_NULLCHECK_TWO(params
, checker
);
897 if (params
->certChainCheckers
== NULL
) {
899 PKIX_CHECK(PKIX_List_Create(&list
, plContext
),
900 PKIX_LISTCREATEFAILED
);
904 params
->certChainCheckers
= list
;
908 PKIX_CHECK(PKIX_List_AppendItem
909 (params
->certChainCheckers
, (PKIX_PL_Object
*)checker
, plContext
),
910 PKIX_LISTAPPENDITEMFAILED
);
912 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
913 ((PKIX_PL_Object
*)params
, plContext
),
914 PKIX_OBJECTINVALIDATECACHEFAILED
);
919 PKIX_RETURN(PROCESSINGPARAMS
);
923 * FUNCTION: PKIX_ProcessingParams_GetRevocationCheckers
924 * (see comments in pkix_params.h)
927 PKIX_ProcessingParams_GetRevocationCheckers(
928 PKIX_ProcessingParams
*params
,
929 PKIX_List
**pCheckers
, /* list of PKIX_RevocationChecker */
934 (PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetRevocationCheckers");
935 PKIX_NULLCHECK_TWO(params
, pCheckers
);
937 if (params
->revCheckers
== NULL
) {
938 PKIX_CHECK(PKIX_List_Create
939 (&(params
->revCheckers
), plContext
),
940 PKIX_LISTCREATEFAILED
);
943 PKIX_INCREF(params
->revCheckers
);
945 *pCheckers
= params
->revCheckers
;
949 PKIX_RETURN(PROCESSINGPARAMS
);
953 * FUNCTION: PKIX_ProcessingParams_SetRevocationCheckers
954 * (see comments in pkix_params.h)
957 PKIX_ProcessingParams_SetRevocationCheckers(
958 PKIX_ProcessingParams
*params
,
959 PKIX_List
*checkers
, /* list of PKIX_RevocationChecker */
964 (PROCESSINGPARAMS
, "PKIX_ProcessingParams_SetRevocationCheckers");
965 PKIX_NULLCHECK_ONE(params
);
967 PKIX_DECREF(params
->revCheckers
);
969 if (checkers
!= NULL
) {
971 PKIX_INCREF(checkers
);
973 params
->revCheckers
= checkers
;
976 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
977 ((PKIX_PL_Object
*)params
, plContext
),
978 PKIX_OBJECTINVALIDATECACHEFAILED
);
982 PKIX_RETURN(PROCESSINGPARAMS
);
986 * FUNCTION: PKIX_ProcessingParams_AddRevocationCheckers
987 * (see comments in pkix_params.h)
990 PKIX_ProcessingParams_AddRevocationChecker(
991 PKIX_ProcessingParams
*params
,
992 PKIX_RevocationChecker
*checker
,
995 PKIX_List
*list
= NULL
;
998 (PROCESSINGPARAMS
, "PKIX_ProcessingParams_AddRevocationChecker");
999 PKIX_NULLCHECK_TWO(params
, checker
);
1001 if (params
->certChainCheckers
== NULL
) {
1003 PKIX_CHECK(PKIX_List_Create(&list
, plContext
),
1004 PKIX_LISTCREATEFAILED
);
1008 params
->certChainCheckers
= list
;
1012 PKIX_CHECK(PKIX_List_AppendItem
1013 (params
->certChainCheckers
, (PKIX_PL_Object
*)checker
, plContext
),
1014 PKIX_LISTAPPENDITEMFAILED
);
1016 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1017 ((PKIX_PL_Object
*)params
, plContext
),
1018 PKIX_OBJECTINVALIDATECACHEFAILED
);
1023 PKIX_RETURN(PROCESSINGPARAMS
);
1027 * FUNCTION: PKIX_ProcessingParams_GetCertStores
1028 * (see comments in pkix_params.h)
1031 PKIX_ProcessingParams_GetCertStores(
1032 PKIX_ProcessingParams
*params
,
1033 PKIX_List
**pStores
, /* list of PKIX_CertStore */
1036 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetCertStores");
1038 PKIX_NULLCHECK_TWO(params
, pStores
);
1040 if (!params
->certStores
){
1041 PKIX_CHECK(PKIX_List_Create(¶ms
->certStores
, plContext
),
1042 PKIX_UNABLETOCREATELIST
);
1045 PKIX_INCREF(params
->certStores
);
1046 *pStores
= params
->certStores
;
1050 PKIX_RETURN(PROCESSINGPARAMS
);
1054 * FUNCTION: PKIX_ProcessingParams_SetCertStores
1055 * (see comments in pkix_params.h)
1058 PKIX_ProcessingParams_SetCertStores(
1059 PKIX_ProcessingParams
*params
,
1060 PKIX_List
*stores
, /* list of PKIX_CertStore */
1063 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_SetCertStores");
1065 PKIX_NULLCHECK_ONE(params
);
1067 PKIX_DECREF(params
->certStores
);
1069 PKIX_INCREF(stores
);
1070 params
->certStores
= stores
;
1072 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1073 ((PKIX_PL_Object
*)params
, plContext
),
1074 PKIX_OBJECTINVALIDATECACHEFAILED
);
1078 PKIX_RETURN(PROCESSINGPARAMS
);
1082 * FUNCTION: PKIX_ProcessingParams_AddCertStore
1083 * (see comments in pkix_params.h)
1086 PKIX_ProcessingParams_AddCertStore(
1087 PKIX_ProcessingParams
*params
,
1088 PKIX_CertStore
*store
,
1091 PKIX_List
*certStores
= NULL
;
1093 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_AddCertStore");
1094 PKIX_NULLCHECK_TWO(params
, store
);
1096 PKIX_CHECK(PKIX_ProcessingParams_GetCertStores
1097 (params
, &certStores
, plContext
),
1098 PKIX_PROCESSINGPARAMSGETCERTSTORESFAILED
);
1100 PKIX_CHECK(PKIX_List_AppendItem
1101 (certStores
, (PKIX_PL_Object
*)store
, plContext
),
1102 PKIX_LISTAPPENDITEMFAILED
);
1104 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1105 ((PKIX_PL_Object
*)params
, plContext
),
1106 PKIX_OBJECTINVALIDATECACHEFAILED
);
1110 PKIX_DECREF(certStores
);
1111 PKIX_RETURN(PROCESSINGPARAMS
);
1115 * FUNCTION: PKIX_ProcessingParams_IsCRLRevocationCheckingEnabled
1116 * (see comments in pkix_params.h)
1119 PKIX_ProcessingParams_IsCRLRevocationCheckingEnabled(
1120 PKIX_ProcessingParams
*params
,
1121 PKIX_Boolean
*pEnabled
,
1125 PKIX_ENTER(PROCESSINGPARAMS
,
1126 "PKIX_ProcessingParams_IsCRLRevocationCheckingEnabled");
1127 PKIX_NULLCHECK_TWO(params
, pEnabled
);
1129 *pEnabled
= params
->isCrlRevocationCheckingEnabled
;
1131 PKIX_RETURN(PROCESSINGPARAMS
);
1135 * FUNCTION: PKIX_ProcessingParams_SetRevocationEnabled
1136 * (see comments in pkix_params.h)
1139 PKIX_ProcessingParams_SetRevocationEnabled(
1140 PKIX_ProcessingParams
*params
,
1141 PKIX_Boolean enabled
,
1145 PKIX_ENTER(PROCESSINGPARAMS
,
1146 "PKIX_ProcessingParams_SetRevocationEnabled");
1147 PKIX_NULLCHECK_ONE(params
);
1149 params
->isCrlRevocationCheckingEnabled
= enabled
;
1151 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1152 ((PKIX_PL_Object
*)params
, plContext
),
1153 PKIX_OBJECTINVALIDATECACHEFAILED
);
1157 PKIX_RETURN(PROCESSINGPARAMS
);
1161 * FUNCTION: pkix_ProcessingParams_GetRevocationEnabled
1164 * Retrieves the boolean value indicating whether Revocation Checking
1165 * should be performed, from the ProcessingParams pointed to by "params",
1166 * and stores the result at "pEnable".
1170 * Address of ProcessingParams whose revocationEnabled flag is to be
1171 * retrieved. Must be non-NULL.
1173 * Address where Boolean value will be stored. Must be non-NULL.
1175 * Platform-specific context pointer.
1178 * Thread Safe (see Thread Safety Definitions in Programmer's Guide)
1181 * Returns NULL if the function succeeds.
1182 * Returns a Fatal Error if the function fails in an unrecoverable way.
1185 pkix_ProcessingParams_GetRevocationEnabled(
1186 PKIX_ProcessingParams
*params
,
1187 PKIX_Boolean
*pEnabled
,
1191 PKIX_ENTER(PROCESSINGPARAMS
,
1192 "PKIX_ProcessingParams_GetRevocationEnabled");
1194 PKIX_NULLCHECK_TWO(params
, pEnabled
);
1196 *pEnabled
= params
->isCrlRevocationCheckingEnabled
;
1198 PKIX_RETURN(PROCESSINGPARAMS
);
1202 * FUNCTION: PKIX_ProcessingParams_SetResourceLimits
1203 * (see comments in pkix_params.h)
1206 PKIX_ProcessingParams_SetResourceLimits(
1207 PKIX_ProcessingParams
*params
,
1208 PKIX_ResourceLimits
*resourceLimits
,
1211 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_SetResourceLimits");
1213 PKIX_NULLCHECK_TWO(params
, resourceLimits
);
1215 PKIX_DECREF(params
->resourceLimits
);
1216 PKIX_INCREF(resourceLimits
);
1217 params
->resourceLimits
= resourceLimits
;
1219 PKIX_RETURN(PROCESSINGPARAMS
);
1223 * FUNCTION: PKIX_ProcessingParams_GetResourceLimits
1224 * (see comments in pkix_params.h)
1227 PKIX_ProcessingParams_GetResourceLimits(
1228 PKIX_ProcessingParams
*params
,
1229 PKIX_ResourceLimits
**pResourceLimits
,
1232 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetResourceLimits");
1234 PKIX_NULLCHECK_TWO(params
, pResourceLimits
);
1236 PKIX_INCREF(params
->resourceLimits
);
1237 *pResourceLimits
= params
->resourceLimits
;
1239 PKIX_RETURN(PROCESSINGPARAMS
);
1243 * FUNCTION: PKIX_ProcessingParams_IsAnyPolicyInhibited
1244 * (see comments in pkix_params.h)
1247 PKIX_ProcessingParams_IsAnyPolicyInhibited(
1248 PKIX_ProcessingParams
*params
,
1249 PKIX_Boolean
*pInhibited
,
1252 PKIX_ENTER(PROCESSINGPARAMS
,
1253 "PKIX_ProcessingParams_IsAnyPolicyInhibited");
1255 PKIX_NULLCHECK_TWO(params
, pInhibited
);
1257 *pInhibited
= params
->initialAnyPolicyInhibit
;
1259 PKIX_RETURN(PROCESSINGPARAMS
);
1263 * FUNCTION: PKIX_ProcessingParams_SetAnyPolicyInhibited
1264 * (see comments in pkix_params.h)
1267 PKIX_ProcessingParams_SetAnyPolicyInhibited(
1268 PKIX_ProcessingParams
*params
,
1269 PKIX_Boolean inhibited
,
1272 PKIX_ENTER(PROCESSINGPARAMS
,
1273 "PKIX_ProcessingParams_SetAnyPolicyInhibited");
1275 PKIX_NULLCHECK_ONE(params
);
1277 params
->initialAnyPolicyInhibit
= inhibited
;
1279 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1280 ((PKIX_PL_Object
*)params
, plContext
),
1281 PKIX_OBJECTINVALIDATECACHEFAILED
);
1285 PKIX_RETURN(PROCESSINGPARAMS
);
1289 * FUNCTION: PKIX_ProcessingParams_IsExplicitPolicyRequired
1290 * (see comments in pkix_params.h)
1293 PKIX_ProcessingParams_IsExplicitPolicyRequired(
1294 PKIX_ProcessingParams
*params
,
1295 PKIX_Boolean
*pRequired
,
1298 PKIX_ENTER(PROCESSINGPARAMS
,
1299 "PKIX_ProcessingParams_IsExplicitPolicyRequired");
1301 PKIX_NULLCHECK_TWO(params
, pRequired
);
1303 *pRequired
= params
->initialExplicitPolicy
;
1305 PKIX_RETURN(PROCESSINGPARAMS
);
1309 * FUNCTION: PKIX_ProcessingParams_SetExplicitPolicyRequired
1310 * (see comments in pkix_params.h)
1313 PKIX_ProcessingParams_SetExplicitPolicyRequired(
1314 PKIX_ProcessingParams
*params
,
1315 PKIX_Boolean required
,
1318 PKIX_ENTER(PROCESSINGPARAMS
,
1319 "PKIX_ProcessingParams_SetExplicitPolicyRequired");
1321 PKIX_NULLCHECK_ONE(params
);
1323 params
->initialExplicitPolicy
= required
;
1325 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1326 ((PKIX_PL_Object
*)params
, plContext
),
1327 PKIX_OBJECTINVALIDATECACHEFAILED
);
1331 PKIX_RETURN(PROCESSINGPARAMS
);
1335 * FUNCTION: PKIX_ProcessingParams_IsPolicyMappingInhibited
1336 * (see comments in pkix_params.h)
1339 PKIX_ProcessingParams_IsPolicyMappingInhibited(
1340 PKIX_ProcessingParams
*params
,
1341 PKIX_Boolean
*pInhibited
,
1344 PKIX_ENTER(PROCESSINGPARAMS
,
1345 "PKIX_ProcessingParams_IsPolicyMappingInhibited");
1347 PKIX_NULLCHECK_TWO(params
, pInhibited
);
1349 *pInhibited
= params
->initialPolicyMappingInhibit
;
1351 PKIX_RETURN(PROCESSINGPARAMS
);
1355 * FUNCTION: PKIX_ProcessingParams_SetPolicyMappingInhibited
1356 * (see comments in pkix_params.h)
1359 PKIX_ProcessingParams_SetPolicyMappingInhibited(
1360 PKIX_ProcessingParams
*params
,
1361 PKIX_Boolean inhibited
,
1364 PKIX_ENTER(PROCESSINGPARAMS
,
1365 "PKIX_ProcessingParams_SetPolicyMappingInhibited");
1367 PKIX_NULLCHECK_ONE(params
);
1369 params
->initialPolicyMappingInhibit
= inhibited
;
1371 PKIX_CHECK(PKIX_PL_Object_InvalidateCache
1372 ((PKIX_PL_Object
*)params
, plContext
),
1373 PKIX_OBJECTINVALIDATECACHEFAILED
);
1377 PKIX_RETURN(PROCESSINGPARAMS
);
1381 * FUNCTION: PKIX_ProcessingParams_SetHintCerts
1382 * (see comments in pkix_params.h)
1385 PKIX_ProcessingParams_SetHintCerts(
1386 PKIX_ProcessingParams
*params
,
1387 PKIX_List
*hintCerts
,
1390 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_SetHintCerts");
1392 PKIX_NULLCHECK_ONE(params
);
1394 PKIX_DECREF(params
->hintCerts
);
1395 PKIX_INCREF(hintCerts
);
1396 params
->hintCerts
= hintCerts
;
1398 PKIX_RETURN(PROCESSINGPARAMS
);
1402 * FUNCTION: PKIX_ProcessingParams_GetHintCerts
1403 * (see comments in pkix_params.h)
1406 PKIX_ProcessingParams_GetHintCerts(
1407 PKIX_ProcessingParams
*params
,
1408 PKIX_List
**pHintCerts
,
1411 PKIX_ENTER(PROCESSINGPARAMS
, "PKIX_ProcessingParams_GetHintCerts");
1413 PKIX_NULLCHECK_TWO(params
, pHintCerts
);
1415 PKIX_INCREF(params
->hintCerts
);
1416 *pHintCerts
= params
->hintCerts
;
1418 PKIX_RETURN(PROCESSINGPARAMS
);