]> git.saurik.com Git - apple/security.git/blob - keychain/SecAccessControl.h
Security-58286.251.4.tar.gz
[apple/security.git] / keychain / SecAccessControl.h
1 /*
2 * Copyright (c) 2014 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 SecAccessControl
26 SecAccessControl defines access rights for items.
27 */
28
29 #ifndef _SECURITY_SECACCESSCONTROL_H_
30 #define _SECURITY_SECACCESSCONTROL_H_
31
32 #include <Security/SecBase.h>
33 #include <CoreFoundation/CFError.h>
34 #include <sys/cdefs.h>
35
36 __BEGIN_DECLS
37
38 CF_ASSUME_NONNULL_BEGIN
39 CF_IMPLICIT_BRIDGING_ENABLED
40
41 /*!
42 @function SecAccessControlGetTypeID
43 @abstract Returns the type identifier of SecAccessControl instances.
44 @result The CFTypeID of SecAccessControl instances.
45 */
46 CFTypeID SecAccessControlGetTypeID(void)
47 __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
48
49 /*!
50 @typedef SecAccessControlCreateFlags
51
52 @constant kSecAccessControlUserPresence
53 User presence policy using biometry or Passcode. Biometry does not have to be available or enrolled. Item is still
54 accessible by Touch ID even if fingers are added or removed. Item is still accessible by Face ID if user is re-enrolled.
55
56 @constant kSecAccessControlBiometryAny
57 Constraint: Touch ID (any finger) or Face ID. Touch ID or Face ID must be available. With Touch ID
58 at least one finger must be enrolled. With Face ID user has to be enrolled. Item is still accessible by Touch ID even
59 if fingers are added or removed. Item is still accessible by Face ID if user is re-enrolled.
60
61 @constant kSecAccessControlTouchIDAny
62 Deprecated, please use kSecAccessControlBiometryAny instead.
63
64 @constant kSecAccessControlBiometryCurrentSet
65 Constraint: Touch ID from the set of currently enrolled fingers. Touch ID must be available and at least one finger must
66 be enrolled. When fingers are added or removed, the item is invalidated. When Face ID is re-enrolled this item is invalidated.
67
68 @constant kSecAccessControlTouchIDCurrentSet
69 Deprecated, please use kSecAccessControlBiometryCurrentSet instead.
70
71 @constant kSecAccessControlDevicePasscode
72 Constraint: Device passcode
73
74 @constant kSecAccessControlOr
75 Constraint logic operation: when using more than one constraint, at least one of them must be satisfied.
76
77 @constant kSecAccessControlAnd
78 Constraint logic operation: when using more than one constraint, all must be satisfied.
79
80 @constant kSecAccessControlPrivateKeyUsage
81 Create access control for private key operations (i.e. sign operation)
82
83 @constant kSecAccessControlApplicationPassword
84 Security: Application provided password for data encryption key generation. This is not a constraint but additional item
85 encryption mechanism.
86 */
87 typedef CF_OPTIONS(CFOptionFlags, SecAccessControlCreateFlags) {
88 kSecAccessControlUserPresence = 1u << 0,
89 kSecAccessControlBiometryAny CF_ENUM_AVAILABLE(10_13_4, 11_3) = 1u << 1,
90 kSecAccessControlTouchIDAny API_DEPRECATED_WITH_REPLACEMENT("kSecAccessControlBiometryAny", macos(10.12.1, 10.13.4), ios(9.0, 11.3)) = 1u << 1,
91 kSecAccessControlBiometryCurrentSet CF_ENUM_AVAILABLE(10_13_4, 11_3) = 1u << 3,
92 kSecAccessControlTouchIDCurrentSet API_DEPRECATED_WITH_REPLACEMENT("kSecAccessControlBiometryCurrentSet", macos(10.12.1, 10.13.4), ios(9.0, 11.3)) = 1u << 3,
93 kSecAccessControlDevicePasscode CF_ENUM_AVAILABLE(10_11, 9_0) = 1u << 4,
94 kSecAccessControlOr CF_ENUM_AVAILABLE(10_12_1, 9_0) = 1u << 14,
95 kSecAccessControlAnd CF_ENUM_AVAILABLE(10_12_1, 9_0) = 1u << 15,
96 kSecAccessControlPrivateKeyUsage CF_ENUM_AVAILABLE(10_12_1, 9_0) = 1u << 30,
97 kSecAccessControlApplicationPassword CF_ENUM_AVAILABLE(10_12_1, 9_0) = 1u << 31,
98 } __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
99
100 /*!
101 @function SecAccessControlCreateWithFlags
102 @abstract Creates new access control object based on protection type and additional flags.
103 @discussion Created access control object should be used as a value for kSecAttrAccessControl attribute in SecItemAdd,
104 SecItemUpdate or SecKeyGeneratePair functions. Accessing keychain items or performing operations on keys which are
105 protected by access control objects can block the execution because of UI which can appear to satisfy the access control
106 conditions, therefore it is recommended to either move those potentially blocking operations out of the main
107 application thread or use combination of kSecUseAuthenticationContext and kSecUseAuthenticationUI attributes to control
108 where the UI interaction can appear.
109 @param allocator Allocator to be used by this instance.
110 @param protection Protection class to be used for the item. One of kSecAttrAccessible constants.
111 @param flags If no flags are set then all operations are allowed.
112 @param error Additional error information filled in case of failure.
113 @result Newly created access control object.
114 */
115 __nullable
116 SecAccessControlRef SecAccessControlCreateWithFlags(CFAllocatorRef __nullable allocator, CFTypeRef protection,
117 SecAccessControlCreateFlags flags, CFErrorRef *error)
118 __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0);
119
120 CF_IMPLICIT_BRIDGING_DISABLED
121 CF_ASSUME_NONNULL_END
122
123 __END_DECLS
124
125 #endif // _SECURITY_SECACCESSCONTROL_H_