michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: /* michael@0: * pkix_valparams.c michael@0: * michael@0: * Validate Params Object Functions michael@0: * michael@0: */ michael@0: michael@0: #include "pkix_valparams.h" michael@0: michael@0: /* --Private-Functions-------------------------------------------- */ michael@0: michael@0: /* michael@0: * FUNCTION: pkix_ValidateParams_Destroy michael@0: * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h) michael@0: */ michael@0: static PKIX_Error * michael@0: pkix_ValidateParams_Destroy( michael@0: PKIX_PL_Object *object, michael@0: void *plContext) michael@0: { michael@0: PKIX_ValidateParams *params = NULL; michael@0: michael@0: PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Destroy"); michael@0: PKIX_NULLCHECK_ONE(object); michael@0: michael@0: /* Check that this object is a validate params object */ michael@0: PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext), michael@0: PKIX_OBJECTNOTVALIDATEPARAMS); michael@0: michael@0: params = (PKIX_ValidateParams *)object; michael@0: michael@0: PKIX_DECREF(params->procParams); michael@0: PKIX_DECREF(params->chain); michael@0: michael@0: cleanup: michael@0: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: } michael@0: michael@0: /* michael@0: * FUNCTION: pkix_ValidateParams_Equals michael@0: * (see comments for PKIX_PL_EqualsCallback in pkix_pl_system.h) michael@0: */ michael@0: static PKIX_Error * michael@0: pkix_ValidateParams_Equals( michael@0: PKIX_PL_Object *first, michael@0: PKIX_PL_Object *second, michael@0: PKIX_Boolean *pResult, michael@0: void *plContext) michael@0: { michael@0: PKIX_UInt32 secondType; michael@0: PKIX_Boolean cmpResult; michael@0: PKIX_ValidateParams *firstValParams = NULL; michael@0: PKIX_ValidateParams *secondValParams = NULL; michael@0: michael@0: PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Equals"); michael@0: PKIX_NULLCHECK_THREE(first, second, pResult); michael@0: michael@0: PKIX_CHECK(pkix_CheckType(first, PKIX_VALIDATEPARAMS_TYPE, plContext), michael@0: PKIX_FIRSTOBJECTNOTVALIDATEPARAMS); michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_GetType(second, &secondType, plContext), michael@0: PKIX_COULDNOTGETTYPEOFSECONDARGUMENT); michael@0: michael@0: *pResult = PKIX_FALSE; michael@0: michael@0: if (secondType != PKIX_VALIDATEPARAMS_TYPE) goto cleanup; michael@0: michael@0: firstValParams = (PKIX_ValidateParams *)first; michael@0: secondValParams = (PKIX_ValidateParams *)second; michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_Equals michael@0: ((PKIX_PL_Object *)firstValParams->procParams, michael@0: (PKIX_PL_Object *)secondValParams->procParams, michael@0: &cmpResult, michael@0: plContext), michael@0: PKIX_OBJECTEQUALSFAILED); michael@0: michael@0: if (!cmpResult) goto cleanup; michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_Equals michael@0: ((PKIX_PL_Object *)firstValParams->chain, michael@0: (PKIX_PL_Object *)secondValParams->chain, michael@0: &cmpResult, michael@0: plContext), michael@0: PKIX_OBJECTEQUALSFAILED); michael@0: michael@0: if (!cmpResult) goto cleanup; michael@0: michael@0: *pResult = cmpResult; michael@0: michael@0: cleanup: michael@0: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: } michael@0: michael@0: /* michael@0: * FUNCTION: pkix_ValidateParams_Hashcode michael@0: * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h) michael@0: */ michael@0: static PKIX_Error * michael@0: pkix_ValidateParams_Hashcode( michael@0: PKIX_PL_Object *object, michael@0: PKIX_UInt32 *pHashcode, michael@0: void *plContext) michael@0: { michael@0: PKIX_ValidateParams *valParams = NULL; michael@0: PKIX_UInt32 hash = 0; michael@0: PKIX_UInt32 procParamsHash = 0; michael@0: PKIX_UInt32 chainHash = 0; michael@0: michael@0: PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Hashcode"); michael@0: PKIX_NULLCHECK_TWO(object, pHashcode); michael@0: michael@0: PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext), michael@0: PKIX_OBJECTNOTVALIDATEPARAMS); michael@0: michael@0: valParams = (PKIX_ValidateParams*)object; michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_Hashcode michael@0: ((PKIX_PL_Object *)valParams->procParams, michael@0: &procParamsHash, michael@0: plContext), michael@0: PKIX_OBJECTHASHCODEFAILED); michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_Hashcode michael@0: ((PKIX_PL_Object *)valParams->chain, michael@0: &chainHash, michael@0: plContext), michael@0: PKIX_OBJECTHASHCODEFAILED); michael@0: michael@0: hash = 31 * procParamsHash + chainHash; michael@0: michael@0: *pHashcode = hash; michael@0: michael@0: cleanup: michael@0: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: } michael@0: michael@0: /* michael@0: * FUNCTION: pkix_ValidateParams_ToString michael@0: * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h) michael@0: */ michael@0: static PKIX_Error * michael@0: pkix_ValidateParams_ToString( michael@0: PKIX_PL_Object *object, michael@0: PKIX_PL_String **pString, michael@0: void *plContext) michael@0: { michael@0: PKIX_ValidateParams *valParams = NULL; michael@0: char *asciiFormat = NULL; michael@0: PKIX_PL_String *formatString = NULL; michael@0: PKIX_PL_String *valParamsString = NULL; michael@0: michael@0: PKIX_PL_String *procParamsString = NULL; michael@0: PKIX_PL_String *chainString = NULL; michael@0: michael@0: PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_ToString"); michael@0: PKIX_NULLCHECK_TWO(object, pString); michael@0: michael@0: PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext), michael@0: PKIX_OBJECTNOTVALIDATEPARAMS); michael@0: michael@0: asciiFormat = michael@0: "[\n" michael@0: "\tProcessing Params: \n" michael@0: "\t********BEGIN PROCESSING PARAMS********\n" michael@0: "\t\t%s\n" michael@0: "\t********END PROCESSING PARAMS********\n" michael@0: "\tChain: \t\t%s\n" michael@0: "]\n"; michael@0: michael@0: PKIX_CHECK(PKIX_PL_String_Create michael@0: (PKIX_ESCASCII, michael@0: asciiFormat, michael@0: 0, michael@0: &formatString, michael@0: plContext), michael@0: PKIX_STRINGCREATEFAILED); michael@0: michael@0: valParams = (PKIX_ValidateParams*)object; michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_ToString michael@0: ((PKIX_PL_Object*)valParams->procParams, michael@0: &procParamsString, michael@0: plContext), michael@0: PKIX_OBJECTTOSTRINGFAILED); michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_ToString michael@0: ((PKIX_PL_Object *)valParams->chain, michael@0: &chainString, michael@0: plContext), michael@0: PKIX_OBJECTTOSTRINGFAILED); michael@0: michael@0: PKIX_CHECK(PKIX_PL_Sprintf michael@0: (&valParamsString, michael@0: plContext, michael@0: formatString, michael@0: procParamsString, michael@0: chainString), michael@0: PKIX_SPRINTFFAILED); michael@0: michael@0: *pString = valParamsString; michael@0: michael@0: cleanup: michael@0: michael@0: PKIX_DECREF(formatString); michael@0: PKIX_DECREF(procParamsString); michael@0: PKIX_DECREF(chainString); michael@0: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: } michael@0: michael@0: /* michael@0: * FUNCTION: pkix_ValidateParams_RegisterSelf michael@0: * DESCRIPTION: michael@0: * Registers PKIX_VALIDATEPARAMS_TYPE and its related functions with michael@0: * systemClasses[] michael@0: * THREAD SAFETY: michael@0: * Not Thread Safe - for performance and complexity reasons michael@0: * michael@0: * Since this function is only called by PKIX_PL_Initialize, which should michael@0: * only be called once, it is acceptable that this function is not michael@0: * thread-safe. michael@0: */ michael@0: PKIX_Error * michael@0: pkix_ValidateParams_RegisterSelf(void *plContext) michael@0: { michael@0: michael@0: extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; michael@0: pkix_ClassTable_Entry entry; michael@0: michael@0: PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_RegisterSelf"); michael@0: michael@0: entry.description = "ValidateParams"; michael@0: entry.objCounter = 0; michael@0: entry.typeObjectSize = sizeof(PKIX_ValidateParams); michael@0: entry.destructor = pkix_ValidateParams_Destroy; michael@0: entry.equalsFunction = pkix_ValidateParams_Equals; michael@0: entry.hashcodeFunction = pkix_ValidateParams_Hashcode; michael@0: entry.toStringFunction = pkix_ValidateParams_ToString; michael@0: entry.comparator = NULL; michael@0: entry.duplicateFunction = NULL; michael@0: michael@0: systemClasses[PKIX_VALIDATEPARAMS_TYPE] = entry; michael@0: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: } michael@0: michael@0: /* --Public-Functions--------------------------------------------- */ michael@0: michael@0: /* michael@0: * FUNCTION: PKIX_ValidateParams_Create (see comments in pkix_params.h) michael@0: */ michael@0: PKIX_Error * michael@0: PKIX_ValidateParams_Create( michael@0: PKIX_ProcessingParams *procParams, michael@0: PKIX_List *chain, michael@0: PKIX_ValidateParams **pParams, michael@0: void *plContext) michael@0: { michael@0: PKIX_ValidateParams *params = NULL; michael@0: michael@0: PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_Create"); michael@0: PKIX_NULLCHECK_THREE(procParams, chain, pParams); michael@0: michael@0: PKIX_CHECK(PKIX_PL_Object_Alloc michael@0: (PKIX_VALIDATEPARAMS_TYPE, michael@0: sizeof (PKIX_ValidateParams), michael@0: (PKIX_PL_Object **)¶ms, michael@0: plContext), michael@0: PKIX_COULDNOTCREATEVALIDATEPARAMSOBJECT); michael@0: michael@0: /* initialize fields */ michael@0: PKIX_INCREF(procParams); michael@0: params->procParams = procParams; michael@0: michael@0: PKIX_INCREF(chain); michael@0: params->chain = chain; michael@0: michael@0: *pParams = params; michael@0: params = NULL; michael@0: michael@0: cleanup: michael@0: michael@0: PKIX_DECREF(params); michael@0: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: michael@0: } michael@0: michael@0: /* michael@0: * FUNCTION: PKIX_ValidateParams_GetProcessingParams michael@0: * (see comments in pkix_params.h) michael@0: */ michael@0: PKIX_Error * michael@0: PKIX_ValidateParams_GetProcessingParams( michael@0: PKIX_ValidateParams *valParams, michael@0: PKIX_ProcessingParams **pProcParams, michael@0: void *plContext) michael@0: { michael@0: PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_GetProcessingParams"); michael@0: PKIX_NULLCHECK_TWO(valParams, pProcParams); michael@0: michael@0: PKIX_INCREF(valParams->procParams); michael@0: michael@0: *pProcParams = valParams->procParams; michael@0: michael@0: cleanup: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: } michael@0: michael@0: /* michael@0: * FUNCTION: PKIX_ValidateParams_GetCertChain (see comments in pkix_params.h) michael@0: */ michael@0: PKIX_Error * michael@0: PKIX_ValidateParams_GetCertChain( michael@0: PKIX_ValidateParams *valParams, michael@0: PKIX_List **pChain, michael@0: void *plContext) michael@0: { michael@0: PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_GetCertChain"); michael@0: PKIX_NULLCHECK_TWO(valParams, pChain); michael@0: michael@0: PKIX_INCREF(valParams->chain); michael@0: michael@0: *pChain = valParams->chain; michael@0: michael@0: cleanup: michael@0: PKIX_RETURN(VALIDATEPARAMS); michael@0: }