security_framework_sys/
access_control.rs

1use core_foundation_sys::base::CFOptionFlags;
2use core_foundation_sys::base::{CFAllocatorRef, CFTypeID, CFTypeRef};
3use core_foundation_sys::error::CFErrorRef;
4use core_foundation_sys::string::CFStringRef;
5
6use crate::base::SecAccessControlRef;
7
8mod access_control_flags {
9    use super::CFOptionFlags;
10
11    pub const kSecAccessControlUserPresence: CFOptionFlags = 1 << 0;
12    #[cfg(feature = "OSX_10_13")]
13    pub const kSecAccessControlBiometryAny: CFOptionFlags = 1 << 1;
14    #[cfg(feature = "OSX_10_13")]
15    pub const kSecAccessControlBiometryCurrentSet: CFOptionFlags = 1 << 3;
16    pub const kSecAccessControlDevicePasscode: CFOptionFlags = 1 << 4;
17    #[cfg(feature = "OSX_10_15")]
18    pub const kSecAccessControlWatch: CFOptionFlags = 1 << 5;
19    pub const kSecAccessControlOr: CFOptionFlags = 1 << 14;
20    pub const kSecAccessControlAnd: CFOptionFlags = 1 << 15;
21    pub const kSecAccessControlPrivateKeyUsage: CFOptionFlags = 1 << 30;
22    pub const kSecAccessControlApplicationPassword: CFOptionFlags = 1 << 31;
23}
24
25pub use access_control_flags::*;
26
27extern "C" {
28    pub static kSecAttrAccessibleWhenUnlocked: CFStringRef;
29    pub static kSecAttrAccessibleAfterFirstUnlock: CFStringRef;
30    pub static kSecAttrAccessibleAlways: CFStringRef;
31    pub static kSecAttrAccessibleWhenUnlockedThisDeviceOnly: CFStringRef;
32    pub static kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly: CFStringRef;
33    pub static kSecAttrAccessibleAlwaysThisDeviceOnly: CFStringRef;
34    pub static kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly: CFStringRef;
35}
36
37extern "C" {
38    pub fn SecAccessControlGetTypeID() -> CFTypeID;
39
40    pub fn SecAccessControlCreateWithFlags(
41        allocator: CFAllocatorRef,
42        protection: CFTypeRef,
43        flags: CFOptionFlags,
44        error: *mut CFErrorRef,
45    ) -> SecAccessControlRef;
46}