tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

pkixt.h (17198B)


      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 * This file defines the types in the libpkix API.
      6 * XXX Maybe we should specify the API version number in all API header files
      7 *
      8 */
      9 
     10 #ifndef _PKIXT_H
     11 #define _PKIXT_H
     12 
     13 #ifdef __cplusplus
     14 extern "C" {
     15 #endif
     16 
     17 #include "secerr.h"
     18 
     19 /* Types
     20 *
     21 * This header file provides typedefs for the abstract types used by libpkix.
     22 * It also provides several useful macros.
     23 *
     24 * Note that all these abstract types are typedef'd as opaque structures. This
     25 * is intended to discourage the caller from looking at the contents directly,
     26 * since the format of the contents may change from one version of the library
     27 * to the next. Instead, callers should only access these types using the
     28 * functions defined in the public header files.
     29 *
     30 * An instance of an abstract type defined in this file is called an "object"
     31 * here, although C does not have real support for objects.
     32 *
     33 * Because C does not typically have automatic garbage collection, the caller
     34 * is expected to release the reference to any object that they create or that
     35 * is returned to them by a libpkix function. The caller should do this by
     36 * using the PKIX_PL_Object_DecRef function. Note that the caller should not
     37 * release the reference to an object if the object has been passed to a
     38 * libpkix function and that function has not returned.
     39 *
     40 * Please refer to libpkix Programmer's Guide for more details.
     41 */
     42 
     43 /* Version
     44 *
     45 * These macros specify the major and minor version of the libpkix API defined
     46 * by this header file.
     47 */
     48 
     49 #define PKIX_MAJOR_VERSION              ((PKIX_UInt32) 0)
     50 #define PKIX_MINOR_VERSION              ((PKIX_UInt32) 3)
     51 
     52 /* Maximum minor version
     53 *
     54 * This macro is used to specify that the caller wants the largest minor
     55 * version available.
     56 */
     57 
     58 #define PKIX_MAX_MINOR_VERSION          ((PKIX_UInt32) 4000000000)
     59 
     60 /* Define Cert Store type for database access */
     61 #define PKIX_STORE_TYPE_NONE            0
     62 #define PKIX_STORE_TYPE_PK11            1
     63 
     64 /* Portable Code (PC) data types
     65 *
     66 * These types are used to perform the primary operations of this library:
     67 * building and validating chains of X.509 certificates.
     68 */
     69 
     70 typedef struct PKIX_ErrorStruct PKIX_Error;
     71 typedef struct PKIX_ProcessingParamsStruct PKIX_ProcessingParams;
     72 typedef struct PKIX_ValidateParamsStruct PKIX_ValidateParams;
     73 typedef struct PKIX_ValidateResultStruct PKIX_ValidateResult;
     74 typedef struct PKIX_ResourceLimitsStruct PKIX_ResourceLimits;
     75 typedef struct PKIX_BuildResultStruct PKIX_BuildResult;
     76 typedef struct PKIX_CertStoreStruct PKIX_CertStore;
     77 typedef struct PKIX_CertChainCheckerStruct PKIX_CertChainChecker;
     78 typedef struct PKIX_RevocationCheckerStruct PKIX_RevocationChecker;
     79 typedef struct PKIX_CertSelectorStruct PKIX_CertSelector;
     80 typedef struct PKIX_CRLSelectorStruct PKIX_CRLSelector;
     81 typedef struct PKIX_ComCertSelParamsStruct PKIX_ComCertSelParams;
     82 typedef struct PKIX_ComCRLSelParamsStruct PKIX_ComCRLSelParams;
     83 typedef struct PKIX_TrustAnchorStruct PKIX_TrustAnchor;
     84 typedef struct PKIX_PolicyNodeStruct PKIX_PolicyNode;
     85 typedef struct PKIX_LoggerStruct PKIX_Logger;
     86 typedef struct PKIX_ListStruct PKIX_List;
     87 typedef struct PKIX_ForwardBuilderStateStruct PKIX_ForwardBuilderState;
     88 typedef struct PKIX_DefaultRevocationCheckerStruct
     89                        PKIX_DefaultRevocationChecker;
     90 typedef struct PKIX_VerifyNodeStruct PKIX_VerifyNode;
     91 
     92 /* Portability Layer (PL) data types
     93 *
     94 * These types are used are used as portable data types that are defined
     95 * consistently across platforms
     96 */
     97 
     98 typedef struct PKIX_PL_NssContextStruct PKIX_PL_NssContext;
     99 typedef struct PKIX_PL_ObjectStruct PKIX_PL_Object;
    100 typedef struct PKIX_PL_ByteArrayStruct PKIX_PL_ByteArray;
    101 typedef struct PKIX_PL_HashTableStruct PKIX_PL_HashTable;
    102 typedef struct PKIX_PL_MutexStruct PKIX_PL_Mutex;
    103 typedef struct PKIX_PL_RWLockStruct PKIX_PL_RWLock;
    104 typedef struct PKIX_PL_MonitorLockStruct PKIX_PL_MonitorLock;
    105 typedef struct PKIX_PL_BigIntStruct PKIX_PL_BigInt;
    106 typedef struct PKIX_PL_StringStruct PKIX_PL_String;
    107 typedef struct PKIX_PL_OIDStruct PKIX_PL_OID;
    108 typedef struct PKIX_PL_CertStruct PKIX_PL_Cert;
    109 typedef struct PKIX_PL_GeneralNameStruct PKIX_PL_GeneralName;
    110 typedef struct PKIX_PL_X500NameStruct PKIX_PL_X500Name;
    111 typedef struct PKIX_PL_PublicKeyStruct PKIX_PL_PublicKey;
    112 typedef struct PKIX_PL_DateStruct PKIX_PL_Date;
    113 typedef struct PKIX_PL_CertNameConstraintsStruct PKIX_PL_CertNameConstraints;
    114 typedef struct PKIX_PL_CertBasicConstraintsStruct PKIX_PL_CertBasicConstraints;
    115 typedef struct PKIX_PL_CertPoliciesStruct PKIX_PL_CertPolicies;
    116 typedef struct PKIX_PL_CertPolicyInfoStruct PKIX_PL_CertPolicyInfo;
    117 typedef struct PKIX_PL_CertPolicyQualifierStruct PKIX_PL_CertPolicyQualifier;
    118 typedef struct PKIX_PL_CertPolicyMapStruct PKIX_PL_CertPolicyMap;
    119 typedef struct PKIX_PL_CRLStruct PKIX_PL_CRL;
    120 typedef struct PKIX_PL_CRLEntryStruct PKIX_PL_CRLEntry;
    121 typedef struct PKIX_PL_CollectionCertStoreStruct PKIX_PL_CollectionCertStore;
    122 typedef struct PKIX_PL_CollectionCertStoreContext
    123                        PKIX_PL_CollectionCertStoreContext;
    124 typedef struct PKIX_PL_LdapCertStoreContext PKIX_PL_LdapCertStoreContext;
    125 typedef struct PKIX_PL_LdapRequestStruct PKIX_PL_LdapRequest;
    126 typedef struct PKIX_PL_LdapResponseStruct PKIX_PL_LdapResponse;
    127 typedef struct PKIX_PL_LdapDefaultClientStruct PKIX_PL_LdapDefaultClient;
    128 typedef struct PKIX_PL_SocketStruct PKIX_PL_Socket;
    129 typedef struct PKIX_PL_InfoAccessStruct PKIX_PL_InfoAccess;
    130 typedef struct PKIX_PL_AIAMgrStruct PKIX_PL_AIAMgr;
    131 typedef struct PKIX_PL_OcspCertIDStruct PKIX_PL_OcspCertID;
    132 typedef struct PKIX_PL_OcspRequestStruct PKIX_PL_OcspRequest;
    133 typedef struct PKIX_PL_OcspResponseStruct PKIX_PL_OcspResponse;
    134 typedef struct PKIX_PL_HttpClientStruct PKIX_PL_HttpClient;
    135 typedef struct PKIX_PL_HttpDefaultClientStruct PKIX_PL_HttpDefaultClient;
    136 typedef struct PKIX_PL_HttpCertStoreContextStruct PKIX_PL_HttpCertStoreContext;
    137 
    138 /* Primitive types
    139 *
    140 * In order to guarantee desired behavior as well as platform-independence, we
    141 * typedef these types depending on the platform. XXX This needs more work!
    142 */
    143 
    144 /* XXX Try compiling these files (and maybe the whole libpkix-nss) on Win32.
    145 * We don't know what type is at least 32 bits long. ISO C probably requires
    146 * at least 32 bits for long. we could default to that and only list platforms
    147 * where that's not true.
    148 *
    149 * #elif
    150 * #error
    151 * #endif
    152 */
    153 
    154 /* currently, int is 32 bits on all our supported platforms */
    155 
    156 typedef unsigned int PKIX_UInt32;
    157 typedef int PKIX_Int32;
    158 
    159 typedef int PKIX_Boolean;
    160 
    161 /* Object Types
    162 *
    163 * Every reference-counted PKIX_PL_Object is associated with an integer type.
    164 */
    165 #define PKIX_TYPES \
    166    TYPEMACRO(AIAMGR), \
    167    TYPEMACRO(BASICCONSTRAINTSCHECKERSTATE), \
    168    TYPEMACRO(BIGINT), \
    169    TYPEMACRO(BUILDRESULT), \
    170    TYPEMACRO(BYTEARRAY), \
    171    TYPEMACRO(CERT), \
    172    TYPEMACRO(CERTBASICCONSTRAINTS), \
    173    TYPEMACRO(CERTCHAINCHECKER), \
    174    TYPEMACRO(CERTNAMECONSTRAINTS), \
    175    TYPEMACRO(CERTNAMECONSTRAINTSCHECKERSTATE), \
    176    TYPEMACRO(CERTPOLICYCHECKERSTATE), \
    177    TYPEMACRO(CERTPOLICYINFO), \
    178    TYPEMACRO(CERTPOLICYMAP), \
    179    TYPEMACRO(CERTPOLICYNODE), \
    180    TYPEMACRO(CERTPOLICYQUALIFIER), \
    181    TYPEMACRO(CERTSELECTOR), \
    182    TYPEMACRO(CERTSTORE), \
    183    TYPEMACRO(COLLECTIONCERTSTORECONTEXT), \
    184    TYPEMACRO(COMCERTSELPARAMS), \
    185    TYPEMACRO(COMCRLSELPARAMS), \
    186    TYPEMACRO(CRL), \
    187    TYPEMACRO(CRLDP), \
    188    TYPEMACRO(CRLENTRY), \
    189    TYPEMACRO(CRLSELECTOR), \
    190    TYPEMACRO(DATE), \
    191    TYPEMACRO(CRLCHECKER), \
    192    TYPEMACRO(EKUCHECKER), \
    193    TYPEMACRO(ERROR), \
    194    TYPEMACRO(FORWARDBUILDERSTATE), \
    195    TYPEMACRO(GENERALNAME), \
    196    TYPEMACRO(HASHTABLE), \
    197    TYPEMACRO(HTTPCERTSTORECONTEXT), \
    198    TYPEMACRO(HTTPDEFAULTCLIENT), \
    199    TYPEMACRO(INFOACCESS), \
    200    TYPEMACRO(LDAPDEFAULTCLIENT), \
    201    TYPEMACRO(LDAPREQUEST), \
    202    TYPEMACRO(LDAPRESPONSE), \
    203    TYPEMACRO(LIST), \
    204    TYPEMACRO(LOGGER), \
    205    TYPEMACRO(MONITORLOCK), \
    206    TYPEMACRO(MUTEX), \
    207    TYPEMACRO(OBJECT), \
    208    TYPEMACRO(OCSPCERTID), \
    209    TYPEMACRO(OCSPCHECKER), \
    210    TYPEMACRO(OCSPREQUEST), \
    211    TYPEMACRO(OCSPRESPONSE), \
    212    TYPEMACRO(OID), \
    213    TYPEMACRO(REVOCATIONCHECKER), \
    214    TYPEMACRO(PROCESSINGPARAMS), \
    215    TYPEMACRO(PUBLICKEY), \
    216    TYPEMACRO(RESOURCELIMITS), \
    217    TYPEMACRO(RWLOCK), \
    218    TYPEMACRO(SIGNATURECHECKERSTATE), \
    219    TYPEMACRO(SOCKET), \
    220    TYPEMACRO(STRING), \
    221    TYPEMACRO(TARGETCERTCHECKERSTATE), \
    222    TYPEMACRO(TRUSTANCHOR), \
    223    TYPEMACRO(VALIDATEPARAMS), \
    224    TYPEMACRO(VALIDATERESULT), \
    225    TYPEMACRO(VERIFYNODE), \
    226    TYPEMACRO(X500NAME)
    227 
    228 #define TYPEMACRO(type) PKIX_ ## type ## _TYPE
    229 
    230 typedef enum {     /* Now invoke all those TYPEMACROs to assign the numbers */
    231   PKIX_TYPES,
    232   PKIX_NUMTYPES   /* This gets PKIX_NUMTYPES defined as the total number */
    233 } PKIX_TYPENUM;
    234 
    235 
    236 #ifdef PKIX_USER_OBJECT_TYPE
    237 
    238 /* User Define Object Types
    239 *
    240 * User may define their own object types offset from PKIX_USER_OBJECT_TYPE
    241 */
    242 #define PKIX_USER_OBJECT_TYPEBASE 1000
    243 
    244 #endif /* PKIX_USER_OBJECT_TYPE */
    245 
    246 /* Error Codes
    247 *
    248 * This list is used to define a set of PKIX_Error exception class numbers.
    249 * ERRMACRO is redefined to produce a corresponding set of
    250 * strings in the table "const char *PKIX_ERRORCLASSNAMES[PKIX_NUMERRORCLASSES]" in
    251 * pkix_error.c. For example, since the fifth ERRMACRO entry is MUTEX, then
    252 * PKIX_MUTEX_ERROR is defined in pkixt.h as 4, and PKIX_ERRORCLASSNAMES[4] is
    253 * initialized in pkix_error.c with the value "MUTEX".
    254 */
    255 #define PKIX_ERRORCLASSES \
    256   ERRMACRO(AIAMGR), \
    257   ERRMACRO(BASICCONSTRAINTSCHECKERSTATE), \
    258   ERRMACRO(BIGINT), \
    259   ERRMACRO(BUILD), \
    260   ERRMACRO(BUILDRESULT), \
    261   ERRMACRO(BYTEARRAY), \
    262   ERRMACRO(CERT), \
    263   ERRMACRO(CERTBASICCONSTRAINTS), \
    264   ERRMACRO(CERTCHAINCHECKER), \
    265   ERRMACRO(CERTNAMECONSTRAINTS), \
    266   ERRMACRO(CERTNAMECONSTRAINTSCHECKERSTATE), \
    267   ERRMACRO(CERTPOLICYCHECKERSTATE), \
    268   ERRMACRO(CERTPOLICYINFO), \
    269   ERRMACRO(CERTPOLICYMAP), \
    270   ERRMACRO(CERTPOLICYNODE), \
    271   ERRMACRO(CERTPOLICYQUALIFIER), \
    272   ERRMACRO(CERTSELECTOR), \
    273   ERRMACRO(CERTSTORE), \
    274   ERRMACRO(CERTVFYPKIX), \
    275   ERRMACRO(COLLECTIONCERTSTORECONTEXT), \
    276   ERRMACRO(COMCERTSELPARAMS), \
    277   ERRMACRO(COMCRLSELPARAMS), \
    278   ERRMACRO(CONTEXT), \
    279   ERRMACRO(CRL), \
    280   ERRMACRO(CRLDP), \
    281   ERRMACRO(CRLENTRY), \
    282   ERRMACRO(CRLSELECTOR), \
    283   ERRMACRO(CRLCHECKER), \
    284   ERRMACRO(DATE), \
    285   ERRMACRO(EKUCHECKER), \
    286   ERRMACRO(ERROR), \
    287   ERRMACRO(FATAL), \
    288   ERRMACRO(FORWARDBUILDERSTATE), \
    289   ERRMACRO(GENERALNAME), \
    290   ERRMACRO(HASHTABLE), \
    291   ERRMACRO(HTTPCERTSTORECONTEXT), \
    292   ERRMACRO(HTTPDEFAULTCLIENT), \
    293   ERRMACRO(INFOACCESS), \
    294   ERRMACRO(LDAPCLIENT), \
    295   ERRMACRO(LDAPDEFAULTCLIENT), \
    296   ERRMACRO(LDAPREQUEST), \
    297   ERRMACRO(LDAPRESPONSE), \
    298   ERRMACRO(LIFECYCLE), \
    299   ERRMACRO(LIST), \
    300   ERRMACRO(LOGGER), \
    301   ERRMACRO(MEM), \
    302   ERRMACRO(MONITORLOCK), \
    303   ERRMACRO(MUTEX), \
    304   ERRMACRO(OBJECT), \
    305   ERRMACRO(OCSPCERTID), \
    306   ERRMACRO(OCSPCHECKER), \
    307   ERRMACRO(OCSPREQUEST), \
    308   ERRMACRO(OCSPRESPONSE), \
    309   ERRMACRO(OID), \
    310   ERRMACRO(PROCESSINGPARAMS), \
    311   ERRMACRO(PUBLICKEY), \
    312   ERRMACRO(RESOURCELIMITS), \
    313   ERRMACRO(REVOCATIONMETHOD), \
    314   ERRMACRO(REVOCATIONCHECKER), \
    315   ERRMACRO(RWLOCK), \
    316   ERRMACRO(SIGNATURECHECKERSTATE), \
    317   ERRMACRO(SOCKET), \
    318   ERRMACRO(STRING), \
    319   ERRMACRO(TARGETCERTCHECKERSTATE), \
    320   ERRMACRO(TRUSTANCHOR), \
    321   ERRMACRO(USERDEFINEDMODULES), \
    322   ERRMACRO(VALIDATE), \
    323   ERRMACRO(VALIDATEPARAMS), \
    324   ERRMACRO(VALIDATERESULT), \
    325   ERRMACRO(VERIFYNODE), \
    326   ERRMACRO(X500NAME)
    327 
    328 #define ERRMACRO(type) PKIX_ ## type ## _ERROR
    329 
    330 typedef enum {     /* Now invoke all those ERRMACROs to assign the numbers */
    331   PKIX_ERRORCLASSES,
    332   PKIX_NUMERRORCLASSES   /* This gets PKIX_NUMERRORCLASSES defined as the total number */
    333 } PKIX_ERRORCLASS;
    334 
    335 /* Now define error strings (for internationalization) */
    336 
    337 #define PKIX_ERRORENTRY(name,desc,plerr) PKIX_ ## name
    338 
    339 /* Define all the error numbers */
    340 typedef enum    {
    341 #include "pkix_errorstrings.h"
    342 , PKIX_NUMERRORCODES
    343 } PKIX_ERRORCODE;
    344 
    345 extern const char * const PKIX_ErrorText[];
    346 
    347 /* String Formats
    348 *
    349 * These formats specify supported encoding formats for Strings.
    350 */
    351 
    352 #define PKIX_ESCASCII           0
    353 #define PKIX_UTF8               1
    354 #define PKIX_UTF16              2
    355 #define PKIX_UTF8_NULL_TERM     3
    356 #define PKIX_ESCASCII_DEBUG     4
    357 
    358 /* Name Types
    359 *
    360 * These types specify supported formats for GeneralNames.
    361 */
    362 
    363 #define PKIX_OTHER_NAME         1
    364 #define PKIX_RFC822_NAME        2
    365 #define PKIX_DNS_NAME           3
    366 #define PKIX_X400_ADDRESS       4
    367 #define PKIX_DIRECTORY_NAME     5
    368 #define PKIX_EDIPARTY_NAME      6
    369 #define PKIX_URI_NAME           7
    370 #define PKIX_IP_NAME            8
    371 #define PKIX_OID_NAME           9
    372 
    373 /* Key Usages
    374 *
    375 * These types specify supported Key Usages
    376 */
    377 
    378 #define PKIX_DIGITAL_SIGNATURE  0x001
    379 #define PKIX_NON_REPUDIATION    0x002
    380 #define PKIX_KEY_ENCIPHERMENT   0x004
    381 #define PKIX_DATA_ENCIPHERMENT  0x008
    382 #define PKIX_KEY_AGREEMENT      0x010
    383 #define PKIX_KEY_CERT_SIGN      0x020
    384 #define PKIX_CRL_SIGN           0x040
    385 #define PKIX_ENCIPHER_ONLY      0x080
    386 #define PKIX_DECIPHER_ONLY      0x100
    387 
    388 /* Reason Flags
    389 *
    390 * These macros specify supported Reason Flags
    391 */
    392 
    393 #define PKIX_UNUSED                     0x001
    394 #define PKIX_KEY_COMPROMISE             0x002
    395 #define PKIX_CA_COMPROMISE              0x004
    396 #define PKIX_AFFILIATION_CHANGED        0x008
    397 #define PKIX_SUPERSEDED                 0x010
    398 #define PKIX_CESSATION_OF_OPERATION     0x020
    399 #define PKIX_CERTIFICATE_HOLD           0x040
    400 #define PKIX_PRIVILEGE_WITHDRAWN        0x080
    401 #define PKIX_AA_COMPROMISE              0x100
    402 
    403 /* Boolean values
    404 *
    405 * These macros specify the Boolean values of TRUE and FALSE
    406 * XXX Is it the case that any non-zero value is actually considered TRUE
    407 * and this is just a convenient mnemonic macro?
    408 */
    409 
    410 #define PKIX_TRUE                       ((PKIX_Boolean) 1)
    411 #define PKIX_FALSE                      ((PKIX_Boolean) 0)
    412 
    413 /*
    414 * Define constants for basic constraints selector
    415 *      (see comments in pkix_certsel.h)
    416 */
    417 
    418 #define PKIX_CERTSEL_ENDENTITY_MIN_PATHLENGTH (-2)
    419 #define PKIX_CERTSEL_ALL_MATCH_MIN_PATHLENGTH (-1)
    420 
    421 /*
    422 * PKIX_ALLOC_ERROR is a special error object hard-coded into the pkix_error.o
    423 * object file. It is thrown if system memory cannot be allocated or may be
    424 * thrown for other unrecoverable errors. PKIX_ALLOC_ERROR is immutable.
    425 * IncRef, DecRef and all Settor functions cannot be called.
    426 * XXX Does anyone actually need to know about this?
    427 * XXX Why no DecRef? Would be good to handle it the same.
    428 */
    429 
    430 PKIX_Error* PKIX_ALLOC_ERROR(void);
    431 
    432 /*
    433 * In a CertBasicConstraints extension, if the CA flag is set,
    434 * indicating the certificate refers to a Certification
    435 * Authority, then the pathLen field indicates how many intermediate
    436 * certificates (not counting self-signed ones) can exist in a valid
    437 * chain following this certificate. If the pathLen has the value
    438 * of this constant, then the length of the chain is unlimited
    439 */
    440 #define PKIX_UNLIMITED_PATH_CONSTRAINT ((PKIX_Int32) -1)
    441 
    442 /*
    443 * Define Certificate Extension hard-coded OID's
    444 */
    445 #define PKIX_UNKNOWN_OID                       SEC_OID_UNKNOWN
    446 #define PKIX_CERTKEYUSAGE_OID                  SEC_OID_X509_KEY_USAGE
    447 #define PKIX_CERTSUBJALTNAME_OID               SEC_OID_X509_SUBJECT_ALT_NAME
    448 #define PKIX_BASICCONSTRAINTS_OID              SEC_OID_X509_BASIC_CONSTRAINTS
    449 #define PKIX_CRLREASONCODE_OID                 SEC_OID_X509_REASON_CODE
    450 #define PKIX_NAMECONSTRAINTS_OID               SEC_OID_X509_NAME_CONSTRAINTS
    451 #define PKIX_CERTIFICATEPOLICIES_OID           SEC_OID_X509_CERTIFICATE_POLICIES
    452 #define PKIX_CERTIFICATEPOLICIES_ANYPOLICY_OID SEC_OID_X509_ANY_POLICY
    453 #define PKIX_POLICYMAPPINGS_OID                SEC_OID_X509_POLICY_MAPPINGS
    454 #define PKIX_POLICYCONSTRAINTS_OID             SEC_OID_X509_POLICY_CONSTRAINTS
    455 #define PKIX_EXTENDEDKEYUSAGE_OID              SEC_OID_X509_EXT_KEY_USAGE
    456 #define PKIX_INHIBITANYPOLICY_OID              SEC_OID_X509_INHIBIT_ANY_POLICY 
    457 #define PKIX_NSCERTTYPE_OID                    SEC_OID_NS_CERT_EXT_CERT_TYPE
    458 #define PKIX_KEY_USAGE_SERVER_AUTH_OID         SEC_OID_EXT_KEY_USAGE_SERVER_AUTH
    459 #define PKIX_KEY_USAGE_CLIENT_AUTH_OID         SEC_OID_EXT_KEY_USAGE_CLIENT_AUTH
    460 #define PKIX_KEY_USAGE_CODE_SIGN_OID           SEC_OID_EXT_KEY_USAGE_CODE_SIGN
    461 #define PKIX_KEY_USAGE_EMAIL_PROTECT_OID       SEC_OID_EXT_KEY_USAGE_EMAIL_PROTECT
    462 #define PKIX_KEY_USAGE_TIME_STAMP_OID          SEC_OID_EXT_KEY_USAGE_TIME_STAMP
    463 #define PKIX_KEY_USAGE_OCSP_RESPONDER_OID      SEC_OID_OCSP_RESPONDER
    464 
    465 
    466 /* Available revocation method types. */
    467 typedef enum PKIX_RevocationMethodTypeEnum {
    468    PKIX_RevocationMethod_CRL = 0,
    469    PKIX_RevocationMethod_OCSP,
    470    PKIX_RevocationMethod_MAX
    471 } PKIX_RevocationMethodType;
    472 
    473 /* A set of statuses revocation checker operates on */
    474 typedef enum PKIX_RevocationStatusEnum {
    475    PKIX_RevStatus_NoInfo = 0,
    476    PKIX_RevStatus_Revoked,
    477    PKIX_RevStatus_Success
    478 } PKIX_RevocationStatus;
    479 
    480 
    481 #ifdef __cplusplus
    482 }
    483 #endif
    484 
    485 #endif /* _PKIXT_H */