Mercurial > trustbridge > nss-cmake-static
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 } |