security/nss/lib/dev/ckhelper.h

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/security/nss/lib/dev/ckhelper.h	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,157 @@
     1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public
     1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.7 +
     1.8 +/*
     1.9 + * ckhelper.h
    1.10 + *
    1.11 + * This file contains some helper utilities for interaction with cryptoki.
    1.12 + */
    1.13 +
    1.14 +#ifndef CKHELPER_H
    1.15 +#define CKHELPER_H
    1.16 +
    1.17 +PR_BEGIN_EXTERN_C
    1.18 +
    1.19 +/* Some globals to keep from constantly redeclaring common cryptoki
    1.20 + * attribute types on the stack.
    1.21 + */
    1.22 +
    1.23 +/* Boolean values */
    1.24 +NSS_EXTERN_DATA const NSSItem g_ck_true;
    1.25 +NSS_EXTERN_DATA const NSSItem g_ck_false;
    1.26 +
    1.27 +/* Object classes */
    1.28 +NSS_EXTERN_DATA const NSSItem g_ck_class_cert;
    1.29 +NSS_EXTERN_DATA const NSSItem g_ck_class_pubkey;
    1.30 +NSS_EXTERN_DATA const NSSItem g_ck_class_privkey;
    1.31 +
    1.32 +#define NSS_CK_TEMPLATE_START(_template, attr, size)   \
    1.33 +    attr = _template;                                  \
    1.34 +    size = 0;
    1.35 +
    1.36 +#define NSS_CK_SET_ATTRIBUTE_ITEM(pattr, kind, item)  \
    1.37 +    (pattr)->type = kind;                             \
    1.38 +    (pattr)->pValue = (CK_VOID_PTR)(item)->data;      \
    1.39 +    (pattr)->ulValueLen = (CK_ULONG)(item)->size;     \
    1.40 +    (pattr)++;
    1.41 +
    1.42 +#define NSS_CK_SET_ATTRIBUTE_UTF8(pattr, kind, utf8)  \
    1.43 +    (pattr)->type = kind;                             \
    1.44 +    (pattr)->pValue = (CK_VOID_PTR)utf8;              \
    1.45 +    (pattr)->ulValueLen = (CK_ULONG)nssUTF8_Size(utf8, NULL); \
    1.46 +    if ((pattr)->ulValueLen) ((pattr)->ulValueLen)--; \
    1.47 +    (pattr)++;
    1.48 +
    1.49 +#define NSS_CK_SET_ATTRIBUTE_VAR(pattr, kind, var)    \
    1.50 +    (pattr)->type = kind;                             \
    1.51 +    (pattr)->pValue = (CK_VOID_PTR)&var;              \
    1.52 +    (pattr)->ulValueLen = (CK_ULONG)sizeof(var);      \
    1.53 +    (pattr)++;
    1.54 +
    1.55 +#define NSS_CK_SET_ATTRIBUTE_NULL(pattr, kind)        \
    1.56 +    (pattr)->type = kind;                             \
    1.57 +    (pattr)->pValue = (CK_VOID_PTR)NULL;              \
    1.58 +    (pattr)->ulValueLen = 0;                          \
    1.59 +    (pattr)++;
    1.60 +
    1.61 +#define NSS_CK_TEMPLATE_FINISH(_template, attr, size) \
    1.62 +    size = (attr) - (_template);                      \
    1.63 +    PR_ASSERT(size <= sizeof(_template)/sizeof(_template[0]));
    1.64 +
    1.65 +/* NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item)
    1.66 + *
    1.67 + * Convert a CK_ATTRIBUTE to an NSSItem.
    1.68 + */
    1.69 +#define NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item)         \
    1.70 +    if ((CK_LONG)(attrib)->ulValueLen > 0) {           \
    1.71 +	(item)->data = (void *)(attrib)->pValue;       \
    1.72 +	(item)->size = (PRUint32)(attrib)->ulValueLen; \
    1.73 +    } else {                                           \
    1.74 +	(item)->data = 0;                              \
    1.75 +	(item)->size = 0;                              \
    1.76 +    }
    1.77 +
    1.78 +#define NSS_CK_ATTRIBUTE_TO_BOOL(attrib, boolvar)        \
    1.79 +    if ((attrib)->ulValueLen > 0) {                      \
    1.80 +	if (*((CK_BBOOL*)(attrib)->pValue) == CK_TRUE) { \
    1.81 +	    boolvar = PR_TRUE;                           \
    1.82 +	} else {                                         \
    1.83 +	    boolvar = PR_FALSE;                          \
    1.84 +	}                                                \
    1.85 +    }
    1.86 +
    1.87 +#define NSS_CK_ATTRIBUTE_TO_ULONG(attrib, ulongvar)      \
    1.88 +    if ((attrib)->ulValueLen > 0) {                      \
    1.89 +	ulongvar = *((CK_ULONG*)(attrib)->pValue);       \
    1.90 +    }
    1.91 +
    1.92 +/* NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str)
    1.93 + *
    1.94 + * Convert a CK_ATTRIBUTE to a string.
    1.95 + */
    1.96 +#define NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str)      \
    1.97 +    str = (NSSUTF8 *)((attrib)->pValue);
    1.98 +
    1.99 +/* NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib)
   1.100 + *
   1.101 + * Convert an NSSItem to a  CK_ATTRIBUTE.
   1.102 + */
   1.103 +#define NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib)     \
   1.104 +    (attrib)->pValue = (CK_VOID_PTR)(item)->data;  \
   1.105 +    (attrib)->ulValueLen = (CK_ULONG)(item)->size; \
   1.106 +
   1.107 +/* Get an array of attributes from an object. */
   1.108 +NSS_EXTERN PRStatus 
   1.109 +nssCKObject_GetAttributes
   1.110 +(
   1.111 +  CK_OBJECT_HANDLE object,
   1.112 +  CK_ATTRIBUTE_PTR obj_template,
   1.113 +  CK_ULONG count,
   1.114 +  NSSArena *arenaOpt,
   1.115 +  nssSession *session,
   1.116 +  NSSSlot *slot
   1.117 +);
   1.118 +
   1.119 +/* Get a single attribute as an item. */
   1.120 +NSS_EXTERN PRStatus
   1.121 +nssCKObject_GetAttributeItem
   1.122 +(
   1.123 +  CK_OBJECT_HANDLE object,
   1.124 +  CK_ATTRIBUTE_TYPE attribute,
   1.125 +  NSSArena *arenaOpt,
   1.126 +  nssSession *session,
   1.127 +  NSSSlot *slot,
   1.128 +  NSSItem *rvItem
   1.129 +);
   1.130 +
   1.131 +NSS_EXTERN PRBool
   1.132 +nssCKObject_IsAttributeTrue
   1.133 +(
   1.134 +  CK_OBJECT_HANDLE object,
   1.135 +  CK_ATTRIBUTE_TYPE attribute,
   1.136 +  nssSession *session,
   1.137 +  NSSSlot *slot,
   1.138 +  PRStatus *rvStatus
   1.139 +);
   1.140 +
   1.141 +NSS_EXTERN PRStatus 
   1.142 +nssCKObject_SetAttributes
   1.143 +(
   1.144 +  CK_OBJECT_HANDLE object,
   1.145 +  CK_ATTRIBUTE_PTR obj_template,
   1.146 +  CK_ULONG count,
   1.147 +  nssSession *session,
   1.148 +  NSSSlot  *slot
   1.149 +);
   1.150 +
   1.151 +NSS_EXTERN PRBool
   1.152 +nssCKObject_IsTokenObjectTemplate
   1.153 +(
   1.154 +  CK_ATTRIBUTE_PTR objectTemplate, 
   1.155 +  CK_ULONG otsize
   1.156 +);
   1.157 +
   1.158 +PR_END_EXTERN_C
   1.159 +
   1.160 +#endif /* CKHELPER_H */

mercurial