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 */
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)