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 */