2 * Copyright (c) 2000-2001,2011,2014 Apple 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 * AppleTPSession.h - TP session functions.
24 #ifndef _H_APPLE_TP_SESSION
25 #define _H_APPLE_TP_SESSION
27 #include <security_cdsa_plugin/TPsession.h>
28 #include "TPCertInfo.h"
30 #define REALLOC_WORKAROUND 0
31 #if REALLOC_WORKAROUND
35 class AppleTPSession
: public TPPluginSession
{
40 CSSM_MODULE_HANDLE theHandle
,
42 const CSSM_VERSION
&version
,
44 CSSM_SERVICE_TYPE subserviceType
,
45 CSSM_ATTACH_FLAGS attachFlags
,
46 const CSSM_UPCALLS
&upcalls
);
50 #if REALLOC_WORKAROUND
51 void *realloc(void *oldp
, size_t size
) {
52 void *newp
= malloc(size
);
53 memmove(newp
, oldp
, size
);
57 #endif /* REALLOC_WORKAROUND */
59 /* methods declared in TPabstractSession.h */
60 void CertCreateTemplate(CSSM_CL_HANDLE CLHandle
,
61 uint32 NumberOfFields
,
62 const CSSM_FIELD CertFields
[],
63 CssmData
&CertTemplate
);
64 void CrlVerify(CSSM_CL_HANDLE CLHandle
,
65 CSSM_CSP_HANDLE CSPHandle
,
66 const CSSM_ENCODED_CRL
&CrlToBeVerified
,
67 const CSSM_CERTGROUP
&SignerCertGroup
,
68 const CSSM_TP_VERIFY_CONTEXT
*VerifyContext
,
69 CSSM_TP_VERIFY_CONTEXT_RESULT
*RevokerVerifyResult
);
70 void CertReclaimKey(const CSSM_CERTGROUP
&CertGroup
,
72 CSSM_LONG_HANDLE KeyCacheHandle
,
73 CSSM_CSP_HANDLE CSPHandle
,
74 const CSSM_RESOURCE_CONTROL_CONTEXT
*CredAndAclEntry
);
75 void CertGroupVerify(CSSM_CL_HANDLE CLHandle
,
76 CSSM_CSP_HANDLE CSPHandle
,
77 const CSSM_CERTGROUP
&CertGroupToBeVerified
,
78 const CSSM_TP_VERIFY_CONTEXT
*VerifyContext
,
79 CSSM_TP_VERIFY_CONTEXT_RESULT_PTR VerifyContextResult
);
80 void CertGroupConstruct(CSSM_CL_HANDLE CLHandle
,
81 CSSM_CSP_HANDLE CSPHandle
,
82 const CSSM_DL_DB_LIST
&DBList
,
83 const void *ConstructParams
,
84 const CSSM_CERTGROUP
&CertGroupFrag
,
85 CSSM_CERTGROUP_PTR
&CertGroup
);
86 void CertSign(CSSM_CL_HANDLE CLHandle
,
87 CSSM_CC_HANDLE CCHandle
,
88 const CssmData
&CertTemplateToBeSigned
,
89 const CSSM_CERTGROUP
&SignerCertGroup
,
90 const CSSM_TP_VERIFY_CONTEXT
*SignerVerifyContext
,
91 CSSM_TP_VERIFY_CONTEXT_RESULT
*SignerVerifyResult
,
92 CssmData
&SignedCert
);
93 void TupleGroupToCertGroup(CSSM_CL_HANDLE CLHandle
,
94 const CSSM_TUPLEGROUP
&TupleGroup
,
95 CSSM_CERTGROUP_PTR
&CertTemplates
);
96 void ReceiveConfirmation(const CssmData
&ReferenceIdentifier
,
97 CSSM_TP_CONFIRM_RESPONSE_PTR
&Responses
,
99 void PassThrough(CSSM_CL_HANDLE CLHandle
,
100 CSSM_CC_HANDLE CCHandle
,
101 const CSSM_DL_DB_LIST
*DBList
,
102 uint32 PassThroughId
,
103 const void *InputParams
,
104 void **OutputParams
);
105 void CertRemoveFromCrlTemplate(CSSM_CL_HANDLE CLHandle
,
106 CSSM_CSP_HANDLE CSPHandle
,
107 const CssmData
*OldCrlTemplate
,
108 const CSSM_CERTGROUP
&CertGroupToBeRemoved
,
109 const CSSM_CERTGROUP
&RevokerCertGroup
,
110 const CSSM_TP_VERIFY_CONTEXT
&RevokerVerifyContext
,
111 CSSM_TP_VERIFY_CONTEXT_RESULT
&RevokerVerifyResult
,
112 CssmData
&NewCrlTemplate
);
113 void CertRevoke(CSSM_CL_HANDLE CLHandle
,
114 CSSM_CSP_HANDLE CSPHandle
,
115 const CssmData
*OldCrlTemplate
,
116 const CSSM_CERTGROUP
&CertGroupToBeRevoked
,
117 const CSSM_CERTGROUP
&RevokerCertGroup
,
118 const CSSM_TP_VERIFY_CONTEXT
&RevokerVerifyContext
,
119 CSSM_TP_VERIFY_CONTEXT_RESULT
&RevokerVerifyResult
,
120 CSSM_TP_CERTCHANGE_REASON Reason
,
121 CssmData
&NewCrlTemplate
);
122 void CertReclaimAbort(CSSM_LONG_HANDLE KeyCacheHandle
);
123 void CrlCreateTemplate(CSSM_CL_HANDLE CLHandle
,
124 uint32 NumberOfFields
,
125 const CSSM_FIELD CrlFields
[],
126 CssmData
&NewCrlTemplate
);
127 void CertGroupToTupleGroup(CSSM_CL_HANDLE CLHandle
,
128 const CSSM_CERTGROUP
&CertGroup
,
129 CSSM_TUPLEGROUP_PTR
&TupleGroup
);
130 void SubmitCredRequest(const CSSM_TP_AUTHORITY_ID
*PreferredAuthority
,
131 CSSM_TP_AUTHORITY_REQUEST_TYPE RequestType
,
132 const CSSM_TP_REQUEST_SET
&RequestInput
,
133 const CSSM_TP_CALLERAUTH_CONTEXT
*CallerAuthContext
,
134 sint32
&EstimatedTime
,
135 CssmData
&ReferenceIdentifier
);
136 void FormRequest(const CSSM_TP_AUTHORITY_ID
*PreferredAuthority
,
137 CSSM_TP_FORM_TYPE FormType
,
138 CssmData
&BlankForm
);
139 void CrlSign(CSSM_CL_HANDLE CLHandle
,
140 CSSM_CC_HANDLE CCHandle
,
141 const CSSM_ENCODED_CRL
&CrlToBeSigned
,
142 const CSSM_CERTGROUP
&SignerCertGroup
,
143 const CSSM_TP_VERIFY_CONTEXT
*SignerVerifyContext
,
144 CSSM_TP_VERIFY_CONTEXT_RESULT
*SignerVerifyResult
,
145 CssmData
&SignedCrl
);
146 void CertGroupPrune(CSSM_CL_HANDLE CLHandle
,
147 const CSSM_DL_DB_LIST
&DBList
,
148 const CSSM_CERTGROUP
&OrderedCertGroup
,
149 CSSM_CERTGROUP_PTR
&PrunedCertGroup
);
150 void ApplyCrlToDb(CSSM_CL_HANDLE CLHandle
,
151 CSSM_CSP_HANDLE CSPHandle
,
152 const CSSM_ENCODED_CRL
&CrlToBeApplied
,
153 const CSSM_CERTGROUP
&SignerCertGroup
,
154 const CSSM_TP_VERIFY_CONTEXT
*ApplyCrlVerifyContext
,
155 CSSM_TP_VERIFY_CONTEXT_RESULT
&ApplyCrlVerifyResult
);
156 void CertGetAllTemplateFields(CSSM_CL_HANDLE CLHandle
,
157 const CssmData
&CertTemplate
,
158 uint32
&NumberOfFields
,
159 CSSM_FIELD_PTR
&CertFields
);
160 void ConfirmCredResult(const CssmData
&ReferenceIdentifier
,
161 const CSSM_TP_CALLERAUTH_CONTEXT
*CallerAuthCredentials
,
162 const CSSM_TP_CONFIRM_RESPONSE
&Responses
,
163 const CSSM_TP_AUTHORITY_ID
*PreferredAuthority
);
164 void FormSubmit(CSSM_TP_FORM_TYPE FormType
,
165 const CssmData
&Form
,
166 const CSSM_TP_AUTHORITY_ID
*ClearanceAuthority
,
167 const CSSM_TP_AUTHORITY_ID
*RepresentedAuthority
,
168 AccessCredentials
*Credentials
);
169 void RetrieveCredResult(const CssmData
&ReferenceIdentifier
,
170 const CSSM_TP_CALLERAUTH_CONTEXT
*CallerAuthCredentials
,
171 sint32
&EstimatedTime
,
172 CSSM_BOOL
&ConfirmationRequired
,
173 CSSM_TP_RESULT_SET_PTR
&RetrieveOutput
);
176 void CertGroupConstructPriv(CSSM_CL_HANDLE clHand
,
177 CSSM_CSP_HANDLE cspHand
,
178 TPCertGroup
&inCertGroup
,
179 const CSSM_DL_DB_LIST
*DBList
, // optional here
180 const char *cssmTimeStr
, // optional
181 uint32 numAnchorCerts
, // optional
182 const CSSM_DATA
*anchorCerts
,
184 /* CSSM_TP_ACTION_FETCH_CERT_FROM_NET, CSSM_TP_ACTION_TRUST_SETTINGS */
185 CSSM_APPLE_TP_ACTION_FLAGS actionFlags
,
187 /* optional user trust parameters */
188 const CSSM_OID
*policyOid
,
189 const char *policyStr
,
194 * Certs to be freed by caller (i.e., TPCertInfo which we allocate
195 * as a result of using a cert from anchorCerts of dbList) are added
198 TPCertGroup
&certsToBeFreed
,
201 CSSM_BOOL
&verifiedToRoot
, // end of chain self-verifies
202 CSSM_BOOL
&verifiedToAnchor
, // end of chain in anchors
203 CSSM_BOOL
&verifiedViaTrustSetting
, // chain ends per Trust Setting
204 TPCertGroup
&outCertGroup
); // RETURNED
206 /* in tpCredRequest.cp */
207 CSSM_X509_NAME
* buildX509Name(const CSSM_APPLE_TP_NAME_OID
*nameArray
,
209 void freeX509Name(CSSM_X509_NAME
*top
);
210 CSSM_X509_TIME
*buildX509Time(unsigned secondsFromNow
);
211 void freeX509Time(CSSM_X509_TIME
*xtime
);
213 CSSM_CSP_HANDLE cspHand
,
214 const CSSM_KEY
*refKey
,
215 CSSM_KEY_PTR rawKey
);
216 void makeCertTemplate(
218 CSSM_CL_HANDLE clHand
,
219 CSSM_CSP_HANDLE cspHand
, // for converting ref to raw key
221 const CSSM_X509_NAME
*issuerName
,
222 const CSSM_X509_NAME
*subjectName
,
223 const CSSM_X509_TIME
*notBefore
,
224 const CSSM_X509_TIME
*notAfter
,
225 const CSSM_KEY
*subjectPubKey
,
226 const CSSM_OID
&sigOid
, // e.g., CSSMOID_SHA1WithRSA
228 const CSSM_DATA
*subjectUniqueId
,
229 const CSSM_DATA
*issuerUniqueId
,
230 CSSM_X509_EXTENSION
*extensions
,
231 unsigned numExtensions
,
232 CSSM_DATA_PTR
&rawCert
);
234 void SubmitCsrRequest(
235 const CSSM_TP_REQUEST_SET
&RequestInput
,
236 const CSSM_TP_CALLERAUTH_CONTEXT
*CallerAuthContext
,
237 sint32
&EstimatedTime
,
238 CssmData
&ReferenceIdentifier
);
241 * Per-session storage of SubmitCredRequest results.
243 * A TpCredHandle is just an address of a cert, cast to a CSSM_INTPTR. It's
244 * what ReferenceIdentifier.Data points to.
246 typedef CSSM_INTPTR TpCredHandle
;
247 typedef std::map
<TpCredHandle
,
248 const CSSM_DATA
* /* the actual cert */ > credMap
;
252 /* given a cert and a ReferenceIdentifier, fill in ReferenceIdentifier and
253 * add it and the cert to tpCredMap. */
255 const CSSM_DATA
*cert
,
256 CSSM_DATA_PTR refId
);
258 /* given a ReferenceIdentifier, obtain associated cert and remove from the map */
259 CSSM_DATA_PTR
getCertFromMap(
260 const CSSM_DATA
*refId
);
264 #endif /* _H_APPLE_TP_SESSION */