Thu, 22 Jan 2015 13:21:57 +0100
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 */ |