Skip to main content

security_framework_sys/
key.rs

1use core_foundation_sys::base::CFTypeID;
2use core_foundation_sys::data::CFDataRef;
3use core_foundation_sys::dictionary::CFDictionaryRef;
4use core_foundation_sys::error::CFErrorRef;
5use core_foundation_sys::string::CFStringRef;
6
7use crate::base::SecKeyRef;
8
9pub type SecKeyAlgorithm = CFStringRef;
10
11pub type SecKeyOperationType = u32;
12pub const kSecKeyOperationTypeSign: SecKeyOperationType = 0;
13pub const kSecKeyOperationTypeVerify: SecKeyOperationType = 1;
14pub const kSecKeyOperationTypeEncrypt: SecKeyOperationType = 2;
15pub const kSecKeyOperationTypeDecrypt: SecKeyOperationType = 3;
16pub const kSecKeyOperationTypeKeyExchange: SecKeyOperationType = 4;
17
18extern "C" {
19    pub fn SecKeyGetTypeID() -> CFTypeID;
20
21    pub fn SecKeyCreateRandomKey(parameters: CFDictionaryRef, error: *mut CFErrorRef) -> SecKeyRef;
22
23    pub fn SecKeyCreateWithData(
24        keyData: CFDataRef,
25        attributes: CFDictionaryRef,
26        error: *mut CFErrorRef,
27    ) -> SecKeyRef;
28
29    #[cfg(target_os = "macos")]
30    #[deprecated(note = "Deprecated by Apple. There's no replacement for symmetric keys")]
31    pub fn SecKeyCreateFromData(
32        parameters: CFDictionaryRef,
33        keyData: CFDataRef,
34        error: *mut CFErrorRef,
35    ) -> SecKeyRef;
36
37
38    pub fn SecKeyCopyExternalRepresentation(key: SecKeyRef, error: *mut CFErrorRef) -> CFDataRef;
39
40    pub fn SecKeyCopyAttributes(key: SecKeyRef) -> CFDictionaryRef;
41
42    pub fn SecKeyCopyPublicKey(key: SecKeyRef) -> SecKeyRef;
43
44
45    pub fn SecKeyCreateSignature(
46        key: SecKeyRef,
47        algorithm: SecKeyAlgorithm,
48        dataToSign: CFDataRef,
49        error: *mut CFErrorRef,
50    ) -> CFDataRef;
51
52
53    pub fn SecKeyVerifySignature(
54        key: SecKeyRef,
55        algorithm: SecKeyAlgorithm,
56        signedData: CFDataRef,
57        signature: CFDataRef,
58        error: *mut CFErrorRef,
59    ) -> core_foundation_sys::base::Boolean;
60
61
62    pub fn SecKeyCreateEncryptedData(
63        key: SecKeyRef,
64        algorithm: SecKeyAlgorithm,
65        plaintext: CFDataRef,
66        error: *mut CFErrorRef,
67    ) -> CFDataRef;
68
69
70    pub fn SecKeyCreateDecryptedData(
71        key: SecKeyRef,
72        algorithm: SecKeyAlgorithm,
73        ciphertext: CFDataRef,
74        error: *mut CFErrorRef,
75    ) -> CFDataRef;
76
77
78    pub fn SecKeyIsAlgorithmSupported(
79        key: SecKeyRef,
80        operation: SecKeyOperationType,
81        algorithm: SecKeyAlgorithm,
82    ) -> core_foundation_sys::base::Boolean;
83
84
85    pub fn SecKeyCopyKeyExchangeResult(
86        privateKey: SecKeyRef,
87        algorithm: SecKeyAlgorithm,
88        publicKey: SecKeyRef,
89        parameters: CFDictionaryRef,
90        error: *mut CFErrorRef,
91    ) -> CFDataRef;
92}
93
94macro_rules! names {
95    ($( $(# $meta:literal )* $i:ident => $x:ident),*) => {
96        extern "C" {
97            $($(#[cfg(feature = $meta)])* pub static $x: SecKeyAlgorithm;)*
98        }
99
100        #[non_exhaustive]
101        #[derive(Copy, Clone)]
102        pub enum Algorithm {
103            $( $(#[cfg(feature = $meta)])* $i, )*
104        }
105
106        impl From<Algorithm> for SecKeyAlgorithm {
107            fn from(m: Algorithm) -> Self {
108                unsafe { match m {
109                    $( $(#[cfg(feature = $meta)])* Algorithm::$i => $x, )*
110                } }
111            }
112        }
113    }
114}
115
116names! {
117    ECIESEncryptionStandardX963SHA1AESGCM => kSecKeyAlgorithmECIESEncryptionStandardX963SHA1AESGCM,
118    ECIESEncryptionStandardX963SHA224AESGCM => kSecKeyAlgorithmECIESEncryptionStandardX963SHA224AESGCM,
119    ECIESEncryptionStandardX963SHA256AESGCM => kSecKeyAlgorithmECIESEncryptionStandardX963SHA256AESGCM,
120    ECIESEncryptionStandardX963SHA384AESGCM => kSecKeyAlgorithmECIESEncryptionStandardX963SHA384AESGCM,
121    ECIESEncryptionStandardX963SHA512AESGCM => kSecKeyAlgorithmECIESEncryptionStandardX963SHA512AESGCM,
122
123    ECIESEncryptionStandardVariableIVX963SHA224AESGCM => kSecKeyAlgorithmECIESEncryptionStandardVariableIVX963SHA224AESGCM,
124    ECIESEncryptionStandardVariableIVX963SHA256AESGCM => kSecKeyAlgorithmECIESEncryptionStandardVariableIVX963SHA256AESGCM,
125    ECIESEncryptionStandardVariableIVX963SHA384AESGCM => kSecKeyAlgorithmECIESEncryptionStandardVariableIVX963SHA384AESGCM,
126    ECIESEncryptionStandardVariableIVX963SHA512AESGCM => kSecKeyAlgorithmECIESEncryptionStandardVariableIVX963SHA512AESGCM,
127
128    ECIESEncryptionCofactorVariableIVX963SHA224AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorVariableIVX963SHA224AESGCM,
129    ECIESEncryptionCofactorVariableIVX963SHA256AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorVariableIVX963SHA256AESGCM,
130    ECIESEncryptionCofactorVariableIVX963SHA384AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorVariableIVX963SHA384AESGCM,
131    ECIESEncryptionCofactorVariableIVX963SHA512AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorVariableIVX963SHA512AESGCM,
132
133    ECIESEncryptionCofactorX963SHA1AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorX963SHA1AESGCM,
134    ECIESEncryptionCofactorX963SHA224AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorX963SHA224AESGCM,
135    ECIESEncryptionCofactorX963SHA256AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorX963SHA256AESGCM,
136    ECIESEncryptionCofactorX963SHA384AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorX963SHA384AESGCM,
137    ECIESEncryptionCofactorX963SHA512AESGCM => kSecKeyAlgorithmECIESEncryptionCofactorX963SHA512AESGCM,
138
139    ECDSASignatureRFC4754 => kSecKeyAlgorithmECDSASignatureRFC4754,
140
141    ECDSASignatureDigestX962 => kSecKeyAlgorithmECDSASignatureDigestX962,
142    ECDSASignatureDigestX962SHA1 => kSecKeyAlgorithmECDSASignatureDigestX962SHA1,
143    ECDSASignatureDigestX962SHA224 => kSecKeyAlgorithmECDSASignatureDigestX962SHA224,
144    ECDSASignatureDigestX962SHA256 => kSecKeyAlgorithmECDSASignatureDigestX962SHA256,
145    ECDSASignatureDigestX962SHA384 => kSecKeyAlgorithmECDSASignatureDigestX962SHA384,
146    ECDSASignatureDigestX962SHA512 => kSecKeyAlgorithmECDSASignatureDigestX962SHA512,
147
148    ECDSASignatureMessageX962SHA1 => kSecKeyAlgorithmECDSASignatureMessageX962SHA1,
149    ECDSASignatureMessageX962SHA224 => kSecKeyAlgorithmECDSASignatureMessageX962SHA224,
150    ECDSASignatureMessageX962SHA256 => kSecKeyAlgorithmECDSASignatureMessageX962SHA256,
151    ECDSASignatureMessageX962SHA384 => kSecKeyAlgorithmECDSASignatureMessageX962SHA384,
152    ECDSASignatureMessageX962SHA512 => kSecKeyAlgorithmECDSASignatureMessageX962SHA512,
153
154    ECDHKeyExchangeCofactor => kSecKeyAlgorithmECDHKeyExchangeCofactor,
155    ECDHKeyExchangeStandard => kSecKeyAlgorithmECDHKeyExchangeStandard,
156    ECDHKeyExchangeCofactorX963SHA1 => kSecKeyAlgorithmECDHKeyExchangeCofactorX963SHA1,
157    ECDHKeyExchangeStandardX963SHA1 => kSecKeyAlgorithmECDHKeyExchangeStandardX963SHA1,
158    ECDHKeyExchangeCofactorX963SHA224 => kSecKeyAlgorithmECDHKeyExchangeCofactorX963SHA224,
159    ECDHKeyExchangeCofactorX963SHA256 => kSecKeyAlgorithmECDHKeyExchangeCofactorX963SHA256,
160    ECDHKeyExchangeCofactorX963SHA384 => kSecKeyAlgorithmECDHKeyExchangeCofactorX963SHA384,
161    ECDHKeyExchangeCofactorX963SHA512 => kSecKeyAlgorithmECDHKeyExchangeCofactorX963SHA512,
162    ECDHKeyExchangeStandardX963SHA224 => kSecKeyAlgorithmECDHKeyExchangeStandardX963SHA224,
163    ECDHKeyExchangeStandardX963SHA256 => kSecKeyAlgorithmECDHKeyExchangeStandardX963SHA256,
164    ECDHKeyExchangeStandardX963SHA384 => kSecKeyAlgorithmECDHKeyExchangeStandardX963SHA384,
165    ECDHKeyExchangeStandardX963SHA512 => kSecKeyAlgorithmECDHKeyExchangeStandardX963SHA512,
166
167    RSAEncryptionRaw => kSecKeyAlgorithmRSAEncryptionRaw,
168    RSAEncryptionPKCS1 => kSecKeyAlgorithmRSAEncryptionPKCS1,
169
170    RSAEncryptionOAEPSHA1 => kSecKeyAlgorithmRSAEncryptionOAEPSHA1,
171    RSAEncryptionOAEPSHA224 => kSecKeyAlgorithmRSAEncryptionOAEPSHA224,
172    RSAEncryptionOAEPSHA256 => kSecKeyAlgorithmRSAEncryptionOAEPSHA256,
173    RSAEncryptionOAEPSHA384 => kSecKeyAlgorithmRSAEncryptionOAEPSHA384,
174    RSAEncryptionOAEPSHA512 => kSecKeyAlgorithmRSAEncryptionOAEPSHA512,
175
176    RSAEncryptionOAEPSHA1AESGCM => kSecKeyAlgorithmRSAEncryptionOAEPSHA1AESGCM,
177    RSAEncryptionOAEPSHA224AESGCM => kSecKeyAlgorithmRSAEncryptionOAEPSHA224AESGCM,
178    RSAEncryptionOAEPSHA256AESGCM => kSecKeyAlgorithmRSAEncryptionOAEPSHA256AESGCM,
179    RSAEncryptionOAEPSHA384AESGCM => kSecKeyAlgorithmRSAEncryptionOAEPSHA384AESGCM,
180    RSAEncryptionOAEPSHA512AESGCM => kSecKeyAlgorithmRSAEncryptionOAEPSHA512AESGCM,
181
182    RSASignatureRaw => kSecKeyAlgorithmRSASignatureRaw,
183
184    RSASignatureDigestPKCS1v15Raw => kSecKeyAlgorithmRSASignatureDigestPKCS1v15Raw,
185    RSASignatureDigestPKCS1v15SHA1 => kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA1,
186    RSASignatureDigestPKCS1v15SHA224 => kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA224,
187    RSASignatureDigestPKCS1v15SHA256 => kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA256,
188    RSASignatureDigestPKCS1v15SHA384 => kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA384,
189    RSASignatureDigestPKCS1v15SHA512 => kSecKeyAlgorithmRSASignatureDigestPKCS1v15SHA512,
190
191    RSASignatureMessagePKCS1v15SHA1 => kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA1,
192    RSASignatureMessagePKCS1v15SHA224 => kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA224,
193    RSASignatureMessagePKCS1v15SHA256 => kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA256,
194    RSASignatureMessagePKCS1v15SHA384 => kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA384,
195    RSASignatureMessagePKCS1v15SHA512 => kSecKeyAlgorithmRSASignatureMessagePKCS1v15SHA512,
196
197    RSASignatureDigestPSSSHA1 => kSecKeyAlgorithmRSASignatureDigestPSSSHA1,
198    RSASignatureDigestPSSSHA224 => kSecKeyAlgorithmRSASignatureDigestPSSSHA224,
199    RSASignatureDigestPSSSHA256 => kSecKeyAlgorithmRSASignatureDigestPSSSHA256,
200    RSASignatureDigestPSSSHA384 => kSecKeyAlgorithmRSASignatureDigestPSSSHA384,
201    RSASignatureDigestPSSSHA512 => kSecKeyAlgorithmRSASignatureDigestPSSSHA512,
202
203    RSASignatureMessagePSSSHA1 => kSecKeyAlgorithmRSASignatureMessagePSSSHA1,
204    RSASignatureMessagePSSSHA224 => kSecKeyAlgorithmRSASignatureMessagePSSSHA224,
205    RSASignatureMessagePSSSHA256 => kSecKeyAlgorithmRSASignatureMessagePSSSHA256,
206    RSASignatureMessagePSSSHA384 => kSecKeyAlgorithmRSASignatureMessagePSSSHA384,
207    RSASignatureMessagePSSSHA512 => kSecKeyAlgorithmRSASignatureMessagePSSSHA512
208}