security_framework_sys/
import_export.rs1use 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;
17#[cfg(target_os = "macos")]
18pub type SecExternalItemType = u32;
19#[cfg(target_os = "macos")]
20pub type SecItemImportExportFlags = u32;
21#[cfg(target_os = "macos")]
22pub type SecKeyImportExportFlags = u32;
23
24#[cfg(target_os = "macos")]
25pub const kSecKeyImportOnlyOne: SecKeyImportExportFlags = 1;
26#[cfg(target_os = "macos")]
27pub const kSecKeySecurePassphrase: SecKeyImportExportFlags = 2;
28#[cfg(target_os = "macos")]
29pub const kSecKeyNoAccessControl: SecKeyImportExportFlags = 4;
30
31#[cfg(target_os = "macos")]
32pub const SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION: c_uint = 0;
33
34#[cfg(target_os = "macos")]
35mod sec_external_format {
36 use super::SecExternalFormat;
37 pub const kSecFormatUnknown: SecExternalFormat = 0;
38 pub const kSecFormatOpenSSL: SecExternalFormat = 1;
40 pub const kSecFormatSSH: SecExternalFormat = 2;
42 pub const kSecFormatBSAFE: SecExternalFormat = 3;
43 pub const kSecFormatRawKey: SecExternalFormat = 4;
45 pub const kSecFormatWrappedPKCS8: SecExternalFormat = 5;
46 pub const kSecFormatWrappedOpenSSL: SecExternalFormat = 6;
48 pub const kSecFormatWrappedSSH: SecExternalFormat = 7;
50 pub const kSecFormatWrappedLSH: SecExternalFormat = 8;
51 pub const kSecFormatX509Cert: SecExternalFormat = 9;
53 pub const kSecFormatPEMSequence: SecExternalFormat = 10;
55 pub const kSecFormatPKCS7: SecExternalFormat = 11;
57 pub const kSecFormatPKCS12: SecExternalFormat = 12;
59 pub const kSecFormatNetscapeCertSequence: SecExternalFormat = 13;
61 pub const kSecFormatSSHv2: SecExternalFormat = 14;
63}
64
65#[cfg(target_os = "macos")]
66pub use sec_external_format::*;
67
68#[repr(C)]
69#[derive(Copy, Clone)]
70#[cfg(target_os = "macos")]
71pub struct SecItemImportExportKeyParameters {
72 pub version: c_uint,
73 pub flags: SecKeyImportExportFlags,
74 pub passphrase: CFTypeRef,
75 pub alertTitle: CFStringRef,
76 pub alertPrompt: CFStringRef,
77 pub accessRef: SecAccessRef,
78 pub keyUsage: CFArrayRef,
79 pub keyAttributes: CFArrayRef,
80}
81
82extern "C" {
83 #[cfg(target_os = "macos")]
84 pub fn SecItemImport(
85 importedData: CFDataRef,
86 fileNameOrExtension: CFStringRef,
87 inputFormat: *mut SecExternalFormat,
88 itemType: *mut SecExternalItemType,
89 flags: SecItemImportExportFlags,
90 keyParams: *const SecItemImportExportKeyParameters,
91 importKeychain: SecKeychainRef,
92 outItems: *mut CFArrayRef,
93 ) -> OSStatus;
94
95 #[cfg(target_os = "macos")]
96 pub fn SecItemExport(
97 secItemOrArray: CFTypeRef,
98 outputFormat: SecExternalFormat,
99 flags: SecItemImportExportFlags,
100 keyParams: *const SecItemImportExportKeyParameters,
101 exportedData: *mut CFDataRef,
102 ) -> OSStatus;
103
104 pub static kSecImportExportPassphrase: CFStringRef;
105 #[cfg(target_os = "macos")]
106 pub static kSecImportExportKeychain: CFStringRef;
107 #[cfg(target_os = "macos")]
108 pub static kSecImportExportAccess: CFStringRef;
109
110 pub static kSecImportItemLabel: CFStringRef;
111 pub static kSecImportItemKeyID: CFStringRef;
112 pub static kSecImportItemTrust: CFStringRef;
113 pub static kSecImportItemCertChain: CFStringRef;
114 pub static kSecImportItemIdentity: CFStringRef;
115
116 pub fn SecPKCS12Import(
117 pkcs12_data: CFDataRef,
118 options: CFDictionaryRef,
119 items: *mut CFArrayRef,
120 ) -> OSStatus;
121}