Back to index

lightning-sunbird  0.9+nobinonly
Classes | Defines | Typedefs | Enumerations | Functions | Variables
ckcapi.h File Reference
#include "nssckmdt.h"
#include "nssckfw.h"
#include "base.h"
#include "ckt.h"
#include "WTypes.h"
#include "WinCrypt.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  ckcapiRawObjectStr
struct  ckcapiKeyParamsStr
struct  ckcapiKeyObjectStr
struct  ckcapiCertObjectStr
struct  ckcapiInternalObjectStr
union  ckcapiInternalObjectStr.u

Defines

#define NSS_CKCAPI_ARRAY_SIZE(x)   ((sizeof (x))/(sizeof ((x)[0])))

Typedefs

typedef struct ckcapiRawObjectStr
typedef struct ckcapiKeyParamsStr
typedef struct ckcapiKeyObjectStr
typedef struct ckcapiCertObjectStr
typedef struct ckcapiInternalObjectStr

Enumerations

enum  ckcapiObjectType {
  ckcapiRaw, ckcapiCert, ckcapiBareKey, ckcapiRaw,
  ckcapiCert, ckcapiBareKey
}

Functions

NSS_EXTERN NSSCKMDSession * nss_ckcapi_CreateSession (NSSCKFWSession *fwSession, CK_RV *pError)
NSS_EXTERN NSSCKMDFindObjects * nss_ckcapi_FindObjectsInit (NSSCKFWSession *fwSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_RV *pError)
NSS_EXTERN NSSCKMDObject * nss_ckcapi_CreateMDObject (NSSArena *arena, ckcapiInternalObject *io, CK_RV *pError)
NSS_EXTERN NSSCKMDObject * nss_ckcapi_CreateObject (NSSCKFWSession *fwSession, CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, CK_RV *pError)
NSS_EXTERN const NSSItem * nss_ckcapi_FetchAttribute (ckcapiInternalObject *io, CK_ATTRIBUTE_TYPE type)
NSS_EXTERN void nss_ckcapi_DestroyInternalObject (ckcapiInternalObject *io)
NSS_EXTERN CK_RV nss_ckcapi_FetchKeyContainer (ckcapiInternalObject *iKey, HCRYPTPROV *hProv, DWORD *keySpec, HCRYPTKEY *hKey)
void ckcapi_ReverseData (NSSItem *item)
char * nss_ckcapi_DERUnwrap (char *src, int size, int *outSize, char **next)
int nss_ckcapi_WideSize (LPCWSTR wide)
char * nss_ckcapi_WideToUTF8 (LPCWSTR wide)
LPWSTR nss_ckcapi_WideDup (LPCWSTR wide)
LPWSTR nss_ckcapi_UTF8ToWide (char *buf)
NSS_EXTERN PRUint32 nss_ckcapi_collect_all_certs (CK_ATTRIBUTE_PTR pTemplate, CK_ULONG ulAttributeCount, ckcapiInternalObject ***listp, PRUint32 *sizep, PRUint32 count, CK_RV *pError)

Variables

NSS_EXTERN_DATA
ckcapiInternalObject 
nss_ckcapi_data []
NSS_EXTERN_DATA const PRUint32 nss_ckcapi_nObjects
NSS_EXTERN_DATA const CK_VERSION nss_ckcapi_CryptokiVersion
NSS_EXTERN_DATA const NSSUTF8nss_ckcapi_ManufacturerID
NSS_EXTERN_DATA const NSSUTF8nss_ckcapi_LibraryDescription
NSS_EXTERN_DATA const CK_VERSION nss_ckcapi_LibraryVersion
NSS_EXTERN_DATA const NSSUTF8nss_ckcapi_SlotDescription
NSS_EXTERN_DATA const CK_VERSION nss_ckcapi_HardwareVersion
NSS_EXTERN_DATA const CK_VERSION nss_ckcapi_FirmwareVersion
NSS_EXTERN_DATA const NSSUTF8nss_ckcapi_TokenLabel
NSS_EXTERN_DATA const NSSUTF8nss_ckcapi_TokenModel
NSS_EXTERN_DATA const NSSUTF8nss_ckcapi_TokenSerialNumber
NSS_EXTERN_DATA const
NSSCKMDInstance 
nss_ckcapi_mdInstance
NSS_EXTERN_DATA const NSSCKMDSlot nss_ckcapi_mdSlot
NSS_EXTERN_DATA const NSSCKMDToken nss_ckcapi_mdToken
NSS_EXTERN_DATA const
NSSCKMDMechanism 
nss_ckcapi_mdMechanismRSA

Class Documentation

struct ckcapiRawObjectStr

Definition at line 71 of file ckcapi.h.

Class Members
const NSSItem * items
CK_ULONG n
const CK_ATTRIBUTE_TYPE * types
struct ckcapiKeyParamsStr

Definition at line 82 of file ckcapi.h.

Class Members
NSSItem coefficient
NSSItem exponent
NSSItem exponent1
NSSItem exponent2
NSSItem modulus
NSSItem prime1
NSSItem prime2
NSSItem privateExponent
void * privateKey
void * pubKey
unsigned char publicExponentData
struct ckcapiKeyObjectStr

Definition at line 102 of file ckcapi.h.

Class Members
char * containerName
HCRYPTPROV hProv
ckcapiKeyParams key
CRYPT_KEY_PROV_INFO provInfo
char * provName
struct ckcapiCertObjectStr

Definition at line 114 of file ckcapi.h.

Class Members
PCCERT_CONTEXT certContext
const char * certStore
NSSItem derCert
unsigned char derSerial
PRBool hasID
NSSItem issuer
ckcapiKeyParams key
NSSItem label
unsigned char * labelData
NSSItem serial
NSSItem subject
struct ckcapiInternalObjectStr

Definition at line 140 of file ckcapi.h.

Class Members
NSSItem hashKey
unsigned char hashKeyData
NSSItem id
void * idData
NSSCKMDObject mdObject
CK_OBJECT_CLASS objClass
ckcapiObjectType type
union ckcapiInternalObjectStr u
union ckcapiInternalObjectStr u
union ckcapiInternalObjectStr.u

Definition at line 142 of file ckcapi.h.

Class Members
ckcapiCertObject cert
ckcapiKeyObject key
ckcapiRawObject raw

Define Documentation

#define NSS_CKCAPI_ARRAY_SIZE (   x)    ((sizeof (x))/(sizeof ((x)[0])))

Definition at line 307 of file ckcapi.h.


Typedef Documentation

typedef struct ckcapiCertObjectStr

Definition at line 128 of file ckcapi.h.

typedef struct ckcapiInternalObjectStr

Definition at line 154 of file ckcapi.h.

typedef struct ckcapiKeyObjectStr

Definition at line 109 of file ckcapi.h.

typedef struct ckcapiKeyParamsStr

Definition at line 95 of file ckcapi.h.

typedef struct ckcapiRawObjectStr

Definition at line 76 of file ckcapi.h.


Enumeration Type Documentation

Enumerator:
ckcapiRaw 
ckcapiCert 
ckcapiBareKey 
ckcapiRaw 
ckcapiCert 
ckcapiBareKey 

Definition at line 130 of file ckcapi.h.


Function Documentation

void ckcapi_ReverseData ( NSSItem *  item)

Definition at line 252 of file crsa.c.

{
  int end = (item->size)-1;
  int middle = (item->size)/2;
  unsigned char *buf = item->data;
  int i;

  for (i=0; i < middle; i++) {
    unsigned char  tmp = buf[i];
    buf[i] = buf[end-i];
    buf[end-i] = tmp;
  }
  return;
}
NSS_EXTERN PRUint32 nss_ckcapi_collect_all_certs ( CK_ATTRIBUTE_PTR  pTemplate,
CK_ULONG  ulAttributeCount,
ckcapiInternalObject ***  listp,
PRUint32 sizep,
PRUint32  count,
CK_RV pError 
)

Definition at line 411 of file cfind.c.

{
  count = collect_class(CKO_CERTIFICATE, "My", PR_TRUE, pTemplate, 
                     ulAttributeCount, listp, sizep, count, pError);
  count = collect_class(CKO_CERTIFICATE, "AddressBook", PR_FALSE, pTemplate, 
                        ulAttributeCount, listp, sizep, count, pError);
  count = collect_class(CKO_CERTIFICATE, "CA", PR_FALSE, pTemplate, 
                     ulAttributeCount, listp, sizep, count, pError);
  count = collect_class(CKO_CERTIFICATE, "Root", PR_FALSE, pTemplate, 
                     ulAttributeCount, listp, sizep, count, pError);
  count = collect_class(CKO_CERTIFICATE, "Trust", PR_FALSE, pTemplate, 
                     ulAttributeCount, listp, sizep, count, pError);
  count = collect_class(CKO_CERTIFICATE, "TrustedPeople", PR_FALSE, pTemplate, 
                        ulAttributeCount, listp, sizep, count, pError);
  count = collect_class(CKO_CERTIFICATE, "AuthRoot", PR_FALSE, pTemplate, 
                        ulAttributeCount, listp, sizep, count, pError);
  return count;
}

Here is the call graph for this function:

Here is the caller graph for this function:

NSS_EXTERN NSSCKMDObject* nss_ckcapi_CreateMDObject ( NSSArena *  arena,
ckcapiInternalObject *  io,
CK_RV pError 
)

Definition at line 1689 of file cobject.c.

{
  if ((nssHash *)NULL == ckcapiInternalObjectHash) {
    ckcapiInternalObjectHash = nssHash_CreateItem(NULL, 10);
  }
  if (ckcapiCert == io->type) {
    /* the hash key, not a cryptographic key */
    NSSItem *key = &io->hashKey;
    ckcapiInternalObject *old_o = NULL;

    if (key->size == 0) {
      ckcapi_FetchHashKey(io);
    }
    old_o = (ckcapiInternalObject *) 
              nssHash_Lookup(ckcapiInternalObjectHash, key);
    if (!old_o) {
      nssHash_Add(ckcapiInternalObjectHash, key, io);
    } else if (old_o != io) {
      nss_ckcapi_DestroyInternalObject(io);
      io = old_o;
    }
  }
    
  if ( (void*)NULL == io->mdObject.etc) {
    (void) nsslibc_memcpy(&io->mdObject,&ckcapi_prototype_mdObject,
                                   sizeof(ckcapi_prototype_mdObject));
    io->mdObject.etc = (void *)io;
  }
  return &io->mdObject;
}

Here is the call graph for this function:

NSS_EXTERN NSSCKMDObject* nss_ckcapi_CreateObject ( NSSCKFWSession *  fwSession,
CK_ATTRIBUTE_PTR  pTemplate,
CK_ULONG  ulAttributeCount,
CK_RV pError 
)

Definition at line 2294 of file cobject.c.

{
  CK_OBJECT_CLASS objClass;
  ckcapiInternalObject *io;
  CK_BBOOL isToken;

  /*
   * only create token objects
   */
  isToken = nss_ckcapi_GetBoolAttribute(CKA_TOKEN, pTemplate, 
                                   ulAttributeCount, pError);
  if (CKR_OK != *pError) {
    return (NSSCKMDObject *) NULL;
  }
  if (!isToken) {
    *pError = CKR_ATTRIBUTE_VALUE_INVALID;
    return (NSSCKMDObject *) NULL;
  }

  /*
   * only create keys and certs.
   */
  objClass = nss_ckcapi_GetULongAttribute(CKA_CLASS, pTemplate, 
                                     ulAttributeCount, pError);
  if (CKR_OK != *pError) {
    return (NSSCKMDObject *) NULL;
  }
#ifdef notdef
  if (objClass == CKO_PUBLIC_KEY) {
    return CKR_OK; /* fake public key creation, happens as a side effect of
                    * private key creation */
  }
#endif
  if (objClass == CKO_CERTIFICATE) {
    io = nss_ckcapi_CreateCertificate(fwSession, pTemplate, 
                                  ulAttributeCount, pError);
  } else if (objClass == CKO_PRIVATE_KEY) {
    io = nss_ckcapi_CreatePrivateKey(fwSession, pTemplate, 
                                     ulAttributeCount, pError);
  } else {
    *pError = CKR_ATTRIBUTE_VALUE_INVALID;
  }

  if ((ckcapiInternalObject *)NULL == io) {
    return (NSSCKMDObject *) NULL;
  }
  return nss_ckcapi_CreateMDObject(NULL, io, pError);
}

Here is the call graph for this function:

NSS_EXTERN NSSCKMDSession* nss_ckcapi_CreateSession ( NSSCKFWSession *  fwSession,
CK_RV pError 
)

Definition at line 89 of file csession.c.

{
  NSSArena *arena;
  NSSCKMDSession *rv;

  arena = NSSCKFWSession_GetArena(fwSession, pError);
  if( (NSSArena *)NULL == arena ) {
    return (NSSCKMDSession *)NULL;
  }

  rv = nss_ZNEW(arena, NSSCKMDSession);
  if( (NSSCKMDSession *)NULL == rv ) {
    *pError = CKR_HOST_MEMORY;
    return (NSSCKMDSession *)NULL;
  }

  /* 
   * rv was zeroed when allocated, so we only 
   * need to set the non-zero members.
   */

  rv->etc = (void *)fwSession;
  /* rv->Close */
  /* rv->GetDeviceError */
  /* rv->Login */
  /* rv->Logout */
  /* rv->InitPIN */
  /* rv->SetPIN */
  /* rv->GetOperationStateLen */
  /* rv->GetOperationState */
  /* rv->SetOperationState */
  rv->CreateObject = ckcapi_mdSession_CreateObject;
  /* rv->CopyObject */
  rv->FindObjectsInit = ckcapi_mdSession_FindObjectsInit;
  /* rv->SeedRandom */
  /* rv->GetRandom */
  /* rv->null */

  return rv;
}

Here is the call graph for this function:

char* nss_ckcapi_DERUnwrap ( char *  src,
int  size,
int outSize,
char **  next 
)

Definition at line 142 of file cobject.c.

{
  unsigned char *start = src;
  unsigned char *end = src+size;
  unsigned int len = 0;

  /* initialize error condition return values */
  *outSize = 0;
  if (next) {
    *next = src;
  }

  if (size < 2) {
    return start;
  }
  src ++ ; /* skip the tag -- should check it against an expected value! */
  len = (unsigned) *src++;
  if (len & 0x80) {
    int count = len & 0x7f;
    len =0;

    if (count+2 > size) {
      return start;
    }
    while (count-- > 0) {
      len = (len << 8) | (unsigned) *src++;
    }
  }
  if (len + (src-start) > (unsigned int)size) {
    return start;
  }
  if (next) {
    *next = src+len;
  }
  *outSize = len;

  return src;
}
NSS_EXTERN void nss_ckcapi_DestroyInternalObject ( ckcapiInternalObject *  io)

Definition at line 1744 of file cobject.c.

{
  switch (io->type) {
  case ckcapiRaw:
    return;
  case ckcapiCert:
    CertFreeCertificateContext(io->u.cert.certContext);
    nss_ZFreeIf(io->u.cert.labelData);
    nss_ZFreeIf(io->u.cert.key.privateKey);
    nss_ZFreeIf(io->u.cert.key.pubKey);
    nss_ZFreeIf(io->idData);
    break;
  case ckcapiBareKey:
    nss_ZFreeIf(io->u.key.provInfo.pwszContainerName);
    nss_ZFreeIf(io->u.key.provInfo.pwszProvName);
    nss_ZFreeIf(io->u.key.provName);
    nss_ZFreeIf(io->u.key.containerName);
    nss_ZFreeIf(io->u.key.key.privateKey);
    nss_ZFreeIf(io->u.key.key.pubKey);
    if (0 != io->u.key.hProv) {
      CryptReleaseContext(io->u.key.hProv, 0);
    }
    nss_ZFreeIf(io->idData);
    break;
  }
  nss_ZFreeIf(io);
  return;
}

Here is the call graph for this function:

NSS_EXTERN const NSSItem* nss_ckcapi_FetchAttribute ( ckcapiInternalObject *  io,
CK_ATTRIBUTE_TYPE  type 
)

Definition at line 1172 of file cobject.c.

{
  CK_ULONG i;

  if (io->type == ckcapiRaw) {
    for( i = 0; i < io->u.raw.n; i++ ) {
      if( type == io->u.raw.types[i] ) {
        return &io->u.raw.items[i];
      }
    }
    return NULL;
  }
  /* deal with the common attributes */
  switch (io->objClass) {
  case CKO_CERTIFICATE:
   return ckcapi_FetchCertAttribute(io, type); 
  case CKO_PRIVATE_KEY:
   return ckcapi_FetchPrivKeyAttribute(io, type); 
  case CKO_PUBLIC_KEY:
   return ckcapi_FetchPubKeyAttribute(io, type); 
  }
  return NULL;
}

Here is the call graph for this function:

NSS_EXTERN CK_RV nss_ckcapi_FetchKeyContainer ( ckcapiInternalObject *  iKey,
HCRYPTPROV *  hProv,
DWORD keySpec,
HCRYPTKEY *  hKey 
)

Definition at line 482 of file cobject.c.

{
  ckcapiCertObject *co;
  ckcapiKeyObject *ko;
  BOOL rc, dummy;
  DWORD msError;


  switch (iKey->type) {
  default:
  case ckcapiRaw:
     /* can't have raw private keys */
     return CKR_KEY_TYPE_INCONSISTENT;
  case ckcapiCert:
    if (iKey->objClass != CKO_PRIVATE_KEY) {
      /* Only private keys have private key provider handles */
      return CKR_KEY_TYPE_INCONSISTENT;
    }
    co = &iKey->u.cert;

    /* OK, get the Provider */
    rc = CryptAcquireCertificatePrivateKey(co->certContext,
      CRYPT_ACQUIRE_CACHE_FLAG|CRYPT_ACQUIRE_COMPARE_KEY_FLAG, NULL, hProv, 
      keySpec, &dummy);
    if (!rc) {
      goto loser;
    }
    break;
  case ckcapiBareKey:
    if (iKey->objClass != CKO_PRIVATE_KEY) {
       /* Only private keys have private key provider handles */
       return CKR_KEY_TYPE_INCONSISTENT;
    }
    ko = &iKey->u.key;

    /* OK, get the Provider */
    if (0 == ko->hProv) {
      rc = CryptAcquireContext(hProv,
                            ko->containerName, 
                            ko->provName,
                               ko->provInfo.dwProvType , 0);
      if (!rc) {
        goto loser;
      }
    } else {
      *hProv = ko->hProv;
    }
    *keySpec = ko->provInfo.dwKeySpec;
    break;
  }

  /* and get the crypto handle */
  rc = CryptGetUserKey(*hProv, *keySpec, hKey);
  if (!rc) {
    goto loser;
  }
  return CKR_OK;
loser:
  /* map the microsoft error before leaving */
  msError = GetLastError();
  switch (msError) {
  case ERROR_INVALID_HANDLE:
  case ERROR_INVALID_PARAMETER:
  case NTE_BAD_KEY:
  case NTE_NO_KEY:
  case NTE_BAD_PUBLIC_KEY:
  case NTE_BAD_KEYSET:
  case NTE_KEYSET_NOT_DEF:
    return CKR_KEY_TYPE_INCONSISTENT;
  case NTE_BAD_UID:
  case NTE_KEYSET_ENTRY_BAD:
    return CKR_DEVICE_ERROR;
  }
  return CKR_GENERAL_ERROR;
}
NSS_EXTERN NSSCKMDFindObjects* nss_ckcapi_FindObjectsInit ( NSSCKFWSession *  fwSession,
CK_ATTRIBUTE_PTR  pTemplate,
CK_ULONG  ulAttributeCount,
CK_RV pError 
)

Definition at line 531 of file cfind.c.

{
  /* This could be made more efficient.  I'm rather rushed. */
  NSSArena *arena;
  NSSCKMDFindObjects *rv = (NSSCKMDFindObjects *)NULL;
  struct ckcapiFOStr *fo = (struct ckcapiFOStr *)NULL;
  ckcapiInternalObject **temp = (ckcapiInternalObject **)NULL;

  arena = NSSArena_Create();
  if( (NSSArena *)NULL == arena ) {
    goto loser;
  }

  rv = nss_ZNEW(arena, NSSCKMDFindObjects);
  if( (NSSCKMDFindObjects *)NULL == rv ) {
    *pError = CKR_HOST_MEMORY;
    goto loser;
  }

  fo = nss_ZNEW(arena, struct ckcapiFOStr);
  if( (struct ckcapiFOStr *)NULL == fo ) {
    *pError = CKR_HOST_MEMORY;
    goto loser;
  }

  fo->arena = arena;
  /* fo->n and fo->i are already zero */

  rv->etc = (void *)fo;
  rv->Final = ckcapi_mdFindObjects_Final;
  rv->Next = ckcapi_mdFindObjects_Next;
  rv->null = (void *)NULL;

  fo->n = collect_objects(pTemplate, ulAttributeCount, &temp, pError);
  if (*pError != CKR_OK) {
    goto loser;
  }

  fo->objs = nss_ZNEWARRAY(arena, ckcapiInternalObject *, fo->n);
  if( (ckcapiInternalObject **)NULL == fo->objs ) {
    *pError = CKR_HOST_MEMORY;
    goto loser;
  }

  (void)nsslibc_memcpy(fo->objs, temp, sizeof(ckcapiInternalObject *) * fo->n);
  nss_ZFreeIf(temp);
  temp = (ckcapiInternalObject **)NULL;

  return rv;

 loser:
  nss_ZFreeIf(temp);
  nss_ZFreeIf(fo);
  nss_ZFreeIf(rv);
  if ((NSSArena *)NULL != arena) {
     NSSArena_Destroy(arena);
  }
  return (NSSCKMDFindObjects *)NULL;
}

Here is the call graph for this function:

Here is the caller graph for this function:

LPWSTR nss_ckcapi_UTF8ToWide ( char *  buf)

Definition at line 443 of file cobject.c.

{
  DWORD size;
  DWORD len = strlen(buf)+1;
  LPWSTR wide;

  if ((char *)NULL == buf) {
    return (LPWSTR) NULL;
  }
    
  len = strlen(buf)+1;

  size = MultiByteToWideChar(CP_UTF8, 0, buf, len, NULL, 0);
  if (size == 0) {
    return (LPWSTR) NULL;
  }
  wide = nss_ZNEWARRAY(NULL, WCHAR, size);
  size = MultiByteToWideChar(CP_UTF8, 0, buf, len, wide, size);
  if (size == 0) {
    nss_ZFreeIf(wide);
    return (LPWSTR) NULL;
  }
  return wide;
}

Here is the call graph for this function:

Definition at line 417 of file cobject.c.

{
  DWORD len = nss_ckcapi_WideSize(wide);
  LPWSTR buf;

  if ((LPWSTR)NULL == wide) {
    return (LPWSTR)NULL;
  }

  len = nss_ckcapi_WideSize(wide);

  buf = (LPWSTR) nss_ZNEWARRAY(NULL, char, len);
  if ((LPWSTR) NULL == buf) {
    return buf;
  }
  nsslibc_memcpy(buf, wide, len);
  return buf;
}

Here is the call graph for this function:

Definition at line 367 of file cobject.c.

{
  DWORD size;

  if ((LPWSTR)NULL == wide) {
    return 0;
  }
  size = wcslen(wide)+1;
  return size*2;
}
char* nss_ckcapi_WideToUTF8 ( LPCWSTR  wide)

Definition at line 385 of file cobject.c.

{
  DWORD len;
  DWORD size;
  char *buf;

  if ((LPWSTR)NULL == wide) {
    return (char *)NULL;
  }

  len = nss_ckcapi_WideSize(wide);

  size = WideCharToMultiByte(CP_UTF8, 0, wide, len, NULL, 0, NULL, 0);
  if (size == 0) {
    return (char *)NULL;
  }
  buf = nss_ZNEWARRAY(NULL, char, size);
  size = WideCharToMultiByte(CP_UTF8, 0, wide, len, buf, size, NULL, 0);
  if (size == 0) {
    nss_ZFreeIf(buf);
    return (char *)NULL;
  }
  return buf;
}

Here is the call graph for this function:


Variable Documentation

Definition at line 160 of file ckcapi.h.

NSS_EXTERN_DATA ckcapiInternalObject nss_ckcapi_data[]

Definition at line 157 of file ckcapi.h.

Definition at line 166 of file ckcapi.h.

Definition at line 165 of file ckcapi.h.

Definition at line 162 of file ckcapi.h.

Definition at line 163 of file ckcapi.h.

Definition at line 161 of file ckcapi.h.

Definition at line 171 of file ckcapi.h.

Definition at line 174 of file ckcapi.h.

Definition at line 172 of file ckcapi.h.

Definition at line 173 of file ckcapi.h.

Definition at line 158 of file ckcapi.h.

Definition at line 164 of file ckcapi.h.

Definition at line 167 of file ckcapi.h.

Definition at line 168 of file ckcapi.h.

Definition at line 169 of file ckcapi.h.