security/nss/lib/libpkix/pkix/params/pkix_valparams.c

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

michael@0 1 /* This Source Code Form is subject to the terms of the Mozilla Public
michael@0 2 * License, v. 2.0. If a copy of the MPL was not distributed with this
michael@0 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
michael@0 4 /*
michael@0 5 * pkix_valparams.c
michael@0 6 *
michael@0 7 * Validate Params Object Functions
michael@0 8 *
michael@0 9 */
michael@0 10
michael@0 11 #include "pkix_valparams.h"
michael@0 12
michael@0 13 /* --Private-Functions-------------------------------------------- */
michael@0 14
michael@0 15 /*
michael@0 16 * FUNCTION: pkix_ValidateParams_Destroy
michael@0 17 * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h)
michael@0 18 */
michael@0 19 static PKIX_Error *
michael@0 20 pkix_ValidateParams_Destroy(
michael@0 21 PKIX_PL_Object *object,
michael@0 22 void *plContext)
michael@0 23 {
michael@0 24 PKIX_ValidateParams *params = NULL;
michael@0 25
michael@0 26 PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Destroy");
michael@0 27 PKIX_NULLCHECK_ONE(object);
michael@0 28
michael@0 29 /* Check that this object is a validate params object */
michael@0 30 PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext),
michael@0 31 PKIX_OBJECTNOTVALIDATEPARAMS);
michael@0 32
michael@0 33 params = (PKIX_ValidateParams *)object;
michael@0 34
michael@0 35 PKIX_DECREF(params->procParams);
michael@0 36 PKIX_DECREF(params->chain);
michael@0 37
michael@0 38 cleanup:
michael@0 39
michael@0 40 PKIX_RETURN(VALIDATEPARAMS);
michael@0 41 }
michael@0 42
michael@0 43 /*
michael@0 44 * FUNCTION: pkix_ValidateParams_Equals
michael@0 45 * (see comments for PKIX_PL_EqualsCallback in pkix_pl_system.h)
michael@0 46 */
michael@0 47 static PKIX_Error *
michael@0 48 pkix_ValidateParams_Equals(
michael@0 49 PKIX_PL_Object *first,
michael@0 50 PKIX_PL_Object *second,
michael@0 51 PKIX_Boolean *pResult,
michael@0 52 void *plContext)
michael@0 53 {
michael@0 54 PKIX_UInt32 secondType;
michael@0 55 PKIX_Boolean cmpResult;
michael@0 56 PKIX_ValidateParams *firstValParams = NULL;
michael@0 57 PKIX_ValidateParams *secondValParams = NULL;
michael@0 58
michael@0 59 PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Equals");
michael@0 60 PKIX_NULLCHECK_THREE(first, second, pResult);
michael@0 61
michael@0 62 PKIX_CHECK(pkix_CheckType(first, PKIX_VALIDATEPARAMS_TYPE, plContext),
michael@0 63 PKIX_FIRSTOBJECTNOTVALIDATEPARAMS);
michael@0 64
michael@0 65 PKIX_CHECK(PKIX_PL_Object_GetType(second, &secondType, plContext),
michael@0 66 PKIX_COULDNOTGETTYPEOFSECONDARGUMENT);
michael@0 67
michael@0 68 *pResult = PKIX_FALSE;
michael@0 69
michael@0 70 if (secondType != PKIX_VALIDATEPARAMS_TYPE) goto cleanup;
michael@0 71
michael@0 72 firstValParams = (PKIX_ValidateParams *)first;
michael@0 73 secondValParams = (PKIX_ValidateParams *)second;
michael@0 74
michael@0 75 PKIX_CHECK(PKIX_PL_Object_Equals
michael@0 76 ((PKIX_PL_Object *)firstValParams->procParams,
michael@0 77 (PKIX_PL_Object *)secondValParams->procParams,
michael@0 78 &cmpResult,
michael@0 79 plContext),
michael@0 80 PKIX_OBJECTEQUALSFAILED);
michael@0 81
michael@0 82 if (!cmpResult) goto cleanup;
michael@0 83
michael@0 84 PKIX_CHECK(PKIX_PL_Object_Equals
michael@0 85 ((PKIX_PL_Object *)firstValParams->chain,
michael@0 86 (PKIX_PL_Object *)secondValParams->chain,
michael@0 87 &cmpResult,
michael@0 88 plContext),
michael@0 89 PKIX_OBJECTEQUALSFAILED);
michael@0 90
michael@0 91 if (!cmpResult) goto cleanup;
michael@0 92
michael@0 93 *pResult = cmpResult;
michael@0 94
michael@0 95 cleanup:
michael@0 96
michael@0 97 PKIX_RETURN(VALIDATEPARAMS);
michael@0 98 }
michael@0 99
michael@0 100 /*
michael@0 101 * FUNCTION: pkix_ValidateParams_Hashcode
michael@0 102 * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h)
michael@0 103 */
michael@0 104 static PKIX_Error *
michael@0 105 pkix_ValidateParams_Hashcode(
michael@0 106 PKIX_PL_Object *object,
michael@0 107 PKIX_UInt32 *pHashcode,
michael@0 108 void *plContext)
michael@0 109 {
michael@0 110 PKIX_ValidateParams *valParams = NULL;
michael@0 111 PKIX_UInt32 hash = 0;
michael@0 112 PKIX_UInt32 procParamsHash = 0;
michael@0 113 PKIX_UInt32 chainHash = 0;
michael@0 114
michael@0 115 PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_Hashcode");
michael@0 116 PKIX_NULLCHECK_TWO(object, pHashcode);
michael@0 117
michael@0 118 PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext),
michael@0 119 PKIX_OBJECTNOTVALIDATEPARAMS);
michael@0 120
michael@0 121 valParams = (PKIX_ValidateParams*)object;
michael@0 122
michael@0 123 PKIX_CHECK(PKIX_PL_Object_Hashcode
michael@0 124 ((PKIX_PL_Object *)valParams->procParams,
michael@0 125 &procParamsHash,
michael@0 126 plContext),
michael@0 127 PKIX_OBJECTHASHCODEFAILED);
michael@0 128
michael@0 129 PKIX_CHECK(PKIX_PL_Object_Hashcode
michael@0 130 ((PKIX_PL_Object *)valParams->chain,
michael@0 131 &chainHash,
michael@0 132 plContext),
michael@0 133 PKIX_OBJECTHASHCODEFAILED);
michael@0 134
michael@0 135 hash = 31 * procParamsHash + chainHash;
michael@0 136
michael@0 137 *pHashcode = hash;
michael@0 138
michael@0 139 cleanup:
michael@0 140
michael@0 141 PKIX_RETURN(VALIDATEPARAMS);
michael@0 142 }
michael@0 143
michael@0 144 /*
michael@0 145 * FUNCTION: pkix_ValidateParams_ToString
michael@0 146 * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h)
michael@0 147 */
michael@0 148 static PKIX_Error *
michael@0 149 pkix_ValidateParams_ToString(
michael@0 150 PKIX_PL_Object *object,
michael@0 151 PKIX_PL_String **pString,
michael@0 152 void *plContext)
michael@0 153 {
michael@0 154 PKIX_ValidateParams *valParams = NULL;
michael@0 155 char *asciiFormat = NULL;
michael@0 156 PKIX_PL_String *formatString = NULL;
michael@0 157 PKIX_PL_String *valParamsString = NULL;
michael@0 158
michael@0 159 PKIX_PL_String *procParamsString = NULL;
michael@0 160 PKIX_PL_String *chainString = NULL;
michael@0 161
michael@0 162 PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_ToString");
michael@0 163 PKIX_NULLCHECK_TWO(object, pString);
michael@0 164
michael@0 165 PKIX_CHECK(pkix_CheckType(object, PKIX_VALIDATEPARAMS_TYPE, plContext),
michael@0 166 PKIX_OBJECTNOTVALIDATEPARAMS);
michael@0 167
michael@0 168 asciiFormat =
michael@0 169 "[\n"
michael@0 170 "\tProcessing Params: \n"
michael@0 171 "\t********BEGIN PROCESSING PARAMS********\n"
michael@0 172 "\t\t%s\n"
michael@0 173 "\t********END PROCESSING PARAMS********\n"
michael@0 174 "\tChain: \t\t%s\n"
michael@0 175 "]\n";
michael@0 176
michael@0 177 PKIX_CHECK(PKIX_PL_String_Create
michael@0 178 (PKIX_ESCASCII,
michael@0 179 asciiFormat,
michael@0 180 0,
michael@0 181 &formatString,
michael@0 182 plContext),
michael@0 183 PKIX_STRINGCREATEFAILED);
michael@0 184
michael@0 185 valParams = (PKIX_ValidateParams*)object;
michael@0 186
michael@0 187 PKIX_CHECK(PKIX_PL_Object_ToString
michael@0 188 ((PKIX_PL_Object*)valParams->procParams,
michael@0 189 &procParamsString,
michael@0 190 plContext),
michael@0 191 PKIX_OBJECTTOSTRINGFAILED);
michael@0 192
michael@0 193 PKIX_CHECK(PKIX_PL_Object_ToString
michael@0 194 ((PKIX_PL_Object *)valParams->chain,
michael@0 195 &chainString,
michael@0 196 plContext),
michael@0 197 PKIX_OBJECTTOSTRINGFAILED);
michael@0 198
michael@0 199 PKIX_CHECK(PKIX_PL_Sprintf
michael@0 200 (&valParamsString,
michael@0 201 plContext,
michael@0 202 formatString,
michael@0 203 procParamsString,
michael@0 204 chainString),
michael@0 205 PKIX_SPRINTFFAILED);
michael@0 206
michael@0 207 *pString = valParamsString;
michael@0 208
michael@0 209 cleanup:
michael@0 210
michael@0 211 PKIX_DECREF(formatString);
michael@0 212 PKIX_DECREF(procParamsString);
michael@0 213 PKIX_DECREF(chainString);
michael@0 214
michael@0 215 PKIX_RETURN(VALIDATEPARAMS);
michael@0 216 }
michael@0 217
michael@0 218 /*
michael@0 219 * FUNCTION: pkix_ValidateParams_RegisterSelf
michael@0 220 * DESCRIPTION:
michael@0 221 * Registers PKIX_VALIDATEPARAMS_TYPE and its related functions with
michael@0 222 * systemClasses[]
michael@0 223 * THREAD SAFETY:
michael@0 224 * Not Thread Safe - for performance and complexity reasons
michael@0 225 *
michael@0 226 * Since this function is only called by PKIX_PL_Initialize, which should
michael@0 227 * only be called once, it is acceptable that this function is not
michael@0 228 * thread-safe.
michael@0 229 */
michael@0 230 PKIX_Error *
michael@0 231 pkix_ValidateParams_RegisterSelf(void *plContext)
michael@0 232 {
michael@0 233
michael@0 234 extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES];
michael@0 235 pkix_ClassTable_Entry entry;
michael@0 236
michael@0 237 PKIX_ENTER(VALIDATEPARAMS, "pkix_ValidateParams_RegisterSelf");
michael@0 238
michael@0 239 entry.description = "ValidateParams";
michael@0 240 entry.objCounter = 0;
michael@0 241 entry.typeObjectSize = sizeof(PKIX_ValidateParams);
michael@0 242 entry.destructor = pkix_ValidateParams_Destroy;
michael@0 243 entry.equalsFunction = pkix_ValidateParams_Equals;
michael@0 244 entry.hashcodeFunction = pkix_ValidateParams_Hashcode;
michael@0 245 entry.toStringFunction = pkix_ValidateParams_ToString;
michael@0 246 entry.comparator = NULL;
michael@0 247 entry.duplicateFunction = NULL;
michael@0 248
michael@0 249 systemClasses[PKIX_VALIDATEPARAMS_TYPE] = entry;
michael@0 250
michael@0 251 PKIX_RETURN(VALIDATEPARAMS);
michael@0 252 }
michael@0 253
michael@0 254 /* --Public-Functions--------------------------------------------- */
michael@0 255
michael@0 256 /*
michael@0 257 * FUNCTION: PKIX_ValidateParams_Create (see comments in pkix_params.h)
michael@0 258 */
michael@0 259 PKIX_Error *
michael@0 260 PKIX_ValidateParams_Create(
michael@0 261 PKIX_ProcessingParams *procParams,
michael@0 262 PKIX_List *chain,
michael@0 263 PKIX_ValidateParams **pParams,
michael@0 264 void *plContext)
michael@0 265 {
michael@0 266 PKIX_ValidateParams *params = NULL;
michael@0 267
michael@0 268 PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_Create");
michael@0 269 PKIX_NULLCHECK_THREE(procParams, chain, pParams);
michael@0 270
michael@0 271 PKIX_CHECK(PKIX_PL_Object_Alloc
michael@0 272 (PKIX_VALIDATEPARAMS_TYPE,
michael@0 273 sizeof (PKIX_ValidateParams),
michael@0 274 (PKIX_PL_Object **)&params,
michael@0 275 plContext),
michael@0 276 PKIX_COULDNOTCREATEVALIDATEPARAMSOBJECT);
michael@0 277
michael@0 278 /* initialize fields */
michael@0 279 PKIX_INCREF(procParams);
michael@0 280 params->procParams = procParams;
michael@0 281
michael@0 282 PKIX_INCREF(chain);
michael@0 283 params->chain = chain;
michael@0 284
michael@0 285 *pParams = params;
michael@0 286 params = NULL;
michael@0 287
michael@0 288 cleanup:
michael@0 289
michael@0 290 PKIX_DECREF(params);
michael@0 291
michael@0 292 PKIX_RETURN(VALIDATEPARAMS);
michael@0 293
michael@0 294 }
michael@0 295
michael@0 296 /*
michael@0 297 * FUNCTION: PKIX_ValidateParams_GetProcessingParams
michael@0 298 * (see comments in pkix_params.h)
michael@0 299 */
michael@0 300 PKIX_Error *
michael@0 301 PKIX_ValidateParams_GetProcessingParams(
michael@0 302 PKIX_ValidateParams *valParams,
michael@0 303 PKIX_ProcessingParams **pProcParams,
michael@0 304 void *plContext)
michael@0 305 {
michael@0 306 PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_GetProcessingParams");
michael@0 307 PKIX_NULLCHECK_TWO(valParams, pProcParams);
michael@0 308
michael@0 309 PKIX_INCREF(valParams->procParams);
michael@0 310
michael@0 311 *pProcParams = valParams->procParams;
michael@0 312
michael@0 313 cleanup:
michael@0 314 PKIX_RETURN(VALIDATEPARAMS);
michael@0 315 }
michael@0 316
michael@0 317 /*
michael@0 318 * FUNCTION: PKIX_ValidateParams_GetCertChain (see comments in pkix_params.h)
michael@0 319 */
michael@0 320 PKIX_Error *
michael@0 321 PKIX_ValidateParams_GetCertChain(
michael@0 322 PKIX_ValidateParams *valParams,
michael@0 323 PKIX_List **pChain,
michael@0 324 void *plContext)
michael@0 325 {
michael@0 326 PKIX_ENTER(VALIDATEPARAMS, "PKIX_ValidateParams_GetCertChain");
michael@0 327 PKIX_NULLCHECK_TWO(valParams, pChain);
michael@0 328
michael@0 329 PKIX_INCREF(valParams->chain);
michael@0 330
michael@0 331 *pChain = valParams->chain;
michael@0 332
michael@0 333 cleanup:
michael@0 334 PKIX_RETURN(VALIDATEPARAMS);
michael@0 335 }

mercurial