security_framework_sys/
import_export.rs

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