]> git.saurik.com Git - apple/security.git/blob - OSX/sec/securityd/SecPolicyServer.h
a690bc64ab6206007ceb87227551415d17df987c
[apple/security.git] / OSX / sec / securityd / SecPolicyServer.h
1 /*
2 * Copyright (c) 2008-2010,2012-2015 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24 /*!
25 @header SecPolicyServer
26 The functions provided in SecPolicyServer.h provide an interface to
27 trust policies dealing with certificate revocation.
28 */
29
30 #ifndef _SECURITY_SECPOLICYSERVER_H_
31 #define _SECURITY_SECPOLICYSERVER_H_
32
33 #include <Security/SecPolicyInternal.h>
34 #include <Security/SecTrustSettings.h>
35
36 #include <securityd/policytree.h>
37 #include <securityd/SecTrustServer.h>
38
39 __BEGIN_DECLS
40
41 typedef struct OpaqueSecPVC *SecPVCRef;
42
43 struct OpaqueSecPVC {
44 SecPathBuilderRef builder;
45
46 /* @@@ Duplicated from builder, remove. */
47 CFArrayRef policies;
48 CFAbsoluteTime verifyTime;
49
50 SecCertificatePathRef path;
51 CFArrayRef details;
52 CFMutableDictionaryRef info;
53 policy_tree_t valid_policy_tree;
54 CFDictionaryRef callbacks;
55 CFIndex policyIX;
56
57 void *rvcs;
58 unsigned int asyncJobCount;
59
60 CFStringRef check_revocation;
61 bool response_required;
62 bool optionally_ev;
63 bool is_ev;
64 bool is_ct;
65 bool is_ct_whitelisted;
66 bool is_allowlisted;
67 bool result;
68 };
69
70 void SecPVCInit(SecPVCRef pvc, SecPathBuilderRef builder, CFArrayRef policies,
71 CFAbsoluteTime verifyTime);
72 void SecPVCDelete(SecPVCRef pvc);
73 void SecPVCSetPath(SecPVCRef pvc, SecCertificatePathRef path,
74 CF_CONSUMED CFArrayRef details);
75 SecPolicyRef SecPVCGetPolicy(SecPVCRef pv);
76 CFAbsoluteTime SecPVCGetVerifyTime(SecPVCRef pv);
77 CFIndex SecPVCGetCertificateCount(SecPVCRef pv);
78 SecCertificateRef SecPVCGetCertificateAtIndex(SecPVCRef pv, CFIndex ix);
79 bool SecPVCIsCertificateAtIndexSelfSigned(SecPVCRef pvc, CFIndex ix);
80 bool SecPVCIsAnchored(SecPVCRef pvc);
81
82 /* Set the string result as the reason for the sub policy check key
83 failing. The policy check function should continue processing if
84 this function returns true. */
85 bool SecPVCSetResult(SecPVCRef pv, CFStringRef key, CFIndex ix,
86 CFTypeRef result);
87 bool SecPVCSetResultForced(SecPVCRef pvc,
88 CFStringRef key, CFIndex ix, CFTypeRef result, bool force);
89
90 /* Enable revocation checking if the rest of the policy checks succeed. */
91 void SecPVCSetCheckRevocation(SecPVCRef pvc, CFStringRef method);
92
93 /* Require a revocation response for the leaf certificate. */
94 void SecPVCSetCheckRevocationResponseRequired(SecPVCRef pvc);
95
96 /* Run static leaf checks on the path in pvc. */
97 bool SecPVCLeafChecks(SecPVCRef pvc);
98
99 /* Run static parent checks on the path in pvc. */
100 bool SecPVCParentCertificateChecks(SecPVCRef pvc, CFIndex ix);
101
102 /* Check whether an intermediate certificates key has been blacklisted. */
103 bool SecPVCBlackListedKeyChecks(SecPVCRef pvc, CFIndex ix);
104
105 /* Check whether an intermediate certificates key has been gray listed. */
106 bool SecPVCGrayListedKeyChecks(SecPVCRef pvc, CFIndex ix);
107
108 /* Run dynamic checks on the complete path in pvc. Return true if the
109 operation is complete, returns false if an async backgroup request was
110 scheduled. Upon completion of the async background job
111 SecPathBuilderStep() should be called. */
112 bool SecPVCPathChecks(SecPVCRef pvc);
113
114 /* Return 0 if any certs revocation checking failed, the earliest date on
115 which one of the used revocation validation tokens (ocsp response or
116 crl) expires. */
117 CFAbsoluteTime SecPVCGetEarliestNextUpdate(SecPVCRef pvc);
118
119 typedef void (*SecPolicyCheckFunction)(SecPVCRef pv, CFStringRef key);
120
121 /*
122 Used by SecTrust to verify if a particular certificate chain matches
123 this policy. Returns true if the policy accepts the certificate chain.
124 */
125 bool SecPolicyValidate(SecPolicyRef policy, SecPVCRef pvc, CFStringRef key);
126
127 void SecPolicyServerInitalize(void);
128
129 /* True iff certificate could be an extended validation (EV) certificate. */
130 bool SecPolicySubscriberCertificateCouldBeEV(SecCertificateRef certificate);
131
132 void SecEVPolicyToAnchorDigestsInit(void);
133
134 SecTrustSettingsResult SecPVCGetTrustSettingsResult(SecPVCRef pvc, SecCertificateRef certificate, CFArrayRef constraints);
135
136 bool SecPVCCheckUsageConstraints(SecPVCRef pvc);
137
138 bool SecPVCCheckIssuerDateConstraints(SecPVCRef pvc);
139
140 __END_DECLS
141
142 #endif /* !_SECURITY_SECPOLICYSERVER_H_ */