use core::ffi::*;
use core::ptr::NonNull;
#[cfg(feature = "objc2")]
use objc2::__framework_prelude::*;
use objc2_core_foundation::*;
use crate::*;
pub const SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION: c_uint = 0;
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct SecExternalFormat(pub u32);
impl SecExternalFormat {
#[doc(alias = "kSecFormatUnknown")]
pub const FormatUnknown: Self = Self(0);
#[doc(alias = "kSecFormatOpenSSL")]
pub const FormatOpenSSL: Self = Self(1);
#[doc(alias = "kSecFormatSSH")]
pub const FormatSSH: Self = Self(2);
#[doc(alias = "kSecFormatBSAFE")]
pub const FormatBSAFE: Self = Self(3);
#[doc(alias = "kSecFormatRawKey")]
pub const FormatRawKey: Self = Self(4);
#[doc(alias = "kSecFormatWrappedPKCS8")]
pub const FormatWrappedPKCS8: Self = Self(5);
#[doc(alias = "kSecFormatWrappedOpenSSL")]
pub const FormatWrappedOpenSSL: Self = Self(6);
#[doc(alias = "kSecFormatWrappedSSH")]
pub const FormatWrappedSSH: Self = Self(7);
#[doc(alias = "kSecFormatWrappedLSH")]
pub const FormatWrappedLSH: Self = Self(8);
#[doc(alias = "kSecFormatX509Cert")]
pub const FormatX509Cert: Self = Self(9);
#[doc(alias = "kSecFormatPEMSequence")]
pub const FormatPEMSequence: Self = Self(10);
#[doc(alias = "kSecFormatPKCS7")]
pub const FormatPKCS7: Self = Self(11);
#[doc(alias = "kSecFormatPKCS12")]
pub const FormatPKCS12: Self = Self(12);
#[doc(alias = "kSecFormatNetscapeCertSequence")]
pub const FormatNetscapeCertSequence: Self = Self(13);
#[doc(alias = "kSecFormatSSHv2")]
pub const FormatSSHv2: Self = Self(14);
}
#[cfg(feature = "objc2")]
unsafe impl Encode for SecExternalFormat {
const ENCODING: Encoding = u32::ENCODING;
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for SecExternalFormat {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct SecExternalItemType(pub u32);
impl SecExternalItemType {
#[doc(alias = "kSecItemTypeUnknown")]
pub const ItemTypeUnknown: Self = Self(0);
#[doc(alias = "kSecItemTypePrivateKey")]
pub const ItemTypePrivateKey: Self = Self(1);
#[doc(alias = "kSecItemTypePublicKey")]
pub const ItemTypePublicKey: Self = Self(2);
#[doc(alias = "kSecItemTypeSessionKey")]
pub const ItemTypeSessionKey: Self = Self(3);
#[doc(alias = "kSecItemTypeCertificate")]
pub const ItemTypeCertificate: Self = Self(4);
#[doc(alias = "kSecItemTypeAggregate")]
pub const ItemTypeAggregate: Self = Self(5);
}
#[cfg(feature = "objc2")]
unsafe impl Encode for SecExternalItemType {
const ENCODING: Encoding = u32::ENCODING;
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for SecExternalItemType {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct SecItemImportExportFlags(pub u32);
bitflags::bitflags! {
impl SecItemImportExportFlags: u32 {
#[doc(alias = "kSecItemPemArmour")]
const PemArmour = 0x00000001;
}
}
#[cfg(feature = "objc2")]
unsafe impl Encode for SecItemImportExportFlags {
const ENCODING: Encoding = u32::ENCODING;
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for SecItemImportExportFlags {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[repr(transparent)]
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct SecKeyImportExportFlags(pub u32);
bitflags::bitflags! {
impl SecKeyImportExportFlags: u32 {
#[doc(alias = "kSecKeyImportOnlyOne")]
const ImportOnlyOne = 0x00000001;
#[doc(alias = "kSecKeySecurePassphrase")]
const SecurePassphrase = 0x00000002;
#[doc(alias = "kSecKeyNoAccessControl")]
const NoAccessControl = 0x00000004;
}
}
#[cfg(feature = "objc2")]
unsafe impl Encode for SecKeyImportExportFlags {
const ENCODING: Encoding = u32::ENCODING;
}
#[cfg(feature = "objc2")]
unsafe impl RefEncode for SecKeyImportExportFlags {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(all(feature = "SecBase", feature = "cssmconfig", feature = "cssmtype"))]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct SecKeyImportExportParameters {
pub version: u32,
pub flags: SecKeyImportExportFlags,
pub passphrase: *const CFType,
pub alertTitle: NonNull<CFString>,
pub alertPrompt: NonNull<CFString>,
pub accessRef: *mut SecAccess,
pub keyUsage: CSSM_KEYUSE,
pub keyAttributes: CSSM_KEYATTR_FLAGS,
}
#[cfg(all(
feature = "SecBase",
feature = "cssmconfig",
feature = "cssmtype",
feature = "objc2"
))]
unsafe impl Encode for SecKeyImportExportParameters {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<u32>::ENCODING,
<SecKeyImportExportFlags>::ENCODING,
<*const CFType>::ENCODING,
<NonNull<CFString>>::ENCODING,
<NonNull<CFString>>::ENCODING,
<*mut SecAccess>::ENCODING,
<CSSM_KEYUSE>::ENCODING,
<CSSM_KEYATTR_FLAGS>::ENCODING,
],
);
}
#[cfg(all(
feature = "SecBase",
feature = "cssmconfig",
feature = "cssmtype",
feature = "objc2"
))]
unsafe impl RefEncode for SecKeyImportExportParameters {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(feature = "SecBase")]
#[repr(C)]
#[derive(Clone, Copy, Debug, PartialEq)]
pub struct SecItemImportExportKeyParameters {
pub version: u32,
pub flags: SecKeyImportExportFlags,
pub passphrase: *const CFType,
pub alertTitle: *const CFString,
pub alertPrompt: *const CFString,
pub accessRef: *mut SecAccess,
pub keyUsage: *const CFArray,
pub keyAttributes: *const CFArray,
}
#[cfg(all(feature = "SecBase", feature = "objc2"))]
unsafe impl Encode for SecItemImportExportKeyParameters {
const ENCODING: Encoding = Encoding::Struct(
"?",
&[
<u32>::ENCODING,
<SecKeyImportExportFlags>::ENCODING,
<*const CFType>::ENCODING,
<*const CFString>::ENCODING,
<*const CFString>::ENCODING,
<*mut SecAccess>::ENCODING,
<*const CFArray>::ENCODING,
<*const CFArray>::ENCODING,
],
);
}
#[cfg(all(feature = "SecBase", feature = "objc2"))]
unsafe impl RefEncode for SecItemImportExportKeyParameters {
const ENCODING_REF: Encoding = Encoding::Pointer(&Self::ENCODING);
}
#[cfg(feature = "SecBase")]
impl SecKeychainItem {
#[doc(alias = "SecKeychainItemExport")]
#[cfg(all(feature = "SecBase", feature = "cssmconfig", feature = "cssmtype"))]
#[deprecated]
#[inline]
pub unsafe fn export(
keychain_item_or_array: &CFType,
output_format: SecExternalFormat,
flags: SecItemImportExportFlags,
key_params: *const SecKeyImportExportParameters,
exported_data: NonNull<*const CFData>,
) -> OSStatus {
extern "C-unwind" {
fn SecKeychainItemExport(
keychain_item_or_array: &CFType,
output_format: SecExternalFormat,
flags: SecItemImportExportFlags,
key_params: *const SecKeyImportExportParameters,
exported_data: NonNull<*const CFData>,
) -> OSStatus;
}
unsafe {
SecKeychainItemExport(
keychain_item_or_array,
output_format,
flags,
key_params,
exported_data,
)
}
}
}
extern "C-unwind" {
#[cfg(feature = "SecBase")]
pub fn SecItemExport(
sec_item_or_array: &CFType,
output_format: SecExternalFormat,
flags: SecItemImportExportFlags,
key_params: *const SecItemImportExportKeyParameters,
exported_data: NonNull<*const CFData>,
) -> OSStatus;
}
#[cfg(feature = "SecBase")]
impl SecKeychainItem {
#[doc(alias = "SecKeychainItemImport")]
#[cfg(all(feature = "SecBase", feature = "cssmconfig", feature = "cssmtype"))]
#[deprecated]
#[inline]
pub unsafe fn import(
imported_data: &CFData,
file_name_or_extension: Option<&CFString>,
input_format: *mut SecExternalFormat,
item_type: *mut SecExternalItemType,
flags: SecItemImportExportFlags,
key_params: *const SecKeyImportExportParameters,
import_keychain: Option<&SecKeychain>,
out_items: *mut *const CFArray,
) -> OSStatus {
extern "C-unwind" {
fn SecKeychainItemImport(
imported_data: &CFData,
file_name_or_extension: Option<&CFString>,
input_format: *mut SecExternalFormat,
item_type: *mut SecExternalItemType,
flags: SecItemImportExportFlags,
key_params: *const SecKeyImportExportParameters,
import_keychain: Option<&SecKeychain>,
out_items: *mut *const CFArray,
) -> OSStatus;
}
unsafe {
SecKeychainItemImport(
imported_data,
file_name_or_extension,
input_format,
item_type,
flags,
key_params,
import_keychain,
out_items,
)
}
}
}
extern "C-unwind" {
#[cfg(feature = "SecBase")]
pub fn SecItemImport(
imported_data: &CFData,
file_name_or_extension: Option<&CFString>,
input_format: *mut SecExternalFormat,
item_type: *mut SecExternalItemType,
flags: SecItemImportExportFlags,
key_params: *const SecItemImportExportKeyParameters,
import_keychain: Option<&SecKeychain>,
out_items: *mut *const CFArray,
) -> OSStatus;
}
extern "C" {
pub static kSecImportExportPassphrase: &'static CFString;
}
extern "C" {
pub static kSecImportExportKeychain: &'static CFString;
}
extern "C" {
pub static kSecImportExportAccess: &'static CFString;
}
extern "C" {
pub static kSecImportToMemoryOnly: &'static CFString;
}
extern "C" {
pub static kSecImportItemLabel: &'static CFString;
}
extern "C" {
pub static kSecImportItemKeyID: &'static CFString;
}
extern "C" {
pub static kSecImportItemTrust: &'static CFString;
}
extern "C" {
pub static kSecImportItemCertChain: &'static CFString;
}
extern "C" {
pub static kSecImportItemIdentity: &'static CFString;
}
extern "C-unwind" {
pub fn SecPKCS12Import(
pkcs12_data: &CFData,
options: &CFDictionary,
items: NonNull<*const CFArray>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "SecBase", feature = "cssmconfig", feature = "cssmtype"))]
#[deprecated = "renamed to `SecKeychainItem::export`"]
pub fn SecKeychainItemExport(
keychain_item_or_array: &CFType,
output_format: SecExternalFormat,
flags: SecItemImportExportFlags,
key_params: *const SecKeyImportExportParameters,
exported_data: NonNull<*const CFData>,
) -> OSStatus;
}
extern "C-unwind" {
#[cfg(all(feature = "SecBase", feature = "cssmconfig", feature = "cssmtype"))]
#[deprecated = "renamed to `SecKeychainItem::import`"]
pub fn SecKeychainItemImport(
imported_data: &CFData,
file_name_or_extension: Option<&CFString>,
input_format: *mut SecExternalFormat,
item_type: *mut SecExternalItemType,
flags: SecItemImportExportFlags,
key_params: *const SecKeyImportExportParameters,
import_keychain: Option<&SecKeychain>,
out_items: *mut *const CFArray,
) -> OSStatus;
}