1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 /* 5 * pkix_build.h 6 * 7 * Header file for buildChain function 8 * 9 */ 10 11 #ifndef _PKIX_BUILD_H 12 #define _PKIX_BUILD_H 13 #include "pkix_tools.h" 14 #ifndef NSS_PKIX_NO_LDAP 15 #include "pkix_pl_ldapt.h" 16 #endif 17 #include "pkix_ekuchecker.h" 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif 22 23 typedef enum { 24 BUILD_SHORTCUTPENDING, 25 BUILD_INITIAL, 26 BUILD_TRYAIA, 27 BUILD_AIAPENDING, 28 BUILD_COLLECTINGCERTS, 29 BUILD_GATHERPENDING, 30 BUILD_CERTVALIDATING, 31 BUILD_ABANDONNODE, 32 BUILD_DATEPREP, 33 BUILD_CHECKTRUSTED, 34 BUILD_CHECKTRUSTED2, 35 BUILD_ADDTOCHAIN, 36 BUILD_VALCHAIN, 37 BUILD_VALCHAIN2, 38 BUILD_EXTENDCHAIN, 39 BUILD_GETNEXTCERT 40 } BuildStatus; 41 42 typedef struct BuildConstantsStruct BuildConstants; 43 44 /* 45 * These fields (the ones that are objects) are not reference-counted 46 * in *each* state, but only in the root, the state that has no parent. 47 * That saves time in creation and destruction of child states, but is 48 * safe enough since they are constants. 49 */ 50 struct BuildConstantsStruct { 51 PKIX_UInt32 numAnchors; 52 PKIX_UInt32 numCertStores; 53 PKIX_UInt32 numHintCerts; 54 PKIX_UInt32 maxDepth; 55 PKIX_UInt32 maxFanout; 56 PKIX_UInt32 maxTime; 57 PKIX_ProcessingParams *procParams; 58 PKIX_PL_Date *testDate; 59 PKIX_PL_Date *timeLimit; 60 PKIX_PL_Cert *targetCert; 61 PKIX_PL_PublicKey *targetPubKey; 62 PKIX_List *certStores; 63 PKIX_List *anchors; 64 PKIX_List *userCheckers; 65 PKIX_List *hintCerts; 66 PKIX_RevocationChecker *revChecker; 67 PKIX_PL_AIAMgr *aiaMgr; 68 PKIX_Boolean useAIAForCertFetching; 69 PKIX_Boolean trustOnlyUserAnchors; 70 }; 71 72 struct PKIX_ForwardBuilderStateStruct{ 73 BuildStatus status; 74 PKIX_Int32 traversedCACerts; 75 PKIX_UInt32 certStoreIndex; 76 PKIX_UInt32 numCerts; 77 PKIX_UInt32 numAias; 78 PKIX_UInt32 certIndex; 79 PKIX_UInt32 aiaIndex; 80 PKIX_UInt32 certCheckedIndex; 81 PKIX_UInt32 checkerIndex; 82 PKIX_UInt32 hintCertIndex; 83 PKIX_UInt32 numFanout; 84 PKIX_UInt32 numDepth; 85 PKIX_UInt32 reasonCode; 86 PKIX_Boolean canBeCached; 87 PKIX_Boolean useOnlyLocal; 88 PKIX_Boolean revChecking; 89 PKIX_Boolean usingHintCerts; 90 PKIX_Boolean certLoopingDetected; 91 PKIX_PL_Date *validityDate; 92 PKIX_PL_Cert *prevCert; 93 PKIX_PL_Cert *candidateCert; 94 PKIX_List *traversedSubjNames; 95 PKIX_List *trustChain; 96 PKIX_List *aia; 97 PKIX_List *candidateCerts; 98 PKIX_List *reversedCertChain; 99 PKIX_List *checkedCritExtOIDs; 100 PKIX_List *checkerChain; 101 PKIX_CertSelector *certSel; 102 PKIX_VerifyNode *verifyNode; 103 void *client; /* messageHandler, such as LDAPClient */ 104 PKIX_ForwardBuilderState *parentState; 105 BuildConstants buildConstants; 106 }; 107 108 /* --Private-Functions-------------------------------------------- */ 109 110 PKIX_Error * 111 pkix_ForwardBuilderState_RegisterSelf(void *plContext); 112 113 PKIX_Error * 114 PKIX_Build_GetNBIOContext(void *state, void **pNBIOContext, void *plContext); 115 116 #ifdef __cplusplus 117 } 118 #endif 119 120 #endif /* _PKIX_BUILD_H */ 121