apple_security_framework_sys/
import_export.rs

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