1#![allow(
4 non_camel_case_types,
5 non_snake_case,
6 non_upper_case_globals,
7 missing_docs
8)]
9
10use libc::{c_char, c_void, size_t};
11
12mod access_control;
13mod item;
14mod key;
15mod policy;
16
17pub use access_control::*;
18pub use item::*;
19pub use key::*;
20pub use policy::*;
21pub use apple_cf::raw::{
22 CFAllocatorRef, CFArrayRef, CFBooleanRef, CFDataRef, CFDictionaryRef, CFErrorRef,
23 CFMutableDictionaryRef, CFNumberRef, CFStringRef, CFTypeRef,
24};
25pub type CFIndex = isize;
26pub type CFTypeID = usize;
27pub type CFOptionFlags = usize;
28pub type OSStatus = i32;
29pub type Boolean = u8;
30pub type SecRandomRef = *const c_void;
31pub type SecAccessControlRef = *const c_void;
32pub type SecCertificateRef = *const c_void;
33pub type SecKeyRef = *const c_void;
34pub type SecPolicyRef = *const c_void;
35pub type SecTrustRef = *const c_void;
36pub type SecCodeRef = *const c_void;
37pub type SecStaticCodeRef = *const c_void;
38pub type SecCSFlags = u32;
39
40pub const kCFStringEncodingUTF8: u32 = 0x0800_0100;
41pub const kCFNumberSInt64Type: i64 = 4;
42
43pub const kSecCSDefaultFlags: SecCSFlags = 0;
44pub const kSecCSSigningInformation: SecCSFlags = 1 << 1;
45pub const kSecCSDynamicInformation: SecCSFlags = 1 << 3;
46
47pub mod status {
48 use super::OSStatus;
49
50 pub const SUCCESS: OSStatus = 0;
51 pub const DUPLICATE_ITEM: OSStatus = -25299;
52 pub const ITEM_NOT_FOUND: OSStatus = -25300;
53 pub const INTERACTION_NOT_ALLOWED: OSStatus = -25308;
54}
55
56extern "C" {
57 pub static kCFAllocatorDefault: CFAllocatorRef;
58 pub static kCFBooleanTrue: CFBooleanRef;
59 pub static kCFTypeDictionaryKeyCallBacks: c_void;
60 pub static kCFTypeDictionaryValueCallBacks: c_void;
61 pub static kCFTypeArrayCallBacks: c_void;
62
63 pub fn CFRelease(cf: CFTypeRef);
64 pub fn CFGetTypeID(cf: CFTypeRef) -> CFTypeID;
65
66 pub fn CFStringCreateWithCString(
67 alloc: CFAllocatorRef,
68 c_str: *const c_char,
69 encoding: u32,
70 ) -> CFStringRef;
71 pub fn CFStringGetLength(string: CFStringRef) -> CFIndex;
72 pub fn CFStringGetCString(
73 string: CFStringRef,
74 buffer: *mut c_char,
75 buffer_size: CFIndex,
76 encoding: u32,
77 ) -> bool;
78 pub fn CFStringGetTypeID() -> CFTypeID;
79
80 pub fn CFDataCreate(alloc: CFAllocatorRef, bytes: *const u8, length: CFIndex) -> CFDataRef;
81 pub fn CFDataGetLength(data: CFDataRef) -> CFIndex;
82 pub fn CFDataGetBytePtr(data: CFDataRef) -> *const u8;
83 pub fn CFDataGetTypeID() -> CFTypeID;
84
85 pub fn CFArrayCreate(
86 allocator: CFAllocatorRef,
87 values: *const *const c_void,
88 num_values: CFIndex,
89 call_backs: *const c_void,
90 ) -> CFArrayRef;
91 pub fn CFArrayGetCount(array: CFArrayRef) -> CFIndex;
92 pub fn CFArrayGetValueAtIndex(array: CFArrayRef, index: CFIndex) -> *const c_void;
93 pub fn CFArrayGetTypeID() -> CFTypeID;
94
95 pub fn CFDictionaryCreateMutable(
96 allocator: CFAllocatorRef,
97 capacity: CFIndex,
98 key_call_backs: *const c_void,
99 value_call_backs: *const c_void,
100 ) -> CFMutableDictionaryRef;
101 pub fn CFDictionarySetValue(
102 dictionary: CFMutableDictionaryRef,
103 key: *const c_void,
104 value: *const c_void,
105 );
106 pub fn CFDictionaryGetValue(dictionary: CFDictionaryRef, key: *const c_void) -> *const c_void;
107 pub fn CFDictionaryGetCount(dictionary: CFDictionaryRef) -> CFIndex;
108 pub fn CFDictionaryGetKeysAndValues(
109 dictionary: CFDictionaryRef,
110 keys: *mut *const c_void,
111 values: *mut *const c_void,
112 );
113 pub fn CFDictionaryGetTypeID() -> CFTypeID;
114
115 pub fn CFBooleanGetValue(boolean: CFBooleanRef) -> bool;
116 pub fn CFBooleanGetTypeID() -> CFTypeID;
117
118 pub fn CFNumberGetValue(number: CFNumberRef, number_type: i64, value_ptr: *mut c_void) -> bool;
119 pub fn CFNumberGetTypeID() -> CFTypeID;
120
121 pub fn CFErrorCopyDescription(err: CFErrorRef) -> CFStringRef;
122
123 pub fn SecCopyErrorMessageString(status: OSStatus, reserved: *mut c_void) -> CFStringRef;
124
125 pub static kSecClass: CFStringRef;
126 pub static kSecClassGenericPassword: CFStringRef;
127 pub static kSecAttrAccount: CFStringRef;
128 pub static kSecAttrService: CFStringRef;
129 pub static kSecValueData: CFStringRef;
130 pub static kSecReturnData: CFStringRef;
131 pub static kSecReturnAttributes: CFStringRef;
132 pub static kSecMatchLimit: CFStringRef;
133 pub static kSecMatchLimitOne: CFStringRef;
134 pub static kSecMatchLimitAll: CFStringRef;
135
136 pub fn SecItemCopyMatching(query: CFDictionaryRef, result: *mut CFTypeRef) -> OSStatus;
137 pub fn SecItemAdd(attributes: CFDictionaryRef, result: *mut CFTypeRef) -> OSStatus;
138 pub fn SecItemUpdate(query: CFDictionaryRef, attributes_to_update: CFDictionaryRef)
139 -> OSStatus;
140 pub fn SecItemDelete(query: CFDictionaryRef) -> OSStatus;
141
142 pub fn SecCertificateCreateWithData(
143 allocator: CFAllocatorRef,
144 data: CFDataRef,
145 ) -> SecCertificateRef;
146 pub fn SecCertificateCopySubjectSummary(certificate: SecCertificateRef) -> CFStringRef;
147 pub fn SecCertificateCopyData(certificate: SecCertificateRef) -> CFDataRef;
148 pub fn SecCertificateCopyKey(certificate: SecCertificateRef) -> SecKeyRef;
149
150 pub fn SecPolicyCreateBasicX509() -> SecPolicyRef;
151 pub fn SecPolicyCreateSSL(server: Boolean, hostname: CFStringRef) -> SecPolicyRef;
152
153 pub fn SecTrustCreateWithCertificates(
154 certificates: CFTypeRef,
155 policies: CFTypeRef,
156 trust: *mut SecTrustRef,
157 ) -> OSStatus;
158 pub fn SecTrustSetPolicies(trust: SecTrustRef, policies: CFTypeRef) -> OSStatus;
159 pub fn SecTrustEvaluateWithError(trust: SecTrustRef, error: *mut CFErrorRef) -> Boolean;
160
161 pub fn SecCodeCopySelf(flags: SecCSFlags, self_code: *mut SecCodeRef) -> OSStatus;
162 pub static kSecCodeInfoIdentifier: CFStringRef;
163 pub static kSecCodeInfoTeamIdentifier: CFStringRef;
164 pub static kSecCodeInfoEntitlementsDict: CFStringRef;
165 pub static kSecCodeInfoStatus: CFStringRef;
166 pub fn SecCodeCopySigningInformation(
167 code: SecStaticCodeRef,
168 flags: SecCSFlags,
169 information: *mut CFDictionaryRef,
170 ) -> OSStatus;
171
172 pub static kSecRandomDefault: SecRandomRef;
173 pub fn SecRandomCopyBytes(rnd: SecRandomRef, count: size_t, bytes: *mut c_void) -> i32;
174}