/* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
* This file defines several platform independent functions to make system
* calls in a portable manner .
*
*/
#ifndef _PKIX_PL_SYSTEM_H
#define _PKIX_PL_SYSTEM_H
#include "pkixt.h"
#ifdef __cplusplus
extern "C" {
#endif
/* General
*
* Please refer to the libpkix Programmer ' s Guide for detailed information
* about how to use the libpkix library . Certain key warnings and notices from
* that document are repeated here for emphasis .
*
* All identifiers in this file ( and all public identifiers defined in
* libpkix ) begin with " PKIX_ " . Private identifiers only intended for use
* within the library begin with " pkix_ " .
*
* A function returns NULL upon success , and a PKIX_Error pointer upon failure .
*
* Unless otherwise noted , for all accessor ( gettor ) functions that return a
* PKIX_PL_Object pointer , callers should assume that this pointer refers to a
* shared object . Therefore , the caller should treat this shared object as
* read - only and should not modify this shared object . When done using the
* shared object , the caller should release the reference to the object by
* using the PKIX_PL_Object_DecRef function .
*
* While a function is executing , if its arguments ( or anything referred to by
* its arguments ) are modified , free ' d , or destroyed , the function ' s behavior
* is undefined .
*
*/
/*
* FUNCTION : PKIX_PL_Initialize
* DESCRIPTION :
*
* XXX If this function is really only meant to be used by PKIX_Initialize ,
* why don ' t we just put it in a private header file rather than the public
* API . I think it may confuse users .
*
* This function should NOT be called by applications . It is only meant to
* be used internally . The application needs only to call PKIX_Initialize ,
* which in turn will call this function .
*
* This function initializes data structures critical to the operation of
* libpkix . If initialization is not successful , an Error pointer is
* returned . This function should only be called once . If it is called more
* than once , the behavior is undefined .
*
* No PKIX_ * types and functions should be used before this function is
* called and returns successfully .
*
* PARAMETERS :
* " platformInitNeeded "
* Boolean indicating whether platform initialization is to be called
* " useArenas "
* Boolean indicating whether allocation is to be done using arenas or
* individual allocation ( malloc ) .
* " pPlContext "
* Address at which platform - specific context pointer is stored . Must be
* non - NULL .
* THREAD SAFETY :
* Not Thread Safe
*
* This function assumes that no other thread is calling this function while
* it is executing .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Initialize(
PKIX_Boolean platformInitNeeded,
PKIX_Boolean useArenas,
void **pPlContext);
/*
* FUNCTION : PKIX_PL_Shutdown
* DESCRIPTION :
*
* XXX If this function is really only meant to be used by PKIX_Shutdown ,
* why don ' t we just put it in a private header file rather than the public
* API . I think it may confuse users .
*
* This function should NOT be called by applications . It is only meant to
* be used internally . The application needs only to call PKIX_Shutdown ,
* which in turn will call this function .
*
* This function deallocates any memory used by the Portability Layer ( PL )
* component of the libpkix library and shuts down any ongoing operations .
* This function should only be called once . If it is called more than once ,
* the behavior is undefined .
*
* No PKIX_ * types and functions should be used after this function is called
* and returns successfully .
*
* PARAMETERS :
* " platformInitNeeded "
* Boolean value of whether PKIX initialized NSS : PKIX_TRUE if we
* called nssInit , PKIX_FALSE otherwise
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Not Thread Safe
*
* This function makes use of global variables and should only be called once .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Shutdown(
void *plContext);
/* standard memory management operations (not reference-counted) */
/*
* FUNCTION : PKIX_PL_Malloc
* DESCRIPTION :
*
* Allocates a block of " size " bytes . The bytes are not initialized . A
* pointer to the newly allocated memory will be stored at " pMemory " . The
* memory allocated by PKIX_PL_Malloc ( ) may only be freed by PKIX_PL_Free ( ) .
* If " size " equals zero , this function stores NULL at " pMemory " .
*
* PARAMETERS :
* " size "
* Number of bytes to allocate .
* " pMemory "
* Address where newly allocated pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on underlying thread safety of platform used by PL .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Malloc(
PKIX_UInt32 size,
void **pMemory,
void *plContext);
/*
* FUNCTION : PKIX_PL_Calloc
* DESCRIPTION :
*
* Allocates memory for an array of " nElem " elements , with each element
* requiring " elSize " bytes , and with all the bits initialized to zero . A
* pointer to the newly allocated memory will be stored at " pMemory " . The
* memory allocated by PKIX_PL_Calloc ( ) may only be freed by PKIX_PL_Free ( ) .
* If " nElem " equals zero or " elSize " equals zero , this function stores NULL
* at " pMemory " .
*
* PARAMETERS :
* " nElem "
* Number of elements needed .
* " elSize "
* Number of bytes needed per element .
* " pMemory "
* Address where newly allocated pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on underlying thread safety of platform used by PL .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Calloc(
PKIX_UInt32 nElem,
PKIX_UInt32 elSize,
void **pMemory,
void *plContext);
/*
* FUNCTION : PKIX_PL_Realloc
* DESCRIPTION :
*
* Resizes an existing block of memory ( pointed to by " ptr " ) to " size " bytes .
* Stores a pointer to the resized memory at " pNewPtr " . The " ptr " must
* originate from either PKIX_PL_Malloc ( ) , PKIX_PL_Realloc ( ) , or
* PKIX_PL_Calloc ( ) . If " ptr " is NULL , this function behaves as if
* PKIX_PL_Malloc were called . If " ptr " is not NULL and " size " equals zero ,
* the memory pointed to by " ptr " is deallocated and this function stores
* NULL at " pPtr " .
*
* PARAMETERS :
* " ptr "
* A pointer to an existing block of memory .
* " size "
* New size in bytes .
* " pPtr "
* Address where newly allocated pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on underlying thread safety of platform used by PL .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Realloc(
void *ptr,
PKIX_UInt32 size,
void **pNewPtr,
void *plContext);
/*
* FUNCTION : PKIX_PL_Free
* DESCRIPTION :
*
* Frees a block of memory pointed to by " ptr " . This value must originate with
* either PKIX_PL_Malloc ( ) , PKIX_PL_Calloc , or PKIX_PL_Realloc ( ) . If " ptr " is
* NULL , the function has no effect .
*
* PARAMETERS :
* " ptr "
* A pointer to an existing block of memory .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on underlying thread safety of platform used by PL .
* RETURNS :
* Returns NULL always .
*/
PKIX_Error *
PKIX_PL_Free(
void *ptr,
void *plContext);
/* Callback Types
*
* The next few typedefs define function pointer types for the standard
* functions associated with every object type . See the Implementation
* Guidelines or the comments below for more information .
*/
/*
* TYPE : PKIX_PL_DestructorCallback
* DESCRIPTION :
*
* This callback function destroys ( or DecRef ' s ) any pointers contained in
* the user data for the Object pointed to by " object " before the Object is
* destroyed .
*
* PARAMETERS :
* " object "
* Address of Object to destroy . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe
*
* Multiple threads must be able to safely call this function without
* worrying about conflicts ( as long as they ' re not operating on the same
* object and nobody else is performing an operation on the object at the
* same time ) . Both of these conditions should be guaranteed by the fact that
* the object ' s ref count was reduced to 0 in a lock that ' s still held when
* this callback is called .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
typedef PKIX_Error *
(*PKIX_PL_DestructorCallback)(
PKIX_PL_Object *object,
void *plContext);
/*
* TYPE : PKIX_PL_EqualsCallback
* DESCRIPTION :
*
* This callback function compares the Object pointed to by " firstObject " with
* the Object pointed to by " secondObject " for equality and stores the result
* at " pResult " ( PKIX_TRUE if equal ; PKIX_FALSE if not ) .
*
* PARAMETERS :
* " firstObject "
* Address of first object to compare . Must be non - NULL .
* " secondObject "
* Address of second object to compare . Must be non - NULL .
* " pResult "
* Address where Boolean will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe
*
* Multiple threads must be able to safely call this function without
* worrying about conflicts , even if they ' re operating on the same objects .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
typedef PKIX_Error *
(*PKIX_PL_EqualsCallback)(
PKIX_PL_Object *firstObject,
PKIX_PL_Object *secondObject,
PKIX_Boolean *pResult,
void *plContext);
/*
* TYPE : PKIX_PL_HashcodeCallback
* DESCRIPTION :
*
* This callback function computes the hashcode of the Object pointed to by
* " object " and stores the result at " pValue " .
*
* PARAMETERS :
* " object "
* Address of Object whose hashcode is desired . Must be non - NULL .
* " pValue "
* Address where PKIX_UInt32 will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe
*
* Multiple threads must be able to safely call this function without
* worrying about conflicts , even if they ' re operating on the same object .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
typedef PKIX_Error *
(*PKIX_PL_HashcodeCallback)(
PKIX_PL_Object *object,
PKIX_UInt32 *pValue,
void *plContext);
/*
* TYPE : PKIX_PL_ToStringCallback
* DESCRIPTION :
*
* This callback function converts the Object pointed to by " object " to a
* string representation and stores the result at " pString " .
*
* PARAMETERS :
* " object "
* Object to get a string representation from . Must be non - NULL .
* " pString "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe
*
* Multiple threads must be able to safely call this function without
* worrying about conflicts , even if they ' re operating on the same object .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
typedef PKIX_Error *
(*PKIX_PL_ToStringCallback)(
PKIX_PL_Object *object,
PKIX_PL_String **pString,
void *plContext);
/*
* TYPE : PKIX_PL_ComparatorCallback
* DESCRIPTION :
*
* This callback function determines how the Object pointed to by
* " firstObject " compares to the Object pointed to by " secondObject " and
* stores the result at " pResult " .
*
* Result is less than 0 if firstObject < secondObject
* Result equals 0 if firstObject = secondObject
* Result is greater than 0 if firstObject > secondObject
*
* PARAMETERS :
* " firstObject "
* Address of the first Object to compare . Must be non - NULL .
* " secondObject "
* Address of the second Object to compare . Must be non - NULL .
* " pResult "
* Address where PKIX_Int32 will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe
*
* Multiple threads must be able to safely call this function without
* worrying about conflicts , even if they ' re operating on the same objects .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
typedef PKIX_Error *
(*PKIX_PL_ComparatorCallback)(
PKIX_PL_Object *firstObject,
PKIX_PL_Object *secondObject,
PKIX_Int32 *pResult,
void *plContext);
/*
* TYPE : PKIX_PL_DuplicateCallback
* DESCRIPTION :
*
* This callback function creates a copy of the Object pointed to by " object "
* and stores it at " pNewObject " . Changes to the copy will not affect the
* original and vice versa .
*
* Note that if " object " is immutable , the Duplicate callback function simply
* needs to increment the reference count on " object " and return a reference
* to " object " .
*
* PARAMETERS :
* " object "
* Address of the object to be copied . Must be non - NULL .
* " pNewObject "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe
*
* Multiple threads must be able to safely call this function without
* worrying about conflicts , even if they ' re operating on the same object .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
typedef PKIX_Error *
(*PKIX_PL_DuplicateCallback)(
PKIX_PL_Object *object,
PKIX_PL_Object **pNewObject,
void *plContext);
/* reference-counted objects */
/*
* FUNCTION : PKIX_PL_Object_Alloc
* DESCRIPTION :
*
* Allocates a new Object of type " type " with " size " bytes and stores the
* resulting pointer at " pObject " . The reference count of the newly
* allocated object will be initialized to 1 . To improve performance , each
* object maintains a small cache for the results of Hashcode and ToString .
* Mutable objects should call InvalidateCache whenever changes are made to
* the object ' s state ( after creation ) . If an error occurs during allocation ,
* " pObject " will be set to NULL . If " size " equals zero , this function creates
* an Object with a reference count of 1 , and places a pointer to unallocated
* memory at " pMemory " .
*
* PARAMETERS :
* " type "
* The type code of this object . See pkixt . h for codes . The type code
* must be previously registered with PKIX_PL_Object_RegisterType ( ) .
* " size "
* The number of bytes needed for this object .
* " pMemory "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Alloc(
PKIX_TYPENUM type,
PKIX_UInt32 size,
PKIX_PL_Object **pObject,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_IsTypeRegistered
* DESCRIPTION :
*
* Checks whether " type " has been registered by a previous call to
* PKIX_PL_Object_RegisterType ( ) and stores the Boolean result at " pBool " .
* This function will typically only be called by constructors for specific
* types .
*
* PARAMETERS :
* " type "
* The type code to check if valid .
* " pBool "
* Address where Boolean will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_IsTypeRegistered(
PKIX_UInt32 type,
PKIX_Boolean *pBool,
void *plContext);
#ifdef PKIX_USER_OBJECT_TYPE
/*
* FUNCTION : PKIX_PL_Object_RegisterType
* DESCRIPTION :
*
* Registers a new Object with type value " type " and associates it with a set
* of functions ( " destructor " , " equalsFunction " , " hashcodeFunction " ,
* " toStringFunction " , " comparator " , " duplicateFunction " ) . The new type value
* is also associated with a string pointed to by " description " , which is used
* by the default ToStringCallback . This function may only be called with a
* particular " type " value once . If " destructor " , " equalsFunction " ,
* " hashcodeFunction " , or " toStringFunction " are NULL , default functions will
* be registered . However , if " comparator " and " duplicateFunction " are NULL ,
* no functions will be registered and calls to PKIX_PL_Object_Compare and
* PKIX_PL_Object_Duplicate will result in an error .
*
* PARAMETERS :
* " type "
* The type code .
* " description "
* The string used by the default ToStringCallback . Default used if NULL .
* " destructor "
* The DestructorCallback function to be set . Default used if NULL .
* " equalsFunction "
* The EqualsCallback function to be set . Default used if NULL .
* " hashcodeFunction "
* The HashcodeCallback function to be set . Default used if NULL .
* " toStringFunction "
* The ToStringCallback function to be set . Default used if NULL .
* " comparator "
* The ComparatorCallback function to be set . None set if NULL . If no
* callback function is set in this field , calls to
* PKIX_PL_Object_Compare ( ) will result in an error .
* " duplicateFunction "
* The DuplicateCallback function to be set . None set if NULL . If no
* callback function is set in this field , calls to
* PKIX_PL_Object_Duplicate ( ) will result in an error .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an Object Error if " type " is already registered .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_RegisterType(
PKIX_UInt32 type,
char *description,
PKIX_PL_DestructorCallback destructor,
PKIX_PL_EqualsCallback equalsFunction,
PKIX_PL_HashcodeCallback hashcodeFunction,
PKIX_PL_ToStringCallback toStringFunction,
PKIX_PL_ComparatorCallback comparator,
PKIX_PL_DuplicateCallback duplicateFunction,
void *plContext);
#endif
/*
* FUNCTION : PKIX_PL_Object_InvalidateCache
* DESCRIPTION :
*
* Invalidates the cache of the Object pointed to by " object " . The cache
* contains results of Hashcode and ToString . This function should be used by
* mutable objects whenever changes are made to the Object ' s state ( after
* creation ) .
*
* For example , if ToString is called on a mutable Object , the result will be
* computed , cached , and returned . If the Object ' s state does not change , a
* subsequent call to ToString will recognize that the relevant result is
* cached and will simply return the result ( without calling the Object ' s
* ToStringCallback to recompute it ) . However , when the Object ' s state
* changes , the cache needs to be invalidated in order to force a subsequent
* call to ToString to recompute the result .
*
* PARAMETERS :
* " object "
* Address of Object whose cache is to be invalidated . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
*
* THREAD SAFETY
* Thread Safe - Object Type Table is locked during modification .
*
* Multiple threads can safely call this function without worrying about
* conflicts , even if they ' re operating on the same object .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_InvalidateCache(
PKIX_PL_Object *object,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_IncRef
* DESCRIPTION :
*
* Increments the reference count of the Object pointed to by " object " .
*
* PARAMETERS :
* " object "
* Address of Object whose reference count is to be incremented .
* Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_IncRef(
PKIX_PL_Object *object,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_DecRef
* DESCRIPTION :
*
* Decrements the reference count of the Object pointed to by " object " . If the
* resulting reference count is zero , the destructor ( if any ) registered for
* the Object ' s type ( by PKIX_PL_RegisterType ) will be called and then the
* Object will be destroyed .
*
* PARAMETERS :
* " object "
* Address of Object whose reference count is to be decremented .
* Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* If destructor is not called , multiple threads can safely call this function
* without worrying about conflicts , even if they ' re operating on the same
* object . If destructor is called , thread safety depends on the callback
* defined by PKIX_PL_RegisterType ( ) .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_DecRef(
PKIX_PL_Object *object,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_Equals
* DESCRIPTION :
*
* Compares the Object pointed to by " firstObject " with the Object pointed to
* by " secondObject " for equality using the callback function registered for
* " firstObject " ' s type , and stores the Boolean result at " pResult " . While
* typical callbacks will return PKIX_FALSE if the objects are of different
* types , other callbacks may be capable of comparing objects of different
* types [ which may correctly result in cases where Equals ( first , second )
* differs from Equals ( second , first ) ] .
*
* PARAMETERS :
* " firstObject "
* Address of the first Object to compare . Must be non - NULL .
* The EqualsCallback for this Object will be called .
* " secondObject "
* Address of the second Object to compare . Must be non - NULL .
* " pResult "
* Address where Boolean will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on the callback defined by PKIX_PL_RegisterType ( ) .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an Object Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Equals(
PKIX_PL_Object *firstObject,
PKIX_PL_Object *secondObject,
PKIX_Boolean *pResult,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_Hashcode
* DESCRIPTION :
*
* Computes a hashcode of the Object pointed to by " object " using the
* callback registered for " object " ' s type and stores it at " pValue " . Two
* objects which are equal should have the same hashcode . Once a call to
* Hashcode has been made , the results are cached and subsequent calls to
* Hashcode will return the cached value . For mutable objects , an
* InvalidateCache function is provided , which should be called whenever
* changes are made to the object ' s state ( after creation ) .
*
* PARAMETERS :
* " object "
* Address of the Object whose hashcode is desired . Must be non - NULL .
* The HashcodeCallback for this object will be called .
* " pValue "
* Address where PKIX_Int32 will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
*
* THREAD SAFETY :
* Thread safety depends on the callback defined by PKIX_PL_RegisterType ( ) .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an Object Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Hashcode(
PKIX_PL_Object *object,
PKIX_UInt32 *pValue,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_ToString
* DESCRIPTION :
*
* Creates a string representation of the Object pointed to by " object " using
* the callback registered for " object " ' s type and stores it at " pString " .
* Once a call to ToString has been made , the results are cached and
* subsequent calls to ToString will return the cached value . For mutable
* objects , an InvalidateCache function is provided , which should be called
* whenever changes are made to the object ' s state ( after creation ) .
*
* PARAMETERS :
* " object "
* Address of Object whose string representation is desired .
* Must be non - NULL . The ToStringCallback for this object will be called .
* " pString "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on the callback defined by PKIX_PL_RegisterType ( ) .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an Object Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_ToString(
PKIX_PL_Object *object,
PKIX_PL_String **pString,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_Compare
* DESCRIPTION :
*
* Compares the Object pointed to by " firstObject " and the Object pointed to
* by " secondObject " using the comparator registered for " firstObject " ' s type
* and stores the result at " pResult " . Different types may be compared . This
* may correctly result in cases where Compare ( first , second ) is not the
* opposite of Compare ( second , first ) . The PKIX_Int32 value stored at
* " pResult " will be :
* Less than 0 if " firstObject " < " secondObject "
* Equals to 0 if " firstObject " = " secondObject "
* Greater than 0 if " firstObject " > " secondObject "
*
* PARAMETERS :
* " firstObject "
* Address of first Object to compare . Must be non - NULL .
* The ComparatorCallback for this object will be called .
* " secondObject "
* Address of second object to compare . Must be non - NULL .
* " pResult
* Address where PKIX_Int32 will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on the comparator defined by PKIX_PL_RegisterType ( ) .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an Object Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Compare(
PKIX_PL_Object *firstObject,
PKIX_PL_Object *secondObject,
PKIX_Int32 *pResult,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_Duplicate
* DESCRIPTION :
*
* Creates a duplicate copy of the Object pointed to by " object " using the
* callback registered for " object " ' s type and stores the copy at
* " pNewObject " . Changes to the new object will not affect the original and
* vice versa .
*
* Note that if " object " is immutable , the Duplicate callback function simply
* needs to increment the reference count on " object " and return a reference
* to " object " .
*
* PARAMETERS :
* " object "
* Address of Object to be duplicated . Must be non - NULL .
* The DuplicateCallback for this Object will be called .
* " pNewObject "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread safety depends on the callback defined by PKIX_PL_RegisterType ( ) .
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an Object Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Duplicate(
PKIX_PL_Object *object,
PKIX_PL_Object **pNewObject,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_GetType
* DESCRIPTION :
*
* Retrieves the type code of the Object pointed to by " object " and stores it
* at " pType " . See pkixt . h for type codes .
*
* PARAMETERS :
* " object "
* Address of Object whose type is desired . Must be non - NULL .
* " pType "
* Address where PKIX_UInt32 will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_GetType(
PKIX_PL_Object *object,
PKIX_UInt32 *pType,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_Lock
* DESCRIPTION :
*
* Locks the Mutex associated with the Object pointed to by " object " . When an
* object is created , it is associated with an object - specific Mutex to allow
* for synchronization when the fields of the object are modified .
*
* PARAMETERS :
* " object "
* Address of Object whose Mutex is to be locked . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Lock(
PKIX_PL_Object *object,
void *plContext);
/*
* FUNCTION : PKIX_PL_Object_Unlock
* DESCRIPTION :
*
* Unlocks the Mutex associated with the Object pointed to by " object " . When
* an object is created , it is associated with an object - specific Mutex to
* allow for synchronization when the fields of the object are modified .
*
* PARAMETERS :
* " object "
* Address of Object whose Mutex is to be unlocked . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Object_Unlock(
PKIX_PL_Object *object,
void *plContext);
/* mutexes (locks) */
/*
* FUNCTION : PKIX_PL_Mutex_Create
* DESCRIPTION :
*
* Creates a new Mutex and stores it at " pNewLock " .
*
* PARAMETERS :
* " pNewLock "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Mutex_Create(
PKIX_PL_Mutex **pNewLock,
void *plContext);
/*
* FUNCTION : PKIX_PL_Mutex_Lock
* DESCRIPTION :
*
* Locks the Mutex pointed to by " lock " . If the Mutex is already locked , this
* function will block the current thread until the mutex can be locked by
* this thread .
*
* PARAMETERS :
* " lock "
* Address of Mutex to lock . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Mutex_Lock(
PKIX_PL_Mutex *lock,
void *plContext);
/*
* FUNCTION : PKIX_PL_Mutex_Unlock
* DESCRIPTION :
*
* Unlocks the Mutex pointed to by " lock " if the current thread holds the
* Mutex .
*
* PARAMETERS :
* " lock "
* Address of Mutex to unlock . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Mutex_Unlock(
PKIX_PL_Mutex *lock,
void *plContext);
/* monitor (locks) */
/*
* FUNCTION : PKIX_PL_MonitorLock_Create
* DESCRIPTION :
*
* Creates a new PKIX_PL_MonitorLock and stores it at " pNewLock " .
*
* PARAMETERS :
* " pNewLock "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_MonitorLock_Create(
PKIX_PL_MonitorLock **pNewLock,
void *plContext);
/*
* FUNCTION : PKIX_PL_MonitorLock_Enter
* DESCRIPTION :
*
* Locks the MonitorLock pointed to by " lock " . If the MonitorLock is already
* locked by other thread , this function will block the current thread . If
* the " lock " had been locked by current thread , this function will NOT block .
*
* PARAMETERS :
* " lock "
* Address of MonitorLock to lock . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_MonitorLock_Enter(
PKIX_PL_MonitorLock *lock,
void *plContext);
/*
* FUNCTION : PKIX_PL_MonitorLock_Exit
* DESCRIPTION :
*
* Unlocks the MonitorLock pointed to by " lock " if the lock counter of
* current thread holds the MonitorLock reach 0 , the lock is released .
*
* PARAMETERS :
* " lock "
* Address of MonitorLock to unlock . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_MonitorLock_Exit(
PKIX_PL_MonitorLock *lock,
void *plContext);
/* strings and formatted printing */
/*
* FUNCTION : PKIX_PL_String_Create
* DESCRIPTION :
*
* Creates a new String using the data pointed to by " pString " , the
* PKIX_UInt32 pointed to by " stringLen " , and the PKIX_UInt32 pointed to by
* " fmtIndicator " and stores it at " pString " . If the format is PKIX_ESCASCII
* the " stringLen " parameter is ignored and the string extends until a zero
* byte is found . Once created , a String object is immutable .
*
* Valid formats are :
* PKIX_ESCASCII
* PKIX_ESCASCII_DEBUG
* PKIX_UTF8
* PKIX_UTF8_NULL_TERM
* PKIX_UTF16
*
* PARAMETERS :
* " fmtIndicator "
* Format that " stringRep " is encoded with . Must be non - NULL .
* " stringRep "
* Address of encoded string representation . Must be non - NULL .
* " stringLen "
* Length of data stored at stringRep .
* " pString "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a String Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_String_Create(
PKIX_UInt32 fmtIndicator,
const void *stringRep,
PKIX_UInt32 stringLen,
PKIX_PL_String **pString,
void *plContext);
/*
* FUNCTION : PKIX_PL_Sprintf
* DESCRIPTION :
*
* Creates a formatted string at " pOut " using the given format " fmt " and a
* variable length list of arguments . The format flags are identical to
* standard C with the exception that % s expects a PKIX_PL_String * , rather
* than a char * , and that { % d , % i , % o , % u , % x , % X } expect PKIX_UInt32 or
* PKIX_Int32 instead of int or unsigned int .
*
* PARAMETERS :
* " pOut "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* " fmt "
* Address of format string . Must be non - NULL .
* THREAD SAFETY :
* Not Thread Safe - Caller must have exclusive access to all arguments .
* ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a String Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_Sprintf(
PKIX_PL_String **pOut,
void *plContext,
const PKIX_PL_String *fmt, ...);
/*
* FUNCTION : PKIX_PL_GetString
* DESCRIPTION :
*
* Retrieves the String associated with the value of " stringID " ( if any ) and
* stores it at " pString " . If no such string is associated with " stringID " ,
* this function uses " defaultString " to create a String and stores it at
* " pString " .
*
* PARAMETERS :
* " stringID "
* PKIX_UInt32 valud of string identifier .
* " defaultString "
* Address of a PKIX_ESCASCII encoded string representation .
* Must be non - NULL .
* " pString "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a String Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_GetString(
PKIX_UInt32 stringID,
char *defaultString,
PKIX_PL_String **pString,
void *plContext);
/*
* FUNCTION : PKIX_PL_String_GetEncoded
* DESCRIPTION :
*
* Retrieves the value of the String pointed to by " string " in the encoding
* specified by " fmtIndicator " and stores the result in " pStringRep " and
* " pLength " , respectively . Note that " pStringRep " is not reference counted
* and will need to be freed with PKIX_PL_Free ( ) .
*
* PARAMETERS :
* " string "
* Address of String whose encoded value is desired . Must be non - NULL .
* " fmtIndicator "
* Format of encoding . Supported formats are :
* PKIX_ESCASCII , PKIX_ESCASII_DEBUG , PKIX_UTF8 , PKIX_UTF8_NULL_TERM , and
* PKIX_UTF16 . XXX Where are these documented ?
* " pStringRep "
* Address where pointer to encoded value will be stored .
* Must be non - NULL .
* " pLength "
* Address where byte length of encoded value will be stored .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a String Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_String_GetEncoded(
PKIX_PL_String *string,
PKIX_UInt32 fmtIndicator,
void **pStringRep,
PKIX_UInt32 *pLength,
void *plContext);
/*
* Hashtable
*
* A hashtable is a very efficient data structure used for mapping keys to
* values . Any non - null PKIX_PL_Object can be used as a key or as a value ,
* provided that it correctly implements the PKIX_PL_EqualsCallback and the
* PKIX_PL_HashcodeCallback . A hashtable consists of several buckets , with
* each bucket capable of holding a linked list of key / value mappings . When
* adding , retrieving , or deleting a value , the hashcode of the key is used to
* determine which bucket ' s linked list is relevant . The corresponding
* key / value pair is then appended , retrieved , or deleted .
*/
/*
* FUNCTION : PKIX_PL_HashTable_Create
* DESCRIPTION :
*
* Creates a new Hashtable with an initial capacity of " numBuckets " buckets
* and " maxEntriesPerBucket " of entries limit for each bucket and stores it
* at " pResult " .
*
* PARAMETERS :
* " numBuckets "
* The initial number of hash table buckets . Must be non - zero .
* " maxEntriesPerBucket "
* The limit of entries per bucket . Zero means no limit .
* " pResult "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_HashTable_Create(
PKIX_UInt32 numBuckets,
PKIX_UInt32 maxEntriesPerBucket,
PKIX_PL_HashTable **pResult,
void *plContext);
/*
* FUNCTION : PKIX_PL_HashTable_Add
* DESCRIPTION :
*
* Adds a key / value mapping using the Objects pointed to by " key " and " value "
* to the Hashtable pointed to by " ht " .
*
* Function increments key / value reference counts . Caller is responsible to
* to decrement ( destroy ) key / value ref counts ( objects ) .
*
* PARAMETERS :
* " ht "
* Address of Hashtable to be added to . Must be non - NULL .
* " key "
* Address of Object to be associated with " value " . Must be non - NULL .
* " value "
* Address of Object to be added to Hashtable . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Not Thread Safe - assumes exclusive access to " ht "
* ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Hashtable Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_HashTable_Add(
PKIX_PL_HashTable *ht,
PKIX_PL_Object *key,
PKIX_PL_Object *value,
void *plContext);
/*
* FUNCTION : PKIX_PL_HashTable_Remove
* DESCRIPTION :
*
* Removes the Object value whose key is equal to the Object pointed to by
* " key " from the Hashtable pointed to by " ht " . If no such object exists ,
* this function throws an Error .
*
* Function frees " value " object . Caller is responsible to free " key "
* object .
*
* PARAMETERS :
* " ht "
* Address of Hashtable to remove object from . Must be non - NULL .
* " key "
* Address of Object used for lookup . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Not Thread Safe - assumes exclusive access to " ht "
* ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Hashtable Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_HashTable_Remove(
PKIX_PL_HashTable *ht,
PKIX_PL_Object *key,
void *plContext);
/*
* FUNCTION : PKIX_PL_HashTable_Lookup
* DESCRIPTION :
*
* Retrieves the Object whose key equals the Object pointed to by " key " from
* the Hashtable associated with " ht " and stores it at " pResult " . If no
* Object is found , this function stores NULL at " pResult " .
*
* PARAMETERS :
* " ht "
* Address of Hashtable to lookup Object from . Must be non - NULL .
* " key "
* Address of key Object used for lookup . Must be non - NULL .
* " pResult "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Conditionally Thread Safe
* ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Hashtable Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_HashTable_Lookup(
PKIX_PL_HashTable *ht,
PKIX_PL_Object *key,
PKIX_PL_Object **pResult,
void *plContext);
/*
* FUNCTION : PKIX_PL_ByteArray_Create
* DESCRIPTION :
*
* Creates a new ByteArray using " length " bytes of data pointed to by " array "
* and stores it at " pByteArray " . Once created , a ByteArray is immutable .
*
* PARAMETERS :
* " array "
* Address of source data .
* " length "
* Number of bytes to copy .
* " pByteArray "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_ByteArray_Create(
void *array,
PKIX_UInt32 length,
PKIX_PL_ByteArray **pByteArray,
void *plContext);
/*
* FUNCTION : PKIX_PL_ByteArray_GetPointer
* DESCRIPTION :
*
* Allocates enough memory to hold the contents of the ByteArray pointed to
* by " byteArray " , copies the data from the ByteArray pointed to by
* " byteArray " into the newly allocated memory , and stores a pointer to the
* memory at " pArray " . Note that " pArray " is not reference counted . It will
* need to be freed with PKIX_PL_Free ( ) .
*
* PARAMETERS :
* " byteArray "
* Address of ByteArray whose data is desired . Must be non - NULL .
* " pArray "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_ByteArray_GetPointer(
PKIX_PL_ByteArray *byteArray,
void **pArray,
void *plContext);
/*
* FUNCTION : PKIX_PL_ByteArray_GetLength
* DESCRIPTION :
*
* Retrieves the length of the ByteArray pointed to by " byteArray " and stores
* the length at " pLength " .
*
* PARAMETERS :
* " byteArray "
* Address of ByteArray whose length is desired . Must be non - NULL .
* " pLength "
* Address where PKIX_UInt32 will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_ByteArray_GetLength(
PKIX_PL_ByteArray *byteArray,
PKIX_UInt32 *pLength,
void *plContext);
/*
* FUNCTION : PKIX_PL_OID_Create
* DESCRIPTION :
*
* Creates a new OID using NSS oid tag .
*
* PARAMETERS :
* " idtag "
* nss oid id tag .
* " pOID "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an OID Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_OID_Create(
SECOidTag idtag,
PKIX_PL_OID **pOID,
void *plContext);
/*
* FUNCTION : PKIX_PL_OID_CreateBySECItem
* DESCRIPTION :
*
* Creates a new OID using a DER encoded OID stored as SECItem .
*
* PARAMETERS :
* " derOid "
* Address of SECItem that holds DER encoded OID .
* " pOID "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns an OID Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_OID_CreateBySECItem(
SECItem *derOid,
PKIX_PL_OID **pOID,
void *plContext);
/*
* FUNCTION : PKIX_PL_BigInt_Create
* DESCRIPTION :
*
* Creates a new BigInt using the source String pointed to by " stringRep " and
* stores it at " pBigInt " . Valid source Strings consist of an even number of
* hexadecimal digits , which are always interpreted as a positive number .
* Once created , a BigInt is immutable .
*
* The regexp format is :
* HexDigit : : = [ 0 - 9 ] | [ A - F ] | [ a - f ]
* DoubleHex : : = HexDigit HexDigit
* BigIntSrc : : = ( DoubleHex ) +
*
* Note that since we are using DoubleHex , the number of characters in the
* source MUST be even . Additionally , the first DoubleHex MUST NOT be " 00 "
* unless it is the only DoubleHex .
*
* Valid : " 09 "
* Valid : " 00 " ( special case where first and only DoubleHex is " 00 " )
* Invalid : " 9 " ( not DoubleHex : odd number of characters )
* Invalid : " 0009 " ( first DoubleHex is " 00 " )
*
* XXX Why does this take a String object while OID_Create takes a char * ?
* Perhaps because OID_Create is often used with constant strings and
* this function isn ' t . That ' s a good reason , but we should explain it
* ( if it ' s right )
* PARAMETERS :
* " stringRep "
* Address of String representing a BigInt . Must be non - NULL .
* " pBigInt "
* Address where object pointer will be stored . Must be non - NULL .
* " plContext "
* Platform - specific context pointer .
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* Returns NULL if the function succeeds .
* Returns a BigInt Error if the function fails in a non - fatal way .
* Returns a Fatal Error if the function fails in an unrecoverable way .
*/
PKIX_Error *
PKIX_PL_BigInt_Create(
PKIX_PL_String *stringRep,
PKIX_PL_BigInt **pBigInt,
void *plContext);
#ifdef __cplusplus
}
#endif
/*
* FUNCTION : PKIX_PL_GetPLErrorCode
* DESCRIPTION :
*
* Returns error code from PL layer .
*
* THREAD SAFETY :
* Thread Safe ( see Thread Safety Definitions in Programmer ' s Guide )
* RETURNS :
* PL layer error code .
*/
int
PKIX_PL_GetPLErrorCode();
#endif /* _LIBPKIX_SYSTEM_H */
Messung V0.5 in Prozent C=93 H=96 G=94
¤ Dauer der Verarbeitung: 0.61 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland