tor-browser

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

pkix_tools.h (47072B)


      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_tools.h
      6 *
      7 * Header for Utility Functions and Macros
      8 *
      9 */
     10 
     11 #ifndef _PKIX_TOOLS_H
     12 #define _PKIX_TOOLS_H
     13 
     14 #include "pkix.h"
     15 #include <stddef.h>
     16 #include <stdio.h>
     17 #include "secport.h"
     18 #include "prlong.h"
     19 
     20 /* private PKIX system headers */
     21 #include "pkix_basicconstraintschecker.h"
     22 #include "pkix_buildresult.h"
     23 #include "pkix_certchainchecker.h"
     24 #include "pkix_certselector.h"
     25 #include "pkix_comcertselparams.h"
     26 #include "pkix_comcrlselparams.h"
     27 #include "pkix_crlselector.h"
     28 #include "pkix_error.h"
     29 #include "pkix_expirationchecker.h"
     30 #include "pkix_list.h"
     31 #include "pkix_logger.h"
     32 #include "pkix_namechainingchecker.h"
     33 #include "pkix_nameconstraintschecker.h"
     34 #include "pkix_policychecker.h"
     35 #include "pkix_policynode.h"
     36 #include "pkix_procparams.h"
     37 #include "pkix_resourcelimits.h"
     38 #include "pkix_revocationmethod.h"
     39 #include "pkix_revocationchecker.h"
     40 #include "pkix_crlchecker.h"
     41 #include "pkix_ocspchecker.h"
     42 #include "pkix_signaturechecker.h"
     43 #include "pkix_store.h"
     44 #include "pkix_targetcertchecker.h"
     45 #include "pkix_validate.h"
     46 #include "pkix_valresult.h"
     47 #include "pkix_verifynode.h"
     48 
     49 #ifdef __cplusplus
     50 extern "C" {
     51 #endif
     52 
     53 typedef struct pkixStdVarsStr {
     54    const char        *aMyFuncName;
     55    PKIX_Error        *aPkixErrorResult;
     56    PKIX_Error        *aPkixTempResult;
     57    PKIX_Error        *aPkixReturnResult;
     58    PKIX_ERRORCODE     aPkixErrorCode;
     59    PKIX_Boolean       aPkixErrorReceived;
     60    PKIX_Boolean       aPkixTempErrorReceived;
     61    PKIX_ERRORCLASS    aPkixErrorClass;
     62    PKIX_UInt32        aPkixType;
     63    PKIX_PL_Object    *aLockedObject;
     64    PKIX_List         *aPkixErrorList;
     65 } PKIX_StdVars;
     66 
     67 #ifdef PKIX_STDVARS_POINTER
     68 #define myFuncName                  stdVars->aMyFuncName
     69 #define pkixErrorResult             stdVars->aPkixErrorResult
     70 #define pkixTempResult              stdVars->aPkixTempResult
     71 #define pkixReturnResult            stdVars->aPkixReturnResult
     72 #define pkixErrorCode               stdVars->aPkixErrorCode
     73 #define pkixErrorReceived           stdVars->aPkixErrorReceived
     74 #define pkixTempErrorReceived       stdVars->aPkixTempErrorReceived 
     75 #define pkixErrorClass              stdVars->aPkixErrorClass
     76 #define pkixType                    stdVars->aPkixType
     77 #define lockedObject                stdVars->aLockedObject
     78 #define pkixErrorList               stdVars->aPkixErrorList
     79 #define stdVarsPtr                  stdVars
     80 #else
     81 #define myFuncName                  stdVars.aMyFuncName
     82 #define pkixErrorResult             stdVars.aPkixErrorResult
     83 #define pkixTempResult              stdVars.aPkixTempResult
     84 #define pkixReturnResult            stdVars.aPkixReturnResult
     85 #define pkixErrorCode               stdVars.aPkixErrorCode
     86 #define pkixErrorReceived           stdVars.aPkixErrorReceived
     87 #define pkixTempErrorReceived       stdVars.aPkixTempErrorReceived 
     88 #define pkixErrorClass              stdVars.aPkixErrorClass
     89 #define pkixType                    stdVars.aPkixType
     90 #define lockedObject                stdVars.aLockedObject
     91 #define pkixErrorList               stdVars.aPkixErrorList
     92 #define stdVarsPtr                  &stdVars
     93 #endif
     94 
     95 extern PKIX_Error * PKIX_DoReturn(PKIX_StdVars * stdVars, 
     96                                  PKIX_ERRORCLASS errClass, 
     97                                  PKIX_Boolean doLogger,
     98                                  void * plContext);
     99 
    100 extern PKIX_Error * PKIX_DoThrow(PKIX_StdVars * stdVars, 
    101                                 PKIX_ERRORCLASS errClass, 
    102                                 PKIX_ERRORCODE errCode,
    103                                 PKIX_ERRORCLASS overrideClass, 
    104                                 void * plContext);
    105 
    106 extern void PKIX_DoAddError(PKIX_StdVars * stdVars, 
    107                            PKIX_Error * error,
    108                            void * plContext);
    109 
    110 #ifdef PKIX_OBJECT_LEAK_TEST
    111 extern PKIX_Error * pkix_CheckForGeneratedError(PKIX_StdVars * stdVars, 
    112                                                PKIX_ERRORCLASS errClass, 
    113                                                char * fnName,
    114                                                PKIX_Boolean *errorStateSet,
    115                                                void * plContext);
    116 #endif /* PKIX_OBJECT_LEAK_TEST */
    117 
    118 extern const PKIX_StdVars zeroStdVars;
    119 
    120 extern PRLogModuleInfo *pkixLog;
    121 
    122 /*
    123 * UTILITY MACROS
    124 * Documentation for these common utility macros can be found in the
    125 * Implementation Guidelines document (Section 4.3)
    126 *
    127 * In general, macros with multiple statements (or a single "if" statement)
    128 * use the "do {<body>} while (0)" technique in order to convert the multiple
    129 * statements into one statement, thus avoiding the dangling else problem.
    130 * For macros which ALWAYS exit with a "return" or "goto", there is no
    131 * need to use this technique (and it yields compiler warnings of "statement
    132 * not reached"), so we just use "{<body>}" to group the statements together.
    133 */
    134 
    135 #if !defined (PKIX_OBJECT_LEAK_TEST)
    136 
    137 #define PKIX_STD_VARS(funcName) \
    138    static const char cMyFuncName[] = {funcName}; \
    139    PKIX_StdVars      stdVars = zeroStdVars; \
    140    myFuncName = cMyFuncName
    141 
    142 
    143 #else /* PKIX_OBJECT_LEAK_TEST */
    144 
    145 extern char **fnStackNameArr;
    146 extern PKIX_UInt32 *fnStackInvCountArr;
    147 extern PKIX_UInt32  stackPosition;
    148 extern PKIX_Boolean noErrorState;
    149 extern PKIX_Boolean errorGenerated;
    150 extern PKIX_Boolean runningLeakTest;
    151 extern PLHashTable *fnInvTable;
    152 extern PKIX_UInt32 testStartFnStackPosition;
    153 extern char *errorFnStackString;
    154 
    155 extern PLHashNumber PR_CALLBACK pkix_ErrorGen_Hash (const void *key);
    156 
    157 #define PKIX_STD_VARS(funcName) \
    158    static const char cMyFuncName[] = {funcName}; \
    159    PKIX_StdVars      stdVars = zeroStdVars; \
    160    PKIX_Boolean      errorSetFlag = PKIX_FALSE; \
    161    myFuncName = cMyFuncName; \
    162    if (runningLeakTest) { \
    163        if (fnStackNameArr) { \
    164            fnStackInvCountArr[stackPosition] += 1; \
    165            stackPosition += 1; \
    166            fnStackInvCountArr[stackPosition] = 0; \
    167            fnStackNameArr[stackPosition] = (char*)myFuncName; \
    168            fnStackNameArr[stackPosition + 1] = NULL; \
    169            PR_LOG(pkixLog, 5, \
    170                    ("%s%*s+> %s(%d) - %s\n", (errorGenerated ? "*" : " "), \
    171                             stackPosition, " ", fnStackNameArr[stackPosition], \
    172                             stackPosition, myFuncName)); \
    173        } \
    174        do { \
    175            pkixErrorResult = pkix_CheckForGeneratedError(&stdVars, PKIX_MEM_ERROR, \
    176                                                          funcName, &errorSetFlag, \
    177                                                          plContext); \
    178            if (pkixErrorResult) { \
    179                 PR_LOG(pkixLog, 5, \
    180                    ("%s%*s<- %s(%d) - %s\n", (errorGenerated ? "*" : " "), \
    181                              stackPosition, " ", fnStackNameArr[stackPosition], \
    182                              stackPosition, myFuncName)); \
    183                 fnStackNameArr[stackPosition--] = NULL; \
    184                 if (errorSetFlag) { \
    185                       noErrorState = (noErrorState) ? PKIX_FALSE : PKIX_TRUE; \
    186                 } \
    187                 return pkixErrorResult; \
    188            } \
    189        } while (0); \
    190    }
    191 #endif /* PKIX_OBJECT_LEAK_TEST */
    192 
    193 #ifdef DEBUG
    194 #define _PKIX_DEBUG_TRACE(cond, prefix, level) \
    195    do { \
    196 if (cond) { \
    197     pkix_Logger_Check(pkixLoggersDebugTrace, myFuncName, \
    198                       prefix, pkixType, level, plContext); \
    199 } \
    200    } while (0)
    201 #else
    202 #define _PKIX_DEBUG_TRACE(cond, prefix, level) 
    203 #endif
    204 
    205 #define _PKIX_LOG_ERROR(code, level) \
    206    { \
    207 if (pkixLoggersErrors) { \
    208     pkix_Logger_CheckWithCode(pkixLoggersErrors, code, \
    209                       NULL, pkixType, level, plContext); \
    210 } \
    211    }
    212 
    213 #define PKIX_ENTER(type, funcName) \
    214    PKIX_STD_VARS(funcName); \
    215    pkixType = PKIX_ ## type ## _ERROR; \
    216    PKIX_DEBUG_ENTER(type); \
    217    _PKIX_DEBUG_TRACE(pkixLoggersDebugTrace, ">>>", PKIX_LOGGER_LEVEL_TRACE);
    218 
    219 #define PKIX_ENTER_NO_LOGGER(type, funcName) \
    220    PKIX_STD_VARS(funcName); \
    221    pkixType = PKIX_ ## type ## _ERROR; \
    222    PKIX_DEBUG_ENTER(type);
    223 
    224 #define PKIX_DEBUG_ENTER(type) \
    225    PKIX_ ## type ## _DEBUG_ARG("( Entering %s).\n", myFuncName)
    226 
    227 #define PKIX_DEBUG_EXIT(type) \
    228    PKIX_ ## type ## _DEBUG_ARG("( Exiting %s).\n", myFuncName)
    229 
    230 #define PKIX_OBJECT_UNLOCK(obj) \
    231    do { \
    232 if (obj && lockedObject == (PKIX_PL_Object *)(obj)){ \
    233     pkixTempResult = \
    234 	    PKIX_PL_Object_Unlock \
    235 	    ((PKIX_PL_Object *)(obj), plContext); \
    236     if (pkixTempResult) { \
    237 	PKIX_DoAddError(stdVarsPtr, pkixTempResult, plContext); \
    238 	pkixTempResult = NULL; \
    239     } \
    240     lockedObject = NULL; \
    241 } else { \
    242     PORT_Assert(lockedObject == NULL); \
    243 } \
    244    } while (0)
    245 
    246 #define PKIX_DECREF(obj) \
    247    do { \
    248 if (obj){ \
    249     pkixTempResult = PKIX_PL_Object_DecRef \
    250 		((PKIX_PL_Object *)(obj), plContext); \
    251     if (pkixTempResult) { \
    252 	PKIX_DoAddError(stdVarsPtr, pkixTempResult, plContext); \
    253 	pkixTempResult = NULL; \
    254     } \
    255     obj = NULL; \
    256 } \
    257    } while (0)
    258 
    259 #define PKIX_THROW(type, descNum) \
    260    return PKIX_DoThrow(&stdVars, (PKIX_ ## type ## _ERROR), descNum, \
    261                        pkixErrorClass, plContext);
    262 
    263 #ifdef PKIX_OBJECT_LEAK_TEST
    264 #define PKIX_RETURN(type) \
    265    if (runningLeakTest && fnStackNameArr) { \
    266        PR_LOG(pkixLog, 5, \
    267               ("%s%*s<- %s(%d) - %s\n", (errorGenerated ? "*" : " "), \
    268               stackPosition, " ", fnStackNameArr[stackPosition], \
    269               stackPosition, myFuncName)); \
    270        fnStackNameArr[stackPosition--] = NULL; \
    271        if (errorSetFlag) noErrorState = (noErrorState) ? PKIX_FALSE : PKIX_TRUE; \
    272    } \
    273    return PKIX_DoReturn(&stdVars, (PKIX_ ## type ## _ERROR), PKIX_TRUE, plContext);
    274 #else
    275 #define PKIX_RETURN(type) \
    276    return PKIX_DoReturn(&stdVars, (PKIX_ ## type ## _ERROR), PKIX_TRUE, plContext);
    277 #endif /* PKIX_OBJECT_LEAK_TEST */
    278 
    279 
    280 #if defined(DEBUG) && !defined(DEBUG_nb95248)
    281 #define PKIX_RETURN_NO_LOGGER(type) \
    282    { \
    283 PKIX_OBJECT_UNLOCK(lockedObject); \
    284 if ((pkixErrorReceived) || (pkixErrorResult) || pkixErrorList) \
    285     PKIX_THROW(type, pkixErrorCode); \
    286 PKIX_DEBUG_EXIT(type); \
    287 return NULL; \
    288    }
    289 #else
    290 #define PKIX_RETURN_NO_LOGGER(type) \
    291    return PKIX_DoReturn(&stdVars, (PKIX_ ## type ## _ERROR), PKIX_FALSE, plContext);
    292 #endif
    293 
    294 /* disable to disable ;-) */
    295 /* #define WANT_TRACE_CHECK_FAILURES */
    296 
    297 #ifdef WANT_TRACE_CHECK_FAILURES
    298 #define TRACE_CHECK_FAILURE(what, errorstring) \
    299    if (pkixLog) { \
    300      PR_LOG(pkixLog, PR_LOG_DEBUG, \
    301        ("====> [%s] failed: %s\n", #what, errorstring)); \
    302    }
    303 #else
    304 #define TRACE_CHECK_FAILURE(what, errorstring)
    305 #endif
    306 
    307 #define PKIX_CHECK(func, descNum) \
    308    do { \
    309 pkixErrorResult = (func); \
    310 if (pkixErrorResult) { \
    311            TRACE_CHECK_FAILURE((func), PKIX_ErrorText[descNum]) \
    312     pkixErrorClass = pkixErrorResult->errClass; \
    313     pkixErrorCode = descNum; \
    314     goto cleanup; \
    315 } \
    316    } while (0)
    317 
    318 /* like PKIX_CHECK but without goto cleanup */
    319 #define PKIX_CHECK_NO_GOTO(func, descNum) \
    320    do { \
    321 pkixErrorResult = (func); \
    322 if (pkixErrorResult) { \
    323            TRACE_CHECK_FAILURE((func), PKIX_ErrorText[descNum]) \
    324     pkixErrorClass = pkixErrorResult->errClass; \
    325     pkixErrorCode = descNum; \
    326 } \
    327    } while (0)
    328 
    329 #define PKIX_CHECK_ONLY_FATAL(func, descNum) \
    330    do { \
    331 pkixTempErrorReceived = PKIX_FALSE; \
    332 pkixErrorResult = (func); \
    333 if (pkixErrorResult) { \
    334            TRACE_CHECK_FAILURE((func), PKIX_ErrorText[descNum]) \
    335     pkixTempErrorReceived = PKIX_TRUE; \
    336     pkixErrorClass = pkixErrorResult->errClass; \
    337            if (pkixErrorClass == PKIX_FATAL_ERROR) { \
    338          goto cleanup; \
    339     } \
    340     PKIX_DECREF(pkixErrorResult); \
    341 } \
    342    } while (0)
    343 
    344 #define PKIX_LOG_ERROR(descNum) \
    345    _PKIX_LOG_ERROR(descNum, PKIX_LOGGER_LEVEL_ERROR)
    346 
    347 #define PKIX_ERROR(descNum) \
    348    { \
    349 PKIX_LOG_ERROR(descNum) \
    350 pkixErrorReceived = PKIX_TRUE; \
    351 pkixErrorCode = descNum; \
    352 goto cleanup; \
    353    }
    354 
    355 #define PKIX_ERROR_ALLOC_ERROR() \
    356    { \
    357 PKIX_LOG_ERROR(PKIX_ALLOCERROR) \
    358 pkixErrorReceived = PKIX_TRUE; \
    359 pkixErrorResult = PKIX_ALLOC_ERROR(); \
    360 goto cleanup; \
    361    }
    362 
    363 #define PKIX_ERROR_FATAL(descNum) \
    364    { \
    365 pkixErrorReceived = PKIX_TRUE; \
    366 pkixErrorCode = descNum; \
    367 pkixErrorClass = PKIX_FATAL_ERROR; \
    368 _PKIX_LOG_ERROR(pkixErrorCode, PKIX_LOGGER_LEVEL_FATALERROR); \
    369 goto cleanup; \
    370    }
    371 
    372 #define PKIX_CHECK_FATAL(func, descNum) \
    373    do { \
    374 pkixErrorResult = (func); \
    375 if (pkixErrorResult) { \
    376                TRACE_CHECK_FAILURE((func), PKIX_ErrorText[descNum]) \
    377 	pkixErrorReceived = PKIX_TRUE; \
    378 	pkixErrorCode = descNum; \
    379 	pkixErrorClass = PKIX_FATAL_ERROR; \
    380 	_PKIX_LOG_ERROR(pkixErrorCode, PKIX_LOGGER_LEVEL_FATALERROR); \
    381 	goto fatal; \
    382 } \
    383    } while (0)
    384 
    385 #define PKIX_NULLCHECK_ONE(a) \
    386    do { \
    387 if ((a) == NULL){ \
    388     pkixErrorReceived = PKIX_TRUE; \
    389     pkixErrorCode = PKIX_NULLARGUMENT; \
    390     PKIX_RETURN(FATAL); \
    391 } \
    392    } while (0)
    393 
    394 #define PKIX_NULLCHECK_TWO(a, b) \
    395    do { \
    396 if (((a) == NULL) || ((b) == NULL)){ \
    397     pkixErrorReceived = PKIX_TRUE; \
    398     pkixErrorCode = PKIX_NULLARGUMENT; \
    399     PKIX_RETURN(FATAL); \
    400 } \
    401    } while (0)
    402 
    403 #define PKIX_NULLCHECK_THREE(a, b, c) \
    404    do { \
    405 if (((a) == NULL) || ((b) == NULL) || ((c) == NULL)){ \
    406     pkixErrorReceived = PKIX_TRUE; \
    407     pkixErrorCode = PKIX_NULLARGUMENT; \
    408     PKIX_RETURN(FATAL); \
    409 } \
    410    } while (0)
    411 
    412 #define PKIX_NULLCHECK_FOUR(a, b, c, d) \
    413    do { \
    414 if (((a) == NULL) || ((b) == NULL) || \
    415     ((c) == NULL) || ((d) == NULL)){ \
    416     pkixErrorReceived = PKIX_TRUE; \
    417     pkixErrorCode = PKIX_NULLARGUMENT; \
    418     PKIX_RETURN(FATAL); \
    419 } \
    420    } while (0)
    421 
    422 #define PKIX_OBJECT_LOCK(obj) \
    423    do { \
    424 if (obj) { \
    425     pkixTempResult = \
    426 	PKIX_PL_Object_Lock((PKIX_PL_Object*)(obj), plContext); \
    427     if (pkixTempResult) { \
    428 	PKIX_DoAddError(stdVarsPtr, pkixTempResult, plContext); \
    429 	pkixTempResult = NULL; \
    430 	pkixErrorCode = PKIX_OBJECTLOCKFAILED; \
    431 	goto cleanup; \
    432     } \
    433     lockedObject = (PKIX_PL_Object *)(obj); \
    434 } \
    435    } while (0)
    436 
    437 #define PKIX_ERROR_CREATE(type, descNum, error) \
    438    { \
    439 pkixTempResult = (PKIX_Error*)pkix_Throw \
    440 	(PKIX_ ## type ## _ERROR,  myFuncName, \
    441 	descNum, PKIX_ ## type ## _ERROR, pkixErrorResult, \
    442 	&error, plContext); \
    443 if (pkixTempResult) { \
    444     error = pkixTempResult; \
    445     pkixTempResult = NULL; \
    446 } \
    447    }
    448 	
    449 
    450 #define PKIX_ERROR_RECEIVED \
    451    (pkixErrorReceived || pkixErrorResult || pkixTempErrorReceived || \
    452     pkixErrorList)
    453 
    454 #define PKIX_INCREF(obj) \
    455    do { \
    456 if (obj){ \
    457     pkixTempResult = PKIX_PL_Object_IncRef \
    458 		((PKIX_PL_Object *)(obj), plContext); \
    459     if (pkixTempResult) { \
    460 	PKIX_DoAddError(&stdVars, pkixTempResult, plContext); \
    461 	pkixTempResult = NULL; \
    462 	goto cleanup; \
    463     } \
    464 } \
    465    } while (0)
    466 
    467 #define PKIX_FREE(obj) \
    468    do { \
    469 if (obj) { \
    470     pkixTempResult = PKIX_PL_Free((obj), plContext); \
    471     if (pkixTempResult) { \
    472 	PKIX_DoAddError(&stdVars, pkixTempResult, plContext); \
    473 	pkixTempResult = NULL; \
    474     } \
    475     obj = NULL; \
    476 } \
    477    } while (0)
    478 
    479 #define PKIX_EXACTLY_ONE_NULL(a, b) (((a) && !(b)) || ((b) && !(a)))
    480 
    481 /* DIGIT MACROS */
    482 
    483 #define PKIX_ISDIGIT(c) (((c) >= '0') && ((c) <= '9'))
    484 
    485 #define PKIX_ISXDIGIT(c) \
    486    (PKIX_ISDIGIT(c) || ( (((c)|0x20) >= 'a') && (((c)|0x20) <= 'f') ))
    487 
    488 #define PKIX_TOSTRING(a, b, c, d) \
    489    do { \
    490 int descNum; \
    491 if ((a) != NULL) { \
    492     pkixErrorResult =  \
    493 	PKIX_PL_Object_ToString((PKIX_PL_Object *)(a), (b), (c)); \
    494     descNum = (d); \
    495 } else { \
    496     pkixErrorResult =  \
    497 	PKIX_PL_String_Create(PKIX_ESCASCII, "(null)", 0, (b), (c)); \
    498     descNum = PKIX_STRINGCREATEFAILED; \
    499 } \
    500 PKIX_CHECK(pkixErrorResult, descNum); \
    501    } while (0)
    502 
    503 #define PKIX_EQUALS(a, b, c, d, e) \
    504    do { \
    505 if ((a) != NULL && (b) != NULL) { \
    506     PKIX_CHECK(PKIX_PL_Object_Equals\
    507 		((PKIX_PL_Object *)(a), \
    508 		(PKIX_PL_Object*)(b), \
    509 		(c), \
    510 		(d)), \
    511 		(e)); \
    512 } else if ((a) == NULL && (b) == NULL) { \
    513     *(c) = PKIX_TRUE; \
    514 } else { \
    515     *(c) = PKIX_FALSE; \
    516 } \
    517    } while (0)
    518 
    519 #define PKIX_HASHCODE(a, b, c, d) \
    520    do { \
    521 if ((a) != NULL) { \
    522     PKIX_CHECK(PKIX_PL_Object_Hashcode\
    523 	((PKIX_PL_Object *)(a), (b), (c)), (d)); \
    524 } else { \
    525     *(b) = 0; \
    526 } \
    527    } while (0)
    528 
    529 #define PKIX_DUPLICATE(a, b, c, d) \
    530    do { \
    531 if ((a) != NULL) { \
    532     PKIX_CHECK(PKIX_PL_Object_Duplicate\
    533 		((PKIX_PL_Object *)(a), \
    534 		(PKIX_PL_Object **)(b), \
    535 		(c)), \
    536 		(d)); \
    537 } else { \
    538     *(b) = (a); \
    539 } \
    540    } while (0)
    541 
    542 /*
    543 * DEBUG MACROS
    544 *
    545 * Each type has an associated debug flag, which can
    546 * be set on the compiler line using "-D<debugflag>". For convenience,
    547 * "-DPKIX_DEBUGALL" turns on debug for all the components.
    548 *
    549 * If a type's debug flag is defined, then its two associated macros
    550 * are defined: PKIX_type_DEBUG(expr) and PKIX_type_DEBUG_ARG(expr, arg),
    551 * which call PKIX_DEBUG(expr) and PKIX_DEBUG_ARG(expr, arg) respectively,
    552 * which, in turn, enable standard and consistently formatted output.
    553 *
    554 * If a type's debug flag is not defined, the two associated macros
    555 * are defined as a NO-OP. As such, any PKIX_type_DEBUG or PKIX_type_DEBUG_ARG
    556 * macros for an undefined type will be stripped from the code during
    557 * pre-processing, thereby reducing code size.
    558 */
    559 
    560 #ifdef PKIX_DEBUGALL
    561 #define PKIX_REFCOUNTDEBUG                        1
    562 #define PKIX_MEMDEBUG                             1
    563 #define PKIX_MUTEXDEBUG                           1
    564 #define PKIX_OBJECTDEBUG                          1
    565 #define PKIX_STRINGDEBUG                          1
    566 #define PKIX_OIDDEBUG                             1
    567 #define PKIX_LISTDEBUG                            1
    568 #define PKIX_ERRORDEBUG                           1
    569 #define PKIX_BYTEARRAYDEBUG                       1
    570 #define PKIX_RWLOCKDEBUG                          1
    571 #define PKIX_BIGINTDEBUG                          1
    572 #define PKIX_HASHTABLEDEBUG                       1
    573 #define PKIX_X500NAMEDEBUG                        1
    574 #define PKIX_GENERALNAMEDEBUG                     1
    575 #define PKIX_PUBLICKEYDEBUG                       1
    576 #define PKIX_CERTDEBUG                            1
    577 #define PKIX_HTTPCLIENTDEBUG                      1
    578 #define PKIX_DATEDEBUG                            1
    579 #define PKIX_TRUSTANCHORDEBUG                     1
    580 #define PKIX_PROCESSINGPARAMSDEBUG                1
    581 #define PKIX_VALIDATEPARAMSDEBUG                  1
    582 #define PKIX_VALIDATERESULTDEBUG                  1
    583 #define PKIX_VALIDATEDEBUG                        1
    584 #define PKIX_CERTCHAINCHECKERDEBUG                1
    585 #define PKIX_REVOCATIONCHECKERDEBUG               1
    586 #define PKIX_CERTSELECTORDEBUG                    1
    587 #define PKIX_COMCERTSELPARAMSDEBUG                1
    588 #define PKIX_TARGETCERTCHECKERSTATEDEBUG          1
    589 #define PKIX_INITIALIZEPARAMSDEBUG                1
    590 #define PKIX_CERTBASICCONSTRAINTSDEBUG            1
    591 #define PKIX_CERTNAMECONSTRAINTSDEBUG             1
    592 #define PKIX_CERTNAMECONSTRAINTSCHECKERSTATEDEBUG 1
    593 #define PKIX_SUBJALTNAMECHECKERSTATEDEBUG         1
    594 
    595 #define PKIX_CERTPOLICYQUALIFIERDEBUG             1
    596 #define PKIX_CERTPOLICYINFODEBUG                  1
    597 #define PKIX_CERTPOLICYNODEDEBUG                  1
    598 #define PKIX_CERTPOLICYCHECKERSTATEDEBUG          1
    599 #define PKIX_LIFECYCLEDEBUG                       1
    600 #define PKIX_BASICCONSTRAINTSCHECKERSTATEDEBUG    1
    601 #define PKIX_CRLDEBUG                             1
    602 #define PKIX_CRLENTRYDEBUG                        1
    603 #define PKIX_CRLSELECTORDEBUG                     1
    604 #define PKIX_COMCRLSELPARAMSDEBUG                 1
    605 #define PKIX_CERTSTOREDEBUG                       1
    606 #define PKIX_COLLECTIONCERTSTORECONTEXTDEBUG      1
    607 #define PKIX_DEFAULTCRLCHECKERSTATEDEBUG          1
    608 #define PKIX_CERTPOLICYMAPDEBUG                   1
    609 #define PKIX_BUILDDEBUG                           1
    610 #define PKIX_BUILDRESULTDEBUG                     1
    611 #define PKIX_FORWARDBUILDERSTATEDEBUG             1
    612 #define PKIX_SIGNATURECHECKERSTATEDEBUG           1
    613 #define PKIX_USERDEFINEDMODULESDEBUG              1
    614 #define PKIX_CONTEXTDEBUG                         1
    615 #define PKIX_DEFAULTREVOCATIONCHECKERDEBUG        1
    616 #define PKIX_LDAPREQUESTDEBUG                     1
    617 #define PKIX_LDAPRESPONSEDEBUG                    1
    618 #define PKIX_LDAPCLIENTDEBUG                      1
    619 #define PKIX_LDAPDEFAULTCLIENTDEBUG               1
    620 #define PKIX_SOCKETDEBUG                          1
    621 #define PKIX_RESOURCELIMITSDEBUG                  1
    622 #define PKIX_LOGGERDEBUG                          1
    623 #define PKIX_MONITORLOCKDEBUG                     1
    624 #define PKIX_INFOACCESSDEBUG                      1
    625 #define PKIX_AIAMGRDEBUG                          1
    626 #define PKIX_OCSPCHECKERDEBUG                     1
    627 #define PKIX_OCSPREQUESTDEBUG                     1
    628 #define PKIX_OCSPRESPONSEDEBUG                    1
    629 #define PKIX_HTTPDEFAULTCLIENTDEBUG               1
    630 #define PKIX_HTTPCERTSTORECONTEXTDEBUG            1
    631 #define PKIX_VERIFYNODEDEBUG                      1
    632 #endif
    633 
    634 /*
    635 * XXX Both PKIX_DEBUG and PKIX_DEBUG_ARG currently use printf.
    636 * This needs to be replaced with Loggers.
    637 */
    638 
    639 #ifdef DEBUG
    640 #define PKIX_DEBUG(expr) \
    641    do { \
    642 _PKIX_DEBUG_TRACE(pkixLoggersErrors, expr, PKIX_LOGGER_LEVEL_DEBUG); \
    643 (void) fprintf(stderr, "(%s: ", myFuncName); \
    644        (void) fprintf(stderr, expr);                \
    645    } while (0)
    646 #else
    647 #define PKIX_DEBUG(expr)
    648 #endif
    649 
    650 /* Logging doesn't support DEBUG with ARG: cannot convert control and arg */
    651 #define PKIX_DEBUG_ARG(expr, arg) \
    652    do { \
    653 (void) printf("(%s: ", myFuncName); \
    654 (void) printf(expr, arg); \
    655    } while (0)
    656 
    657 #if PKIX_FATALDEBUG
    658 #define PKIX_FATAL_DEBUG(expr) \
    659        PKIX_DEBUG(expr)
    660 #define PKIX_FATAL_DEBUG_ARG(expr, arg) \
    661        PKIX_DEBUG_ARG(expr, arg)
    662 #else
    663 #define PKIX_FATAL_DEBUG(expr)
    664 #define PKIX_FATAL_DEBUG_ARG(expr, arg)
    665 #endif
    666 
    667 #if PKIX_REFCOUNTDEBUG
    668 #define PKIX_REF_COUNT_DEBUG(expr) \
    669        PKIX_DEBUG(expr)
    670 #define PKIX_REF_COUNT_DEBUG_ARG(expr, arg) \
    671        PKIX_DEBUG_ARG(expr, arg)
    672 #else
    673 #define PKIX_REF_COUNT_DEBUG(expr)
    674 #define PKIX_REF_COUNT_DEBUG_ARG(expr, arg)
    675 #endif
    676 
    677 #if PKIX_MEMDEBUG
    678 #define PKIX_MEM_DEBUG(expr) \
    679        PKIX_DEBUG(expr)
    680 #define PKIX_MEM_DEBUG_ARG(expr, arg) \
    681        PKIX_DEBUG_ARG(expr, arg)
    682 #else
    683 #define PKIX_MEM_DEBUG(expr)
    684 #define PKIX_MEM_DEBUG_ARG(expr, arg)
    685 #endif
    686 
    687 #if PKIX_MUTEXDEBUG
    688 #define PKIX_MUTEX_DEBUG(expr) \
    689        PKIX_DEBUG(expr)
    690 #define PKIX_MUTEX_DEBUG_ARG(expr, arg) \
    691        PKIX_DEBUG_ARG(expr, arg)
    692 #else
    693 #define PKIX_MUTEX_DEBUG(expr)
    694 #define PKIX_MUTEX_DEBUG_ARG(expr, arg)
    695 #endif
    696 
    697 #if PKIX_OBJECTDEBUG
    698 #define PKIX_OBJECT_DEBUG(expr) \
    699        PKIX_DEBUG(expr)
    700 #define PKIX_OBJECT_DEBUG_ARG(expr, arg) \
    701        PKIX_DEBUG_ARG(expr, arg)
    702 #else
    703 #define PKIX_OBJECT_DEBUG(expr)
    704 #define PKIX_OBJECT_DEBUG_ARG(expr, arg)
    705 #endif
    706 
    707 #if PKIX_ERRORDEBUG
    708 #define PKIX_ERROR_DEBUG(expr) \
    709        PKIX_DEBUG(expr)
    710 #define PKIX_ERROR_DEBUG_ARG(expr, arg) \
    711        PKIX_DEBUG_ARG(expr, arg)
    712 #else
    713 #define PKIX_ERROR_DEBUG(expr)
    714 #define PKIX_ERROR_DEBUG_ARG(expr, arg)
    715 #endif
    716 
    717 #if PKIX_STRINGDEBUG
    718 #define PKIX_STRING_DEBUG(expr) \
    719        PKIX_DEBUG(expr)
    720 #define PKIX_STRING_DEBUG_ARG(expr, arg) \
    721        PKIX_DEBUG_ARG(expr, arg)
    722 #else
    723 #define PKIX_STRING_DEBUG(expr)
    724 #define PKIX_STRING_DEBUG_ARG(expr, arg)
    725 #endif
    726 
    727 #if PKIX_OIDDEBUG
    728 #define PKIX_OID_DEBUG(expr) \
    729        PKIX_DEBUG(expr)
    730 #define PKIX_OID_DEBUG_ARG(expr, arg) \
    731        PKIX_DEBUG_ARG(expr, arg)
    732 #else
    733 #define PKIX_OID_DEBUG(expr)
    734 #define PKIX_OID_DEBUG_ARG(expr, arg)
    735 #endif
    736 
    737 #if PKIX_LISTDEBUG
    738 #define PKIX_LIST_DEBUG(expr) \
    739        PKIX_DEBUG(expr)
    740 #define PKIX_LIST_DEBUG_ARG(expr, arg) \
    741        PKIX_DEBUG_ARG(expr, arg)
    742 #else
    743 #define PKIX_LIST_DEBUG(expr)
    744 #define PKIX_LIST_DEBUG_ARG(expr, arg)
    745 #endif
    746 
    747 #if PKIX_RWLOCKDEBUG
    748 #define PKIX_RWLOCK_DEBUG(expr) \
    749        PKIX_DEBUG(expr)
    750 #define PKIX_RWLOCK_DEBUG_ARG(expr, arg) \
    751        PKIX_DEBUG_ARG(expr, arg)
    752 #else
    753 #define PKIX_RWLOCK_DEBUG(expr)
    754 #define PKIX_RWLOCK_DEBUG_ARG(expr, arg)
    755 #endif
    756 
    757 #if PKIX_BYTEARRAYDEBUG
    758 #define PKIX_BYTEARRAY_DEBUG(expr) \
    759        PKIX_DEBUG(expr)
    760 #define PKIX_BYTEARRAY_DEBUG_ARG(expr, arg) \
    761        PKIX_DEBUG_ARG(expr, arg)
    762 #else
    763 #define PKIX_BYTEARRAY_DEBUG(expr)
    764 #define PKIX_BYTEARRAY_DEBUG_ARG(expr, arg)
    765 #endif
    766 
    767 #if PKIX_HASHTABLEDEBUG
    768 #define PKIX_HASHTABLE_DEBUG(expr) \
    769        PKIX_DEBUG(expr)
    770 #define PKIX_HASHTABLE_DEBUG_ARG(expr, arg) \
    771        PKIX_DEBUG_ARG(expr, arg)
    772 #else
    773 #define PKIX_HASHTABLE_DEBUG(expr)
    774 #define PKIX_HASHTABLE_DEBUG_ARG(expr, arg)
    775 #endif
    776 
    777 #if PKIX_X500NAMEDEBUG
    778 #define PKIX_X500NAME_DEBUG(expr) \
    779        PKIX_DEBUG(expr)
    780 #define PKIX_X500NAME_DEBUG_ARG(expr, arg) \
    781        PKIX_DEBUG_ARG(expr, arg)
    782 #else
    783 #define PKIX_X500NAME_DEBUG(expr)
    784 #define PKIX_X500NAME_DEBUG_ARG(expr, arg)
    785 #endif
    786 
    787 #if PKIX_GENERALNAMEDEBUG
    788 #define PKIX_GENERALNAME_DEBUG(expr) \
    789        PKIX_DEBUG(expr)
    790 #define PKIX_GENERALNAME_DEBUG_ARG(expr, arg) \
    791        PKIX_DEBUG_ARG(expr, arg)
    792 #else
    793 #define PKIX_GENERALNAME_DEBUG(expr)
    794 #define PKIX_GENERALNAME_DEBUG_ARG(expr, arg)
    795 #endif
    796 
    797 #if PKIX_PUBLICKEYDEBUG
    798 #define PKIX_PUBLICKEY_DEBUG(expr) \
    799        PKIX_DEBUG(expr)
    800 #define PKIX_PUBLICKEY_DEBUG_ARG(expr, arg) \
    801        PKIX_DEBUG_ARG(expr, arg)
    802 #else
    803 #define PKIX_PUBLICKEY_DEBUG(expr)
    804 #define PKIX_PUBLICKEY_DEBUG_ARG(expr, arg)
    805 #endif
    806 
    807 #if PKIX_CERTDEBUG
    808 #define PKIX_CERT_DEBUG(expr) \
    809        PKIX_DEBUG(expr)
    810 #define PKIX_CERT_DEBUG_ARG(expr, arg) \
    811        PKIX_DEBUG_ARG(expr, arg)
    812 #else
    813 #define PKIX_CERT_DEBUG(expr)
    814 #define PKIX_CERT_DEBUG_ARG(expr, arg)
    815 #endif
    816 
    817 #if PKIX_CRLDPDEBUG
    818 #define PKIX_CRLDP_DEBUG(expr) \
    819        PKIX_DEBUG(expr)
    820 #define PKIX_CRLDP_DEBUG_ARG(expr, arg) \
    821        PKIX_DEBUG_ARG(expr, arg)
    822 #else
    823 #define PKIX_CRLDP_DEBUG(expr)
    824 #define PKIX_CRLDP_DEBUG_ARG(expr, arg)
    825 #endif
    826 
    827 #if PKIX_HTTPCLIENTDEBUG
    828 #define PKIX_HTTPCLIENT_DEBUG(expr) \
    829        PKIX_DEBUG(expr)
    830 #define PKIX_HTTPCLIENT_DEBUG_ARG(expr, arg) \
    831        PKIX_DEBUG_ARG(expr, arg)
    832 #else
    833 #define PKIX_HTTPCLIENT_DEBUG(expr)
    834 #define PKIX_HTTPCLIENT_DEBUG_ARG(expr, arg)
    835 #endif
    836 
    837 #if PKIX_BIGINTDEBUG
    838 #define PKIX_BIGINT_DEBUG(expr) \
    839        PKIX_DEBUG(expr)
    840 #define PKIX_BIGINT_DEBUG_ARG(expr, arg) \
    841        PKIX_DEBUG_ARG(expr, arg)
    842 #else
    843 #define PKIX_BIGINT_DEBUG(expr)
    844 #define PKIX_BIGINT_DEBUG_ARG(expr, arg)
    845 #endif
    846 
    847 #if PKIX_DATEDEBUG
    848 #define PKIX_DATE_DEBUG(expr) \
    849        PKIX_DEBUG(expr)
    850 #define PKIX_DATE_DEBUG_ARG(expr, arg) \
    851        PKIX_DEBUG_ARG(expr, arg)
    852 #else
    853 #define PKIX_DATE_DEBUG(expr)
    854 #define PKIX_DATE_DEBUG_ARG(expr, arg)
    855 #endif
    856 
    857 #if PKIX_TRUSTANCHORDEBUG
    858 #define PKIX_TRUSTANCHOR_DEBUG(expr) \
    859        PKIX_DEBUG(expr)
    860 #define PKIX_TRUSTANCHOR_DEBUG_ARG(expr, arg) \
    861        PKIX_DEBUG_ARG(expr, arg)
    862 #else
    863 #define PKIX_TRUSTANCHOR_DEBUG(expr)
    864 #define PKIX_TRUSTANCHOR_DEBUG_ARG(expr, arg)
    865 #endif
    866 
    867 #if PKIX_PROCESSINGPARAMSDEBUG
    868 #define PKIX_PROCESSINGPARAMS_DEBUG(expr) \
    869        PKIX_DEBUG(expr)
    870 #define PKIX_PROCESSINGPARAMS_DEBUG_ARG(expr, arg) \
    871        PKIX_DEBUG_ARG(expr, arg)
    872 #else
    873 #define PKIX_PROCESSINGPARAMS_DEBUG(expr)
    874 #define PKIX_PROCESSINGPARAMS_DEBUG_ARG(expr, arg)
    875 #endif
    876 
    877 #if PKIX_VALIDATEPARAMSDEBUG
    878 #define PKIX_VALIDATEPARAMS_DEBUG(expr) \
    879        PKIX_DEBUG(expr)
    880 #define PKIX_VALIDATEPARAMS_DEBUG_ARG(expr, arg) \
    881        PKIX_DEBUG_ARG(expr, arg)
    882 #else
    883 #define PKIX_VALIDATEPARAMS_DEBUG(expr)
    884 #define PKIX_VALIDATEPARAMS_DEBUG_ARG(expr, arg)
    885 #endif
    886 
    887 #if PKIX_VALIDATERESULTDEBUG
    888 #define PKIX_VALIDATERESULT_DEBUG(expr) \
    889        PKIX_DEBUG(expr)
    890 #define PKIX_VALIDATERESULT_DEBUG_ARG(expr, arg) \
    891        PKIX_DEBUG_ARG(expr, arg)
    892 #else
    893 #define PKIX_VALIDATERESULT_DEBUG(expr)
    894 #define PKIX_VALIDATERESULT_DEBUG_ARG(expr, arg)
    895 #endif
    896 
    897 #if PKIX_VALIDATEDEBUG
    898 #define PKIX_VALIDATE_DEBUG(expr) \
    899        PKIX_DEBUG(expr)
    900 #define PKIX_VALIDATE_DEBUG_ARG(expr, arg) \
    901        PKIX_DEBUG_ARG(expr, arg)
    902 #else
    903 #define PKIX_VALIDATE_DEBUG(expr)
    904 #define PKIX_VALIDATE_DEBUG_ARG(expr, arg)
    905 #endif
    906 
    907 #if PKIX_BUILDDEBUG
    908 #define PKIX_BUILD_DEBUG(expr) \
    909        PKIX_DEBUG(expr)
    910 #define PKIX_BUILD_DEBUG_ARG(expr, arg) \
    911        PKIX_DEBUG_ARG(expr, arg)
    912 #else
    913 #define PKIX_BUILD_DEBUG(expr)
    914 #define PKIX_BUILD_DEBUG_ARG(expr, arg)
    915 #endif
    916 
    917 #if PKIX_CERTCHAINCHECKERDEBUG
    918 #define PKIX_CERTCHAINCHECKER_DEBUG(expr) \
    919        PKIX_DEBUG(expr)
    920 #define PKIX_CERTCHAINCHECKER_DEBUG_ARG(expr, arg) \
    921        PKIX_DEBUG_ARG(expr, arg)
    922 #else
    923 #define PKIX_CERTCHAINCHECKER_DEBUG(expr)
    924 #define PKIX_CERTCHAINCHECKER_DEBUG_ARG(expr, arg)
    925 #endif
    926 
    927 #if PKIX_REVOCATIONCHECKERDEBUG
    928 #define PKIX_REVOCATIONCHECKER_DEBUG(expr) \
    929        PKIX_DEBUG(expr)
    930 #define PKIX_REVOCATIONCHECKER_DEBUG_ARG(expr, arg) \
    931        PKIX_DEBUG_ARG(expr, arg)
    932 #else
    933 #define PKIX_REVOCATIONCHECKER_DEBUG(expr)
    934 #define PKIX_REVOCATIONCHECKER_DEBUG_ARG(expr, arg)
    935 #endif
    936 
    937 #if PKIX_REVOCATIONMETHODDEBUG
    938 #define PKIX_REVOCATIONMETHOD_DEBUG(expr) \
    939        PKIX_DEBUG(expr)
    940 #define PKIX_REVOCATIONMETHOD_DEBUG_ARG(expr, arg) \
    941        PKIX_DEBUG_ARG(expr, arg)
    942 #else
    943 #define PKIX_REVOCATIONMETHOD_DEBUG(expr)
    944 #define PKIX_REVOCATIONMETHOD_DEBUG_ARG(expr, arg)
    945 #endif
    946 
    947 #if PKIX_CERTSELECTORDEBUG
    948 #define PKIX_CERTSELECTOR_DEBUG(expr) \
    949        PKIX_DEBUG(expr)
    950 #define PKIX_CERTSELECTOR_DEBUG_ARG(expr, arg) \
    951        PKIX_DEBUG_ARG(expr, arg)
    952 #else
    953 #define PKIX_CERTSELECTOR_DEBUG(expr)
    954 #define PKIX_CERTSELECTOR_DEBUG_ARG(expr, arg)
    955 #endif
    956 
    957 #if PKIX_COMCERTSELPARAMSDEBUG
    958 #define PKIX_COMCERTSELPARAMS_DEBUG(expr) \
    959        PKIX_DEBUG(expr)
    960 #define PKIX_COMCERTSELPARAMS_DEBUG_ARG(expr, arg) \
    961        PKIX_DEBUG_ARG(expr, arg)
    962 #else
    963 #define PKIX_COMCERTSELPARAMS_DEBUG(expr)
    964 #define PKIX_COMCERTSELPARAMS_DEBUG_ARG(expr, arg)
    965 #endif
    966 
    967 #if PKIX_TARGETCERTCHECKERSTATEDEBUG
    968 #define PKIX_TARGETCERTCHECKERSTATE_DEBUG(expr) \
    969        PKIX_DEBUG(expr)
    970 #define PKIX_TARGETCERTCHECKERSTATE_DEBUG_ARG(expr, arg) \
    971        PKIX_DEBUG_ARG(expr, arg)
    972 #else
    973 #define PKIX_TARGETCERTCHECKERSTATE_DEBUG(expr)
    974 #define PKIX_TARGETCERTCHECKERSTATE_DEBUG_ARG(expr, arg)
    975 #endif
    976 
    977 #if PKIX_BASICCONSTRAINTSCHECKERSTATEDEBUG
    978 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG(expr) \
    979        PKIX_DEBUG(expr)
    980 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG_ARG(expr, arg) \
    981        PKIX_DEBUG_ARG(expr, arg)
    982 #else
    983 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG(expr)
    984 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG_ARG(expr, arg)
    985 #endif
    986 
    987 #if PKIX_INITIALIZEPARAMSDEBUG
    988 #define PKIX_INITIALIZEPARAMS_DEBUG(expr) \
    989        PKIX_DEBUG(expr)
    990 #define PKIX_INITIALIZEPARAMS_DEBUG_ARG(expr, arg) \
    991        PKIX_DEBUG_ARG(expr, arg)
    992 #else
    993 #define PKIX_INITIALIZEPARAMS_DEBUG(expr)
    994 #define PKIX_INITIALIZEPARAMS_DEBUG_ARG(expr, arg)
    995 #endif
    996 
    997 #if PKIX_CERTBASICCONSTRAINTSDEBUG
    998 #define PKIX_CERTBASICCONSTRAINTS_DEBUG(expr) \
    999        PKIX_DEBUG(expr)
   1000 #define PKIX_CERTBASICCONSTRAINTS_DEBUG_ARG(expr, arg) \
   1001        PKIX_DEBUG_ARG(expr, arg)
   1002 #else
   1003 #define PKIX_CERTBASICCONSTRAINTS_DEBUG(expr)
   1004 #define PKIX_CERTBASICCONSTRAINTS_DEBUG_ARG(expr, arg)
   1005 #endif
   1006 
   1007 #if PKIX_CERTNAMECONSTRAINTSDEBUG
   1008 #define PKIX_CERTNAMECONSTRAINTS_DEBUG(expr) \
   1009        PKIX_DEBUG(expr)
   1010 #define PKIX_CERTNAMECONSTRAINTS_DEBUG_ARG(expr, arg) \
   1011        PKIX_DEBUG_ARG(expr, arg)
   1012 #else
   1013 #define PKIX_CERTNAMECONSTRAINTS_DEBUG(expr)
   1014 #define PKIX_CERTNAMECONSTRAINTS_DEBUG_ARG(expr, arg)
   1015 #endif
   1016 
   1017 #if PKIX_CERTNAMECONSTRAINTSCHECKERSTATEDEBUG
   1018 #define PKIX_CERTNAMECONSTRAINTSCHECKERSTATE_DEBUG(expr) \
   1019        PKIX_DEBUG(expr)
   1020 #define PKIX_CERTNAMECONSTRAINTSCHECKERSTATE_DEBUG_ARG(expr, arg) \
   1021        PKIX_DEBUG_ARG(expr, arg)
   1022 #else
   1023 #define PKIX_CERTNAMECONSTRAINTSCHECKERSTATE_DEBUG(expr)
   1024 #define PKIX_CERTNAMECONSTRAINTSCHECKERSTATE_DEBUG_ARG(expr, arg)
   1025 #endif
   1026 
   1027 #if PKIX_SUBJALTNAMECHECKERSTATEDEBUG
   1028 #define PKIX_SUBJALTNAMECHECKERSTATE_DEBUG(expr) \
   1029        PKIX_DEBUG(expr)
   1030 #define PKIX_SUBJALTNAMECHECKERSTATE_DEBUG_ARG(expr, arg) \
   1031        PKIX_DEBUG_ARG(expr, arg)
   1032 #else
   1033 #define PKIX_SUBJALTNAMECHECKERSTATE_DEBUG(expr)
   1034 #define PKIX_SUBJALTNAMECHECKERSTATE_DEBUG_ARG(expr, arg)
   1035 #endif
   1036 
   1037 #if PKIX_CERTPOLICYQUALIFIERDEBUG
   1038 #define PKIX_CERTPOLICYQUALIFIER_DEBUG(expr) \
   1039        PKIX_DEBUG(expr)
   1040 #define PKIX_CERTPOLICYQUALIFIER_DEBUG_ARG(expr, arg) \
   1041        PKIX_DEBUG_ARG(expr, arg)
   1042 #else
   1043 #define PKIX_CERTPOLICYQUALIFIER_DEBUG(expr)
   1044 #define PKIX_CERTPOLICYQUALIFIER_DEBUG_ARG(expr, arg)
   1045 #endif
   1046 
   1047 #if PKIX_CERTPOLICYINFODEBUG
   1048 #define PKIX_CERTPOLICYINFO_DEBUG(expr) \
   1049        PKIX_DEBUG(expr)
   1050 #define PKIX_CERTPOLICYINFO_DEBUG_ARG(expr, arg) \
   1051        PKIX_DEBUG_ARG(expr, arg)
   1052 #else
   1053 #define PKIX_CERTPOLICYINFO_DEBUG(expr)
   1054 #define PKIX_CERTPOLICYINFO_DEBUG_ARG(expr, arg)
   1055 #endif
   1056 
   1057 #if PKIX_CERTPOLICYNODEDEBUG
   1058 #define PKIX_CERTPOLICYNODE_DEBUG(expr) \
   1059        PKIX_DEBUG(expr)
   1060 #define PKIX_CERTPOLICYNODE_DEBUG_ARG(expr, arg) \
   1061        PKIX_DEBUG_ARG(expr, arg)
   1062 #else
   1063 #define PKIX_CERTPOLICYNODE_DEBUG(expr)
   1064 #define PKIX_CERTPOLICYNODE_DEBUG_ARG(expr, arg)
   1065 #endif
   1066 
   1067 #if PKIX_CERTPOLICYCHECKERSTATEDEBUG
   1068 #define PKIX_CERTPOLICYCHECKERSTATE_DEBUG(expr) \
   1069        PKIX_DEBUG(expr)
   1070 #define PKIX_CERTPOLICYCHECKERSTATE_DEBUG_ARG(expr, arg) \
   1071        PKIX_DEBUG_ARG(expr, arg)
   1072 #else
   1073 #define PKIX_CERTPOLICYCHECKERSTATE_DEBUG(expr)
   1074 #define PKIX_CERTPOLICYCHECKERSTATE_DEBUG_ARG(expr, arg)
   1075 #endif
   1076 
   1077 #if PKIX_LIFECYCLEDEBUG
   1078 #define PKIX_LIFECYCLE_DEBUG(expr) \
   1079        PKIX_DEBUG(expr)
   1080 #define PKIX_LIFECYCLE_DEBUG_ARG(expr, arg) \
   1081        PKIX_DEBUG_ARG(expr, arg)
   1082 #else
   1083 #define PKIX_LIFECYCLE_DEBUG(expr)
   1084 #define PKIX_LIFECYCLE_DEBUG_ARG(expr, arg)
   1085 #endif
   1086 
   1087 #if PKIX_BASICCONSTRAINTSCHECKERSTATEDEBUG
   1088 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG(expr) \
   1089        PKIX_DEBUG(expr)
   1090 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG_ARG(expr, arg) \
   1091        PKIX_DEBUG_ARG(expr, arg)
   1092 #else
   1093 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG(expr)
   1094 #define PKIX_BASICCONSTRAINTSCHECKERSTATE_DEBUG_ARG(expr, arg)
   1095 #endif
   1096 
   1097 #if PKIX_CRLDEBUG
   1098 #define PKIX_CRL_DEBUG(expr) \
   1099        PKIX_DEBUG(expr)
   1100 #define PKIX_CRL_DEBUG_ARG(expr, arg) \
   1101        PKIX_DEBUG_ARG(expr, arg)
   1102 #else
   1103 #define PKIX_CRL_DEBUG(expr)
   1104 #define PKIX_CRL_DEBUG_ARG(expr, arg)
   1105 #endif
   1106 
   1107 #if PKIX_CRLENTRYDEBUG
   1108 #define PKIX_CRLENTRY_DEBUG(expr) \
   1109        PKIX_DEBUG(expr)
   1110 #define PKIX_CRLENTRY_DEBUG_ARG(expr, arg) \
   1111        PKIX_DEBUG_ARG(expr, arg)
   1112 #else
   1113 #define PKIX_CRLENTRY_DEBUG(expr)
   1114 #define PKIX_CRLENTRY_DEBUG_ARG(expr, arg)
   1115 #endif
   1116 
   1117 #if PKIX_CRLSELECTORDEBUG
   1118 #define PKIX_CRLSELECTOR_DEBUG(expr) \
   1119        PKIX_DEBUG(expr)
   1120 #define PKIX_CRLSELECTOR_DEBUG_ARG(expr, arg) \
   1121        PKIX_DEBUG_ARG(expr, arg)
   1122 #else
   1123 #define PKIX_CRLSELECTOR_DEBUG(expr)
   1124 #define PKIX_CRLSELECTOR_DEBUG_ARG(expr, arg)
   1125 #endif
   1126 
   1127 #if PKIX_COMCRLSELPARAMSDEBUG
   1128 #define PKIX_COMCRLSELPARAMS_DEBUG(expr) \
   1129        PKIX_DEBUG(expr)
   1130 #define PKIX_COMCRLSELPARAMS_DEBUG_ARG(expr, arg) \
   1131        PKIX_DEBUG_ARG(expr, arg)
   1132 #else
   1133 #define PKIX_COMCRLSELPARAMS_DEBUG(expr)
   1134 #define PKIX_COMCRLSELPARAMS_DEBUG_ARG(expr, arg)
   1135 #endif
   1136 
   1137 #if PKIX_CERTSTOREDEBUG
   1138 #define PKIX_CERTSTORE_DEBUG(expr) \
   1139        PKIX_DEBUG(expr)
   1140 #define PKIX_CERTSTORE_DEBUG_ARG(expr, arg) \
   1141        PKIX_DEBUG_ARG(expr, arg)
   1142 #else
   1143 #define PKIX_CERTSTORE_DEBUG(expr)
   1144 #define PKIX_CERTSTORE_DEBUG_ARG(expr, arg)
   1145 #endif
   1146 
   1147 #if PKIX_COLLECTIONCERTSTORECONTEXTDEBUG
   1148 #define PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG(expr) \
   1149        PKIX_DEBUG(expr)
   1150 #define PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG_ARG(expr, arg) \
   1151        PKIX_DEBUG_ARG(expr, arg)
   1152 #else
   1153 #define PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG(expr)
   1154 #define PKIX_COLLECTIONCERTSTORECONTEXT_DEBUG_ARG(expr, arg)
   1155 #endif
   1156 
   1157 #if PKIX_CRLCHECKERDEBUG
   1158 #define PKIX_CRLCHECKER_DEBUG(expr) \
   1159        PKIX_DEBUG(expr)
   1160 #define PKIX_CRLCHECKER_DEBUG_ARG(expr, arg) \
   1161        PKIX_DEBUG_ARG(expr, arg)
   1162 #else
   1163 #define PKIX_CRLCHECKER_DEBUG(expr)
   1164 #define PKIX_CRLCHECKER_DEBUG_ARG(expr, arg)
   1165 #endif
   1166 
   1167 #if PKIX_CERTPOLICYMAPDEBUG
   1168 #define PKIX_CERTPOLICYMAP_DEBUG(expr) \
   1169        PKIX_DEBUG(expr)
   1170 #define PKIX_CERTPOLICYMAP_DEBUG_ARG(expr, arg) \
   1171        PKIX_DEBUG_ARG(expr, arg)
   1172 #else
   1173 #define PKIX_CERTPOLICYMAP_DEBUG(expr)
   1174 #define PKIX_CERTPOLICYMAP_DEBUG_ARG(expr, arg)
   1175 #endif
   1176 
   1177 #if PKIX_BUILDRESULTDEBUG
   1178 #define PKIX_BUILDRESULT_DEBUG(expr) \
   1179        PKIX_DEBUG(expr)
   1180 #define PKIX_BUILDRESULT_DEBUG_ARG(expr, arg) \
   1181        PKIX_DEBUG_ARG(expr, arg)
   1182 #else
   1183 #define PKIX_BUILDRESULT_DEBUG(expr)
   1184 #define PKIX_BUILDRESULT_DEBUG_ARG(expr, arg)
   1185 #endif
   1186 
   1187 #if PKIX_FORWARDBUILDERSTATEDEBUG
   1188 #define PKIX_FORWARDBUILDERSTATE_DEBUG(expr) \
   1189        PKIX_DEBUG(expr)
   1190 #define PKIX_FORWARDBUILDERSTATE_DEBUG_ARG(expr, arg) \
   1191        PKIX_DEBUG_ARG(expr, arg)
   1192 #else
   1193 #define PKIX_FORWARDBUILDERSTATE_DEBUG(expr)
   1194 #define PKIX_FORWARDBUILDERSTATE_DEBUG_ARG(expr, arg)
   1195 #endif
   1196 
   1197 #if PKIX_SIGNATURECHECKERSTATEDEBUG
   1198 #define PKIX_SIGNATURECHECKERSTATE_DEBUG(expr) \
   1199        PKIX_DEBUG(expr)
   1200 #define PKIX_SIGNATURECHECKERSTATE_DEBUG_ARG(expr, arg) \
   1201        PKIX_DEBUG_ARG(expr, arg)
   1202 #else
   1203 #define PKIX_SIGNATURECHECKERSTATE_DEBUG(expr)
   1204 #define PKIX_SIGNATURECHECKERSTATE_DEBUG_ARG(expr, arg)
   1205 #endif
   1206 
   1207 #if PKIX_USERDEFINEDMODULESDEBUG
   1208 #define PKIX_USERDEFINEDMODULES_DEBUG(expr) \
   1209        PKIX_DEBUG(expr)
   1210 #define PKIX_USERDEFINEDMODULES_DEBUG_ARG(expr, arg) \
   1211        PKIX_DEBUG_ARG(expr, arg)
   1212 #else
   1213 #define PKIX_USERDEFINEDMODULES_DEBUG(expr)
   1214 #define PKIX_USERDEFINEDMODULES_DEBUG_ARG(expr, arg)
   1215 #endif
   1216 
   1217 #if PKIX_CONTEXTDEBUG
   1218 #define PKIX_CONTEXT_DEBUG(expr) \
   1219        PKIX_DEBUG(expr)
   1220 #define PKIX_CONTEXT_DEBUG_ARG(expr, arg) \
   1221        PKIX_DEBUG_ARG(expr, arg)
   1222 #else
   1223 #define PKIX_CONTEXT_DEBUG(expr)
   1224 #define PKIX_CONTEXT_DEBUG_ARG(expr, arg)
   1225 #endif
   1226 
   1227 #if PKIX_REVOCATIONCHECKERDEBUG
   1228 #define PKIX_REVOCATIONCHECKER_DEBUG(expr) \
   1229        PKIX_DEBUG(expr)
   1230 #define PKIX_REVOCATIONCHECKER_DEBUG_ARG(expr, arg) \
   1231        PKIX_DEBUG_ARG(expr, arg)
   1232 #else
   1233 #define PKIX_REVOCATIONCHECKER_DEBUG(expr)
   1234 #define PKIX_REVOCATIONCHECKER_DEBUG_ARG(expr, arg)
   1235 #endif
   1236 
   1237 #if PKIX_LDAPREQUESTDEBUG
   1238 #define PKIX_LDAPREQUEST_DEBUG(expr) \
   1239        PKIX_DEBUG(expr)
   1240 #define PKIX_LDAPREQUEST_DEBUG_ARG(expr, arg) \
   1241        PKIX_DEBUG_ARG(expr, arg)
   1242 #else
   1243 #define PKIX_LDAPREQUEST_DEBUG(expr)
   1244 #define PKIX_LDAPREQUEST_DEBUG_ARG(expr, arg)
   1245 #endif
   1246 
   1247 #if PKIX_LDAPRESPONSEDEBUG
   1248 #define PKIX_LDAPRESPONSE_DEBUG(expr) \
   1249        PKIX_DEBUG(expr)
   1250 #define PKIX_LDAPRESPONSE_DEBUG_ARG(expr, arg) \
   1251        PKIX_DEBUG_ARG(expr, arg)
   1252 #else
   1253 #define PKIX_LDAPRESPONSE_DEBUG(expr)
   1254 #define PKIX_LDAPRESPONSE_DEBUG_ARG(expr, arg)
   1255 #endif
   1256 
   1257 #if PKIX_LDAPCLIENTDEBUG
   1258 #define PKIX_LDAPCLIENT_DEBUG(expr) \
   1259        PKIX_DEBUG(expr)
   1260 #define PKIX_LDAPCLIENT_DEBUG_ARG(expr, arg) \
   1261        PKIX_DEBUG_ARG(expr, arg)
   1262 #else
   1263 #define PKIX_LDAPCLIENT_DEBUG(expr)
   1264 #define PKIX_LDAPCLIENT_DEBUG_ARG(expr, arg)
   1265 #endif
   1266 
   1267 #if PKIX_LDAPDEFAULTCLIENTDEBUG
   1268 #define PKIX_LDAPDEFAULTCLIENT_DEBUG(expr) \
   1269        PKIX_DEBUG(expr)
   1270 #define PKIX_LDAPDEFAULTCLIENT_DEBUG_ARG(expr, arg) \
   1271        PKIX_DEBUG_ARG(expr, arg)
   1272 #else
   1273 #define PKIX_LDAPDEFAULTCLIENT_DEBUG(expr)
   1274 #define PKIX_LDAPDEFAULTCLIENT_DEBUG_ARG(expr, arg)
   1275 #endif
   1276 
   1277 #if PKIX_SOCKETDEBUG
   1278 #define PKIX_SOCKET_DEBUG(expr) \
   1279        PKIX_DEBUG(expr)
   1280 #define PKIX_SOCKET_DEBUG_ARG(expr, arg) \
   1281        PKIX_DEBUG_ARG(expr, arg)
   1282 #else
   1283 #define PKIX_SOCKET_DEBUG(expr)
   1284 #define PKIX_SOCKET_DEBUG_ARG(expr, arg)
   1285 #endif
   1286 
   1287 #if PKIX_RESOURCELIMITSDEBUG
   1288 #define PKIX_RESOURCELIMITS_DEBUG(expr) \
   1289        PKIX_DEBUG(expr)
   1290 #define PKIX_RESOURCELIMITS_DEBUG_ARG(expr, arg) \
   1291        PKIX_DEBUG_ARG(expr, arg)
   1292 #else
   1293 #define PKIX_RESOURCELIMITS_DEBUG(expr)
   1294 #define PKIX_RESOURCELIMITS_DEBUG_ARG(expr, arg)
   1295 #endif
   1296 
   1297 #if PKIX_LOGGERDEBUG
   1298 #define PKIX_LOGGER_DEBUG(expr) \
   1299        PKIX_DEBUG(expr)
   1300 #define PKIX_LOGGER_DEBUG_ARG(expr, arg) \
   1301        PKIX_DEBUG_ARG(expr, arg)
   1302 #else
   1303 #define PKIX_LOGGER_DEBUG(expr)
   1304 #define PKIX_LOGGER_DEBUG_ARG(expr, arg)
   1305 #endif
   1306 
   1307 #if PKIX_MONITORLOCKDEBUG
   1308 #define PKIX_MONITORLOCK_DEBUG(expr) \
   1309        PKIX_DEBUG(expr)
   1310 #define PKIX_MONITORLOCK_DEBUG_ARG(expr, arg) \
   1311        PKIX_DEBUG_ARG(expr, arg)
   1312 #else
   1313 #define PKIX_MONITORLOCK_DEBUG(expr)
   1314 #define PKIX_MONITORLOCK_DEBUG_ARG(expr, arg)
   1315 #endif
   1316 
   1317 #if PKIX_INFOACCESSDEBUG
   1318 #define PKIX_INFOACCESS_DEBUG(expr) \
   1319        PKIX_DEBUG(expr)
   1320 #define PKIX_INFOACCESS_DEBUG_ARG(expr, arg) \
   1321        PKIX_DEBUG_ARG(expr, arg)
   1322 #else
   1323 #define PKIX_INFOACCESS_DEBUG(expr)
   1324 #define PKIX_INFOACCESS_DEBUG_ARG(expr, arg)
   1325 #endif
   1326 
   1327 #if PKIX_AIAMGRDEBUG
   1328 #define PKIX_AIAMGR_DEBUG(expr) \
   1329        PKIX_DEBUG(expr)
   1330 #define PKIX_AIAMGR_DEBUG_ARG(expr, arg) \
   1331        PKIX_DEBUG_ARG(expr, arg)
   1332 #else
   1333 #define PKIX_AIAMGR_DEBUG(expr)
   1334 #define PKIX_AIAMGR_DEBUG_ARG(expr, arg)
   1335 #endif
   1336 
   1337 #if PKIX_OCSPCHECKERDEBUG
   1338 #define PKIX_OCSPCHECKER_DEBUG(expr) \
   1339        PKIX_DEBUG(expr)
   1340 #define PKIX_OCSPCHECKER_DEBUG_ARG(expr, arg) \
   1341        PKIX_DEBUG_ARG(expr, arg)
   1342 #else
   1343 #define PKIX_OCSPCHECKER_DEBUG(expr)
   1344 #define PKIX_OCSPCHECKER_DEBUG_ARG(expr, arg)
   1345 #endif
   1346 
   1347 #if PKIX_OCSPCERTIDDEBUG
   1348 #define PKIX_OCSPCERTID_DEBUG(expr) \
   1349        PKIX_DEBUG(expr)
   1350 #define PKIX_OCSPCERTID_DEBUG_ARG(expr, arg) \
   1351        PKIX_DEBUG_ARG(expr, arg)
   1352 #else
   1353 #define PKIX_OCSPCERTID_DEBUG(expr)
   1354 #define PKIX_OCSPCERTID_DEBUG_ARG(expr, arg)
   1355 #endif
   1356 
   1357 #if PKIX_OCSPREQUESTDEBUG
   1358 #define PKIX_OCSPREQUEST_DEBUG(expr) \
   1359        PKIX_DEBUG(expr)
   1360 #define PKIX_OCSPREQUEST_DEBUG_ARG(expr, arg) \
   1361        PKIX_DEBUG_ARG(expr, arg)
   1362 #else
   1363 #define PKIX_OCSPREQUEST_DEBUG(expr)
   1364 #define PKIX_OCSPREQUEST_DEBUG_ARG(expr, arg)
   1365 #endif
   1366 
   1367 #if PKIX_OCSPRESPONSEDEBUG
   1368 #define PKIX_OCSPRESPONSE_DEBUG(expr) \
   1369        PKIX_DEBUG(expr)
   1370 #define PKIX_OCSPRESPONSE_DEBUG_ARG(expr, arg) \
   1371        PKIX_DEBUG_ARG(expr, arg)
   1372 #else
   1373 #define PKIX_OCSPRESPONSE_DEBUG(expr)
   1374 #define PKIX_OCSPRESPONSE_DEBUG_ARG(expr, arg)
   1375 #endif
   1376 
   1377 #if PKIX_HTTPDEFAULTCLIENTDEBUG
   1378 #define PKIX_HTTPDEFAULTCLIENT_DEBUG(expr) \
   1379        PKIX_DEBUG(expr)
   1380 #define PKIX_HTTPDEFAULTCLIENT_DEBUG_ARG(expr, arg) \
   1381        PKIX_DEBUG_ARG(expr, arg)
   1382 #else
   1383 #define PKIX_HTTPDEFAULTCLIENT_DEBUG(expr)
   1384 #define PKIX_HTTPDEFAULTCLIENT_DEBUG_ARG(expr, arg)
   1385 #endif
   1386 
   1387 #if PKIX_HTTPCERTSTORECONTEXTDEBUG
   1388 #define PKIX_HTTPCERTSTORECONTEXT_DEBUG(expr) \
   1389        PKIX_DEBUG(expr)
   1390 #define PKIX_HTTPCERTSTORECONTEXT_DEBUG_ARG(expr, arg) \
   1391        PKIX_DEBUG_ARG(expr, arg)
   1392 #else
   1393 #define PKIX_HTTPCERTSTORECONTEXT_DEBUG(expr)
   1394 #define PKIX_HTTPCERTSTORECONTEXT_DEBUG_ARG(expr, arg)
   1395 #endif
   1396 
   1397 #if PKIX_VERIFYNODEDEBUG
   1398 #define PKIX_VERIFYNODE_DEBUG(expr) \
   1399        PKIX_DEBUG(expr)
   1400 #define PKIX_VERIFYNODE_DEBUG_ARG(expr, arg) \
   1401        PKIX_DEBUG_ARG(expr, arg)
   1402 #else
   1403 #define PKIX_VERIFYNODE_DEBUG(expr)
   1404 #define PKIX_VERIFYNODE_DEBUG_ARG(expr, arg)
   1405 #endif
   1406 
   1407 #if PKIX_EKUCHECKER
   1408 #define PKIX_EKUCHECKER_DEBUG(expr) \
   1409        PKIX_DEBUG(expr)
   1410 #define PKIX_EKUCHECKER_DEBUG_ARG(expr, arg) \
   1411        PKIX_DEBUG_ARG(expr, arg)
   1412 #else
   1413 #define PKIX_EKUCHECKER_DEBUG(expr)
   1414 #define PKIX_EKUCHECKER_DEBUG_ARG(expr, arg)
   1415 #endif
   1416 
   1417 #if PKIX_CERTVFYPKIXDEBUG
   1418 #define PKIX_CERTVFYPKIX_DEBUG(expr) \
   1419        PKIX_DEBUG(expr)
   1420 #define PKIX_CERTVFYPKIX_DEBUG_ARG(expr, arg) \
   1421        PKIX_DEBUG_ARG(expr, arg)
   1422 #else
   1423 #define PKIX_CERTVFYPKIX_DEBUG(expr)
   1424 #define PKIX_CERTVFYPKIX_DEBUG_ARG(expr, arg)
   1425 #endif
   1426 
   1427 /*
   1428 * All object types register themselves with the system using a
   1429 * pkix_ClassTable_Entry, which consists of a set of functions for that
   1430 * type and an ASCII string (char *) which is used by the default
   1431 * ToStringCallback (if necessary). System types register themselves directly
   1432 * when their respective PKIX_"type"_RegisterSelf functions are called.
   1433 * User-defined types can be registered using PKIX_PL_Object_RegisterType.
   1434 * (see comments in pkix_pl_system.h)
   1435 */
   1436 
   1437 typedef struct pkix_ClassTable_EntryStruct pkix_ClassTable_Entry;
   1438 struct pkix_ClassTable_EntryStruct {
   1439        char *description;
   1440        PKIX_UInt32 objCounter;
   1441        PKIX_UInt32 typeObjectSize;
   1442        PKIX_PL_DestructorCallback destructor;
   1443        PKIX_PL_EqualsCallback equalsFunction;
   1444        PKIX_PL_HashcodeCallback hashcodeFunction;
   1445        PKIX_PL_ToStringCallback toStringFunction;
   1446        PKIX_PL_ComparatorCallback comparator;
   1447        PKIX_PL_DuplicateCallback duplicateFunction;
   1448 };
   1449 
   1450 /*
   1451 * PKIX_ERRORCLASSNAMES is an array of strings, with each string holding a
   1452 * descriptive name for an error code. This is used by the default
   1453 * PKIX_PL_Error_ToString function.
   1454 */
   1455 extern const char *PKIX_ERRORCLASSNAMES[PKIX_NUMERRORCLASSES];
   1456 
   1457 #define MAX_STACK_DEPTH         1000
   1458 
   1459 extern PRLogModuleInfo *pkixLog;
   1460 
   1461 #define PKIX_MAGIC_HEADER           PR_UINT64(0xFEEDC0FFEEFACADE)
   1462 #define PKIX_MAGIC_HEADER_DESTROYED PR_UINT64(0xBAADF00DDEADBEEF)
   1463 
   1464 /* see source file for function documentation */
   1465 
   1466 PKIX_Error *
   1467 pkix_IsCertSelfIssued(
   1468        PKIX_PL_Cert *cert,
   1469        PKIX_Boolean *pSelfIssued,
   1470        void *plContext);
   1471 
   1472 PKIX_Error *
   1473 pkix_Throw(
   1474        PKIX_ERRORCLASS errClass,
   1475        const char *funcName,
   1476        PKIX_ERRORCODE errorTextCode,
   1477        PKIX_ERRORCLASS overrideClass,
   1478        PKIX_Error *cause,
   1479        PKIX_Error **pError,
   1480        void *plContext);
   1481 
   1482 PKIX_Error *
   1483 pkix_CheckTypes(
   1484        PKIX_PL_Object *first,
   1485        PKIX_PL_Object *second,
   1486        PKIX_UInt32 type,
   1487        void *plContext);
   1488 
   1489 PKIX_Error *
   1490 pkix_CheckType(
   1491        PKIX_PL_Object *object,
   1492        PKIX_UInt32 type,
   1493        void *plContext);
   1494 
   1495 PKIX_Error *
   1496 pkix_hash(
   1497        const unsigned char *bytes,
   1498        PKIX_UInt32 length,
   1499        PKIX_UInt32 *hash,
   1500        void *plContext);
   1501 
   1502 PKIX_Error *
   1503 pkix_duplicateImmutable(
   1504        PKIX_PL_Object *object,
   1505        PKIX_PL_Object **pNewObject,
   1506        void *plContext);
   1507 
   1508 PKIX_UInt32
   1509 pkix_countArray(void **array);
   1510 
   1511 PKIX_UInt32
   1512 pkix_hex2i(char c);
   1513 
   1514 char
   1515 pkix_i2hex(char c);
   1516 
   1517 PKIX_Boolean
   1518 pkix_isPlaintext(unsigned char c, PKIX_Boolean debug);
   1519 
   1520 PKIX_Error *
   1521 pkix_CacheCertChain_Lookup(
   1522        PKIX_PL_Cert* targetCert,
   1523        PKIX_List* anchors,
   1524        PKIX_PL_Date *testDate,
   1525        PKIX_Boolean *pFound,
   1526        PKIX_BuildResult **pBuildResult,
   1527        void *plContext);
   1528 
   1529 PKIX_Error *
   1530 pkix_CacheCertChain_Remove(
   1531        PKIX_PL_Cert* targetCert,
   1532        PKIX_List* anchors,
   1533        void *plContext);
   1534 
   1535 PKIX_Error *
   1536 pkix_CacheCertChain_Add(
   1537        PKIX_PL_Cert* targetCert,
   1538        PKIX_List* anchors,
   1539        PKIX_PL_Date *validityDate,
   1540        PKIX_BuildResult *buildResult,
   1541        void *plContext);
   1542 
   1543 PKIX_Error *
   1544 pkix_CacheCert_Lookup(
   1545        PKIX_CertStore *store,
   1546        PKIX_ComCertSelParams *certSelParams,
   1547        PKIX_PL_Date *testDate,
   1548        PKIX_Boolean *pFound,
   1549        PKIX_List** pCerts,
   1550        void *plContext);
   1551 
   1552 PKIX_Error *
   1553 pkix_CacheCert_Add(
   1554        PKIX_CertStore *store,
   1555        PKIX_ComCertSelParams *certSelParams,
   1556        PKIX_List* certs,
   1557        void *plContext);
   1558 
   1559 PKIX_Error *
   1560 pkix_CacheCrlEntry_Lookup(
   1561        PKIX_CertStore *store,
   1562        PKIX_PL_X500Name *certIssuer,
   1563        PKIX_PL_BigInt *certSerialNumber,
   1564        PKIX_Boolean *pFound,
   1565        PKIX_List** pCrlEntryList,
   1566        void *plContext);
   1567 
   1568 PKIX_Error *
   1569 pkix_CacheCrlEntry_Add(
   1570        PKIX_CertStore *store,
   1571        PKIX_PL_X500Name *certIssuer,
   1572        PKIX_PL_BigInt *certSerialNumber,
   1573        PKIX_List* crlEntryList,
   1574        void *plContext);
   1575 
   1576 #ifdef PR_LOGGING
   1577 void
   1578 pkix_trace_dump_cert(
   1579        const char *info, 
   1580        PKIX_PL_Cert *cert, 
   1581        void *plContext);
   1582 #endif
   1583 
   1584 #ifdef __cplusplus
   1585 }
   1586 #endif
   1587 
   1588 #endif /* _PKIX_TOOLS_H */