Mercurial > trustbridge > nss-cmake-static
comparison nss/lib/libpkix/include/pkix_pl_system.h @ 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 * This file defines several platform independent functions to make system | |
6 * calls in a portable manner. | |
7 * | |
8 */ | |
9 | |
10 #ifndef _PKIX_PL_SYSTEM_H | |
11 #define _PKIX_PL_SYSTEM_H | |
12 | |
13 #include "pkixt.h" | |
14 | |
15 #ifdef __cplusplus | |
16 extern "C" { | |
17 #endif | |
18 | |
19 /* General | |
20 * | |
21 * Please refer to the libpkix Programmer's Guide for detailed information | |
22 * about how to use the libpkix library. Certain key warnings and notices from | |
23 * that document are repeated here for emphasis. | |
24 * | |
25 * All identifiers in this file (and all public identifiers defined in | |
26 * libpkix) begin with "PKIX_". Private identifiers only intended for use | |
27 * within the library begin with "pkix_". | |
28 * | |
29 * A function returns NULL upon success, and a PKIX_Error pointer upon failure. | |
30 * | |
31 * Unless otherwise noted, for all accessor (gettor) functions that return a | |
32 * PKIX_PL_Object pointer, callers should assume that this pointer refers to a | |
33 * shared object. Therefore, the caller should treat this shared object as | |
34 * read-only and should not modify this shared object. When done using the | |
35 * shared object, the caller should release the reference to the object by | |
36 * using the PKIX_PL_Object_DecRef function. | |
37 * | |
38 * While a function is executing, if its arguments (or anything referred to by | |
39 * its arguments) are modified, free'd, or destroyed, the function's behavior | |
40 * is undefined. | |
41 * | |
42 */ | |
43 | |
44 /* | |
45 * FUNCTION: PKIX_PL_Initialize | |
46 * DESCRIPTION: | |
47 * | |
48 * XXX If this function is really only meant to be used by PKIX_Initialize, | |
49 * why don't we just put it in a private header file rather than the public | |
50 * API. I think it may confuse users. | |
51 * | |
52 * This function should NOT be called by applications. It is only meant to | |
53 * be used internally. The application needs only to call PKIX_Initialize, | |
54 * which in turn will call this function. | |
55 * | |
56 * This function initializes data structures critical to the operation of | |
57 * libpkix. If initialization is not successful, an Error pointer is | |
58 * returned. This function should only be called once. If it is called more | |
59 * than once, the behavior is undefined. | |
60 * | |
61 * No PKIX_* types and functions should be used before this function is | |
62 * called and returns successfully. | |
63 * | |
64 * PARAMETERS: | |
65 * "platformInitNeeded" | |
66 * Boolean indicating whether platform initialization is to be called | |
67 * "useArenas" | |
68 * Boolean indicating whether allocation is to be done using arenas or | |
69 * individual allocation (malloc). | |
70 * "pPlContext" | |
71 * Address at which platform-specific context pointer is stored. Must be | |
72 * non-NULL. | |
73 * THREAD SAFETY: | |
74 * Not Thread Safe | |
75 * | |
76 * This function assumes that no other thread is calling this function while | |
77 * it is executing. | |
78 * RETURNS: | |
79 * Returns NULL if the function succeeds. | |
80 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
81 */ | |
82 PKIX_Error * | |
83 PKIX_PL_Initialize( | |
84 PKIX_Boolean platformInitNeeded, | |
85 PKIX_Boolean useArenas, | |
86 void **pPlContext); | |
87 | |
88 /* | |
89 * FUNCTION: PKIX_PL_Shutdown | |
90 * DESCRIPTION: | |
91 * | |
92 * XXX If this function is really only meant to be used by PKIX_Shutdown, | |
93 * why don't we just put it in a private header file rather than the public | |
94 * API. I think it may confuse users. | |
95 * | |
96 * This function should NOT be called by applications. It is only meant to | |
97 * be used internally. The application needs only to call PKIX_Shutdown, | |
98 * which in turn will call this function. | |
99 * | |
100 * This function deallocates any memory used by the Portability Layer (PL) | |
101 * component of the libpkix library and shuts down any ongoing operations. | |
102 * This function should only be called once. If it is called more than once, | |
103 * the behavior is undefined. | |
104 * | |
105 * No PKIX_* types and functions should be used after this function is called | |
106 * and returns successfully. | |
107 * | |
108 * PARAMETERS: | |
109 * "platformInitNeeded" | |
110 * Boolean value of whether PKIX initialized NSS: PKIX_TRUE if we | |
111 * called nssInit, PKIX_FALSE otherwise | |
112 * "plContext" | |
113 * Platform-specific context pointer. | |
114 * THREAD SAFETY: | |
115 * Not Thread Safe | |
116 * | |
117 * This function makes use of global variables and should only be called once. | |
118 * RETURNS: | |
119 * Returns NULL if the function succeeds. | |
120 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
121 */ | |
122 PKIX_Error * | |
123 PKIX_PL_Shutdown(void *plContext); | |
124 | |
125 /* standard memory management operations (not reference-counted) */ | |
126 | |
127 /* | |
128 * FUNCTION: PKIX_PL_Malloc | |
129 * DESCRIPTION: | |
130 * | |
131 * Allocates a block of "size" bytes. The bytes are not initialized. A | |
132 * pointer to the newly allocated memory will be stored at "pMemory". The | |
133 * memory allocated by PKIX_PL_Malloc() may only be freed by PKIX_PL_Free(). | |
134 * If "size" equals zero, this function stores NULL at "pMemory". | |
135 * | |
136 * PARAMETERS: | |
137 * "size" | |
138 * Number of bytes to allocate. | |
139 * "pMemory" | |
140 * Address where newly allocated pointer will be stored. Must be non-NULL. | |
141 * "plContext" | |
142 * Platform-specific context pointer. | |
143 * THREAD SAFETY: | |
144 * Thread safety depends on underlying thread safety of platform used by PL. | |
145 * RETURNS: | |
146 * Returns NULL if the function succeeds. | |
147 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
148 */ | |
149 PKIX_Error * | |
150 PKIX_PL_Malloc( | |
151 PKIX_UInt32 size, | |
152 void **pMemory, | |
153 void *plContext); | |
154 | |
155 /* | |
156 * FUNCTION: PKIX_PL_Calloc | |
157 * DESCRIPTION: | |
158 * | |
159 * Allocates memory for an array of "nElem" elements, with each element | |
160 * requiring "elSize" bytes, and with all the bits initialized to zero. A | |
161 * pointer to the newly allocated memory will be stored at "pMemory". The | |
162 * memory allocated by PKIX_PL_Calloc() may only be freed by PKIX_PL_Free(). | |
163 * If "nElem" equals zero or "elSize" equals zero, this function stores NULL | |
164 * at "pMemory". | |
165 * | |
166 * PARAMETERS: | |
167 * "nElem" | |
168 * Number of elements needed. | |
169 * "elSize" | |
170 * Number of bytes needed per element. | |
171 * "pMemory" | |
172 * Address where newly allocated pointer will be stored. Must be non-NULL. | |
173 * "plContext" | |
174 * Platform-specific context pointer. | |
175 * THREAD SAFETY: | |
176 * Thread safety depends on underlying thread safety of platform used by PL. | |
177 * RETURNS: | |
178 * Returns NULL if the function succeeds. | |
179 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
180 */ | |
181 PKIX_Error * | |
182 PKIX_PL_Calloc( | |
183 PKIX_UInt32 nElem, | |
184 PKIX_UInt32 elSize, | |
185 void **pMemory, | |
186 void *plContext); | |
187 | |
188 /* | |
189 * FUNCTION: PKIX_PL_Realloc | |
190 * DESCRIPTION: | |
191 * | |
192 * Resizes an existing block of memory (pointed to by "ptr") to "size" bytes. | |
193 * Stores a pointer to the resized memory at "pNewPtr". The "ptr" must | |
194 * originate from either PKIX_PL_Malloc(), PKIX_PL_Realloc(), or | |
195 * PKIX_PL_Calloc(). If "ptr" is NULL, this function behaves as if | |
196 * PKIX_PL_Malloc were called. If "ptr" is not NULL and "size" equals zero, | |
197 * the memory pointed to by "ptr" is deallocated and this function stores | |
198 * NULL at "pPtr". | |
199 * | |
200 * PARAMETERS: | |
201 * "ptr" | |
202 * A pointer to an existing block of memory. | |
203 * "size" | |
204 * New size in bytes. | |
205 * "pPtr" | |
206 * Address where newly allocated pointer will be stored. Must be non-NULL. | |
207 * "plContext" | |
208 * Platform-specific context pointer. | |
209 * THREAD SAFETY: | |
210 * Thread safety depends on underlying thread safety of platform used by PL. | |
211 * RETURNS: | |
212 * Returns NULL if the function succeeds. | |
213 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
214 */ | |
215 PKIX_Error * | |
216 PKIX_PL_Realloc( | |
217 void *ptr, | |
218 PKIX_UInt32 size, | |
219 void **pNewPtr, | |
220 void *plContext); | |
221 | |
222 /* | |
223 * FUNCTION: PKIX_PL_Free | |
224 * DESCRIPTION: | |
225 * | |
226 * Frees a block of memory pointed to by "ptr". This value must originate with | |
227 * either PKIX_PL_Malloc(), PKIX_PL_Calloc, or PKIX_PL_Realloc(). If "ptr" is | |
228 * NULL, the function has no effect. | |
229 * | |
230 * PARAMETERS: | |
231 * "ptr" | |
232 * A pointer to an existing block of memory. | |
233 * "plContext" | |
234 * Platform-specific context pointer. | |
235 * THREAD SAFETY: | |
236 * Thread safety depends on underlying thread safety of platform used by PL. | |
237 * RETURNS: | |
238 * Returns NULL always. | |
239 */ | |
240 PKIX_Error * | |
241 PKIX_PL_Free( | |
242 void *ptr, | |
243 void *plContext); | |
244 | |
245 /* Callback Types | |
246 * | |
247 * The next few typedefs define function pointer types for the standard | |
248 * functions associated with every object type. See the Implementation | |
249 * Guidelines or the comments below for more information. | |
250 */ | |
251 | |
252 /* | |
253 * TYPE: PKIX_PL_DestructorCallback | |
254 * DESCRIPTION: | |
255 * | |
256 * This callback function destroys (or DecRef's) any pointers contained in | |
257 * the user data for the Object pointed to by "object" before the Object is | |
258 * destroyed. | |
259 * | |
260 * PARAMETERS: | |
261 * "object" | |
262 * Address of Object to destroy. Must be non-NULL. | |
263 * "plContext" | |
264 * Platform-specific context pointer. | |
265 * THREAD SAFETY: | |
266 * Thread Safe | |
267 * | |
268 * Multiple threads must be able to safely call this function without | |
269 * worrying about conflicts (as long as they're not operating on the same | |
270 * object and nobody else is performing an operation on the object at the | |
271 * same time). Both of these conditions should be guaranteed by the fact that | |
272 * the object's ref count was reduced to 0 in a lock that's still held when | |
273 * this callback is called. | |
274 * RETURNS: | |
275 * Returns NULL if the function succeeds. | |
276 * Returns an error if the function fails in a non-fatal way. | |
277 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
278 */ | |
279 typedef PKIX_Error * | |
280 (*PKIX_PL_DestructorCallback)( | |
281 PKIX_PL_Object *object, | |
282 void *plContext); | |
283 | |
284 /* | |
285 * TYPE: PKIX_PL_EqualsCallback | |
286 * DESCRIPTION: | |
287 * | |
288 * This callback function compares the Object pointed to by "firstObject" with | |
289 * the Object pointed to by "secondObject" for equality and stores the result | |
290 * at "pResult" (PKIX_TRUE if equal; PKIX_FALSE if not). | |
291 * | |
292 * PARAMETERS: | |
293 * "firstObject" | |
294 * Address of first object to compare. Must be non-NULL. | |
295 * "secondObject" | |
296 * Address of second object to compare. Must be non-NULL. | |
297 * "pResult" | |
298 * Address where Boolean will be stored. Must be non-NULL. | |
299 * "plContext" | |
300 * Platform-specific context pointer. | |
301 * THREAD SAFETY: | |
302 * Thread Safe | |
303 * | |
304 * Multiple threads must be able to safely call this function without | |
305 * worrying about conflicts, even if they're operating on the same objects. | |
306 * RETURNS: | |
307 * Returns NULL if the function succeeds. | |
308 * Returns an error if the function fails in a non-fatal way. | |
309 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
310 */ | |
311 typedef PKIX_Error * | |
312 (*PKIX_PL_EqualsCallback)( | |
313 PKIX_PL_Object *firstObject, | |
314 PKIX_PL_Object *secondObject, | |
315 PKIX_Boolean *pResult, | |
316 void *plContext); | |
317 | |
318 /* | |
319 * TYPE: PKIX_PL_HashcodeCallback | |
320 * DESCRIPTION: | |
321 * | |
322 * This callback function computes the hashcode of the Object pointed to by | |
323 * "object" and stores the result at "pValue". | |
324 * | |
325 * PARAMETERS: | |
326 * "object" | |
327 * Address of Object whose hashcode is desired. Must be non-NULL. | |
328 * "pValue" | |
329 * Address where PKIX_UInt32 will be stored. Must be non-NULL. | |
330 * "plContext" | |
331 * Platform-specific context pointer. | |
332 * THREAD SAFETY: | |
333 * Thread Safe | |
334 * | |
335 * Multiple threads must be able to safely call this function without | |
336 * worrying about conflicts, even if they're operating on the same object. | |
337 * RETURNS: | |
338 * Returns NULL if the function succeeds. | |
339 * Returns an error if the function fails in a non-fatal way. | |
340 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
341 */ | |
342 typedef PKIX_Error * | |
343 (*PKIX_PL_HashcodeCallback)( | |
344 PKIX_PL_Object *object, | |
345 PKIX_UInt32 *pValue, | |
346 void *plContext); | |
347 | |
348 /* | |
349 * TYPE: PKIX_PL_ToStringCallback | |
350 * DESCRIPTION: | |
351 * | |
352 * This callback function converts the Object pointed to by "object" to a | |
353 * string representation and stores the result at "pString". | |
354 * | |
355 * PARAMETERS: | |
356 * "object" | |
357 * Object to get a string representation from. Must be non-NULL. | |
358 * "pString" | |
359 * Address where object pointer will be stored. Must be non-NULL. | |
360 * "plContext" | |
361 * Platform-specific context pointer. | |
362 * THREAD SAFETY: | |
363 * Thread Safe | |
364 * | |
365 * Multiple threads must be able to safely call this function without | |
366 * worrying about conflicts, even if they're operating on the same object. | |
367 * RETURNS: | |
368 * Returns NULL if the function succeeds. | |
369 * Returns an error if the function fails in a non-fatal way. | |
370 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
371 */ | |
372 typedef PKIX_Error * | |
373 (*PKIX_PL_ToStringCallback)( | |
374 PKIX_PL_Object *object, | |
375 PKIX_PL_String **pString, | |
376 void *plContext); | |
377 | |
378 /* | |
379 * TYPE: PKIX_PL_ComparatorCallback | |
380 * DESCRIPTION: | |
381 * | |
382 * This callback function determines how the Object pointed to by | |
383 * "firstObject" compares to the Object pointed to by "secondObject" and | |
384 * stores the result at "pResult". | |
385 * | |
386 * Result is less than 0 if firstObject < secondObject | |
387 * Result equals 0 if firstObject = secondObject | |
388 * Result is greater than 0 if firstObject > secondObject | |
389 * | |
390 * PARAMETERS: | |
391 * "firstObject" | |
392 * Address of the first Object to compare. Must be non-NULL. | |
393 * "secondObject" | |
394 * Address of the second Object to compare. Must be non-NULL. | |
395 * "pResult" | |
396 * Address where PKIX_Int32 will be stored. Must be non-NULL. | |
397 * "plContext" | |
398 * Platform-specific context pointer. | |
399 * THREAD SAFETY: | |
400 * Thread Safe | |
401 * | |
402 * Multiple threads must be able to safely call this function without | |
403 * worrying about conflicts, even if they're operating on the same objects. | |
404 * RETURNS: | |
405 * Returns NULL if the function succeeds. | |
406 * Returns an error if the function fails in a non-fatal way. | |
407 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
408 */ | |
409 typedef PKIX_Error * | |
410 (*PKIX_PL_ComparatorCallback)( | |
411 PKIX_PL_Object *firstObject, | |
412 PKIX_PL_Object *secondObject, | |
413 PKIX_Int32 *pResult, | |
414 void *plContext); | |
415 | |
416 /* | |
417 * TYPE: PKIX_PL_DuplicateCallback | |
418 * DESCRIPTION: | |
419 * | |
420 * This callback function creates a copy of the Object pointed to by "object" | |
421 * and stores it at "pNewObject". Changes to the copy will not affect the | |
422 * original and vice versa. | |
423 * | |
424 * Note that if "object" is immutable, the Duplicate callback function simply | |
425 * needs to increment the reference count on "object" and return a reference | |
426 * to "object". | |
427 * | |
428 * PARAMETERS: | |
429 * "object" | |
430 * Address of the object to be copied. Must be non-NULL. | |
431 * "pNewObject" | |
432 * Address where object pointer will be stored. Must be non-NULL. | |
433 * "plContext" | |
434 * Platform-specific context pointer. | |
435 * THREAD SAFETY: | |
436 * Thread Safe | |
437 * | |
438 * Multiple threads must be able to safely call this function without | |
439 * worrying about conflicts, even if they're operating on the same object. | |
440 * RETURNS: | |
441 * Returns NULL if the function succeeds. | |
442 * Returns an error if the function fails in a non-fatal way. | |
443 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
444 */ | |
445 typedef PKIX_Error * | |
446 (*PKIX_PL_DuplicateCallback)( | |
447 PKIX_PL_Object *object, | |
448 PKIX_PL_Object **pNewObject, | |
449 void *plContext); | |
450 | |
451 /* reference-counted objects */ | |
452 | |
453 /* | |
454 * FUNCTION: PKIX_PL_Object_Alloc | |
455 * DESCRIPTION: | |
456 * | |
457 * Allocates a new Object of type "type" with "size" bytes and stores the | |
458 * resulting pointer at "pObject". The reference count of the newly | |
459 * allocated object will be initialized to 1. To improve performance, each | |
460 * object maintains a small cache for the results of Hashcode and ToString. | |
461 * Mutable objects should call InvalidateCache whenever changes are made to | |
462 * the object's state (after creation). If an error occurs during allocation, | |
463 * "pObject" will be set to NULL. If "size" equals zero, this function creates | |
464 * an Object with a reference count of 1, and places a pointer to unallocated | |
465 * memory at "pMemory". | |
466 * | |
467 * PARAMETERS: | |
468 * "type" | |
469 * The type code of this object. See pkixt.h for codes. The type code | |
470 * must be previously registered with PKIX_PL_Object_RegisterType(). | |
471 * "size" | |
472 * The number of bytes needed for this object. | |
473 * "pMemory" | |
474 * Address where object pointer will be stored. Must be non-NULL. | |
475 * "plContext" | |
476 * Platform-specific context pointer. | |
477 * THREAD SAFETY: | |
478 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
479 * RETURNS: | |
480 * Returns NULL if the function succeeds. | |
481 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
482 */ | |
483 PKIX_Error * | |
484 PKIX_PL_Object_Alloc( | |
485 PKIX_TYPENUM type, | |
486 PKIX_UInt32 size, | |
487 PKIX_PL_Object **pObject, | |
488 void *plContext); | |
489 | |
490 /* | |
491 * FUNCTION: PKIX_PL_Object_IsTypeRegistered | |
492 * DESCRIPTION: | |
493 * | |
494 * Checks whether "type" has been registered by a previous call to | |
495 * PKIX_PL_Object_RegisterType() and stores the Boolean result at "pBool". | |
496 * This function will typically only be called by constructors for specific | |
497 * types. | |
498 * | |
499 * PARAMETERS: | |
500 * "type" | |
501 * The type code to check if valid. | |
502 * "pBool" | |
503 * Address where Boolean will be stored. Must be non-NULL. | |
504 * "plContext" | |
505 * Platform-specific context pointer. | |
506 * THREAD SAFETY: | |
507 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
508 * RETURNS: | |
509 * Returns NULL if the function succeeds. | |
510 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
511 */ | |
512 PKIX_Error * | |
513 PKIX_PL_Object_IsTypeRegistered( | |
514 PKIX_UInt32 type, | |
515 PKIX_Boolean *pBool, | |
516 void *plContext); | |
517 | |
518 #ifdef PKIX_USER_OBJECT_TYPE | |
519 /* | |
520 * FUNCTION: PKIX_PL_Object_RegisterType | |
521 * DESCRIPTION: | |
522 * | |
523 * Registers a new Object with type value "type" and associates it with a set | |
524 * of functions ("destructor", "equalsFunction", "hashcodeFunction", | |
525 * "toStringFunction", "comparator", "duplicateFunction"). The new type value | |
526 * is also associated with a string pointed to by "description", which is used | |
527 * by the default ToStringCallback. This function may only be called with a | |
528 * particular "type" value once. If "destructor", "equalsFunction", | |
529 * "hashcodeFunction", or "toStringFunction" are NULL, default functions will | |
530 * be registered. However, if "comparator" and "duplicateFunction" are NULL, | |
531 * no functions will be registered and calls to PKIX_PL_Object_Compare and | |
532 * PKIX_PL_Object_Duplicate will result in an error. | |
533 * | |
534 * PARAMETERS: | |
535 * "type" | |
536 * The type code. | |
537 * "description" | |
538 * The string used by the default ToStringCallback. Default used if NULL. | |
539 * "destructor" | |
540 * The DestructorCallback function to be set. Default used if NULL. | |
541 * "equalsFunction" | |
542 * The EqualsCallback function to be set. Default used if NULL. | |
543 * "hashcodeFunction" | |
544 * The HashcodeCallback function to be set. Default used if NULL. | |
545 * "toStringFunction" | |
546 * The ToStringCallback function to be set. Default used if NULL. | |
547 * "comparator" | |
548 * The ComparatorCallback function to be set. None set if NULL. If no | |
549 * callback function is set in this field, calls to | |
550 * PKIX_PL_Object_Compare() will result in an error. | |
551 * "duplicateFunction" | |
552 * The DuplicateCallback function to be set. None set if NULL. If no | |
553 * callback function is set in this field, calls to | |
554 * PKIX_PL_Object_Duplicate() will result in an error. | |
555 * "plContext" | |
556 * Platform-specific context pointer. | |
557 * THREAD SAFETY: | |
558 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
559 * RETURNS: | |
560 * Returns NULL if the function succeeds. | |
561 * Returns an Object Error if "type" is already registered. | |
562 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
563 */ | |
564 PKIX_Error * | |
565 PKIX_PL_Object_RegisterType( | |
566 PKIX_UInt32 type, | |
567 char *description, | |
568 PKIX_PL_DestructorCallback destructor, | |
569 PKIX_PL_EqualsCallback equalsFunction, | |
570 PKIX_PL_HashcodeCallback hashcodeFunction, | |
571 PKIX_PL_ToStringCallback toStringFunction, | |
572 PKIX_PL_ComparatorCallback comparator, | |
573 PKIX_PL_DuplicateCallback duplicateFunction, | |
574 void *plContext); | |
575 | |
576 #endif | |
577 /* | |
578 * FUNCTION: PKIX_PL_Object_InvalidateCache | |
579 * DESCRIPTION: | |
580 * | |
581 * Invalidates the cache of the Object pointed to by "object". The cache | |
582 * contains results of Hashcode and ToString. This function should be used by | |
583 * mutable objects whenever changes are made to the Object's state (after | |
584 * creation). | |
585 * | |
586 * For example, if ToString is called on a mutable Object, the result will be | |
587 * computed, cached, and returned. If the Object's state does not change, a | |
588 * subsequent call to ToString will recognize that the relevant result is | |
589 * cached and will simply return the result (without calling the Object's | |
590 * ToStringCallback to recompute it). However, when the Object's state | |
591 * changes, the cache needs to be invalidated in order to force a subsequent | |
592 * call to ToString to recompute the result. | |
593 * | |
594 * PARAMETERS: | |
595 * "object" | |
596 * Address of Object whose cache is to be invalidated. Must be non-NULL. | |
597 * "plContext" | |
598 * Platform-specific context pointer. | |
599 * | |
600 * THREAD SAFETY | |
601 * Thread Safe - Object Type Table is locked during modification. | |
602 * | |
603 * Multiple threads can safely call this function without worrying about | |
604 * conflicts, even if they're operating on the same object. | |
605 * RETURNS: | |
606 * Returns NULL if the function succeeds. | |
607 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
608 */ | |
609 PKIX_Error * | |
610 PKIX_PL_Object_InvalidateCache( | |
611 PKIX_PL_Object *object, | |
612 void *plContext); | |
613 | |
614 /* | |
615 * FUNCTION: PKIX_PL_Object_IncRef | |
616 * DESCRIPTION: | |
617 * | |
618 * Increments the reference count of the Object pointed to by "object". | |
619 * | |
620 * PARAMETERS: | |
621 * "object" | |
622 * Address of Object whose reference count is to be incremented. | |
623 * Must be non-NULL. | |
624 * "plContext" | |
625 * Platform-specific context pointer. | |
626 * THREAD SAFETY: | |
627 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
628 * RETURNS: | |
629 * Returns NULL if the function succeeds. | |
630 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
631 */ | |
632 PKIX_Error * | |
633 PKIX_PL_Object_IncRef( | |
634 PKIX_PL_Object *object, | |
635 void *plContext); | |
636 | |
637 /* | |
638 * FUNCTION: PKIX_PL_Object_DecRef | |
639 * DESCRIPTION: | |
640 * | |
641 * Decrements the reference count of the Object pointed to by "object". If the | |
642 * resulting reference count is zero, the destructor (if any) registered for | |
643 * the Object's type (by PKIX_PL_RegisterType) will be called and then the | |
644 * Object will be destroyed. | |
645 * | |
646 * PARAMETERS: | |
647 * "object" | |
648 * Address of Object whose reference count is to be decremented. | |
649 * Must be non-NULL. | |
650 * "plContext" | |
651 * Platform-specific context pointer. | |
652 * THREAD SAFETY: | |
653 * If destructor is not called, multiple threads can safely call this function | |
654 * without worrying about conflicts, even if they're operating on the same | |
655 * object. If destructor is called, thread safety depends on the callback | |
656 * defined by PKIX_PL_RegisterType(). | |
657 * RETURNS: | |
658 * Returns NULL if the function succeeds. | |
659 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
660 */ | |
661 PKIX_Error * | |
662 PKIX_PL_Object_DecRef( | |
663 PKIX_PL_Object *object, | |
664 void *plContext); | |
665 | |
666 /* | |
667 * FUNCTION: PKIX_PL_Object_Equals | |
668 * DESCRIPTION: | |
669 * | |
670 * Compares the Object pointed to by "firstObject" with the Object pointed to | |
671 * by "secondObject" for equality using the callback function registered for | |
672 * "firstObject"'s type, and stores the Boolean result at "pResult". While | |
673 * typical callbacks will return PKIX_FALSE if the objects are of different | |
674 * types, other callbacks may be capable of comparing objects of different | |
675 * types [which may correctly result in cases where Equals(first, second) | |
676 * differs from Equals(second, first)]. | |
677 * | |
678 * PARAMETERS: | |
679 * "firstObject" | |
680 * Address of the first Object to compare. Must be non-NULL. | |
681 * The EqualsCallback for this Object will be called. | |
682 * "secondObject" | |
683 * Address of the second Object to compare. Must be non-NULL. | |
684 * "pResult" | |
685 * Address where Boolean will be stored. Must be non-NULL. | |
686 * "plContext" | |
687 * Platform-specific context pointer. | |
688 * THREAD SAFETY: | |
689 * Thread safety depends on the callback defined by PKIX_PL_RegisterType(). | |
690 * RETURNS: | |
691 * Returns NULL if the function succeeds. | |
692 * Returns an Object Error if the function fails in a non-fatal way. | |
693 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
694 */ | |
695 PKIX_Error * | |
696 PKIX_PL_Object_Equals( | |
697 PKIX_PL_Object *firstObject, | |
698 PKIX_PL_Object *secondObject, | |
699 PKIX_Boolean *pResult, | |
700 void *plContext); | |
701 | |
702 /* | |
703 * FUNCTION: PKIX_PL_Object_Hashcode | |
704 * DESCRIPTION: | |
705 * | |
706 * Computes a hashcode of the Object pointed to by "object" using the | |
707 * callback registered for "object"'s type and stores it at "pValue". Two | |
708 * objects which are equal should have the same hashcode. Once a call to | |
709 * Hashcode has been made, the results are cached and subsequent calls to | |
710 * Hashcode will return the cached value. For mutable objects, an | |
711 * InvalidateCache function is provided, which should be called whenever | |
712 * changes are made to the object's state (after creation). | |
713 * | |
714 * PARAMETERS: | |
715 * "object" | |
716 * Address of the Object whose hashcode is desired. Must be non-NULL. | |
717 * The HashcodeCallback for this object will be called. | |
718 * "pValue" | |
719 * Address where PKIX_Int32 will be stored. Must be non-NULL. | |
720 * "plContext" | |
721 * Platform-specific context pointer. | |
722 * | |
723 * THREAD SAFETY: | |
724 * Thread safety depends on the callback defined by PKIX_PL_RegisterType(). | |
725 * RETURNS: | |
726 * Returns NULL if the function succeeds. | |
727 * Returns an Object Error if the function fails in a non-fatal way. | |
728 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
729 */ | |
730 PKIX_Error * | |
731 PKIX_PL_Object_Hashcode( | |
732 PKIX_PL_Object *object, | |
733 PKIX_UInt32 *pValue, | |
734 void *plContext); | |
735 | |
736 /* | |
737 * FUNCTION: PKIX_PL_Object_ToString | |
738 * DESCRIPTION: | |
739 * | |
740 * Creates a string representation of the Object pointed to by "object" using | |
741 * the callback registered for "object"'s type and stores it at "pString". | |
742 * Once a call to ToString has been made, the results are cached and | |
743 * subsequent calls to ToString will return the cached value. For mutable | |
744 * objects, an InvalidateCache function is provided, which should be called | |
745 * whenever changes are made to the object's state (after creation). | |
746 * | |
747 * PARAMETERS: | |
748 * "object" | |
749 * Address of Object whose string representation is desired. | |
750 * Must be non-NULL. The ToStringCallback for this object will be called. | |
751 * "pString" | |
752 * Address where object pointer will be stored. Must be non-NULL. | |
753 * "plContext" | |
754 * Platform-specific context pointer. | |
755 * THREAD SAFETY: | |
756 * Thread safety depends on the callback defined by PKIX_PL_RegisterType(). | |
757 * RETURNS: | |
758 * Returns NULL if the function succeeds. | |
759 * Returns an Object Error if the function fails in a non-fatal way. | |
760 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
761 */ | |
762 PKIX_Error * | |
763 PKIX_PL_Object_ToString( | |
764 PKIX_PL_Object *object, | |
765 PKIX_PL_String **pString, | |
766 void *plContext); | |
767 | |
768 /* | |
769 * FUNCTION: PKIX_PL_Object_Compare | |
770 * DESCRIPTION: | |
771 * | |
772 * Compares the Object pointed to by "firstObject" and the Object pointed to | |
773 * by "secondObject" using the comparator registered for "firstObject"'s type | |
774 * and stores the result at "pResult". Different types may be compared. This | |
775 * may correctly result in cases where Compare(first, second) is not the | |
776 * opposite of Compare(second, first). The PKIX_Int32 value stored at | |
777 * "pResult" will be: | |
778 * Less than 0 if "firstObject" < "secondObject" | |
779 * Equals to 0 if "firstObject" = "secondObject" | |
780 * Greater than 0 if "firstObject" > "secondObject" | |
781 * | |
782 * PARAMETERS: | |
783 * "firstObject" | |
784 * Address of first Object to compare. Must be non-NULL. | |
785 * The ComparatorCallback for this object will be called. | |
786 * "secondObject" | |
787 * Address of second object to compare. Must be non-NULL. | |
788 * "pResult | |
789 * Address where PKIX_Int32 will be stored. Must be non-NULL. | |
790 * "plContext" | |
791 * Platform-specific context pointer. | |
792 * THREAD SAFETY: | |
793 * Thread safety depends on the comparator defined by PKIX_PL_RegisterType(). | |
794 * RETURNS: | |
795 * Returns NULL if the function succeeds. | |
796 * Returns an Object Error if the function fails in a non-fatal way. | |
797 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
798 */ | |
799 PKIX_Error * | |
800 PKIX_PL_Object_Compare( | |
801 PKIX_PL_Object *firstObject, | |
802 PKIX_PL_Object *secondObject, | |
803 PKIX_Int32 *pResult, | |
804 void *plContext); | |
805 | |
806 /* | |
807 * FUNCTION: PKIX_PL_Object_Duplicate | |
808 * DESCRIPTION: | |
809 * | |
810 * Creates a duplicate copy of the Object pointed to by "object" using the | |
811 * callback registered for "object"'s type and stores the copy at | |
812 * "pNewObject". Changes to the new object will not affect the original and | |
813 * vice versa. | |
814 * | |
815 * Note that if "object" is immutable, the Duplicate callback function simply | |
816 * needs to increment the reference count on "object" and return a reference | |
817 * to "object". | |
818 * | |
819 * PARAMETERS: | |
820 * "object" | |
821 * Address of Object to be duplicated. Must be non-NULL. | |
822 * The DuplicateCallback for this Object will be called. | |
823 * "pNewObject" | |
824 * Address where object pointer will be stored. Must be non-NULL. | |
825 * "plContext" | |
826 * Platform-specific context pointer. | |
827 * THREAD SAFETY: | |
828 * Thread safety depends on the callback defined by PKIX_PL_RegisterType(). | |
829 * RETURNS: | |
830 * Returns NULL if the function succeeds. | |
831 * Returns an Object Error if the function fails in a non-fatal way. | |
832 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
833 */ | |
834 PKIX_Error * | |
835 PKIX_PL_Object_Duplicate( | |
836 PKIX_PL_Object *object, | |
837 PKIX_PL_Object **pNewObject, | |
838 void *plContext); | |
839 | |
840 /* | |
841 * FUNCTION: PKIX_PL_Object_GetType | |
842 * DESCRIPTION: | |
843 * | |
844 * Retrieves the type code of the Object pointed to by "object" and stores it | |
845 * at "pType". See pkixt.h for type codes. | |
846 * | |
847 * PARAMETERS: | |
848 * "object" | |
849 * Address of Object whose type is desired. Must be non-NULL. | |
850 * "pType" | |
851 * Address where PKIX_UInt32 will be stored. Must be non-NULL. | |
852 * "plContext" | |
853 * Platform-specific context pointer. | |
854 * THREAD SAFETY: | |
855 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
856 * RETURNS: | |
857 * Returns NULL if the function succeeds. | |
858 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
859 */ | |
860 PKIX_Error * | |
861 PKIX_PL_Object_GetType( | |
862 PKIX_PL_Object *object, | |
863 PKIX_UInt32 *pType, | |
864 void *plContext); | |
865 | |
866 /* | |
867 * FUNCTION: PKIX_PL_Object_Lock | |
868 * DESCRIPTION: | |
869 * | |
870 * Locks the Mutex associated with the Object pointed to by "object". When an | |
871 * object is created, it is associated with an object-specific Mutex to allow | |
872 * for synchronization when the fields of the object are modified. | |
873 * | |
874 * PARAMETERS: | |
875 * "object" | |
876 * Address of Object whose Mutex is to be locked. Must be non-NULL. | |
877 * "plContext" | |
878 * Platform-specific context pointer. | |
879 * THREAD SAFETY: | |
880 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
881 * RETURNS: | |
882 * Returns NULL if the function succeeds. | |
883 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
884 */ | |
885 PKIX_Error * | |
886 PKIX_PL_Object_Lock( | |
887 PKIX_PL_Object *object, | |
888 void *plContext); | |
889 | |
890 /* | |
891 * FUNCTION: PKIX_PL_Object_Unlock | |
892 * DESCRIPTION: | |
893 * | |
894 * Unlocks the Mutex associated with the Object pointed to by "object". When | |
895 * an object is created, it is associated with an object-specific Mutex to | |
896 * allow for synchronization when the fields of the object are modified. | |
897 * | |
898 * PARAMETERS: | |
899 * "object" | |
900 * Address of Object whose Mutex is to be unlocked. Must be non-NULL. | |
901 * "plContext" | |
902 * Platform-specific context pointer. | |
903 * THREAD SAFETY: | |
904 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
905 * RETURNS: | |
906 * Returns NULL if the function succeeds. | |
907 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
908 */ | |
909 PKIX_Error * | |
910 PKIX_PL_Object_Unlock( | |
911 PKIX_PL_Object *object, | |
912 void *plContext); | |
913 | |
914 /* mutexes (locks) */ | |
915 | |
916 /* | |
917 * FUNCTION: PKIX_PL_Mutex_Create | |
918 * DESCRIPTION: | |
919 * | |
920 * Creates a new Mutex and stores it at "pNewLock". | |
921 * | |
922 * PARAMETERS: | |
923 * "pNewLock" | |
924 * Address where object pointer will be stored. Must be non-NULL. | |
925 * "plContext" | |
926 * Platform-specific context pointer. | |
927 * THREAD SAFETY: | |
928 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
929 * RETURNS: | |
930 * Returns NULL if the function succeeds. | |
931 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
932 */ | |
933 PKIX_Error * | |
934 PKIX_PL_Mutex_Create( | |
935 PKIX_PL_Mutex **pNewLock, | |
936 void *plContext); | |
937 | |
938 /* | |
939 * FUNCTION: PKIX_PL_Mutex_Lock | |
940 * DESCRIPTION: | |
941 * | |
942 * Locks the Mutex pointed to by "lock". If the Mutex is already locked, this | |
943 * function will block the current thread until the mutex can be locked by | |
944 * this thread. | |
945 * | |
946 * PARAMETERS: | |
947 * "lock" | |
948 * Address of Mutex to lock. Must be non-NULL. | |
949 * "plContext" | |
950 * Platform-specific context pointer. | |
951 * THREAD SAFETY: | |
952 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
953 * RETURNS: | |
954 * Returns NULL if the function succeeds. | |
955 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
956 */ | |
957 PKIX_Error * | |
958 PKIX_PL_Mutex_Lock( | |
959 PKIX_PL_Mutex *lock, | |
960 void *plContext); | |
961 | |
962 /* | |
963 * FUNCTION: PKIX_PL_Mutex_Unlock | |
964 * DESCRIPTION: | |
965 * | |
966 * Unlocks the Mutex pointed to by "lock" if the current thread holds the | |
967 * Mutex. | |
968 * | |
969 * PARAMETERS: | |
970 * "lock" | |
971 * Address of Mutex to unlock. Must be non-NULL. | |
972 * "plContext" | |
973 * Platform-specific context pointer. | |
974 * THREAD SAFETY: | |
975 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
976 * RETURNS: | |
977 * Returns NULL if the function succeeds. | |
978 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
979 */ | |
980 PKIX_Error * | |
981 PKIX_PL_Mutex_Unlock( | |
982 PKIX_PL_Mutex *lock, | |
983 void *plContext); | |
984 | |
985 /* monitor (locks) */ | |
986 | |
987 /* | |
988 * FUNCTION: PKIX_PL_MonitorLock_Create | |
989 * DESCRIPTION: | |
990 * | |
991 * Creates a new PKIX_PL_MonitorLock and stores it at "pNewLock". | |
992 * | |
993 * PARAMETERS: | |
994 * "pNewLock" | |
995 * Address where object pointer will be stored. Must be non-NULL. | |
996 * "plContext" | |
997 * Platform-specific context pointer. | |
998 * THREAD SAFETY: | |
999 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1000 * RETURNS: | |
1001 * Returns NULL if the function succeeds. | |
1002 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1003 */ | |
1004 PKIX_Error * | |
1005 PKIX_PL_MonitorLock_Create( | |
1006 PKIX_PL_MonitorLock **pNewLock, | |
1007 void *plContext); | |
1008 | |
1009 /* | |
1010 * FUNCTION: PKIX_PL_MonitorLock_Enter | |
1011 * DESCRIPTION: | |
1012 * | |
1013 * Locks the MonitorLock pointed to by "lock". If the MonitorLock is already | |
1014 * locked by other thread, this function will block the current thread. If | |
1015 * the "lock" had been locked by current thread, this function will NOT block. | |
1016 * | |
1017 * PARAMETERS: | |
1018 * "lock" | |
1019 * Address of MonitorLock to lock. Must be non-NULL. | |
1020 * "plContext" | |
1021 * Platform-specific context pointer. | |
1022 * THREAD SAFETY: | |
1023 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1024 * RETURNS: | |
1025 * Returns NULL if the function succeeds. | |
1026 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1027 */ | |
1028 PKIX_Error * | |
1029 PKIX_PL_MonitorLock_Enter( | |
1030 PKIX_PL_MonitorLock *lock, | |
1031 void *plContext); | |
1032 | |
1033 /* | |
1034 * FUNCTION: PKIX_PL_MonitorLock_Exit | |
1035 * DESCRIPTION: | |
1036 * | |
1037 * Unlocks the MonitorLock pointed to by "lock" if the lock counter of | |
1038 * current thread holds the MonitorLock reach 0, the lock is released. | |
1039 * | |
1040 * PARAMETERS: | |
1041 * "lock" | |
1042 * Address of MonitorLock to unlock. Must be non-NULL. | |
1043 * "plContext" | |
1044 * Platform-specific context pointer. | |
1045 * THREAD SAFETY: | |
1046 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1047 * RETURNS: | |
1048 * Returns NULL if the function succeeds. | |
1049 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1050 */ | |
1051 PKIX_Error * | |
1052 PKIX_PL_MonitorLock_Exit( | |
1053 PKIX_PL_MonitorLock *lock, | |
1054 void *plContext); | |
1055 | |
1056 /* strings and formatted printing */ | |
1057 | |
1058 /* | |
1059 * FUNCTION: PKIX_PL_String_Create | |
1060 * DESCRIPTION: | |
1061 * | |
1062 * Creates a new String using the data pointed to by "pString", the | |
1063 * PKIX_UInt32 pointed to by "stringLen", and the PKIX_UInt32 pointed to by | |
1064 * "fmtIndicator" and stores it at "pString". If the format is PKIX_ESCASCII | |
1065 * the "stringLen" parameter is ignored and the string extends until a zero | |
1066 * byte is found. Once created, a String object is immutable. | |
1067 * | |
1068 * Valid formats are: | |
1069 * PKIX_ESCASCII | |
1070 * PKIX_ESCASCII_DEBUG | |
1071 * PKIX_UTF8 | |
1072 * PKIX_UTF8_NULL_TERM | |
1073 * PKIX_UTF16 | |
1074 * | |
1075 * PARAMETERS: | |
1076 * "fmtIndicator" | |
1077 * Format that "stringRep" is encoded with. Must be non-NULL. | |
1078 * "stringRep" | |
1079 * Address of encoded string representation. Must be non-NULL. | |
1080 * "stringLen" | |
1081 * Length of data stored at stringRep. | |
1082 * "pString" | |
1083 * Address where object pointer will be stored. Must be non-NULL. | |
1084 * "plContext" | |
1085 * Platform-specific context pointer. | |
1086 * THREAD SAFETY: | |
1087 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1088 * RETURNS: | |
1089 * Returns NULL if the function succeeds. | |
1090 * Returns a String Error if the function fails in a non-fatal way. | |
1091 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1092 */ | |
1093 PKIX_Error * | |
1094 PKIX_PL_String_Create( | |
1095 PKIX_UInt32 fmtIndicator, | |
1096 const void *stringRep, | |
1097 PKIX_UInt32 stringLen, | |
1098 PKIX_PL_String **pString, | |
1099 void *plContext); | |
1100 | |
1101 /* | |
1102 * FUNCTION: PKIX_PL_Sprintf | |
1103 * DESCRIPTION: | |
1104 * | |
1105 * Creates a formatted string at "pOut" using the given format "fmt" and a | |
1106 * variable length list of arguments. The format flags are identical to | |
1107 * standard C with the exception that %s expects a PKIX_PL_String*, rather | |
1108 * than a char *, and that {%d, %i, %o, %u, %x, %X} expect PKIX_UInt32 or | |
1109 * PKIX_Int32 instead of int or unsigned int. | |
1110 * | |
1111 * PARAMETERS: | |
1112 * "pOut" | |
1113 * Address where object pointer will be stored. Must be non-NULL. | |
1114 * "plContext" | |
1115 * Platform-specific context pointer. | |
1116 * "fmt" | |
1117 * Address of format string. Must be non-NULL. | |
1118 * THREAD SAFETY: | |
1119 * Not Thread Safe - Caller must have exclusive access to all arguments. | |
1120 * (see Thread Safety Definitions in Programmer's Guide) | |
1121 * RETURNS: | |
1122 * Returns NULL if the function succeeds. | |
1123 * Returns a String Error if the function fails in a non-fatal way. | |
1124 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1125 */ | |
1126 PKIX_Error * | |
1127 PKIX_PL_Sprintf( | |
1128 PKIX_PL_String **pOut, | |
1129 void *plContext, | |
1130 const PKIX_PL_String *fmt, ...); | |
1131 | |
1132 /* | |
1133 * FUNCTION: PKIX_PL_GetString | |
1134 * DESCRIPTION: | |
1135 * | |
1136 * Retrieves the String associated with the value of "stringID" (if any) and | |
1137 * stores it at "pString". If no such string is associated with "stringID", | |
1138 * this function uses "defaultString" to create a String and stores it at | |
1139 * "pString". | |
1140 * | |
1141 * PARAMETERS: | |
1142 * "stringID" | |
1143 * PKIX_UInt32 valud of string identifier. | |
1144 * "defaultString" | |
1145 * Address of a PKIX_ESCASCII encoded string representation. | |
1146 * Must be non-NULL. | |
1147 * "pString" | |
1148 * Address where object pointer will be stored. Must be non-NULL. | |
1149 * "plContext" | |
1150 * Platform-specific context pointer. | |
1151 * THREAD SAFETY: | |
1152 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1153 * RETURNS: | |
1154 * Returns NULL if the function succeeds. | |
1155 * Returns a String Error if the function fails in a non-fatal way. | |
1156 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1157 */ | |
1158 PKIX_Error * | |
1159 PKIX_PL_GetString( | |
1160 PKIX_UInt32 stringID, | |
1161 char *defaultString, | |
1162 PKIX_PL_String **pString, | |
1163 void *plContext); | |
1164 | |
1165 /* | |
1166 * FUNCTION: PKIX_PL_String_GetEncoded | |
1167 * DESCRIPTION: | |
1168 * | |
1169 * Retrieves the value of the String pointed to by "string" in the encoding | |
1170 * specified by "fmtIndicator" and stores the result in "pStringRep" and | |
1171 * "pLength", respectively. Note that "pStringRep" is not reference counted | |
1172 * and will need to be freed with PKIX_PL_Free(). | |
1173 * | |
1174 * PARAMETERS: | |
1175 * "string" | |
1176 * Address of String whose encoded value is desired. Must be non-NULL. | |
1177 * "fmtIndicator" | |
1178 * Format of encoding. Supported formats are: | |
1179 * PKIX_ESCASCII, PKIX_ESCASII_DEBUG, PKIX_UTF8, PKIX_UTF8_NULL_TERM, and | |
1180 * PKIX_UTF16. XXX Where are these documented? | |
1181 * "pStringRep" | |
1182 * Address where pointer to encoded value will be stored. | |
1183 * Must be non-NULL. | |
1184 * "pLength" | |
1185 * Address where byte length of encoded value will be stored. | |
1186 * "plContext" | |
1187 * Platform-specific context pointer. | |
1188 * THREAD SAFETY: | |
1189 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1190 * RETURNS: | |
1191 * Returns NULL if the function succeeds. | |
1192 * Returns a String Error if the function fails in a non-fatal way. | |
1193 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1194 */ | |
1195 PKIX_Error * | |
1196 PKIX_PL_String_GetEncoded( | |
1197 PKIX_PL_String *string, | |
1198 PKIX_UInt32 fmtIndicator, | |
1199 void **pStringRep, | |
1200 PKIX_UInt32 *pLength, | |
1201 void *plContext); | |
1202 | |
1203 /* | |
1204 * Hashtable | |
1205 * | |
1206 * A hashtable is a very efficient data structure used for mapping keys to | |
1207 * values. Any non-null PKIX_PL_Object can be used as a key or as a value, | |
1208 * provided that it correctly implements the PKIX_PL_EqualsCallback and the | |
1209 * PKIX_PL_HashcodeCallback. A hashtable consists of several buckets, with | |
1210 * each bucket capable of holding a linked list of key/value mappings. When | |
1211 * adding, retrieving, or deleting a value, the hashcode of the key is used to | |
1212 * determine which bucket's linked list is relevant. The corresponding | |
1213 * key/value pair is then appended, retrieved, or deleted. | |
1214 */ | |
1215 | |
1216 /* | |
1217 * FUNCTION: PKIX_PL_HashTable_Create | |
1218 * DESCRIPTION: | |
1219 * | |
1220 * Creates a new Hashtable with an initial capacity of "numBuckets" buckets | |
1221 * and "maxEntriesPerBucket" of entries limit for each bucket and stores it | |
1222 * at "pResult". | |
1223 * | |
1224 * PARAMETERS: | |
1225 * "numBuckets" | |
1226 * The initial number of hash table buckets. Must be non-zero. | |
1227 * "maxEntriesPerBucket" | |
1228 * The limit of entries per bucket. Zero means no limit. | |
1229 * "pResult" | |
1230 * Address where object pointer will be stored. Must be non-NULL. | |
1231 * "plContext" | |
1232 * Platform-specific context pointer. | |
1233 * THREAD SAFETY: | |
1234 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1235 * RETURNS: | |
1236 * Returns NULL if the function succeeds. | |
1237 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1238 */ | |
1239 PKIX_Error * | |
1240 PKIX_PL_HashTable_Create( | |
1241 PKIX_UInt32 numBuckets, | |
1242 PKIX_UInt32 maxEntriesPerBucket, | |
1243 PKIX_PL_HashTable **pResult, | |
1244 void *plContext); | |
1245 | |
1246 /* | |
1247 * FUNCTION: PKIX_PL_HashTable_Add | |
1248 * DESCRIPTION: | |
1249 * | |
1250 * Adds a key/value mapping using the Objects pointed to by "key" and "value" | |
1251 * to the Hashtable pointed to by "ht". | |
1252 * | |
1253 * Function increments key/value reference counts. Caller is responsible to | |
1254 * to decrement(destroy) key/value ref counts(objects). | |
1255 * | |
1256 * PARAMETERS: | |
1257 * "ht" | |
1258 * Address of Hashtable to be added to. Must be non-NULL. | |
1259 * "key" | |
1260 * Address of Object to be associated with "value". Must be non-NULL. | |
1261 * "value" | |
1262 * Address of Object to be added to Hashtable. Must be non-NULL. | |
1263 * "plContext" | |
1264 * Platform-specific context pointer. | |
1265 * THREAD SAFETY: | |
1266 * Not Thread Safe - assumes exclusive access to "ht" | |
1267 * (see Thread Safety Definitions in Programmer's Guide) | |
1268 * RETURNS: | |
1269 * Returns NULL if the function succeeds. | |
1270 * Returns a Hashtable Error if the function fails in a non-fatal way. | |
1271 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1272 */ | |
1273 PKIX_Error * | |
1274 PKIX_PL_HashTable_Add( | |
1275 PKIX_PL_HashTable *ht, | |
1276 PKIX_PL_Object *key, | |
1277 PKIX_PL_Object *value, | |
1278 void *plContext); | |
1279 | |
1280 /* | |
1281 * FUNCTION: PKIX_PL_HashTable_Remove | |
1282 * DESCRIPTION: | |
1283 * | |
1284 * Removes the Object value whose key is equal to the Object pointed to by | |
1285 * "key" from the Hashtable pointed to by "ht". If no such object exists, | |
1286 * this function throws an Error. | |
1287 * | |
1288 * Function frees "value" object. Caller is responsible to free "key" | |
1289 * object. | |
1290 * | |
1291 * PARAMETERS: | |
1292 * "ht" | |
1293 * Address of Hashtable to remove object from. Must be non-NULL. | |
1294 * "key" | |
1295 * Address of Object used for lookup. Must be non-NULL. | |
1296 * "plContext" | |
1297 * Platform-specific context pointer. | |
1298 * THREAD SAFETY: | |
1299 * Not Thread Safe - assumes exclusive access to "ht" | |
1300 * (see Thread Safety Definitions in Programmer's Guide) | |
1301 * RETURNS: | |
1302 * Returns NULL if the function succeeds. | |
1303 * Returns a Hashtable Error if the function fails in a non-fatal way. | |
1304 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1305 */ | |
1306 PKIX_Error * | |
1307 PKIX_PL_HashTable_Remove( | |
1308 PKIX_PL_HashTable *ht, | |
1309 PKIX_PL_Object *key, | |
1310 void *plContext); | |
1311 | |
1312 /* | |
1313 * FUNCTION: PKIX_PL_HashTable_Lookup | |
1314 * DESCRIPTION: | |
1315 * | |
1316 * Retrieves the Object whose key equals the Object pointed to by "key" from | |
1317 * the Hashtable associated with "ht" and stores it at "pResult". If no | |
1318 * Object is found, this function stores NULL at "pResult". | |
1319 * | |
1320 * PARAMETERS: | |
1321 * "ht" | |
1322 * Address of Hashtable to lookup Object from. Must be non-NULL. | |
1323 * "key" | |
1324 * Address of key Object used for lookup. Must be non-NULL. | |
1325 * "pResult" | |
1326 * Address where object pointer will be stored. Must be non-NULL. | |
1327 * "plContext" | |
1328 * Platform-specific context pointer. | |
1329 * THREAD SAFETY: | |
1330 * Conditionally Thread Safe | |
1331 * (see Thread Safety Definitions in Programmer's Guide) | |
1332 * RETURNS: | |
1333 * Returns NULL if the function succeeds. | |
1334 * Returns a Hashtable Error if the function fails in a non-fatal way. | |
1335 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1336 */ | |
1337 PKIX_Error * | |
1338 PKIX_PL_HashTable_Lookup( | |
1339 PKIX_PL_HashTable *ht, | |
1340 PKIX_PL_Object *key, | |
1341 PKIX_PL_Object **pResult, | |
1342 void *plContext); | |
1343 | |
1344 /* | |
1345 * FUNCTION: PKIX_PL_ByteArray_Create | |
1346 * DESCRIPTION: | |
1347 * | |
1348 * Creates a new ByteArray using "length" bytes of data pointed to by "array" | |
1349 * and stores it at "pByteArray". Once created, a ByteArray is immutable. | |
1350 * | |
1351 * PARAMETERS: | |
1352 * "array" | |
1353 * Address of source data. | |
1354 * "length" | |
1355 * Number of bytes to copy. | |
1356 * "pByteArray" | |
1357 * Address where object pointer will be stored. Must be non-NULL. | |
1358 * "plContext" | |
1359 * Platform-specific context pointer. | |
1360 * THREAD SAFETY: | |
1361 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1362 * RETURNS: | |
1363 * Returns NULL if the function succeeds. | |
1364 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1365 */ | |
1366 PKIX_Error * | |
1367 PKIX_PL_ByteArray_Create( | |
1368 void *array, | |
1369 PKIX_UInt32 length, | |
1370 PKIX_PL_ByteArray **pByteArray, | |
1371 void *plContext); | |
1372 | |
1373 /* | |
1374 * FUNCTION: PKIX_PL_ByteArray_GetPointer | |
1375 * DESCRIPTION: | |
1376 * | |
1377 * Allocates enough memory to hold the contents of the ByteArray pointed to | |
1378 * by "byteArray", copies the data from the ByteArray pointed to by | |
1379 * "byteArray" into the newly allocated memory, and stores a pointer to the | |
1380 * memory at "pArray". Note that "pArray" is not reference counted. It will | |
1381 * need to be freed with PKIX_PL_Free(). | |
1382 * | |
1383 * PARAMETERS: | |
1384 * "byteArray" | |
1385 * Address of ByteArray whose data is desired. Must be non-NULL. | |
1386 * "pArray" | |
1387 * Address where object pointer will be stored. Must be non-NULL. | |
1388 * "plContext" | |
1389 * Platform-specific context pointer. | |
1390 * THREAD SAFETY: | |
1391 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1392 * RETURNS: | |
1393 * Returns NULL if the function succeeds. | |
1394 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1395 */ | |
1396 PKIX_Error * | |
1397 PKIX_PL_ByteArray_GetPointer( | |
1398 PKIX_PL_ByteArray *byteArray, | |
1399 void **pArray, | |
1400 void *plContext); | |
1401 | |
1402 /* | |
1403 * FUNCTION: PKIX_PL_ByteArray_GetLength | |
1404 * DESCRIPTION: | |
1405 * | |
1406 * Retrieves the length of the ByteArray pointed to by "byteArray" and stores | |
1407 * the length at "pLength". | |
1408 * | |
1409 * PARAMETERS: | |
1410 * "byteArray" | |
1411 * Address of ByteArray whose length is desired. Must be non-NULL. | |
1412 * "pLength" | |
1413 * Address where PKIX_UInt32 will be stored. Must be non-NULL. | |
1414 * "plContext" | |
1415 * Platform-specific context pointer. | |
1416 * THREAD SAFETY: | |
1417 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1418 * RETURNS: | |
1419 * Returns NULL if the function succeeds. | |
1420 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1421 */ | |
1422 PKIX_Error * | |
1423 PKIX_PL_ByteArray_GetLength( | |
1424 PKIX_PL_ByteArray *byteArray, | |
1425 PKIX_UInt32 *pLength, | |
1426 void *plContext); | |
1427 | |
1428 /* | |
1429 * FUNCTION: PKIX_PL_OID_Create | |
1430 * DESCRIPTION: | |
1431 * | |
1432 * Creates a new OID using NSS oid tag. | |
1433 * | |
1434 * PARAMETERS: | |
1435 * "idtag" | |
1436 * nss oid id tag. | |
1437 * "pOID" | |
1438 * Address where object pointer will be stored. Must be non-NULL. | |
1439 * "plContext" | |
1440 * Platform-specific context pointer. | |
1441 * THREAD SAFETY: | |
1442 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1443 * RETURNS: | |
1444 * Returns NULL if the function succeeds. | |
1445 * Returns an OID Error if the function fails in a non-fatal way. | |
1446 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1447 */ | |
1448 PKIX_Error * | |
1449 PKIX_PL_OID_Create( | |
1450 SECOidTag idtag, | |
1451 PKIX_PL_OID **pOID, | |
1452 void *plContext); | |
1453 | |
1454 /* | |
1455 * FUNCTION: PKIX_PL_OID_CreateBySECItem | |
1456 * DESCRIPTION: | |
1457 * | |
1458 * Creates a new OID using a DER encoded OID stored as SECItem. | |
1459 * | |
1460 * PARAMETERS: | |
1461 * "derOid" | |
1462 * Address of SECItem that holds DER encoded OID. | |
1463 * "pOID" | |
1464 * Address where object pointer will be stored. Must be non-NULL. | |
1465 * "plContext" | |
1466 * Platform-specific context pointer. | |
1467 * THREAD SAFETY: | |
1468 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1469 * RETURNS: | |
1470 * Returns NULL if the function succeeds. | |
1471 * Returns an OID Error if the function fails in a non-fatal way. | |
1472 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1473 */ | |
1474 PKIX_Error * | |
1475 PKIX_PL_OID_CreateBySECItem( | |
1476 SECItem *derOid, | |
1477 PKIX_PL_OID **pOID, | |
1478 void *plContext); | |
1479 | |
1480 /* | |
1481 * FUNCTION: PKIX_PL_BigInt_Create | |
1482 * DESCRIPTION: | |
1483 * | |
1484 * Creates a new BigInt using the source String pointed to by "stringRep" and | |
1485 * stores it at "pBigInt". Valid source Strings consist of an even number of | |
1486 * hexadecimal digits, which are always interpreted as a positive number. | |
1487 * Once created, a BigInt is immutable. | |
1488 * | |
1489 * The regexp format is: | |
1490 * HexDigit ::= [0-9] | [A-F] | [a-f] | |
1491 * DoubleHex ::= HexDigit HexDigit | |
1492 * BigIntSrc ::= (DoubleHex)+ | |
1493 * | |
1494 * Note that since we are using DoubleHex, the number of characters in the | |
1495 * source MUST be even. Additionally, the first DoubleHex MUST NOT be "00" | |
1496 * unless it is the only DoubleHex. | |
1497 * | |
1498 * Valid : "09" | |
1499 * Valid : "00" (special case where first and only DoubleHex is "00") | |
1500 * Invalid: "9" (not DoubleHex: odd number of characters) | |
1501 * Invalid: "0009" (first DoubleHex is "00") | |
1502 * | |
1503 * XXX Why does this take a String object while OID_Create takes a char* ? | |
1504 * Perhaps because OID_Create is often used with constant strings and | |
1505 * this function isn't. That's a good reason, but we should explain it | |
1506 * (if it's right) | |
1507 * PARAMETERS: | |
1508 * "stringRep" | |
1509 * Address of String representing a BigInt. Must be non-NULL. | |
1510 * "pBigInt" | |
1511 * Address where object pointer will be stored. Must be non-NULL. | |
1512 * "plContext" | |
1513 * Platform-specific context pointer. | |
1514 * THREAD SAFETY: | |
1515 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1516 * RETURNS: | |
1517 * Returns NULL if the function succeeds. | |
1518 * Returns a BigInt Error if the function fails in a non-fatal way. | |
1519 * Returns a Fatal Error if the function fails in an unrecoverable way. | |
1520 */ | |
1521 PKIX_Error * | |
1522 PKIX_PL_BigInt_Create( | |
1523 PKIX_PL_String *stringRep, | |
1524 PKIX_PL_BigInt **pBigInt, | |
1525 void *plContext); | |
1526 | |
1527 #ifdef __cplusplus | |
1528 } | |
1529 #endif | |
1530 | |
1531 /* | |
1532 * FUNCTION: PKIX_PL_GetPLErrorCode | |
1533 * DESCRIPTION: | |
1534 * | |
1535 * Returns error code from PL layer. | |
1536 * | |
1537 * THREAD SAFETY: | |
1538 * Thread Safe (see Thread Safety Definitions in Programmer's Guide) | |
1539 * RETURNS: | |
1540 * PL layer error code. | |
1541 */ | |
1542 int | |
1543 PKIX_PL_GetPLErrorCode(); | |
1544 | |
1545 #endif /* _LIBPKIX_SYSTEM_H */ |