security/nss/lib/libpkix/include/pkixt.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rwxr-xr-x

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

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

mercurial