2 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
4 * The contents of this file constitute Original Code as defined in and are
5 * subject to the Apple Public Source License Version 1.2 (the 'License').
6 * You may not use this file except in compliance with the License. Please obtain
7 * a copy of the License at http://www.apple.com/publicsource and read it before
10 * This Original Code and all software distributed under the License are
11 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
12 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
13 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
14 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
15 * specific language governing rights and limitations under the License.
22 Contains: Service Provider Interface for
23 Cryptographic Service Provider Modules
25 Copyright: (c) 1999-2000 Apple Computer, Inc., all rights reserved.
29 #define _CSSMCSPI_H_ 1
31 #include <Security/cssmspi.h>
37 typedef struct cssm_spi_csp_funcs
{
38 CSSM_RETURN (CSSMCSPI
*EventNotify
)
39 (CSSM_CSP_HANDLE CSPHandle
,
40 CSSM_CONTEXT_EVENT Event
,
41 CSSM_CC_HANDLE CCHandle
,
42 const CSSM_CONTEXT
*Context
);
43 CSSM_RETURN (CSSMCSPI
*QuerySize
)
44 (CSSM_CSP_HANDLE CSPHandle
,
45 CSSM_CC_HANDLE CCHandle
,
46 const CSSM_CONTEXT
*Context
,
48 uint32 QuerySizeCount
,
49 CSSM_QUERY_SIZE_DATA_PTR DataBlock
);
50 CSSM_RETURN (CSSMCSPI
*SignData
)
51 (CSSM_CSP_HANDLE CSPHandle
,
52 CSSM_CC_HANDLE CCHandle
,
53 const CSSM_CONTEXT
*Context
,
54 const CSSM_DATA
*DataBufs
,
56 CSSM_ALGORITHMS DigestAlgorithm
,
57 CSSM_DATA_PTR Signature
);
58 CSSM_RETURN (CSSMCSPI
*SignDataInit
)
59 (CSSM_CSP_HANDLE CSPHandle
,
60 CSSM_CC_HANDLE CCHandle
,
61 const CSSM_CONTEXT
*Context
);
62 CSSM_RETURN (CSSMCSPI
*SignDataUpdate
)
63 (CSSM_CSP_HANDLE CSPHandle
,
64 CSSM_CC_HANDLE CCHandle
,
65 const CSSM_DATA
*DataBufs
,
67 CSSM_RETURN (CSSMCSPI
*SignDataFinal
)
68 (CSSM_CSP_HANDLE CSPHandle
,
69 CSSM_CC_HANDLE CCHandle
,
70 CSSM_DATA_PTR Signature
);
71 CSSM_RETURN (CSSMCSPI
*VerifyData
)
72 (CSSM_CSP_HANDLE CSPHandle
,
73 CSSM_CC_HANDLE CCHandle
,
74 const CSSM_CONTEXT
*Context
,
75 const CSSM_DATA
*DataBufs
,
77 CSSM_ALGORITHMS DigestAlgorithm
,
78 const CSSM_DATA
*Signature
);
79 CSSM_RETURN (CSSMCSPI
*VerifyDataInit
)
80 (CSSM_CSP_HANDLE CSPHandle
,
81 CSSM_CC_HANDLE CCHandle
,
82 const CSSM_CONTEXT
*Context
);
83 CSSM_RETURN (CSSMCSPI
*VerifyDataUpdate
)
84 (CSSM_CSP_HANDLE CSPHandle
,
85 CSSM_CC_HANDLE CCHandle
,
86 const CSSM_DATA
*DataBufs
,
88 CSSM_RETURN (CSSMCSPI
*VerifyDataFinal
)
89 (CSSM_CSP_HANDLE CSPHandle
,
90 CSSM_CC_HANDLE CCHandle
,
91 const CSSM_DATA
*Signature
);
92 CSSM_RETURN (CSSMCSPI
*DigestData
)
93 (CSSM_CSP_HANDLE CSPHandle
,
94 CSSM_CC_HANDLE CCHandle
,
95 const CSSM_CONTEXT
*Context
,
96 const CSSM_DATA
*DataBufs
,
98 CSSM_DATA_PTR Digest
);
99 CSSM_RETURN (CSSMCSPI
*DigestDataInit
)
100 (CSSM_CSP_HANDLE CSPHandle
,
101 CSSM_CC_HANDLE CCHandle
,
102 const CSSM_CONTEXT
*Context
);
103 CSSM_RETURN (CSSMCSPI
*DigestDataUpdate
)
104 (CSSM_CSP_HANDLE CSPHandle
,
105 CSSM_CC_HANDLE CCHandle
,
106 const CSSM_DATA
*DataBufs
,
107 uint32 DataBufCount
);
108 CSSM_RETURN (CSSMCSPI
*DigestDataClone
)
109 (CSSM_CSP_HANDLE CSPHandle
,
110 CSSM_CC_HANDLE CCHandle
,
111 CSSM_CC_HANDLE ClonedCCHandle
);
112 CSSM_RETURN (CSSMCSPI
*DigestDataFinal
)
113 (CSSM_CSP_HANDLE CSPHandle
,
114 CSSM_CC_HANDLE CCHandle
,
115 CSSM_DATA_PTR Digest
);
116 CSSM_RETURN (CSSMCSPI
*GenerateMac
)
117 (CSSM_CSP_HANDLE CSPHandle
,
118 CSSM_CC_HANDLE CCHandle
,
119 const CSSM_CONTEXT
*Context
,
120 const CSSM_DATA
*DataBufs
,
123 CSSM_RETURN (CSSMCSPI
*GenerateMacInit
)
124 (CSSM_CSP_HANDLE CSPHandle
,
125 CSSM_CC_HANDLE CCHandle
,
126 const CSSM_CONTEXT
*Context
);
127 CSSM_RETURN (CSSMCSPI
*GenerateMacUpdate
)
128 (CSSM_CSP_HANDLE CSPHandle
,
129 CSSM_CC_HANDLE CCHandle
,
130 const CSSM_DATA
*DataBufs
,
131 uint32 DataBufCount
);
132 CSSM_RETURN (CSSMCSPI
*GenerateMacFinal
)
133 (CSSM_CSP_HANDLE CSPHandle
,
134 CSSM_CC_HANDLE CCHandle
,
136 CSSM_RETURN (CSSMCSPI
*VerifyMac
)
137 (CSSM_CSP_HANDLE CSPHandle
,
138 CSSM_CC_HANDLE CCHandle
,
139 const CSSM_CONTEXT
*Context
,
140 const CSSM_DATA
*DataBufs
,
142 const CSSM_DATA
*Mac
);
143 CSSM_RETURN (CSSMCSPI
*VerifyMacInit
)
144 (CSSM_CSP_HANDLE CSPHandle
,
145 CSSM_CC_HANDLE CCHandle
,
146 const CSSM_CONTEXT
*Context
);
147 CSSM_RETURN (CSSMCSPI
*VerifyMacUpdate
)
148 (CSSM_CSP_HANDLE CSPHandle
,
149 CSSM_CC_HANDLE CCHandle
,
150 const CSSM_DATA
*DataBufs
,
151 uint32 DataBufCount
);
152 CSSM_RETURN (CSSMCSPI
*VerifyMacFinal
)
153 (CSSM_CSP_HANDLE CSPHandle
,
154 CSSM_CC_HANDLE CCHandle
,
155 const CSSM_DATA
*Mac
);
156 CSSM_RETURN (CSSMCSPI
*EncryptData
)
157 (CSSM_CSP_HANDLE CSPHandle
,
158 CSSM_CC_HANDLE CCHandle
,
159 const CSSM_CONTEXT
*Context
,
160 const CSSM_DATA
*ClearBufs
,
161 uint32 ClearBufCount
,
162 CSSM_DATA_PTR CipherBufs
,
163 uint32 CipherBufCount
,
164 uint32
*bytesEncrypted
,
165 CSSM_DATA_PTR RemData
,
166 CSSM_PRIVILEGE Privilege
);
167 CSSM_RETURN (CSSMCSPI
*EncryptDataInit
)
168 (CSSM_CSP_HANDLE CSPHandle
,
169 CSSM_CC_HANDLE CCHandle
,
170 const CSSM_CONTEXT
*Context
,
171 CSSM_PRIVILEGE Privilege
);
172 CSSM_RETURN (CSSMCSPI
*EncryptDataUpdate
)
173 (CSSM_CSP_HANDLE CSPHandle
,
174 CSSM_CC_HANDLE CCHandle
,
175 const CSSM_DATA
*ClearBufs
,
176 uint32 ClearBufCount
,
177 CSSM_DATA_PTR CipherBufs
,
178 uint32 CipherBufCount
,
179 uint32
*bytesEncrypted
);
180 CSSM_RETURN (CSSMCSPI
*EncryptDataFinal
)
181 (CSSM_CSP_HANDLE CSPHandle
,
182 CSSM_CC_HANDLE CCHandle
,
183 CSSM_DATA_PTR RemData
);
184 CSSM_RETURN (CSSMCSPI
*DecryptData
)
185 (CSSM_CSP_HANDLE CSPHandle
,
186 CSSM_CC_HANDLE CCHandle
,
187 const CSSM_CONTEXT
*Context
,
188 const CSSM_DATA
*CipherBufs
,
189 uint32 CipherBufCount
,
190 CSSM_DATA_PTR ClearBufs
,
191 uint32 ClearBufCount
,
192 uint32
*bytesDecrypted
,
193 CSSM_DATA_PTR RemData
,
194 CSSM_PRIVILEGE Privilege
);
195 CSSM_RETURN (CSSMCSPI
*DecryptDataInit
)
196 (CSSM_CSP_HANDLE CSPHandle
,
197 CSSM_CC_HANDLE CCHandle
,
198 const CSSM_CONTEXT
*Context
,
199 CSSM_PRIVILEGE Privilege
);
200 CSSM_RETURN (CSSMCSPI
*DecryptDataUpdate
)
201 (CSSM_CSP_HANDLE CSPHandle
,
202 CSSM_CC_HANDLE CCHandle
,
203 const CSSM_DATA
*CipherBufs
,
204 uint32 CipherBufCount
,
205 CSSM_DATA_PTR ClearBufs
,
206 uint32 ClearBufCount
,
207 uint32
*bytesDecrypted
);
208 CSSM_RETURN (CSSMCSPI
*DecryptDataFinal
)
209 (CSSM_CSP_HANDLE CSPHandle
,
210 CSSM_CC_HANDLE CCHandle
,
211 CSSM_DATA_PTR RemData
);
212 CSSM_RETURN (CSSMCSPI
*QueryKeySizeInBits
)
213 (CSSM_CSP_HANDLE CSPHandle
,
214 CSSM_CC_HANDLE CCHandle
,
215 const CSSM_CONTEXT
*Context
,
217 CSSM_KEY_SIZE_PTR KeySize
);
218 CSSM_RETURN (CSSMCSPI
*GenerateKey
)
219 (CSSM_CSP_HANDLE CSPHandle
,
220 CSSM_CC_HANDLE CCHandle
,
221 const CSSM_CONTEXT
*Context
,
224 const CSSM_DATA
*KeyLabel
,
225 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
,
227 CSSM_PRIVILEGE Privilege
);
228 CSSM_RETURN (CSSMCSPI
*GenerateKeyPair
)
229 (CSSM_CSP_HANDLE CSPHandle
,
230 CSSM_CC_HANDLE CCHandle
,
231 const CSSM_CONTEXT
*Context
,
232 uint32 PublicKeyUsage
,
233 uint32 PublicKeyAttr
,
234 const CSSM_DATA
*PublicKeyLabel
,
235 CSSM_KEY_PTR PublicKey
,
236 uint32 PrivateKeyUsage
,
237 uint32 PrivateKeyAttr
,
238 const CSSM_DATA
*PrivateKeyLabel
,
239 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
,
240 CSSM_KEY_PTR PrivateKey
,
241 CSSM_PRIVILEGE Privilege
);
242 CSSM_RETURN (CSSMCSPI
*GenerateRandom
)
243 (CSSM_CSP_HANDLE CSPHandle
,
244 CSSM_CC_HANDLE CCHandle
,
245 const CSSM_CONTEXT
*Context
,
246 CSSM_DATA_PTR RandomNumber
);
247 CSSM_RETURN (CSSMCSPI
*GenerateAlgorithmParams
)
248 (CSSM_CSP_HANDLE CSPHandle
,
249 CSSM_CC_HANDLE CCHandle
,
250 const CSSM_CONTEXT
*Context
,
253 uint32
*NumberOfUpdatedAttibutes
,
254 CSSM_CONTEXT_ATTRIBUTE_PTR
*UpdatedAttributes
);
255 CSSM_RETURN (CSSMCSPI
*WrapKey
)
256 (CSSM_CSP_HANDLE CSPHandle
,
257 CSSM_CC_HANDLE CCHandle
,
258 const CSSM_CONTEXT
*Context
,
259 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
261 const CSSM_DATA
*DescriptiveData
,
262 CSSM_WRAP_KEY_PTR WrappedKey
,
263 CSSM_PRIVILEGE Privilege
);
264 CSSM_RETURN (CSSMCSPI
*UnwrapKey
)
265 (CSSM_CSP_HANDLE CSPHandle
,
266 CSSM_CC_HANDLE CCHandle
,
267 const CSSM_CONTEXT
*Context
,
268 const CSSM_KEY
*PublicKey
,
269 const CSSM_WRAP_KEY
*WrappedKey
,
272 const CSSM_DATA
*KeyLabel
,
273 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
,
274 CSSM_KEY_PTR UnwrappedKey
,
275 CSSM_DATA_PTR DescriptiveData
,
276 CSSM_PRIVILEGE Privilege
);
277 CSSM_RETURN (CSSMCSPI
*DeriveKey
)
278 (CSSM_CSP_HANDLE CSPHandle
,
279 CSSM_CC_HANDLE CCHandle
,
280 const CSSM_CONTEXT
*Context
,
284 const CSSM_DATA
*KeyLabel
,
285 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
,
286 CSSM_KEY_PTR DerivedKey
);
287 CSSM_RETURN (CSSMCSPI
*FreeKey
)
288 (CSSM_CSP_HANDLE CSPHandle
,
289 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
292 CSSM_RETURN (CSSMCSPI
*PassThrough
)
293 (CSSM_CSP_HANDLE CSPHandle
,
294 CSSM_CC_HANDLE CCHandle
,
295 const CSSM_CONTEXT
*Context
,
296 uint32 PassThroughId
,
299 CSSM_RETURN (CSSMCSPI
*Login
)
300 (CSSM_CSP_HANDLE CSPHandle
,
301 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
302 const CSSM_DATA
*LoginName
,
303 const void *Reserved
);
304 CSSM_RETURN (CSSMCSPI
*Logout
)
305 (CSSM_CSP_HANDLE CSPHandle
);
306 CSSM_RETURN (CSSMCSPI
*ChangeLoginAcl
)
307 (CSSM_CSP_HANDLE CSPHandle
,
308 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
309 const CSSM_ACL_EDIT
*AclEdit
);
310 CSSM_RETURN (CSSMCSPI
*ObtainPrivateKeyFromPublicKey
)
311 (CSSM_CSP_HANDLE CSPHandle
,
312 const CSSM_KEY
*PublicKey
,
313 CSSM_KEY_PTR PrivateKey
);
314 CSSM_RETURN (CSSMCSPI
*RetrieveUniqueId
)
315 (CSSM_CSP_HANDLE CSPHandle
,
316 CSSM_DATA_PTR UniqueID
);
317 CSSM_RETURN (CSSMCSPI
*RetrieveCounter
)
318 (CSSM_CSP_HANDLE CSPHandle
,
319 CSSM_DATA_PTR Counter
);
320 CSSM_RETURN (CSSMCSPI
*VerifyDevice
)
321 (CSSM_CSP_HANDLE CSPHandle
,
322 const CSSM_DATA
*DeviceCert
);
323 CSSM_RETURN (CSSMCSPI
*GetTimeValue
)
324 (CSSM_CSP_HANDLE CSPHandle
,
325 CSSM_ALGORITHMS TimeAlgorithm
,
326 CSSM_DATA
*TimeData
);
327 CSSM_RETURN (CSSMCSPI
*GetOperationalStatistics
)
328 (CSSM_CSP_HANDLE CSPHandle
,
329 CSSM_CSP_OPERATIONAL_STATISTICS
*Statistics
);
330 CSSM_RETURN (CSSMCSPI
*GetLoginAcl
)
331 (CSSM_CSP_HANDLE CSPHandle
,
332 const CSSM_STRING
*SelectionTag
,
333 uint32
*NumberOfAclInfos
,
334 CSSM_ACL_ENTRY_INFO_PTR
*AclInfos
);
335 CSSM_RETURN (CSSMCSPI
*GetKeyAcl
)
336 (CSSM_CSP_HANDLE CSPHandle
,
338 const CSSM_STRING
*SelectionTag
,
339 uint32
*NumberOfAclInfos
,
340 CSSM_ACL_ENTRY_INFO_PTR
*AclInfos
);
341 CSSM_RETURN (CSSMCSPI
*ChangeKeyAcl
)
342 (CSSM_CSP_HANDLE CSPHandle
,
343 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
344 const CSSM_ACL_EDIT
*AclEdit
,
345 const CSSM_KEY
*Key
);
346 CSSM_RETURN (CSSMCSPI
*GetKeyOwner
)
347 (CSSM_CSP_HANDLE CSPHandle
,
349 CSSM_ACL_OWNER_PROTOTYPE_PTR Owner
);
350 CSSM_RETURN (CSSMCSPI
*ChangeKeyOwner
)
351 (CSSM_CSP_HANDLE CSPHandle
,
352 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
354 const CSSM_ACL_OWNER_PROTOTYPE
*NewOwner
);
355 CSSM_RETURN (CSSMCSPI
*GetLoginOwner
)
356 (CSSM_CSP_HANDLE CSPHandle
,
357 CSSM_ACL_OWNER_PROTOTYPE_PTR Owner
);
358 CSSM_RETURN (CSSMCSPI
*ChangeLoginOwner
)
359 (CSSM_CSP_HANDLE CSPHandle
,
360 const CSSM_ACCESS_CREDENTIALS
*AccessCred
,
361 const CSSM_ACL_OWNER_PROTOTYPE
*NewOwner
);
362 } CSSM_SPI_CSP_FUNCS
, *CSSM_SPI_CSP_FUNCS_PTR
;
368 #endif /* _CSSMCSPI_H_ */