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.
20 // AppleX509CLSession.h - general CL session functions.
22 #ifndef _H_APPLEX509CLSESSION
23 #define _H_APPLEX509CLSESSION
25 #include <Security/CLsession.h>
26 #include "CLCachedEntry.h"
27 #include "DecodedCert.h"
28 #include "LockedMap.h"
29 #include <Security/threading.h>
31 class AppleX509CLSession
: public CLPluginSession
{
36 CSSM_MODULE_HANDLE theHandle
,
38 const CSSM_VERSION
&version
,
40 CSSM_SERVICE_TYPE subserviceType
,
41 CSSM_ATTACH_FLAGS attachFlags
,
42 const CSSM_UPCALLS
&upcalls
);
44 ~AppleX509CLSession();
46 // ====================================================================
47 // Cert Interpretation
48 // ====================================================================
50 void CertDescribeFormat(
51 uint32
&NumberOfFields
,
52 CSSM_OID_PTR
&OidList
);
56 void CertGetAllFields(
58 uint32
&NumberOfFields
,
59 CSSM_FIELD_PTR
&CertFields
);
61 CSSM_HANDLE
CertGetFirstFieldValue(
63 const CssmData
&CertField
,
64 uint32
&NumberOfMatchedFields
,
65 CSSM_DATA_PTR
&Value
);
67 bool CertGetNextFieldValue(
68 CSSM_HANDLE ResultsHandle
,
69 CSSM_DATA_PTR
&Value
);
76 CSSM_HANDLE
&CertHandle
);
78 CSSM_HANDLE
CertGetFirstCachedFieldValue(
79 CSSM_HANDLE CertHandle
,
80 const CssmData
&CertField
,
81 uint32
&NumberOfMatchedFields
,
82 CSSM_DATA_PTR
&Value
);
84 bool CertGetNextCachedFieldValue(
85 CSSM_HANDLE ResultsHandle
,
86 CSSM_DATA_PTR
&Value
);
89 CSSM_HANDLE CertHandle
);
92 CSSM_HANDLE ResultsHandle
);
98 void CertCreateTemplate(
99 uint32 NumberOfFields
,
100 const CSSM_FIELD CertFields
[],
101 CssmData
&CertTemplate
);
103 void CertGetAllTemplateFields(
104 const CssmData
&CertTemplate
,
105 uint32
&NumberOfFields
,
106 CSSM_FIELD_PTR
&CertFields
);
112 uint32 NumberOfFields
,
113 CSSM_FIELD_PTR
&FieldArray
);
115 const CssmData
&CertOrCrlOid
,
121 const CssmData
&Cert
,
124 // ====================================================================
125 // CRL Interpretation
126 // ====================================================================
130 void CrlDescribeFormat(
131 uint32
&NumberOfFields
,
132 CSSM_OID_PTR
&OidList
);
134 void CrlGetAllFields(
136 uint32
&NumberOfCrlFields
,
137 CSSM_FIELD_PTR
&CrlFields
);
139 CSSM_HANDLE
CrlGetFirstFieldValue(
141 const CssmData
&CrlField
,
142 uint32
&NumberOfMatchedFields
,
143 CSSM_DATA_PTR
&Value
);
145 bool CrlGetNextFieldValue(
146 CSSM_HANDLE ResultsHandle
,
147 CSSM_DATA_PTR
&Value
);
150 const CssmData
&Cert
,
152 CSSM_BOOL
&CertFound
);
159 CSSM_HANDLE
&CrlHandle
);
161 void CrlGetAllCachedRecordFields(CSSM_HANDLE CrlHandle
,
162 const CssmData
&CrlRecordIndex
,
163 uint32
&NumberOfFields
,
164 CSSM_FIELD_PTR
&CrlFields
);
166 CSSM_HANDLE
CrlGetFirstCachedFieldValue(
167 CSSM_HANDLE CrlHandle
,
168 const CssmData
*CrlRecordIndex
,
169 const CssmData
&CrlField
,
170 uint32
&NumberOfMatchedFields
,
171 CSSM_DATA_PTR
&Value
);
173 bool CrlGetNextCachedFieldValue(
174 CSSM_HANDLE ResultsHandle
,
175 CSSM_DATA_PTR
&Value
);
177 void IsCertInCachedCrl(
178 const CssmData
&Cert
,
179 CSSM_HANDLE CrlHandle
,
180 CSSM_BOOL
&CertFound
,
181 CssmData
&CrlRecordIndex
);
184 CSSM_HANDLE CrlHandle
);
187 CSSM_HANDLE ResultsHandle
);
192 void CrlCreateTemplate(
193 uint32 NumberOfFields
,
194 const CSSM_FIELD
*CrlTemplate
,
198 uint32 NumberOfFields
,
199 const CSSM_FIELD
*CrlTemplate
,
200 const CssmData
&OldCrl
,
201 CssmData
&ModifiedCrl
);
204 CSSM_CC_HANDLE CCHandle
,
205 const CssmData
&Cert
,
206 uint32 NumberOfFields
,
207 const CSSM_FIELD CrlEntryFields
[],
208 const CssmData
&OldCrl
,
212 const CssmData
&Cert
,
213 const CssmData
&OldCrl
,
216 // ====================================================================
218 // ====================================================================
222 void CertVerifyWithKey(
223 CSSM_CC_HANDLE CCHandle
,
224 const CssmData
&CertToBeVerified
);
227 CSSM_CC_HANDLE CCHandle
,
228 const CssmData
&CertToBeVerified
,
229 const CssmData
*SignerCert
,
230 const CSSM_FIELD
*VerifyScope
,
234 CSSM_CC_HANDLE CCHandle
,
235 const CssmData
&CertTemplate
,
236 const CSSM_FIELD
*SignScope
,
238 CssmData
&SignedCert
);
242 void CertGroupFromVerifiedBundle(
243 CSSM_CC_HANDLE CCHandle
,
244 const CSSM_CERT_BUNDLE
&CertBundle
,
245 const CssmData
*SignerCert
,
246 CSSM_CERTGROUP_PTR
&CertGroup
);
248 void CertGroupToSignedBundle(
249 CSSM_CC_HANDLE CCHandle
,
250 const CSSM_CERTGROUP
&CertGroupToBundle
,
251 const CSSM_CERT_BUNDLE_HEADER
*BundleInfo
,
252 CssmData
&SignedBundle
);
256 void CrlVerifyWithKey(
257 CSSM_CC_HANDLE CCHandle
,
258 const CssmData
&CrlToBeVerified
);
261 CSSM_CC_HANDLE CCHandle
,
262 const CssmData
&CrlToBeVerified
,
263 const CssmData
&SignerCert
,
264 const CSSM_FIELD
*VerifyScope
,
268 CSSM_CC_HANDLE CCHandle
,
269 const CssmData
&UnsignedCrl
,
270 const CSSM_FIELD
*SignScope
,
272 CssmData
&SignedCrl
);
274 // ====================================================================
275 // Module Specific Pass-Through
276 // ====================================================================
279 CSSM_CC_HANDLE CCHandle
,
280 uint32 PassThroughId
,
281 const void *InputParams
,
282 void **OutputParams
);
285 /* routines in Session_Cert.cpp */
286 void getAllParsedCertFields(
287 const DecodedCert
&cert
,
288 uint32
&NumberOfFields
, // RETURNED
289 CSSM_FIELD_PTR
&CertFields
); // RETURNED
291 /* routines in Session_Crypto.cpp */
293 CSSM_CC_HANDLE ccHand
,
295 CssmOwnedData
&sig
); // mallocd and returned
297 CSSM_CC_HANDLE ccHand
,
299 const CssmData
&sig
);
302 * Maps of cached certs, CRLs, and active queries
303 * This one holds cached certs and CRLs.
305 LockedMap
<CSSM_HANDLE
, CLCachedEntry
> cacheMap
;
306 LockedMap
<CSSM_HANDLE
, CLQuery
> queryMap
;
308 CLCachedCert
*lookupCachedCert(CSSM_HANDLE handle
);
309 CLCachedCRL
*lookupCachedCRL(CSSM_HANDLE handle
);
312 #endif //_H_APPLEX509CLSESSION