1 use core_foundation_sys::array::CFArrayRef; 2 use core_foundation_sys::base::{CFTypeRef, OSStatus}; 3 use core_foundation_sys::data::CFDataRef; 4 use core_foundation_sys::dictionary::CFDictionaryRef; 5 use core_foundation_sys::string::CFStringRef; 6 use std::os::raw::c_uint; 7 8 use crate::base::{SecAccessRef, SecKeychainRef}; 9 10 #[cfg(target_os = "macos")] 11 pub type SecExternalFormat = u32; 12 #[cfg(target_os = "macos")] 13 pub type SecExternalItemType = u32; 14 #[cfg(target_os = "macos")] 15 pub type SecItemImportExportFlags = u32; 16 #[cfg(target_os = "macos")] 17 pub type SecKeyImportExportFlags = u32; 18 19 #[cfg(target_os = "macos")] 20 pub const kSecKeyImportOnlyOne: SecKeyImportExportFlags = 1; 21 #[cfg(target_os = "macos")] 22 pub const kSecKeySecurePassphrase: SecKeyImportExportFlags = 2; 23 #[cfg(target_os = "macos")] 24 pub const kSecKeyNoAccessControl: SecKeyImportExportFlags = 4; 25 26 #[cfg(target_os = "macos")] 27 pub const SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION: c_uint = 0; 28 29 #[repr(C)] 30 #[derive(Copy, Clone)] 31 #[cfg(target_os = "macos")] 32 pub struct SecItemImportExportKeyParameters { 33 pub version: c_uint, 34 pub flags: SecKeyImportExportFlags, 35 pub passphrase: CFTypeRef, 36 pub alertTitle: CFStringRef, 37 pub alertPrompt: CFStringRef, 38 pub accessRef: SecAccessRef, 39 pub keyUsage: CFArrayRef, 40 pub keyAttributes: CFArrayRef, 41 } 42 43 extern "C" { 44 #[cfg(target_os = "macos")] 45 pub fn SecItemImport( 46 importedData: CFDataRef, 47 fileNameOrExtension: CFStringRef, 48 inputFormat: *mut SecExternalFormat, 49 itemType: *mut SecExternalItemType, 50 flags: SecItemImportExportFlags, 51 keyParams: *const SecItemImportExportKeyParameters, 52 importKeychain: SecKeychainRef, 53 outItems: *mut CFArrayRef, 54 ) -> OSStatus; 55 56 #[cfg(target_os = "macos")] 57 pub fn SecItemExport( 58 secItemOrArray: CFTypeRef, 59 outputFormat: SecExternalFormat, 60 flags: SecItemImportExportFlags, 61 keyParams: *const SecItemImportExportKeyParameters, 62 exportedData: *mut CFDataRef, 63 ) -> OSStatus; 64 65 pub static kSecImportExportPassphrase: CFStringRef; 66 #[cfg(target_os = "macos")] 67 pub static kSecImportExportKeychain: CFStringRef; 68 #[cfg(target_os = "macos")] 69 pub static kSecImportExportAccess: CFStringRef; 70 71 pub static kSecImportItemLabel: CFStringRef; 72 pub static kSecImportItemKeyID: CFStringRef; 73 pub static kSecImportItemTrust: CFStringRef; 74 pub static kSecImportItemCertChain: CFStringRef; 75 pub static kSecImportItemIdentity: CFStringRef; 76 77 pub fn SecPKCS12Import( 78 pkcs12_data: CFDataRef, 79 options: CFDictionaryRef, 80 items: *mut CFArrayRef, 81 ) -> OSStatus; 82 } 83