comparison nss/lib/libpkix/pkix/results/pkix_buildresult.c @ 0:1e5118fa0cb1

This is NSS with a Cmake Buildsyste To compile a static NSS library for Windows we've used the Chromium-NSS fork and added a Cmake buildsystem to compile it statically for Windows. See README.chromium for chromium changes and README.trustbridge for our modifications.
author Andre Heinecke <andre.heinecke@intevation.de>
date Mon, 28 Jul 2014 10:47:06 +0200
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:1e5118fa0cb1
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_buildresult.c
6 *
7 * BuildResult Object Functions
8 *
9 */
10
11 #include "pkix_buildresult.h"
12
13 /* --Private-Functions-------------------------------------------- */
14
15 /*
16 * FUNCTION: pkix_BuildResult_Destroy
17 * (see comments for PKIX_PL_DestructorCallback in pkix_pl_system.h)
18 */
19 static PKIX_Error *
20 pkix_BuildResult_Destroy(
21 PKIX_PL_Object *object,
22 void *plContext)
23 {
24 PKIX_BuildResult *result = NULL;
25
26 PKIX_ENTER(BUILDRESULT, "pkix_BuildResult_Destroy");
27 PKIX_NULLCHECK_ONE(object);
28
29 /* Check that this object is a build result object */
30 PKIX_CHECK(pkix_CheckType(object, PKIX_BUILDRESULT_TYPE, plContext),
31 PKIX_OBJECTNOTBUILDRESULT);
32
33 result = (PKIX_BuildResult *)object;
34
35 PKIX_DECREF(result->valResult);
36 PKIX_DECREF(result->certChain);
37
38 cleanup:
39
40 PKIX_RETURN(BUILDRESULT);
41 }
42
43 /*
44 * FUNCTION: pkix_BuildResult_Equals
45 * (see comments for PKIX_PL_EqualsCallback in pkix_pl_system.h)
46 */
47 static PKIX_Error *
48 pkix_BuildResult_Equals(
49 PKIX_PL_Object *first,
50 PKIX_PL_Object *second,
51 PKIX_Boolean *pResult,
52 void *plContext)
53 {
54 PKIX_UInt32 secondType;
55 PKIX_Boolean cmpResult;
56 PKIX_BuildResult *firstBuildResult = NULL;
57 PKIX_BuildResult *secondBuildResult = NULL;
58
59 PKIX_ENTER(BUILDRESULT, "pkix_BuildResult_Equals");
60 PKIX_NULLCHECK_THREE(first, second, pResult);
61
62 PKIX_CHECK(pkix_CheckType(first, PKIX_BUILDRESULT_TYPE, plContext),
63 PKIX_FIRSTOBJECTNOTBUILDRESULT);
64
65 PKIX_CHECK(PKIX_PL_Object_GetType(second, &secondType, plContext),
66 PKIX_COULDNOTGETTYPEOFSECONDARGUMENT);
67
68 *pResult = PKIX_FALSE;
69
70 if (secondType != PKIX_BUILDRESULT_TYPE) goto cleanup;
71
72 firstBuildResult = (PKIX_BuildResult *)first;
73 secondBuildResult = (PKIX_BuildResult *)second;
74
75 PKIX_CHECK(PKIX_PL_Object_Equals
76 ((PKIX_PL_Object *)firstBuildResult->valResult,
77 (PKIX_PL_Object *)secondBuildResult->valResult,
78 &cmpResult,
79 plContext),
80 PKIX_OBJECTEQUALSFAILED);
81
82 if (!cmpResult) goto cleanup;
83
84 PKIX_CHECK(PKIX_PL_Object_Equals
85 ((PKIX_PL_Object *)firstBuildResult->certChain,
86 (PKIX_PL_Object *)secondBuildResult->certChain,
87 &cmpResult,
88 plContext),
89 PKIX_OBJECTEQUALSFAILED);
90
91 if (!cmpResult) goto cleanup;
92
93 /*
94 * The remaining case is that both are null,
95 * which we consider equality.
96 * cmpResult = PKIX_TRUE;
97 */
98
99 *pResult = cmpResult;
100
101 cleanup:
102
103 PKIX_RETURN(BUILDRESULT);
104 }
105
106 /*
107 * FUNCTION: pkix_BuildResult_Hashcode
108 * (see comments for PKIX_PL_HashcodeCallback in pkix_pl_system.h)
109 */
110 static PKIX_Error *
111 pkix_BuildResult_Hashcode(
112 PKIX_PL_Object *object,
113 PKIX_UInt32 *pHashcode,
114 void *plContext)
115 {
116 PKIX_BuildResult *buildResult = NULL;
117 PKIX_UInt32 hash = 0;
118 PKIX_UInt32 valResultHash = 0;
119 PKIX_UInt32 certChainHash = 0;
120
121 PKIX_ENTER(BUILDRESULT, "pkix_BuildResult_Hashcode");
122 PKIX_NULLCHECK_TWO(object, pHashcode);
123
124 PKIX_CHECK(pkix_CheckType(object, PKIX_BUILDRESULT_TYPE, plContext),
125 PKIX_OBJECTNOTBUILDRESULT);
126
127 buildResult = (PKIX_BuildResult*)object;
128
129 PKIX_CHECK(PKIX_PL_Object_Hashcode
130 ((PKIX_PL_Object *)buildResult->valResult,
131 &valResultHash,
132 plContext),
133 PKIX_OBJECTHASHCODEFAILED);
134
135 PKIX_CHECK(PKIX_PL_Object_Hashcode
136 ((PKIX_PL_Object *)buildResult->certChain,
137 &certChainHash,
138 plContext),
139 PKIX_OBJECTHASHCODEFAILED);
140
141 hash = 31*(31 * valResultHash + certChainHash);
142
143 *pHashcode = hash;
144
145 cleanup:
146
147 PKIX_RETURN(BUILDRESULT);
148 }
149
150 /*
151 * FUNCTION: pkix_BuildResult_ToString
152 * (see comments for PKIX_PL_ToStringCallback in pkix_pl_system.h)
153 */
154 static PKIX_Error *
155 pkix_BuildResult_ToString(
156 PKIX_PL_Object *object,
157 PKIX_PL_String **pString,
158 void *plContext)
159 {
160 PKIX_BuildResult *buildResult = NULL;
161 PKIX_PL_String *formatString = NULL;
162 PKIX_PL_String *buildResultString = NULL;
163
164 PKIX_ValidateResult *valResult = NULL;
165 PKIX_List *certChain = NULL;
166
167 PKIX_PL_String *valResultString = NULL;
168 PKIX_PL_String *certChainString = NULL;
169
170 char *asciiFormat =
171 "[\n"
172 "\tValidateResult: \t\t%s"
173 "\tCertChain: \t\t%s\n"
174 "]\n";
175
176 PKIX_ENTER(BUILDRESULT, "pkix_BuildResult_ToString");
177 PKIX_NULLCHECK_TWO(object, pString);
178
179 PKIX_CHECK(pkix_CheckType(object, PKIX_BUILDRESULT_TYPE, plContext),
180 PKIX_OBJECTNOTBUILDRESULT);
181
182 buildResult = (PKIX_BuildResult*)object;
183
184 valResult = buildResult->valResult;
185
186 PKIX_CHECK(PKIX_PL_String_Create
187 (PKIX_ESCASCII, asciiFormat, 0, &formatString, plContext),
188 PKIX_STRINGCREATEFAILED);
189
190 PKIX_CHECK(PKIX_PL_Object_ToString
191 ((PKIX_PL_Object *)valResult, &valResultString, plContext),
192 PKIX_OBJECTTOSTRINGFAILED);
193
194 certChain = buildResult->certChain;
195
196 PKIX_CHECK(PKIX_PL_Object_ToString
197 ((PKIX_PL_Object *)certChain, &certChainString, plContext),
198 PKIX_OBJECTTOSTRINGFAILED);
199
200 PKIX_CHECK(PKIX_PL_Sprintf
201 (&buildResultString,
202 plContext,
203 formatString,
204 valResultString,
205 certChainString),
206 PKIX_SPRINTFFAILED);
207
208 *pString = buildResultString;
209
210 cleanup:
211
212 PKIX_DECREF(formatString);
213 PKIX_DECREF(valResultString);
214 PKIX_DECREF(certChainString);
215
216 PKIX_RETURN(BUILDRESULT);
217 }
218
219 /*
220 * FUNCTION: pkix_BuildResult_RegisterSelf
221 * DESCRIPTION:
222 * Registers PKIX_BUILDRESULT_TYPE and its related functions with
223 * systemClasses[]
224 * THREAD SAFETY:
225 * Not Thread Safe - for performance and complexity reasons
226 *
227 * Since this function is only called by PKIX_PL_Initialize, which should
228 * only be called once, it is acceptable that this function is not
229 * thread-safe.
230 */
231 PKIX_Error *
232 pkix_BuildResult_RegisterSelf(void *plContext)
233 {
234
235 extern pkix_ClassTable_Entry systemClasses[PKIX_NUMTYPES];
236 pkix_ClassTable_Entry entry;
237
238 PKIX_ENTER(BUILDRESULT, "pkix_BuildResult_RegisterSelf");
239
240 entry.description = "BuildResult";
241 entry.objCounter = 0;
242 entry.typeObjectSize = sizeof(PKIX_BuildResult);
243 entry.destructor = pkix_BuildResult_Destroy;
244 entry.equalsFunction = pkix_BuildResult_Equals;
245 entry.hashcodeFunction = pkix_BuildResult_Hashcode;
246 entry.toStringFunction = pkix_BuildResult_ToString;
247 entry.comparator = NULL;
248 entry.duplicateFunction = pkix_duplicateImmutable;
249
250 systemClasses[PKIX_BUILDRESULT_TYPE] = entry;
251
252 PKIX_RETURN(BUILDRESULT);
253 }
254
255 /*
256 * FUNCTION: pkix_BuildResult_Create
257 * DESCRIPTION:
258 *
259 * Creates a new BuildResult Object using the ValidateResult pointed to by
260 * "valResult" and the List pointed to by "certChain", and stores it at
261 * "pResult".
262 *
263 * PARAMETERS
264 * "valResult"
265 * Address of ValidateResult component. Must be non-NULL.
266 * "certChain
267 * Address of List component. Must be non-NULL.
268 * "pResult"
269 * Address where object pointer will be stored. Must be non-NULL.
270 * "plContext"
271 * Platform-specific context pointer.
272 * THREAD SAFETY:
273 * Thread Safe (see Thread Safety Definitions in Programmer's Guide)
274 * RETURNS:
275 * Returns NULL if the function succeeds.
276 * Returns a Fatal Error if the function fails in an unrecoverable way.
277 */
278 PKIX_Error *
279 pkix_BuildResult_Create(
280 PKIX_ValidateResult *valResult,
281 PKIX_List *certChain,
282 PKIX_BuildResult **pResult,
283 void *plContext)
284 {
285 PKIX_BuildResult *result = NULL;
286
287 PKIX_ENTER(BUILDRESULT, "pkix_BuildResult_Create");
288 PKIX_NULLCHECK_THREE(valResult, certChain, pResult);
289
290 PKIX_CHECK(PKIX_PL_Object_Alloc
291 (PKIX_BUILDRESULT_TYPE,
292 sizeof (PKIX_BuildResult),
293 (PKIX_PL_Object **)&result,
294 plContext),
295 PKIX_COULDNOTCREATEBUILDRESULTOBJECT);
296
297 /* initialize fields */
298
299 PKIX_INCREF(valResult);
300 result->valResult = valResult;
301
302 PKIX_INCREF(certChain);
303 result->certChain = certChain;
304
305 PKIX_CHECK(PKIX_List_SetImmutable(result->certChain, plContext),
306 PKIX_LISTSETIMMUTABLEFAILED);
307
308 *pResult = result;
309 result = NULL;
310
311 cleanup:
312
313 PKIX_DECREF(result);
314
315 PKIX_RETURN(BUILDRESULT);
316
317 }
318
319 /* --Public-Functions--------------------------------------------- */
320
321
322 /*
323 * FUNCTION: PKIX_BuildResult_GetValidateResult
324 * (see comments in pkix_result.h)
325 */
326 PKIX_Error *
327 PKIX_BuildResult_GetValidateResult(
328 PKIX_BuildResult *result,
329 PKIX_ValidateResult **pResult,
330 void *plContext)
331 {
332 PKIX_ENTER(BUILDRESULT, "PKIX_BuildResult_GetValidateResult");
333 PKIX_NULLCHECK_TWO(result, pResult);
334
335 PKIX_INCREF(result->valResult);
336 *pResult = result->valResult;
337
338 cleanup:
339 PKIX_RETURN(BUILDRESULT);
340 }
341
342
343
344 /*
345 * FUNCTION: PKIX_BuildResult_GetCertChain
346 * (see comments in pkix_result.h)
347 */
348 PKIX_Error *
349 PKIX_BuildResult_GetCertChain(
350 PKIX_BuildResult *result,
351 PKIX_List **pChain,
352 void *plContext)
353 {
354 PKIX_ENTER(BUILDRESULT, "PKIX_BuildResult_GetCertChain");
355 PKIX_NULLCHECK_TWO(result, pChain);
356
357 PKIX_INCREF(result->certChain);
358 *pChain = result->certChain;
359
360 cleanup:
361 PKIX_RETURN(BUILDRESULT);
362 }
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)