OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 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 | 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/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 /* | 5 /* |
6 * ckhelper.h | 6 * ckhelper.h |
7 * | 7 * |
8 * This file contains some helper utilities for interaction with cryptoki. | 8 * This file contains some helper utilities for interaction with cryptoki. |
9 */ | 9 */ |
10 | 10 |
11 #ifndef CKHELPER_H | 11 #ifndef CKHELPER_H |
12 #define CKHELPER_H | 12 #define CKHELPER_H |
13 | 13 |
14 PR_BEGIN_EXTERN_C | 14 PR_BEGIN_EXTERN_C |
15 | 15 |
16 /* Some globals to keep from constantly redeclaring common cryptoki | 16 /* Some globals to keep from constantly redeclaring common cryptoki |
17 * attribute types on the stack. | 17 * attribute types on the stack. |
18 */ | 18 */ |
19 | 19 |
20 /* Boolean values */ | 20 /* Boolean values */ |
21 NSS_EXTERN_DATA const NSSItem g_ck_true; | 21 NSS_EXTERN_DATA const NSSItem g_ck_true; |
22 NSS_EXTERN_DATA const NSSItem g_ck_false; | 22 NSS_EXTERN_DATA const NSSItem g_ck_false; |
23 | 23 |
24 /* Object classes */ | 24 /* Object classes */ |
25 NSS_EXTERN_DATA const NSSItem g_ck_class_cert; | 25 NSS_EXTERN_DATA const NSSItem g_ck_class_cert; |
26 NSS_EXTERN_DATA const NSSItem g_ck_class_pubkey; | 26 NSS_EXTERN_DATA const NSSItem g_ck_class_pubkey; |
27 NSS_EXTERN_DATA const NSSItem g_ck_class_privkey; | 27 NSS_EXTERN_DATA const NSSItem g_ck_class_privkey; |
28 | 28 |
29 #define NSS_CK_TEMPLATE_START(_template, attr, size) \ | 29 #define NSS_CK_TEMPLATE_START(_template, attr, size) \ |
30 attr = _template; \ | 30 attr = _template; \ |
31 size = 0; | 31 size = 0; |
32 | 32 |
33 #define NSS_CK_SET_ATTRIBUTE_ITEM(pattr, kind, item) \ | 33 #define NSS_CK_SET_ATTRIBUTE_ITEM(pattr, kind, item) \ |
34 (pattr)->type = kind; \ | 34 (pattr)->type = kind; \ |
35 (pattr)->pValue = (CK_VOID_PTR)(item)->data; \ | 35 (pattr)->pValue = (CK_VOID_PTR)(item)->data; \ |
36 (pattr)->ulValueLen = (CK_ULONG)(item)->size; \ | 36 (pattr)->ulValueLen = (CK_ULONG)(item)->size; \ |
37 (pattr)++; | 37 (pattr)++; |
38 | 38 |
39 #define NSS_CK_SET_ATTRIBUTE_UTF8(pattr, kind, utf8) \ | 39 #define NSS_CK_SET_ATTRIBUTE_UTF8(pattr, kind, utf8) \ |
40 (pattr)->type = kind; \ | 40 (pattr)->type = kind; \ |
41 (pattr)->pValue = (CK_VOID_PTR)utf8; \ | 41 (pattr)->pValue = (CK_VOID_PTR)utf8; \ |
42 (pattr)->ulValueLen = (CK_ULONG)nssUTF8_Size(utf8, NULL); \ | 42 (pattr)->ulValueLen = (CK_ULONG)nssUTF8_Size(utf8, NULL); \ |
43 if ((pattr)->ulValueLen) ((pattr)->ulValueLen)--; \ | 43 if ((pattr)->ulValueLen) \ |
| 44 ((pattr)->ulValueLen)--; \ |
44 (pattr)++; | 45 (pattr)++; |
45 | 46 |
46 #define NSS_CK_SET_ATTRIBUTE_VAR(pattr, kind, var) \ | 47 #define NSS_CK_SET_ATTRIBUTE_VAR(pattr, kind, var) \ |
47 (pattr)->type = kind; \ | 48 (pattr)->type = kind; \ |
48 (pattr)->pValue = (CK_VOID_PTR)&var; \ | 49 (pattr)->pValue = (CK_VOID_PTR)&var; \ |
49 (pattr)->ulValueLen = (CK_ULONG)sizeof(var); \ | 50 (pattr)->ulValueLen = (CK_ULONG)sizeof(var); \ |
50 (pattr)++; | 51 (pattr)++; |
51 | 52 |
52 #define NSS_CK_SET_ATTRIBUTE_NULL(pattr, kind) \ | 53 #define NSS_CK_SET_ATTRIBUTE_NULL(pattr, kind) \ |
53 (pattr)->type = kind; \ | 54 (pattr)->type = kind; \ |
54 (pattr)->pValue = (CK_VOID_PTR)NULL; \ | 55 (pattr)->pValue = (CK_VOID_PTR)NULL; \ |
55 (pattr)->ulValueLen = 0; \ | 56 (pattr)->ulValueLen = 0; \ |
56 (pattr)++; | 57 (pattr)++; |
57 | 58 |
58 #define NSS_CK_TEMPLATE_FINISH(_template, attr, size) \ | 59 #define NSS_CK_TEMPLATE_FINISH(_template, attr, size) \ |
59 size = (attr) - (_template); \ | 60 size = (attr) - (_template); \ |
60 PR_ASSERT(size <= sizeof(_template)/sizeof(_template[0])); | 61 PR_ASSERT(size <= sizeof(_template) / sizeof(_template[0])); |
61 | 62 |
62 /* NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item) | 63 /* NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item) |
63 * | 64 * |
64 * Convert a CK_ATTRIBUTE to an NSSItem. | 65 * Convert a CK_ATTRIBUTE to an NSSItem. |
65 */ | 66 */ |
66 #define NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item) \ | 67 #define NSS_CK_ATTRIBUTE_TO_ITEM(attrib, item) \ |
67 if ((CK_LONG)(attrib)->ulValueLen > 0) { \ | 68 if ((CK_LONG)(attrib)->ulValueLen > 0) { \ |
68 » (item)->data = (void *)(attrib)->pValue; \ | 69 (item)->data = (void *)(attrib)->pValue; \ |
69 » (item)->size = (PRUint32)(attrib)->ulValueLen; \ | 70 (item)->size = (PRUint32)(attrib)->ulValueLen; \ |
70 } else { \ | 71 } else { \ |
71 » (item)->data = 0; \ | 72 (item)->data = 0; \ |
72 » (item)->size = 0; \ | 73 (item)->size = 0; \ |
73 } | 74 } |
74 | 75 |
75 #define NSS_CK_ATTRIBUTE_TO_BOOL(attrib, boolvar) \ | 76 #define NSS_CK_ATTRIBUTE_TO_BOOL(attrib, boolvar) \ |
76 if ((attrib)->ulValueLen > 0) { \ | 77 if ((attrib)->ulValueLen > 0) { \ |
77 » if (*((CK_BBOOL*)(attrib)->pValue) == CK_TRUE) { \ | 78 if (*((CK_BBOOL *)(attrib)->pValue) == CK_TRUE) { \ |
78 » boolvar = PR_TRUE; \ | 79 boolvar = PR_TRUE; \ |
79 » } else { \ | 80 } else { \ |
80 » boolvar = PR_FALSE; \ | 81 boolvar = PR_FALSE; \ |
81 » } \ | 82 } \ |
82 } | 83 } |
83 | 84 |
84 #define NSS_CK_ATTRIBUTE_TO_ULONG(attrib, ulongvar) \ | 85 #define NSS_CK_ATTRIBUTE_TO_ULONG(attrib, ulongvar) \ |
85 if ((attrib)->ulValueLen > 0) { \ | 86 if ((attrib)->ulValueLen > 0) { \ |
86 » ulongvar = *((CK_ULONG*)(attrib)->pValue); \ | 87 ulongvar = *((CK_ULONG *)(attrib)->pValue); \ |
87 } | 88 } |
88 | 89 |
89 /* NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str) | 90 /* NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str) |
90 * | 91 * |
91 * Convert a CK_ATTRIBUTE to a string. | 92 * Convert a CK_ATTRIBUTE to a string. |
92 */ | 93 */ |
93 #define NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str) \ | 94 #define NSS_CK_ATTRIBUTE_TO_UTF8(attrib, str) \ |
94 str = (NSSUTF8 *)((attrib)->pValue); | 95 str = (NSSUTF8 *)((attrib)->pValue); |
95 | 96 |
96 /* NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib) | 97 /* NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib) |
97 * | 98 * |
98 * Convert an NSSItem to a CK_ATTRIBUTE. | 99 * Convert an NSSItem to a CK_ATTRIBUTE. |
99 */ | 100 */ |
100 #define NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib) \ | 101 #define NSS_CK_ITEM_TO_ATTRIBUTE(item, attrib) \ |
101 (attrib)->pValue = (CK_VOID_PTR)(item)->data; \ | 102 (attrib)->pValue = (CK_VOID_PTR)(item)->data; \ |
102 (attrib)->ulValueLen = (CK_ULONG)(item)->size; \ | 103 (attrib)->ulValueLen = (CK_ULONG)(item)->size; |
103 | 104 |
104 /* Get an array of attributes from an object. */ | 105 /* Get an array of attributes from an object. */ |
105 NSS_EXTERN PRStatus | 106 NSS_EXTERN PRStatus |
106 nssCKObject_GetAttributes | 107 nssCKObject_GetAttributes( |
107 ( | 108 CK_OBJECT_HANDLE object, |
108 CK_OBJECT_HANDLE object, | 109 CK_ATTRIBUTE_PTR obj_template, |
109 CK_ATTRIBUTE_PTR obj_template, | 110 CK_ULONG count, |
110 CK_ULONG count, | 111 NSSArena *arenaOpt, |
111 NSSArena *arenaOpt, | 112 nssSession *session, |
112 nssSession *session, | 113 NSSSlot *slot); |
113 NSSSlot *slot | |
114 ); | |
115 | 114 |
116 /* Get a single attribute as an item. */ | 115 /* Get a single attribute as an item. */ |
117 NSS_EXTERN PRStatus | 116 NSS_EXTERN PRStatus |
118 nssCKObject_GetAttributeItem | 117 nssCKObject_GetAttributeItem( |
119 ( | 118 CK_OBJECT_HANDLE object, |
120 CK_OBJECT_HANDLE object, | 119 CK_ATTRIBUTE_TYPE attribute, |
121 CK_ATTRIBUTE_TYPE attribute, | 120 NSSArena *arenaOpt, |
122 NSSArena *arenaOpt, | 121 nssSession *session, |
123 nssSession *session, | 122 NSSSlot *slot, |
124 NSSSlot *slot, | 123 NSSItem *rvItem); |
125 NSSItem *rvItem | |
126 ); | |
127 | 124 |
128 NSS_EXTERN PRBool | 125 NSS_EXTERN PRBool |
129 nssCKObject_IsAttributeTrue | 126 nssCKObject_IsAttributeTrue( |
130 ( | 127 CK_OBJECT_HANDLE object, |
131 CK_OBJECT_HANDLE object, | 128 CK_ATTRIBUTE_TYPE attribute, |
132 CK_ATTRIBUTE_TYPE attribute, | 129 nssSession *session, |
133 nssSession *session, | 130 NSSSlot *slot, |
134 NSSSlot *slot, | 131 PRStatus *rvStatus); |
135 PRStatus *rvStatus | |
136 ); | |
137 | 132 |
138 NSS_EXTERN PRStatus | 133 NSS_EXTERN PRStatus |
139 nssCKObject_SetAttributes | 134 nssCKObject_SetAttributes( |
140 ( | 135 CK_OBJECT_HANDLE object, |
141 CK_OBJECT_HANDLE object, | 136 CK_ATTRIBUTE_PTR obj_template, |
142 CK_ATTRIBUTE_PTR obj_template, | 137 CK_ULONG count, |
143 CK_ULONG count, | 138 nssSession *session, |
144 nssSession *session, | 139 NSSSlot *slot); |
145 NSSSlot *slot | |
146 ); | |
147 | 140 |
148 NSS_EXTERN PRBool | 141 NSS_EXTERN PRBool |
149 nssCKObject_IsTokenObjectTemplate | 142 nssCKObject_IsTokenObjectTemplate( |
150 ( | 143 CK_ATTRIBUTE_PTR objectTemplate, |
151 CK_ATTRIBUTE_PTR objectTemplate, | 144 CK_ULONG otsize); |
152 CK_ULONG otsize | |
153 ); | |
154 | 145 |
155 PR_END_EXTERN_C | 146 PR_END_EXTERN_C |
156 | 147 |
157 #endif /* CKHELPER_H */ | 148 #endif /* CKHELPER_H */ |
OLD | NEW |