objc2_security/generated/
SecProtocolMetadata.rs

1//! This file has been automatically generated by `objc2`'s `header-translator`.
2//! DO NOT EDIT
3use core::cell::UnsafeCell;
4use core::ffi::*;
5use core::marker::{PhantomData, PhantomPinned};
6use core::ptr::NonNull;
7#[cfg(feature = "objc2")]
8use objc2::__framework_prelude::*;
9
10use crate::*;
11
12/// A `sec_protocol_metadata` instance conatins read-only properties of a connected and configured
13/// security protocol. Clients use this object to read information about a protocol instance. Properties
14/// include, for example, the negotiated TLS version, ciphersuite, and peer certificates.
15///
16/// See also [Apple's documentation](https://developer.apple.com/documentation/security/sec_protocol_metadata?language=objc)
17#[repr(C)]
18#[derive(Debug)]
19pub struct sec_protocol_metadata {
20    inner: [u8; 0],
21    _p: UnsafeCell<PhantomData<(*const UnsafeCell<()>, PhantomPinned)>>,
22}
23
24#[cfg(feature = "objc2")]
25unsafe impl RefEncode for sec_protocol_metadata {
26    const ENCODING_REF: Encoding =
27        Encoding::Pointer(&Encoding::Struct("sec_protocol_metadata", &[]));
28}
29
30/// A `sec_protocol_metadata` instance conatins read-only properties of a connected and configured
31/// security protocol. Clients use this object to read information about a protocol instance. Properties
32/// include, for example, the negotiated TLS version, ciphersuite, and peer certificates.
33///
34/// See also [Apple's documentation](https://developer.apple.com/documentation/security/sec_protocol_metadata_t?language=objc)
35pub type sec_protocol_metadata_t = *mut sec_protocol_metadata;
36
37impl sec_protocol_metadata {
38    /// Get the application protocol negotiated, e.g., via the TLS ALPN extension.
39    ///
40    ///
41    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
42    ///
43    ///
44    /// Returns: A NULL-terminated string carrying the negotiated protocol.
45    #[doc(alias = "sec_protocol_metadata_get_negotiated_protocol")]
46    #[inline]
47    pub unsafe fn negotiated_protocol(metadata: sec_protocol_metadata_t) -> *const c_char {
48        extern "C-unwind" {
49            fn sec_protocol_metadata_get_negotiated_protocol(
50                metadata: sec_protocol_metadata_t,
51            ) -> *const c_char;
52        }
53        unsafe { sec_protocol_metadata_get_negotiated_protocol(metadata) }
54    }
55
56    /// Get the negotiated TLS version.
57    ///
58    ///
59    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
60    ///
61    ///
62    /// Returns: A `tls_protocol_version_t` value.
63    #[doc(alias = "sec_protocol_metadata_get_negotiated_tls_protocol_version")]
64    #[cfg(feature = "SecProtocolTypes")]
65    #[inline]
66    pub unsafe fn negotiated_tls_protocol_version(
67        metadata: sec_protocol_metadata_t,
68    ) -> tls_protocol_version_t {
69        extern "C-unwind" {
70            fn sec_protocol_metadata_get_negotiated_tls_protocol_version(
71                metadata: sec_protocol_metadata_t,
72            ) -> tls_protocol_version_t;
73        }
74        unsafe { sec_protocol_metadata_get_negotiated_tls_protocol_version(metadata) }
75    }
76
77    /// Get the negotiated TLS version.
78    ///
79    ///
80    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
81    ///
82    ///
83    /// Returns: A SSLProtocol enum of the TLS version.
84    #[doc(alias = "sec_protocol_metadata_get_negotiated_protocol_version")]
85    #[cfg(feature = "SecProtocolTypes")]
86    #[deprecated]
87    #[inline]
88    pub unsafe fn negotiated_protocol_version(metadata: sec_protocol_metadata_t) -> SSLProtocol {
89        extern "C-unwind" {
90            fn sec_protocol_metadata_get_negotiated_protocol_version(
91                metadata: sec_protocol_metadata_t,
92            ) -> SSLProtocol;
93        }
94        unsafe { sec_protocol_metadata_get_negotiated_protocol_version(metadata) }
95    }
96
97    /// Get the negotiated TLS ciphersuite.
98    ///
99    ///
100    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
101    ///
102    ///
103    /// Returns: A `tls_ciphersuite_t`.
104    #[doc(alias = "sec_protocol_metadata_get_negotiated_tls_ciphersuite")]
105    #[cfg(feature = "SecProtocolTypes")]
106    #[inline]
107    pub unsafe fn negotiated_tls_ciphersuite(
108        metadata: sec_protocol_metadata_t,
109    ) -> tls_ciphersuite_t {
110        extern "C-unwind" {
111            fn sec_protocol_metadata_get_negotiated_tls_ciphersuite(
112                metadata: sec_protocol_metadata_t,
113            ) -> tls_ciphersuite_t;
114        }
115        unsafe { sec_protocol_metadata_get_negotiated_tls_ciphersuite(metadata) }
116    }
117
118    /// Get the negotiated TLS ciphersuite.
119    ///
120    ///
121    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
122    ///
123    ///
124    /// Returns: A SSLCipherSuite.
125    #[doc(alias = "sec_protocol_metadata_get_negotiated_ciphersuite")]
126    #[cfg(feature = "CipherSuite")]
127    #[deprecated]
128    #[inline]
129    pub unsafe fn negotiated_ciphersuite(metadata: sec_protocol_metadata_t) -> SSLCipherSuite {
130        extern "C-unwind" {
131            fn sec_protocol_metadata_get_negotiated_ciphersuite(
132                metadata: sec_protocol_metadata_t,
133            ) -> SSLCipherSuite;
134        }
135        unsafe { sec_protocol_metadata_get_negotiated_ciphersuite(metadata) }
136    }
137
138    /// Determine if early data was accepted by the peer.
139    ///
140    ///
141    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
142    ///
143    ///
144    /// Returns: A bool indicating if early data was accepted.
145    #[doc(alias = "sec_protocol_metadata_get_early_data_accepted")]
146    #[inline]
147    pub unsafe fn early_data_accepted(metadata: sec_protocol_metadata_t) -> bool {
148        extern "C-unwind" {
149            fn sec_protocol_metadata_get_early_data_accepted(
150                metadata: sec_protocol_metadata_t,
151            ) -> bool;
152        }
153        unsafe { sec_protocol_metadata_get_early_data_accepted(metadata) }
154    }
155
156    /// Get the certificate chain of the protocol instance peer.
157    ///
158    ///
159    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
160    ///
161    ///
162    /// Parameter `handler`: A block to invoke one or more times with sec_certificate_t objects
163    ///
164    ///
165    /// Returns: Returns true if the peer certificates were accessible, false otherwise.
166    #[doc(alias = "sec_protocol_metadata_access_peer_certificate_chain")]
167    #[cfg(all(feature = "SecProtocolTypes", feature = "block2"))]
168    #[inline]
169    pub unsafe fn access_peer_certificate_chain(
170        metadata: sec_protocol_metadata_t,
171        handler: &block2::DynBlock<dyn Fn(sec_certificate_t)>,
172    ) -> bool {
173        extern "C-unwind" {
174            fn sec_protocol_metadata_access_peer_certificate_chain(
175                metadata: sec_protocol_metadata_t,
176                handler: &block2::DynBlock<dyn Fn(sec_certificate_t)>,
177            ) -> bool;
178        }
179        unsafe { sec_protocol_metadata_access_peer_certificate_chain(metadata, handler) }
180    }
181
182    /// Get the signature algorithms supported by the peer. Clients may call this
183    /// in response to a challenge block.
184    ///
185    ///
186    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
187    ///
188    ///
189    /// Parameter `handler`: A block to invoke one or more times with OCSP data
190    ///
191    ///
192    /// Returns: Returns true if the supported signature list was accessible, false otherwise.
193    #[doc(alias = "sec_protocol_metadata_access_supported_signature_algorithms")]
194    #[cfg(feature = "block2")]
195    #[inline]
196    pub unsafe fn access_supported_signature_algorithms(
197        metadata: sec_protocol_metadata_t,
198        handler: &block2::DynBlock<dyn Fn(u16)>,
199    ) -> bool {
200        extern "C-unwind" {
201            fn sec_protocol_metadata_access_supported_signature_algorithms(
202                metadata: sec_protocol_metadata_t,
203                handler: &block2::DynBlock<dyn Fn(u16)>,
204            ) -> bool;
205        }
206        unsafe { sec_protocol_metadata_access_supported_signature_algorithms(metadata, handler) }
207    }
208
209    /// Obtain the server name offered by a client or server during
210    /// connection establishmet. This is the value commonly carried
211    /// in the TLS SNI extesion.
212    ///
213    ///
214    /// Parameter `metadata`: A `sec_protocol_metadata_t` instance.
215    ///
216    ///
217    /// Returns: Returns A NULL-terminated string carrying the server name, or NULL
218    /// if none was provided.
219    #[doc(alias = "sec_protocol_metadata_get_server_name")]
220    #[inline]
221    pub unsafe fn server_name(metadata: sec_protocol_metadata_t) -> *const c_char {
222        extern "C-unwind" {
223            fn sec_protocol_metadata_get_server_name(
224                metadata: sec_protocol_metadata_t,
225            ) -> *const c_char;
226        }
227        unsafe { sec_protocol_metadata_get_server_name(metadata) }
228    }
229
230    /// Compare peer information for two `sec_protocol_metadata` instances.
231    /// This comparison does not include protocol configuration options, e.g., ciphersuites.
232    ///
233    ///
234    /// Parameter `metadataA`: A `sec_protocol_metadata_t` instance.
235    ///
236    ///
237    /// Parameter `metadataB`: A `sec_protocol_metadata_t` instance.
238    ///
239    ///
240    /// Returns: Returns true if both metadata values refer to the same peer, and false otherwise.
241    #[doc(alias = "sec_protocol_metadata_peers_are_equal")]
242    #[inline]
243    pub unsafe fn peers_are_equal(
244        metadata_a: sec_protocol_metadata_t,
245        metadata_b: sec_protocol_metadata_t,
246    ) -> bool {
247        extern "C-unwind" {
248            fn sec_protocol_metadata_peers_are_equal(
249                metadata_a: sec_protocol_metadata_t,
250                metadata_b: sec_protocol_metadata_t,
251            ) -> bool;
252        }
253        unsafe { sec_protocol_metadata_peers_are_equal(metadata_a, metadata_b) }
254    }
255
256    /// Compare challenge-relevant information for two `sec_protocol_metadata` instances.
257    ///
258    /// This comparison includes all information relevant to a challenge request, including:
259    /// distinguished names, signature algorithms, and supported certificate types.
260    /// See Section 7.4.4 of RFC5246 for more details.
261    ///
262    ///
263    /// Parameter `metadataA`: A `sec_protocol_metadata_t` instance.
264    ///
265    ///
266    /// Parameter `metadataB`: A `sec_protocol_metadata_t` instance.
267    ///
268    ///
269    /// Returns: Returns true if both metadata values have the same challenge parameters.
270    #[doc(alias = "sec_protocol_metadata_challenge_parameters_are_equal")]
271    #[inline]
272    pub unsafe fn challenge_parameters_are_equal(
273        metadata_a: sec_protocol_metadata_t,
274        metadata_b: sec_protocol_metadata_t,
275    ) -> bool {
276        extern "C-unwind" {
277            fn sec_protocol_metadata_challenge_parameters_are_equal(
278                metadata_a: sec_protocol_metadata_t,
279                metadata_b: sec_protocol_metadata_t,
280            ) -> bool;
281        }
282        unsafe { sec_protocol_metadata_challenge_parameters_are_equal(metadata_a, metadata_b) }
283    }
284}
285
286extern "C-unwind" {
287    #[deprecated = "renamed to `sec_protocol_metadata::negotiated_protocol`"]
288    pub fn sec_protocol_metadata_get_negotiated_protocol(
289        metadata: sec_protocol_metadata_t,
290    ) -> *const c_char;
291}
292
293extern "C-unwind" {
294    #[cfg(feature = "SecProtocolTypes")]
295    #[deprecated = "renamed to `sec_protocol_metadata::negotiated_tls_protocol_version`"]
296    pub fn sec_protocol_metadata_get_negotiated_tls_protocol_version(
297        metadata: sec_protocol_metadata_t,
298    ) -> tls_protocol_version_t;
299}
300
301extern "C-unwind" {
302    #[cfg(feature = "SecProtocolTypes")]
303    #[deprecated = "renamed to `sec_protocol_metadata::negotiated_protocol_version`"]
304    pub fn sec_protocol_metadata_get_negotiated_protocol_version(
305        metadata: sec_protocol_metadata_t,
306    ) -> SSLProtocol;
307}
308
309extern "C-unwind" {
310    #[cfg(feature = "SecProtocolTypes")]
311    #[deprecated = "renamed to `sec_protocol_metadata::negotiated_tls_ciphersuite`"]
312    pub fn sec_protocol_metadata_get_negotiated_tls_ciphersuite(
313        metadata: sec_protocol_metadata_t,
314    ) -> tls_ciphersuite_t;
315}
316
317extern "C-unwind" {
318    #[cfg(feature = "CipherSuite")]
319    #[deprecated = "renamed to `sec_protocol_metadata::negotiated_ciphersuite`"]
320    pub fn sec_protocol_metadata_get_negotiated_ciphersuite(
321        metadata: sec_protocol_metadata_t,
322    ) -> SSLCipherSuite;
323}
324
325extern "C-unwind" {
326    #[deprecated = "renamed to `sec_protocol_metadata::early_data_accepted`"]
327    pub fn sec_protocol_metadata_get_early_data_accepted(metadata: sec_protocol_metadata_t)
328        -> bool;
329}
330
331extern "C-unwind" {
332    #[cfg(all(feature = "SecProtocolTypes", feature = "block2"))]
333    #[deprecated = "renamed to `sec_protocol_metadata::access_peer_certificate_chain`"]
334    pub fn sec_protocol_metadata_access_peer_certificate_chain(
335        metadata: sec_protocol_metadata_t,
336        handler: &block2::DynBlock<dyn Fn(sec_certificate_t)>,
337    ) -> bool;
338}
339
340extern "C-unwind" {
341    #[cfg(feature = "block2")]
342    #[deprecated = "renamed to `sec_protocol_metadata::access_supported_signature_algorithms`"]
343    pub fn sec_protocol_metadata_access_supported_signature_algorithms(
344        metadata: sec_protocol_metadata_t,
345        handler: &block2::DynBlock<dyn Fn(u16)>,
346    ) -> bool;
347}
348
349extern "C-unwind" {
350    #[deprecated = "renamed to `sec_protocol_metadata::server_name`"]
351    pub fn sec_protocol_metadata_get_server_name(
352        metadata: sec_protocol_metadata_t,
353    ) -> *const c_char;
354}
355
356extern "C-unwind" {
357    #[deprecated = "renamed to `sec_protocol_metadata::peers_are_equal`"]
358    pub fn sec_protocol_metadata_peers_are_equal(
359        metadata_a: sec_protocol_metadata_t,
360        metadata_b: sec_protocol_metadata_t,
361    ) -> bool;
362}
363
364extern "C-unwind" {
365    #[deprecated = "renamed to `sec_protocol_metadata::challenge_parameters_are_equal`"]
366    pub fn sec_protocol_metadata_challenge_parameters_are_equal(
367        metadata_a: sec_protocol_metadata_t,
368        metadata_b: sec_protocol_metadata_t,
369    ) -> bool;
370}