1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/security/nss/lib/libpkix/pkix/params/pkix_valparams.c Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,335 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 +/* 1.8 + * pkix_valparams.c 1.9 + * 1.10 + * Validate Params Object Functions 1.11 + * 1.12 + */ 1.13 + 1.14 +#include "pkix_valparams.h" 1.15 + 1.16 +/* --Private-Functions-------------------------------------------- */ 1.17 + 1.18 +/* 1.19 + * FUNCTION: pkix_ValidateParams_Destroy 1.20 + * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h) 1.21 + */ 1.22 +static PKIX_Error * 1.23 +pkix_ValidateParams_Destroy( 1.24 + PKIX_PL_Object *object, 1.25 + void *plContext) 1.26 +{ 1.27 + PKIX_ValidateParams *params = NULL; 1.28 + 1.29 + PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Destroy"); 1.30 + PKIX_NULLCHECK_ONE(object); 1.31 + 1.32 + /* Check that this object is a validate params object */ 1.33 + PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext), 1.34 + PKIX_OBJECTNOTVALIDATEPARAMS); 1.35 + 1.36 + params = (PKIX_ValidateParams *)object; 1.37 + 1.38 + PKIX_DECREF(params->procParams); 1.39 + PKIX_DECREF(params->chain); 1.40 + 1.41 +cleanup: 1.42 + 1.43 + PKIX_RETURN(VALIDATEPARAMS); 1.44 +} 1.45 + 1.46 +/* 1.47 + * FUNCTION: pkix_ValidateParams_Equals 1.48 + * (see comments for PKIX_PL_EqualsCallback in pkix_pl_system.h) 1.49 + */ 1.50 +static PKIX_Error * 1.51 +pkix_ValidateParams_Equals( 1.52 + PKIX_PL_Object *first, 1.53 + PKIX_PL_Object *second, 1.54 + PKIX_Boolean *pResult, 1.55 + void *plContext) 1.56 +{ 1.57 + PKIX_UInt32 secondType; 1.58 + PKIX_Boolean cmpResult; 1.59 + PKIX_ValidateParams *firstValParams = NULL; 1.60 + PKIX_ValidateParams *secondValParams = NULL; 1.61 + 1.62 + PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Equals"); 1.63 + PKIX_NULLCHECK_THREE(first, second, pResult); 1.64 + 1.65 + PKIX_CHECK(pkix_CheckType(first, PKIX_VALIDATEPARAMS_TYPE, plContext), 1.66 + PKIX_FIRSTOBJECTNOTVALIDATEPARAMS); 1.67 + 1.68 + PKIX_CHECK(PKIX_PL_Object_GetType(second, &secondType, plContext), 1.69 + PKIX_COULDNOTGETTYPEOFSECONDARGUMENT); 1.70 + 1.71 + *pResult = PKIX_FALSE; 1.72 + 1.73 + if (secondType != PKIX_VALIDATEPARAMS_TYPE) goto cleanup; 1.74 + 1.75 + firstValParams = (PKIX_ValidateParams *)first; 1.76 + secondValParams = (PKIX_ValidateParams *)second; 1.77 + 1.78 + PKIX_CHECK(PKIX_PL_Object_Equals 1.79 + ((PKIX_PL_Object *)firstValParams->procParams, 1.80 + (PKIX_PL_Object *)secondValParams->procParams, 1.81 + &cmpResult, 1.82 + plContext), 1.83 + PKIX_OBJECTEQUALSFAILED); 1.84 + 1.85 + if (!cmpResult) goto cleanup; 1.86 + 1.87 + PKIX_CHECK(PKIX_PL_Object_Equals 1.88 + ((PKIX_PL_Object *)firstValParams->chain, 1.89 + (PKIX_PL_Object *)secondValParams->chain, 1.90 + &cmpResult, 1.91 + plContext), 1.92 + PKIX_OBJECTEQUALSFAILED); 1.93 + 1.94 + if (!cmpResult) goto cleanup; 1.95 + 1.96 + *pResult = cmpResult; 1.97 + 1.98 +cleanup: 1.99 + 1.100 + PKIX_RETURN(VALIDATEPARAMS); 1.101 +} 1.102 + 1.103 +/* 1.104 + * FUNCTION: pkix_ValidateParams_Hashcode 1.105 + * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h) 1.106 + */ 1.107 +static PKIX_Error * 1.108 +pkix_ValidateParams_Hashcode( 1.109 + PKIX_PL_Object *object, 1.110 + PKIX_UInt32 *pHashcode, 1.111 + void *plContext) 1.112 +{ 1.113 + PKIX_ValidateParams *valParams = NULL; 1.114 + PKIX_UInt32 hash = 0; 1.115 + PKIX_UInt32 procParamsHash = 0; 1.116 + PKIX_UInt32 chainHash = 0; 1.117 + 1.118 + PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Hashcode"); 1.119 + PKIX_NULLCHECK_TWO(object, pHashcode); 1.120 + 1.121 + PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext), 1.122 + PKIX_OBJECTNOTVALIDATEPARAMS); 1.123 + 1.124 + valParams = (PKIX_ValidateParams*)object; 1.125 + 1.126 + PKIX_CHECK(PKIX_PL_Object_Hashcode 1.127 + ((PKIX_PL_Object *)valParams->procParams, 1.128 + &procParamsHash, 1.129 + plContext), 1.130 + PKIX_OBJECTHASHCODEFAILED); 1.131 + 1.132 + PKIX_CHECK(PKIX_PL_Object_Hashcode 1.133 + ((PKIX_PL_Object *)valParams->chain, 1.134 + &chainHash, 1.135 + plContext), 1.136 + PKIX_OBJECTHASHCODEFAILED); 1.137 + 1.138 + hash = 31 * procParamsHash + chainHash; 1.139 + 1.140 + *pHashcode = hash; 1.141 + 1.142 +cleanup: 1.143 + 1.144 + PKIX_RETURN(VALIDATEPARAMS); 1.145 +} 1.146 + 1.147 +/* 1.148 + * FUNCTION: pkix_ValidateParams_ToString 1.149 + * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h) 1.150 + */ 1.151 +static PKIX_Error * 1.152 +pkix_ValidateParams_ToString( 1.153 + PKIX_PL_Object *object, 1.154 + PKIX_PL_String **pString, 1.155 + void *plContext) 1.156 +{ 1.157 + PKIX_ValidateParams *valParams = NULL; 1.158 + char *asciiFormat = NULL; 1.159 + PKIX_PL_String *formatString = NULL; 1.160 + PKIX_PL_String *valParamsString = NULL; 1.161 + 1.162 + PKIX_PL_String *procParamsString = NULL; 1.163 + PKIX_PL_String *chainString = NULL; 1.164 + 1.165 + PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_ToString"); 1.166 + PKIX_NULLCHECK_TWO(object, pString); 1.167 + 1.168 + PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext), 1.169 + PKIX_OBJECTNOTVALIDATEPARAMS); 1.170 + 1.171 + asciiFormat = 1.172 + "[\n" 1.173 + "\tProcessing Params: \n" 1.174 + "\t********BEGIN PROCESSING PARAMS********\n" 1.175 + "\t\t%s\n" 1.176 + "\t********END PROCESSING PARAMS********\n" 1.177 + "\tChain: \t\t%s\n" 1.178 + "]\n"; 1.179 + 1.180 + PKIX_CHECK(PKIX_PL_String_Create 1.181 + (PKIX_ESCASCII, 1.182 + asciiFormat, 1.183 + 0, 1.184 + &formatString, 1.185 + plContext), 1.186 + PKIX_STRINGCREATEFAILED); 1.187 + 1.188 + valParams = (PKIX_ValidateParams*)object; 1.189 + 1.190 + PKIX_CHECK(PKIX_PL_Object_ToString 1.191 + ((PKIX_PL_Object*)valParams->procParams, 1.192 + &procParamsString, 1.193 + plContext), 1.194 + PKIX_OBJECTTOSTRINGFAILED); 1.195 + 1.196 + PKIX_CHECK(PKIX_PL_Object_ToString 1.197 + ((PKIX_PL_Object *)valParams->chain, 1.198 + &chainString, 1.199 + plContext), 1.200 + PKIX_OBJECTTOSTRINGFAILED); 1.201 + 1.202 + PKIX_CHECK(PKIX_PL_Sprintf 1.203 + (&valParamsString, 1.204 + plContext, 1.205 + formatString, 1.206 + procParamsString, 1.207 + chainString), 1.208 + PKIX_SPRINTFFAILED); 1.209 + 1.210 + *pString = valParamsString; 1.211 + 1.212 +cleanup: 1.213 + 1.214 + PKIX_DECREF(formatString); 1.215 + PKIX_DECREF(procParamsString); 1.216 + PKIX_DECREF(chainString); 1.217 + 1.218 + PKIX_RETURN(VALIDATEPARAMS); 1.219 +} 1.220 + 1.221 +/* 1.222 + * FUNCTION: pkix_ValidateParams_RegisterSelf 1.223 + * DESCRIPTION: 1.224 + * Registers PKIX_VALIDATEPARAMS_TYPE and its related functions with 1.225 + * systemClasses[] 1.226 + * THREAD SAFETY: 1.227 + * Not Thread Safe - for performance and complexity reasons 1.228 + * 1.229 + * Since this function is only called by PKIX_PL_Initialize, which should 1.230 + * only be called once, it is acceptable that this function is not 1.231 + * thread-safe. 1.232 + */ 1.233 +PKIX_Error * 1.234 +pkix_ValidateParams_RegisterSelf(void *plContext) 1.235 +{ 1.236 + 1.237 + extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES]; 1.238 + pkix_ClassTable_Entry entry; 1.239 + 1.240 + PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_RegisterSelf"); 1.241 + 1.242 + entry.description = "ValidateParams"; 1.243 + entry.objCounter = 0; 1.244 + entry.typeObjectSize = sizeof(PKIX_ValidateParams); 1.245 + entry.destructor = pkix_ValidateParams_Destroy; 1.246 + entry.equalsFunction = pkix_ValidateParams_Equals; 1.247 + entry.hashcodeFunction = pkix_ValidateParams_Hashcode; 1.248 + entry.toStringFunction = pkix_ValidateParams_ToString; 1.249 + entry.comparator = NULL; 1.250 + entry.duplicateFunction = NULL; 1.251 + 1.252 + systemClasses[PKIX_VALIDATEPARAMS_TYPE] = entry; 1.253 + 1.254 + PKIX_RETURN(VALIDATEPARAMS); 1.255 +} 1.256 + 1.257 +/* --Public-Functions--------------------------------------------- */ 1.258 + 1.259 +/* 1.260 + * FUNCTION: PKIX_ValidateParams_Create (see comments in pkix_params.h) 1.261 + */ 1.262 +PKIX_Error * 1.263 +PKIX_ValidateParams_Create( 1.264 + PKIX_ProcessingParams *procParams, 1.265 + PKIX_List *chain, 1.266 + PKIX_ValidateParams **pParams, 1.267 + void *plContext) 1.268 +{ 1.269 + PKIX_ValidateParams *params = NULL; 1.270 + 1.271 + PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_Create"); 1.272 + PKIX_NULLCHECK_THREE(procParams, chain, pParams); 1.273 + 1.274 + PKIX_CHECK(PKIX_PL_Object_Alloc 1.275 + (PKIX_VALIDATEPARAMS_TYPE, 1.276 + sizeof (PKIX_ValidateParams), 1.277 + (PKIX_PL_Object **)¶ms, 1.278 + plContext), 1.279 + PKIX_COULDNOTCREATEVALIDATEPARAMSOBJECT); 1.280 + 1.281 + /* initialize fields */ 1.282 + PKIX_INCREF(procParams); 1.283 + params->procParams = procParams; 1.284 + 1.285 + PKIX_INCREF(chain); 1.286 + params->chain = chain; 1.287 + 1.288 + *pParams = params; 1.289 + params = NULL; 1.290 + 1.291 +cleanup: 1.292 + 1.293 + PKIX_DECREF(params); 1.294 + 1.295 + PKIX_RETURN(VALIDATEPARAMS); 1.296 + 1.297 +} 1.298 + 1.299 +/* 1.300 + * FUNCTION: PKIX_ValidateParams_GetProcessingParams 1.301 + * (see comments in pkix_params.h) 1.302 + */ 1.303 +PKIX_Error * 1.304 +PKIX_ValidateParams_GetProcessingParams( 1.305 + PKIX_ValidateParams *valParams, 1.306 + PKIX_ProcessingParams **pProcParams, 1.307 + void *plContext) 1.308 +{ 1.309 + PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_GetProcessingParams"); 1.310 + PKIX_NULLCHECK_TWO(valParams, pProcParams); 1.311 + 1.312 + PKIX_INCREF(valParams->procParams); 1.313 + 1.314 + *pProcParams = valParams->procParams; 1.315 + 1.316 +cleanup: 1.317 + PKIX_RETURN(VALIDATEPARAMS); 1.318 +} 1.319 + 1.320 +/* 1.321 + * FUNCTION: PKIX_ValidateParams_GetCertChain (see comments in pkix_params.h) 1.322 + */ 1.323 +PKIX_Error * 1.324 +PKIX_ValidateParams_GetCertChain( 1.325 + PKIX_ValidateParams *valParams, 1.326 + PKIX_List **pChain, 1.327 + void *plContext) 1.328 +{ 1.329 + PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_GetCertChain"); 1.330 + PKIX_NULLCHECK_TWO(valParams, pChain); 1.331 + 1.332 + PKIX_INCREF(valParams->chain); 1.333 + 1.334 + *pChain = valParams->chain; 1.335 + 1.336 +cleanup: 1.337 + PKIX_RETURN(VALIDATEPARAMS); 1.338 +}