| /* 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/. */ |
| |
| #ifndef _CRLGEN_H_ |
| #define _CRLGEN_H_ |
| |
| #include "prio.h" |
| #include "prprf.h" |
| #include "plhash.h" |
| #include "seccomon.h" |
| #include "certt.h" |
| #include "secoidt.h" |
| |
| #define CRLGEN_UNKNOWN_CONTEXT 0 |
| #define CRLGEN_ISSUER_CONTEXT 1 |
| #define CRLGEN_UPDATE_CONTEXT 2 |
| #define CRLGEN_NEXT_UPDATE_CONTEXT 3 |
| #define CRLGEN_ADD_EXTENSION_CONTEXT 4 |
| #define CRLGEN_ADD_CERT_CONTEXT 6 |
| #define CRLGEN_CHANGE_RANGE_CONTEXT 7 |
| #define CRLGEN_RM_CERT_CONTEXT 8 |
| |
| #define CRLGEN_TYPE_DATE 0 |
| #define CRLGEN_TYPE_ZDATE 1 |
| #define CRLGEN_TYPE_DIGIT 2 |
| #define CRLGEN_TYPE_DIGIT_RANGE 3 |
| #define CRLGEN_TYPE_OID 4 |
| #define CRLGEN_TYPE_STRING 5 |
| #define CRLGEN_TYPE_ID 6 |
| |
| typedef struct CRLGENGeneratorDataStr CRLGENGeneratorData; |
| typedef struct CRLGENEntryDataStr CRLGENEntryData; |
| typedef struct CRLGENExtensionEntryStr CRLGENExtensionEntry; |
| typedef struct CRLGENCertEntrySrt CRLGENCertEntry; |
| typedef struct CRLGENCrlFieldStr CRLGENCrlField; |
| typedef struct CRLGENEntriesSortedDataStr CRLGENEntriesSortedData; |
| |
| /* Exported functions */ |
| |
| /* Used for initialization of extension handles for crl and certs |
| * extensions from existing CRL data then modifying existing CRL.*/ |
| extern SECStatus CRLGEN_ExtHandleInit(CRLGENGeneratorData *crlGenData); |
| |
| /* Commits all added entries and their's extensions into CRL. */ |
| extern SECStatus CRLGEN_CommitExtensionsAndEntries(CRLGENGeneratorData *crlGenData); |
| |
| /* Lunches the crl generation script parse */ |
| extern SECStatus CRLGEN_StartCrlGen(CRLGENGeneratorData *crlGenData); |
| |
| /* Closes crl generation script file and frees crlGenData */ |
| extern void CRLGEN_FinalizeCrlGeneration(CRLGENGeneratorData *crlGenData); |
| |
| /* Parser initialization function. Creates CRLGENGeneratorData structure |
| * for the current thread */ |
| extern CRLGENGeneratorData *CRLGEN_InitCrlGeneration(CERTSignedCrl *newCrl, |
| PRFileDesc *src); |
| |
| /* This lock is defined in crlgen_lex.c(derived from crlgen_lex.l). |
| * It controls access to invocation of yylex, allows to parse one |
| * script at a time */ |
| extern void CRLGEN_InitCrlGenParserLock(); |
| extern void CRLGEN_DestroyCrlGenParserLock(); |
| |
| /* The following function types are used to define functions for each of |
| * CRLGENExtensionEntryStr, CRLGENCertEntrySrt, CRLGENCrlFieldStr to |
| * provide functionality needed for these structures*/ |
| typedef SECStatus updateCrlFn_t(CRLGENGeneratorData *crlGenData, void *str); |
| typedef SECStatus setNextDataFn_t(CRLGENGeneratorData *crlGenData, void *str, |
| void *data, unsigned short dtype); |
| typedef SECStatus createNewLangStructFn_t(CRLGENGeneratorData *crlGenData, |
| void *str, unsigned i); |
| |
| /* Sets reports failure to parser if anything goes wrong */ |
| extern void crlgen_setFailure(CRLGENGeneratorData *str, char *); |
| |
| /* Collects data in to one of the current data structure that corresponds |
| * to the correct context type. This function gets called after each token |
| * is found for a particular line */ |
| extern SECStatus crlgen_setNextData(CRLGENGeneratorData *str, void *data, |
| unsigned short dtype); |
| |
| /* initiates crl update with collected data. This function is called at the |
| * end of each line */ |
| extern SECStatus crlgen_updateCrl(CRLGENGeneratorData *str); |
| |
| /* Creates new context structure depending on token that was parsed |
| * at the beginning of a line */ |
| extern SECStatus crlgen_createNewLangStruct(CRLGENGeneratorData *str, |
| unsigned structType); |
| |
| /* CRLGENExtensionEntry is used to store addext request data for either |
| * CRL extensions or CRL entry extensions. The differentiation between |
| * is based on order and type of extension been added. |
| * - extData : all data in request staring from name of the extension are |
| * in saved here. |
| * - nextUpdatedData: counter of elements added to extData |
| */ |
| struct CRLGENExtensionEntryStr { |
| char **extData; |
| int nextUpdatedData; |
| updateCrlFn_t *updateCrlFn; |
| setNextDataFn_t *setNextDataFn; |
| }; |
| |
| /* CRLGENCeryestEntry is used to store addcert request data |
| * - certId : certificate id or range of certificate with dash as a delimiter |
| * All certs from range will be inclusively added to crl |
| * - revocationTime: revocation time of cert(s) |
| */ |
| struct CRLGENCertEntrySrt { |
| char *certId; |
| char *revocationTime; |
| updateCrlFn_t *updateCrlFn; |
| setNextDataFn_t *setNextDataFn; |
| }; |
| |
| /* CRLGENCrlField is used to store crl fields record like update time, next |
| * update time, etc. |
| * - value: value of the parsed field data*/ |
| struct CRLGENCrlFieldStr { |
| char *value; |
| updateCrlFn_t *updateCrlFn; |
| setNextDataFn_t *setNextDataFn; |
| }; |
| |
| /* Can not create entries extension until completely done with parsing. |
| * Therefore need to keep joined data |
| * - certId : serial number of certificate |
| * - extHandle: head pointer to a list of extensions that belong to |
| * entry |
| * - entry : CERTCrlEntry structure pointer*/ |
| struct CRLGENEntryDataStr { |
| SECItem *certId; |
| void *extHandle; |
| CERTCrlEntry *entry; |
| }; |
| |
| /* Crl generator/parser main structure. Keeps info regarding current state of |
| * parser(context, status), parser helper functions pointers, parsed data and |
| * generated data. |
| * - contextId : current parsing context. Context in this parser environment |
| * defines what type of crl operations parser is going through |
| * in the current line of crl generation script. |
| * setting or new cert or an extension addition, etc. |
| * - createNewLangStructFn: pointer to top level function which creates |
| * data structures according contextId |
| * - setNextDataFn : pointer to top level function which sets new parsed data |
| * in temporary structure |
| * - updateCrlFn : pointer to top level function which triggers actual |
| * crl update functions with gathered data |
| * - union : data union create according to contextId |
| * - rangeFrom, rangeTo : holds last range in which certs was added |
| * - newCrl : pointer to CERTSignedCrl newly created crl |
| * - crlExtHandle : pointer to crl extension handle |
| * - entryDataHashTable: hash of CRLGENEntryData. |
| * key: cert serial number |
| * data: CRLGENEntryData pointer |
| * - parserStatus : current status of parser. Triggers parser to abort when |
| * set to SECFailure |
| * - src : PRFileDesc structure pointer of crl generator config file |
| * - parsedLineNum : currently parsing line. Keeping it to report errors */ |
| struct CRLGENGeneratorDataStr { |
| unsigned short contextId; |
| CRLGENCrlField *crlField; |
| CRLGENCertEntry *certEntry; |
| CRLGENExtensionEntry *extensionEntry; |
| PRUint64 rangeFrom; |
| PRUint64 rangeTo; |
| CERTSignedCrl *signCrl; |
| void *crlExtHandle; |
| PLHashTable *entryDataHashTable; |
| |
| PRFileDesc *src; |
| int parsedLineNum; |
| }; |
| |
| #endif /* _CRLGEN_H_ */ |