security/nss/lib/ckfw/nssmkey/ckmk.h

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:4791413035be
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
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
4
5 #ifndef CKMK_H
6 #define CKMK_H 1
7
8 #include <Security/SecKeychainSearch.h>
9 #include <Security/SecKeychainItem.h>
10 #include <Security/SecKeychain.h>
11 #include <Security/cssmtype.h>
12 #include <Security/cssmapi.h>
13 #include <Security/SecKey.h>
14 #include <Security/SecCertificate.h>
15
16 #define NTO
17
18 #include "nssckmdt.h"
19 #include "nssckfw.h"
20 /*
21 * I'm including this for access to the arena functions.
22 * Looks like we should publish that API.
23 */
24 #ifndef BASE_H
25 #include "base.h"
26 #endif /* BASE_H */
27 /*
28 * This is where the Netscape extensions live, at least for now.
29 */
30 #ifndef CKT_H
31 #include "ckt.h"
32 #endif /* CKT_H */
33
34 /*
35 * statically defined raw objects. Allows us to data description objects
36 * to this PKCS #11 module.
37 */
38 struct ckmkRawObjectStr {
39 CK_ULONG n;
40 const CK_ATTRIBUTE_TYPE *types;
41 const NSSItem *items;
42 };
43 typedef struct ckmkRawObjectStr ckmkRawObject;
44
45 /*
46 * Key/Cert Items
47 */
48 struct ckmkItemObjectStr {
49 SecKeychainItemRef itemRef;
50 SecItemClass itemClass;
51 PRBool hasID;
52 NSSItem modify;
53 NSSItem private;
54 NSSItem encrypt;
55 NSSItem decrypt;
56 NSSItem derive;
57 NSSItem sign;
58 NSSItem signRecover;
59 NSSItem verify;
60 NSSItem verifyRecover;
61 NSSItem wrap;
62 NSSItem unwrap;
63 NSSItem label;
64 NSSItem subject;
65 NSSItem issuer;
66 NSSItem serial;
67 NSSItem derCert;
68 NSSItem id;
69 NSSItem modulus;
70 NSSItem exponent;
71 NSSItem privateExponent;
72 NSSItem prime1;
73 NSSItem prime2;
74 NSSItem exponent1;
75 NSSItem exponent2;
76 NSSItem coefficient;
77 };
78 typedef struct ckmkItemObjectStr ckmkItemObject;
79
80 typedef enum {
81 ckmkRaw,
82 ckmkItem,
83 } ckmkObjectType;
84
85 /*
86 * all the various types of objects are abstracted away in cobject and
87 * cfind as ckmkInternalObjects.
88 */
89 struct ckmkInternalObjectStr {
90 ckmkObjectType type;
91 union {
92 ckmkRawObject raw;
93 ckmkItemObject item;
94 } u;
95 CK_OBJECT_CLASS objClass;
96 NSSItem hashKey;
97 unsigned char hashKeyData[128];
98 NSSCKMDObject mdObject;
99 };
100 typedef struct ckmkInternalObjectStr ckmkInternalObject;
101
102 /* our raw object data array */
103 NSS_EXTERN_DATA ckmkInternalObject nss_ckmk_data[];
104 NSS_EXTERN_DATA const PRUint32 nss_ckmk_nObjects;
105
106 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_CryptokiVersion;
107 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_ManufacturerID;
108 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_LibraryDescription;
109 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_LibraryVersion;
110 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_SlotDescription;
111 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_HardwareVersion;
112 NSS_EXTERN_DATA const CK_VERSION nss_ckmk_FirmwareVersion;
113 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenLabel;
114 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenModel;
115 NSS_EXTERN_DATA const NSSUTF8 * nss_ckmk_TokenSerialNumber;
116
117 NSS_EXTERN_DATA const NSSCKMDInstance nss_ckmk_mdInstance;
118 NSS_EXTERN_DATA const NSSCKMDSlot nss_ckmk_mdSlot;
119 NSS_EXTERN_DATA const NSSCKMDToken nss_ckmk_mdToken;
120 NSS_EXTERN_DATA const NSSCKMDMechanism nss_ckmk_mdMechanismRSA;
121
122 NSS_EXTERN NSSCKMDSession *
123 nss_ckmk_CreateSession
124 (
125 NSSCKFWSession *fwSession,
126 CK_RV *pError
127 );
128
129 NSS_EXTERN NSSCKMDFindObjects *
130 nss_ckmk_FindObjectsInit
131 (
132 NSSCKFWSession *fwSession,
133 CK_ATTRIBUTE_PTR pTemplate,
134 CK_ULONG ulAttributeCount,
135 CK_RV *pError
136 );
137
138 /*
139 * Object Utilities
140 */
141 NSS_EXTERN NSSCKMDObject *
142 nss_ckmk_CreateMDObject
143 (
144 NSSArena *arena,
145 ckmkInternalObject *io,
146 CK_RV *pError
147 );
148
149 NSS_EXTERN NSSCKMDObject *
150 nss_ckmk_CreateObject
151 (
152 NSSCKFWSession *fwSession,
153 CK_ATTRIBUTE_PTR pTemplate,
154 CK_ULONG ulAttributeCount,
155 CK_RV *pError
156 );
157
158 NSS_EXTERN const NSSItem *
159 nss_ckmk_FetchAttribute
160 (
161 ckmkInternalObject *io,
162 CK_ATTRIBUTE_TYPE type,
163 CK_RV *pError
164 );
165
166 NSS_EXTERN void
167 nss_ckmk_DestroyInternalObject
168 (
169 ckmkInternalObject *io
170 );
171
172 unsigned char *
173 nss_ckmk_DERUnwrap
174 (
175 unsigned char *src,
176 int size,
177 int *outSize,
178 unsigned char **next
179 );
180
181 CK_ULONG
182 nss_ckmk_GetULongAttribute
183 (
184 CK_ATTRIBUTE_TYPE type,
185 CK_ATTRIBUTE *template,
186 CK_ULONG templateSize,
187 CK_RV *pError
188 );
189
190 #define NSS_CKMK_ARRAY_SIZE(x) ((sizeof (x))/(sizeof ((x)[0])))
191
192 #ifdef DEBUG
193 #define CKMK_MACERR(str,err) cssmPerror(str,err)
194 #else
195 #define CKMK_MACERR(str,err)
196 #endif
197
198 #endif

mercurial