security/nss/lib/libpkix/pkix/util/pkix_tools.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

     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  */
    11 #ifndef _PKIX_TOOLS_H
    12 #define _PKIX_TOOLS_H
    14 #include "pkix.h"
    15 #include <stddef.h>
    16 #include <stdio.h>
    17 #include "secport.h"
    18 #include "prlong.h"
    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"
    49 #ifdef __cplusplus
    50 extern "C" {
    51 #endif
    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;
    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
    95 extern PKIX_Error * PKIX_DoReturn(PKIX_StdVars * stdVars, 
    96                                   PKIX_ERRORCLASS errClass, 
    97                                   PKIX_Boolean doLogger,
    98                                   void * plContext);
   100 extern PKIX_Error * PKIX_DoThrow(PKIX_StdVars * stdVars, 
   101                                  PKIX_ERRORCLASS errClass, 
   102                                  PKIX_ERRORCODE errCode,
   103                                  PKIX_ERRORCLASS overrideClass, 
   104                                  void * plContext);
   106 extern void PKIX_DoAddError(PKIX_StdVars * stdVars, 
   107                             PKIX_Error * error,
   108                             void * plContext);
   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 */
   118 extern const PKIX_StdVars zeroStdVars;
   120 extern PRLogModuleInfo *pkixLog;
   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  */
   135 #if !defined (PKIX_OBJECT_LEAK_TEST)
   137 #define PKIX_STD_VARS(funcName) \
   138     static const char cMyFuncName[] = {funcName}; \
   139     PKIX_StdVars      stdVars = zeroStdVars; \
   140     myFuncName = cMyFuncName
   143 #else /* PKIX_OBJECT_LEAK_TEST */
   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;
   155 extern PLHashNumber PR_CALLBACK pkix_ErrorGen_Hash (const void *key);
   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 */
   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
   205 #define _PKIX_LOG_ERROR(code, level) \
   206     { \
   207 	if (pkixLoggersErrors) { \
   208 	    pkix_Logger_CheckWithCode(pkixLoggersErrors, code, \
   209 	                      NULL, pkixType, level, plContext); \
   210 	} \
   211     }
   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);
   219 #define PKIX_ENTER_NO_LOGGER(type, funcName) \
   220     PKIX_STD_VARS(funcName); \
   221     pkixType = PKIX_ ## type ## _ERROR; \
   222     PKIX_DEBUG_ENTER(type);
   224 #define PKIX_DEBUG_ENTER(type) \
   225     PKIX_ ## type ## _DEBUG_ARG("( Entering %s).\n", myFuncName)
   227 #define PKIX_DEBUG_EXIT(type) \
   228     PKIX_ ## type ## _DEBUG_ARG("( Exiting %s).\n", myFuncName)
   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)
   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)
   259 #define PKIX_THROW(type, descNum) \
   260     return PKIX_DoThrow(&stdVars, (PKIX_ ## type ## _ERROR), descNum, \
   261                         pkixErrorClass, plContext);
   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 */
   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
   294 /* disable to disable ;-) */
   295 /* #define WANT_TRACE_CHECK_FAILURES */
   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
   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)
   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)
   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)
   344 #define PKIX_LOG_ERROR(descNum) \
   345     _PKIX_LOG_ERROR(descNum, PKIX_LOGGER_LEVEL_ERROR)
   347 #define PKIX_ERROR(descNum) \
   348     { \
   349 	PKIX_LOG_ERROR(descNum) \
   350 	pkixErrorReceived = PKIX_TRUE; \
   351 	pkixErrorCode = descNum; \
   352 	goto cleanup; \
   353     }
   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     }
   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     }
   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)
   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)
   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)
   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)
   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)
   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)
   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     }
   450 #define PKIX_ERROR_RECEIVED \
   451     (pkixErrorReceived || pkixErrorResult || pkixTempErrorReceived || \
   452      pkixErrorList)
   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)
   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)
   479 #define PKIX_EXACTLY_ONE_NULL(a, b) (((a) && !(b)) || ((b) && !(a)))
   481 /* DIGIT MACROS */
   483 #define PKIX_ISDIGIT(c) (((c) >= '0') && ((c) <= '9'))
   485 #define PKIX_ISXDIGIT(c) \
   486     (PKIX_ISDIGIT(c) || ( (((c)|0x20) >= 'a') && (((c)|0x20) <= 'f') ))
   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)
   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)
   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)
   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)
   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  */
   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
   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
   634 /*
   635  * XXX Both PKIX_DEBUG and PKIX_DEBUG_ARG currently use printf.
   636  * This needs to be replaced with Loggers.
   637  */
   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
   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)
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
   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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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
  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  */
  1437 typedef struct pkix_ClassTable_EntryStruct pkix_ClassTable_Entry;
  1438 struct pkix_ClassTable_EntryStruct {
  1439         char *description;
  1440         PKIX_Int32 objCounter;
  1441         PKIX_Int32 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 };
  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];
  1457 #define MAX_STACK_DEPTH         1000
  1459 extern PRLogModuleInfo *pkixLog;
  1461 #define PKIX_MAGIC_HEADER           LL_INIT(0xFEEDC0FF, 0xEEFACADE)
  1462 #define PKIX_MAGIC_HEADER_DESTROYED LL_INIT(0xBAADF00D, 0xDEADBEEF)
  1464 /* see source file for function documentation */
  1466 PKIX_Error *
  1467 pkix_IsCertSelfIssued(
  1468         PKIX_PL_Cert *cert,
  1469         PKIX_Boolean *pSelfIssued,
  1470         void *plContext);
  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);
  1482 PKIX_Error *
  1483 pkix_CheckTypes(
  1484         PKIX_PL_Object *first,
  1485         PKIX_PL_Object *second,
  1486         PKIX_UInt32 type,
  1487         void *plContext);
  1489 PKIX_Error *
  1490 pkix_CheckType(
  1491         PKIX_PL_Object *object,
  1492         PKIX_UInt32 type,
  1493         void *plContext);
  1495 PKIX_Error *
  1496 pkix_hash(
  1497         const unsigned char *bytes,
  1498         PKIX_UInt32 length,
  1499         PKIX_UInt32 *hash,
  1500         void *plContext);
  1502 PKIX_Error *
  1503 pkix_duplicateImmutable(
  1504         PKIX_PL_Object *object,
  1505         PKIX_PL_Object **pNewObject,
  1506         void *plContext);
  1508 PKIX_UInt32
  1509 pkix_countArray(void **array);
  1511 PKIX_UInt32
  1512 pkix_hex2i(char c);
  1514 char
  1515 pkix_i2hex(char c);
  1517 PKIX_Boolean
  1518 pkix_isPlaintext(unsigned char c, PKIX_Boolean debug);
  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);
  1529 PKIX_Error *
  1530 pkix_CacheCertChain_Remove(
  1531         PKIX_PL_Cert* targetCert,
  1532         PKIX_List* anchors,
  1533         void *plContext);
  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);
  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);
  1552 PKIX_Error *
  1553 pkix_CacheCert_Add(
  1554         PKIX_CertStore *store,
  1555         PKIX_ComCertSelParams *certSelParams,
  1556         PKIX_List* certs,
  1557         void *plContext);
  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);
  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);
  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
  1584 #ifdef __cplusplus
  1586 #endif
  1588 #endif /* _PKIX_TOOLS_H */

mercurial