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