2 * Copyright (c) 1999-2002,2005-2019 Apple Inc. All Rights Reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
21 * @APPLE_LICENSE_HEADER_END@
25 * SecureTransport.h - Public API for Apple SSL/TLS Implementation
28 #ifndef _SECURITY_SECURETRANSPORT_H_
29 #define _SECURITY_SECURETRANSPORT_H_
32 * This file describes the public API for an implementation of the
33 * Secure Socket Layer, V. 3.0, Transport Layer Security, V. 1.0 to V. 1.2
34 * and Datagram Transport Layer Security V. 1.0
36 * There are no transport layer dependencies in this library;
37 * it can be used with sockets, Open Transport, etc. Applications using
38 * this library provide callback functions which do the actual I/O
39 * on underlying network connections. Applications are also responsible
40 * for setting up raw network connections; the application passes in
41 * an opaque reference to the underlying (connected) entity at the
42 * start of an SSL session in the form of an SSLConnectionRef.
46 * A "client" is the initiator of an SSL Session. The canonical example
47 * of a client is a web browser, when it's talking to an https URL.
49 * A "server" is an entity which accepts requests for SSL sessions made
50 * by clients. E.g., a secure web server.
52 * An "SSL Session", or "session", is bounded by calls to SSLHandshake()
53 * and SSLClose(). An "Active session" is in some state between these
54 * two calls, inclusive.
56 * An SSL Session Context, or SSLContextRef, is an opaque reference in this
57 * library to the state associated with one session. A SSLContextRef cannot
58 * be reused for multiple sessions.
61 #include <CoreFoundation/CFArray.h>
62 #include <Security/SecProtocolOptions.h>
63 #include <Security/CipherSuite.h>
64 #include <Security/SecTrust.h>
65 #include <Security/SecBase.h>
66 #include <sys/types.h>
67 #include <Availability.h>
73 CF_ASSUME_NONNULL_BEGIN
74 CF_IMPLICIT_BRIDGING_ENABLED
76 #define __SECURETRANSPORT_API_DEPRECATED(...) \
77 __API_DEPRECATED("No longer supported. Use Network.framework.", __VA_ARGS__)
79 /***********************
80 *** Common typedefs ***
81 ***********************/
83 /* Opaque reference to an SSL session context */
85 typedef struct CF_BRIDGED_TYPE(id
) SSLContext
*SSLContextRef
;
87 /* Opaque reference to an I/O connection (socket, endpoint, etc.) */
88 typedef const void *SSLConnectionRef
;
90 /* SSL session options */
91 typedef CF_ENUM(int, SSLSessionOption
) {
93 * Set this option to enable returning from SSLHandshake (with a result of
94 * errSSLServerAuthCompleted) when the server authentication portion of the
95 * handshake is complete. This disable certificate verification and
96 * provides an opportunity to perform application-specific server
97 * verification before deciding to continue.
99 kSSLSessionOptionBreakOnServerAuth
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 0,
101 * Set this option to enable returning from SSLHandshake (with a result of
102 * errSSLClientCertRequested) when the server requests a client certificate.
104 kSSLSessionOptionBreakOnCertRequested
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 1,
106 * This option is the same as kSSLSessionOptionBreakOnServerAuth but applies
107 * to the case where SecureTransport is the server and the client has presented
108 * its certificates allowing the server to verify whether these should be
109 * allowed to authenticate.
111 kSSLSessionOptionBreakOnClientAuth
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 2,
113 * Enable/Disable TLS False Start
114 * When enabled, False Start will only be performed if a adequate cipher-suite is
117 kSSLSessionOptionFalseStart
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 3,
119 * Enable/Disable 1/n-1 record splitting for BEAST attack mitigation.
120 * When enabled, record splitting will only be performed for TLS 1.0 connections
121 * using a block cipher.
123 kSSLSessionOptionSendOneByteRecord
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 4,
125 * Allow/Disallow server identity change on renegotiation. Disallow by default
126 * to avoid Triple Handshake attack.
128 kSSLSessionOptionAllowServerIdentityChange
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 5,
130 * Enable fallback countermeasures. Use this option when retyring a SSL connection
131 * with a lower protocol version because of failure to connect.
133 kSSLSessionOptionFallback
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 6,
135 * Set this option to break from a client hello in order to check for SNI
137 kSSLSessionOptionBreakOnClientHello
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 7,
139 * Set this option to Allow renegotations. False by default.
141 kSSLSessionOptionAllowRenegotiation
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 8,
143 * Set this option to enable session tickets. False by default.
145 kSSLSessionOptionEnableSessionTickets
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) = 9,
148 /* State of an SSLSession */
149 typedef CF_CLOSED_ENUM(int, SSLSessionState
) {
150 kSSLIdle
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
), /* no I/O performed yet */
151 kSSLHandshake
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
), /* SSL handshake in progress */
152 kSSLConnected
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
), /* Handshake complete, ready for normal I/O */
153 kSSLClosed
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
), /* connection closed normally */
154 kSSLAborted
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
) /* connection aborted */
158 * Status of client certificate exchange (which is optional
159 * for both server and client).
161 typedef CF_ENUM(int, SSLClientCertificateState
) {
162 /* Server hasn't asked for a cert. Client hasn't sent one. */
163 kSSLClientCertNone
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
),
164 /* Server has asked for a cert, but client didn't send it. */
165 kSSLClientCertRequested
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
),
167 * Server side: We asked for a cert, client sent one, we validated
168 * it OK. App can inspect the cert via
169 * SSLCopyPeerCertificates().
170 * Client side: server asked for one, we sent it.
172 kSSLClientCertSent
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
),
174 * Client sent a cert but failed validation. Server side only.
175 * Server app can inspect the cert via SSLCopyPeerCertificates().
177 kSSLClientCertRejected
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
)
181 * R/W functions. The application using this library provides
182 * these functions via SSLSetIOFuncs().
184 * Data's memory is allocated by caller; on entry to these two functions
185 * the *length argument indicates both the size of the available data and the
186 * requested byte count. Number of bytes actually transferred is returned in
189 * The application may configure the underlying connection to operate
190 * in a non-blocking manner; in such a case, a read operation may
191 * well return errSSLWouldBlock, indicating "I transferred less data than
192 * you requested (maybe even zero bytes), nothing is wrong, except
193 * requested I/O hasn't completed". This will be returned back up to
194 * the application as a return from SSLRead(), SSLWrite(), SSLHandshake(),
198 (*SSLReadFunc
) (SSLConnectionRef connection
,
199 void *data
, /* owned by
202 size_t *dataLength
); /* IN/OUT */
204 (*SSLWriteFunc
) (SSLConnectionRef connection
,
206 size_t *dataLength
); /* IN/OUT */
208 /* DEPRECATED aliases for errSSLPeerAuthCompleted */
209 #define errSSLServerAuthCompleted errSSLPeerAuthCompleted
210 #define errSSLClientAuthCompleted errSSLPeerAuthCompleted
212 /* DEPRECATED alias for the end of the error range */
213 #define errSSLLast errSSLUnexpectedRecord
215 typedef CF_CLOSED_ENUM(int, SSLProtocolSide
)
217 kSSLServerSide
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
),
218 kSSLClientSide
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
)
221 typedef CF_ENUM(int, SSLConnectionType
)
223 kSSLStreamType
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
),
224 kSSLDatagramType
CF_ENUM_DEPRECATED(10_2
, 10_15
, 2_0
, 13_0
)
228 * Predefined TLS configuration constants
231 /* Default configuration (has 3DES, no RC4) */
232 extern const CFStringRef kSSLSessionConfig_default
233 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.13), ios(5.0, 11.0));
235 /* ATS v1 Config: TLS v1.2, only PFS ciphersuites */
236 extern const CFStringRef kSSLSessionConfig_ATSv1
237 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
239 /* ATS v1 Config without PFS: TLS v1.2, include non PFS ciphersuites */
240 extern const CFStringRef kSSLSessionConfig_ATSv1_noPFS
241 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
243 /* TLS v1.2 to TLS v1.0, with default ciphersuites (no 3DES, no RC4) */
244 extern const CFStringRef kSSLSessionConfig_standard
245 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
247 /* TLS v1.2 to TLS v1.0, with default ciphersuites + RC4 + 3DES */
248 extern const CFStringRef kSSLSessionConfig_RC4_fallback
249 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.13), ios(5.0, 11.0));
251 /* TLS v1.0 only, with default ciphersuites + fallback SCSV */
252 extern const CFStringRef kSSLSessionConfig_TLSv1_fallback
253 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
255 /* TLS v1.0, with default ciphersuites + RC4 + 3DES + fallback SCSV */
256 extern const CFStringRef kSSLSessionConfig_TLSv1_RC4_fallback
257 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.13), ios(5.0, 11.0));
259 /* TLS v1.2 to TLS v1.0, defaults + RC4 + DHE ciphersuites */
260 extern const CFStringRef kSSLSessionConfig_legacy
261 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
263 /* TLS v1.2 to TLS v1.0, default + RC4 + DHE ciphersuites */
264 extern const CFStringRef kSSLSessionConfig_legacy_DHE
265 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
267 /* TLS v1.2, anonymous ciphersuites only */
268 extern const CFStringRef kSSLSessionConfig_anonymous
269 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
271 /* TLS v1.2 to TLS v1.0, has 3DES, no RC4 */
272 extern const CFStringRef kSSLSessionConfig_3DES_fallback
273 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.13), ios(5.0, 11.0));
275 /* TLS v1.0, with default ciphersuites + 3DES, no RC4 */
276 extern const CFStringRef kSSLSessionConfig_TLSv1_3DES_fallback
277 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.13), ios(5.0, 11.0));
285 * Secure Transport APIs require a SSLContextRef, which is an opaque
286 * reference to the SSL session and its parameters. On Mac OS X 10.7
287 * and earlier versions, a new context is created using SSLNewContext,
288 * and is disposed by calling SSLDisposeContext.
290 * On i0S 5.0 and later, as well as Mac OS X versions after 10.7, the
291 * SSLContextRef is a true CFType object with retain-release semantics.
292 * New code should create a new context using SSLCreateContext (instead
293 * of SSLNewContext), and dispose the context by calling CFRelease
294 * (instead of SSLDisposeContext) when finished with it.
298 * @function SSLContextGetTypeID
299 * @abstract Return the CFTypeID for SSLContext objects.
300 * @return CFTypeId for SSLContext objects.
303 SSLContextGetTypeID(void)
304 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
307 * @function SSLCreateContext
308 * @abstract Create a new instance of an SSLContextRef using the specified allocator.
309 * @param alloc Allocator to use for memory.
310 * @param protooclSide Client or server indication.
311 * @param connectionType Type of connection.
312 * @return A newly allocated SSLContextRef, or NULL on error.
316 SSLCreateContext(CFAllocatorRef __nullable alloc
, SSLProtocolSide protocolSide
, SSLConnectionType connectionType
)
317 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
322 * @function SSLNewContext
323 * @abstract Create a new session context.
326 * ==========================
327 * MAC OS X ONLY (DEPRECATED)
328 * ==========================
329 * NOTE: this function is not available on iOS, and should be considered
330 * deprecated on Mac OS X. Your code should use SSLCreateContext instead.
332 * @param isServer Flag indicating if the context is for the server (true) or client (false).
333 * @param contextPtr Pointer to SSLContextRef where result will be stored.
334 * @return errSecSuccess on success, alternative error on failure.
337 SSLNewContext (Boolean isServer
,
338 SSLContextRef
* __nonnull CF_RETURNS_RETAINED contextPtr
) /* RETURNED */
339 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
342 * @function SSLDisposeContext
343 * @abstract Dispose of a session context.
346 * ==========================
347 * MAC OS X ONLY (DEPRECATED)
348 * ==========================
349 * NOTE: this function is not available on iOS, and should be considered
350 * deprecated on Mac OS X. Your code should use CFRelease to dispose a session
351 * created with SSLCreateContext.
353 * @param context A SSLContextRef to deallocate and destroy.
354 * @result errSecSuccess on success, alternative error on failure.
357 SSLDisposeContext (SSLContextRef context
)
358 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
360 #endif /* MAC OS X */
363 * @function SSLGetSessionState
364 * @abstract Determine the state of an SSL/DTLS session.
365 * @param context A valid SSLContextRef.
366 * @param state Output pointer to store the SSLSessionState.
367 * @result errSecSuccess on success, alternative error on failure.
370 SSLGetSessionState (SSLContextRef context
,
371 SSLSessionState
*state
) /* RETURNED */
372 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
375 * @function SSLSetSessionOption
376 * @abstract Set options for an SSL session. Must be called prior to SSLHandshake();
377 * subsequently cannot be called while session is active.
378 * @param context A valid SSLContextRef.
379 * @param option An option enumeration value.
380 * @param value Value of the SSLSessionOption.
381 * @result errSecSuccess on success, alternative error on failure.
384 SSLSetSessionOption (SSLContextRef context
,
385 SSLSessionOption option
,
387 __SECURETRANSPORT_API_DEPRECATED(macos(10.6, 10.15), ios(5.0, 13.0));
390 * @function SSLGetSessionOption
391 * @abstract Determine current value for the specified option in a given SSL session.
392 * @param context A valid SSLContextRef.
393 * @param option An option enumeration value.
394 * @param value Pointer to a Boolean where the SSLSessionOption value is stored.
395 * @result errSecSuccess on success, alternative error on failure.
398 SSLGetSessionOption (SSLContextRef context
,
399 SSLSessionOption option
,
401 __SECURETRANSPORT_API_DEPRECATED(macos(10.6, 10.15), ios(5.0, 13.0));
403 /********************************************************************
404 *** Session context configuration, common to client and servers. ***
405 ********************************************************************/
408 * @function SSLSetIOFuncs
409 * @abstract Specify functions which do the network I/O. Must be called prior
410 * to SSLHandshake(); subsequently cannot be called while a session is
412 * @param context A valid SSLContextRef.
413 * @param readFunc Pointer to a SSLReadFunc.
414 * @param writeFunc Pointer to a SSLWriteFunc.
415 * @result errSecSuccess on success, alternative error on failure.
418 SSLSetIOFuncs (SSLContextRef context
,
419 SSLReadFunc readFunc
,
420 SSLWriteFunc writeFunc
)
421 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
425 * @function SSLSetSessionConfig
426 * @absttact Set a predefined configuration for the SSL Session
427 * @note This currently affect enabled protocol versions,
428 * enabled ciphersuites, and the kSSLSessionOptionFallback
430 * @param context A valid SSLContextRef.
431 * @param config String name of constant TLS handshake configuration, e.g., kSSLSessionConfig_standard.
432 * @result errSecSuccess on success, alternative error on failure.
435 SSLSetSessionConfig(SSLContextRef context
,
437 __SECURETRANSPORT_API_DEPRECATED(macos(10.12, 10.15), ios(10.0, 13.0));
440 * @function SSLSetProtocolVersionMin
441 * @abstract Set the minimum SSL protocol version allowed. Optional.
442 * The default is the lower supported protocol.
443 * @note This can only be called when no session is active.
445 * For TLS contexts, legal values for minVersion are :
451 * For DTLS contexts, legal values for minVersion are :
453 * @param context A valid SSLContextRef.
454 * @param minVersion Minimum TLS protocol version.
455 * @result errSecSuccess on success, alternative error on failure.
458 SSLSetProtocolVersionMin (SSLContextRef context
,
459 SSLProtocol minVersion
)
460 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
463 * @function SSLGetProtocolVersionMin
464 * @abstract Get minimum protocol version allowed
465 * @param context A valid SSLContextRef.
466 * @param minVersion Pointer to SSLProtocol value where the minimum protocol version is stored.
467 * @result errSecSuccess on success, alternative error on failure.
470 SSLGetProtocolVersionMin (SSLContextRef context
,
471 SSLProtocol
*minVersion
)
472 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
475 * @function SSLSetProtocolVersionMax
476 * @abstract Set the maximum SSL protocol version allowed. Optional.
477 * The default is the highest supported protocol.
479 * This can only be called when no session is active.
481 * For TLS contexts, legal values for maxVersion are :
487 * For DTLS contexts, legal values for maxVersion are :
489 * @param context A valid SSLContextRef.
490 * @param maxVersion Maximum TLS protocol version.
491 * @result errSecSuccess on success, alternative error on failure.
494 SSLSetProtocolVersionMax (SSLContextRef context
,
495 SSLProtocol maxVersion
)
496 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
499 * @function SSLGetProtocolVersionMax
500 * @abstract Get maximum protocol version allowed
501 * @param context A valid SSLContextRef.
502 * @param maxVersion Pointer to SSLProtocol value where the maximum protocol version is stored.
503 * @result errSecSuccess on success, alternative error on failure.
506 SSLGetProtocolVersionMax (SSLContextRef context
,
507 SSLProtocol
*maxVersion
)
508 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
513 * @function SSLSetProtocolVersionEnabled
514 * @abstract Set allowed SSL protocol versions. Optional.
515 * @discussion Specifying kSSLProtocolAll for SSLSetProtocolVersionEnabled results in
516 * specified 'enable' boolean to be applied to all supported protocols.
517 * The default is "all supported protocols are enabled".
518 * This can only be called when no session is active.
520 * Legal values for protocol are :
526 * ==========================
527 * MAC OS X ONLY (DEPRECATED)
528 * ==========================
529 * @note this function is not available on iOS, and should be considered
530 * deprecated on Mac OS X. You can use SSLSetProtocolVersionMin and/or
531 * SSLSetProtocolVersionMax to specify which protocols are enabled.
532 * @param context A valid SSLContextRef.
533 * @param protocol A SSLProtocol enumerated value.
534 * @param enable Boolean to enable or disable the designated protocol.
535 * @result errSecSuccess on success, alternative error on failure.
538 SSLSetProtocolVersionEnabled (SSLContextRef context
,
539 SSLProtocol protocol
,
541 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
544 * Obtain a value specified in SSLSetProtocolVersionEnabled.
546 * ==========================
547 * MAC OS X ONLY (DEPRECATED)
548 * ==========================
549 * NOTE: this function is not available on iOS, and should be considered
550 * deprecated on Mac OS X. You can use SSLGetProtocolVersionMin and/or
551 * SSLGetProtocolVersionMax to check whether a protocol is enabled.
554 SSLGetProtocolVersionEnabled(SSLContextRef context
,
555 SSLProtocol protocol
,
556 Boolean
*enable
) /* RETURNED */
557 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
560 * @function SSLSetProtocolVersion
561 * @abstract Get/set SSL protocol version; optional. Default is kSSLProtocolUnknown,
562 * in which case the highest possible version is attempted, but a lower
563 * version is accepted if the peer requires it.
564 * @discussion SSLSetProtocolVersion cannot be called when a session is active.
566 * ==========================
567 * MAC OS X ONLY (DEPRECATED)
568 * ==========================
569 * @note this function is not available on iOS, and deprecated on Mac OS X 10.8.
570 * Use SSLSetProtocolVersionMin and/or SSLSetProtocolVersionMax to specify
571 * which protocols are enabled.
572 * @param context A valid SSLContextRef.
573 * @param protocol A SSLProtocol enumerated value.
574 * @result errSecSuccess on success, alternative error on failure.
577 SSLSetProtocolVersion (SSLContextRef context
,
579 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.8));
582 * @function SSLGetProtocolVersion
583 * @abstract Obtain the protocol version specified in SSLSetProtocolVersion.
584 * @discussion If SSLSetProtocolVersionEnabled() has been called for this session,
585 * SSLGetProtocolVersion() may return errSecParam if the protocol enable
586 * state can not be represented by the SSLProtocol enums (e.g.,
587 * SSL2 and TLS1 enabled, SSL3 disabled).
589 * ==========================
590 * MAC OS X ONLY (DEPRECATED)
591 * ==========================
592 * @note this function is not available on iOS, and deprecated on Mac OS X 10.8.
593 * Use SSLGetProtocolVersionMin and/or SSLGetProtocolVersionMax to check
594 * whether a protocol is enabled.
595 * @param context A valid SSLContextRef.
596 * @param protocol A SSLProtocol enumerated value pointer to store the protocol version.
597 * @result errSecSuccess on success, alternative error on failure.
600 SSLGetProtocolVersion (SSLContextRef context
,
601 SSLProtocol
*protocol
) /* RETURNED */
602 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.8));
604 #endif /* MAC OS X */
607 * @function SSLSetCertificate
608 * @abstract Specify this connection's certificate(s).
609 * @discussion This is mandatory for server connections,and optional for
610 * clients. Specifying a certificate for a client enables SSL client-side
611 * authentication. The end-entity cert is in certRefs[0]. Specifying a root
612 * cert is optional; if it's not specified, the root cert which verifies the
613 * cert chain specified here must be present in the system-wide set of trusted
616 * The certRefs argument is a CFArray containing SecCertificateRefs,
617 * except for certRefs[0], which is a SecIdentityRef.
619 * Must be called prior to SSLHandshake(), or immediately after
620 * SSLHandshake has returned errSSLClientCertRequested (i.e. before the
621 * handshake is resumed by calling SSLHandshake again.)
623 * SecureTransport assumes the following:
625 * -- The certRef references remain valid for the lifetime of the session.
626 * -- The certificate specified in certRefs[0] is capable of signing.
627 * -- The required capabilities of the certRef[0], and of the optional cert
628 * specified in SSLSetEncryptionCertificate (see below), are highly
629 * dependent on the application. For example, to work as a server with
630 * Netscape clients, the cert specified here must be capable of both
631 * signing and encrypting.
632 * @param context A valid SSLContextRef.
633 * @param certRefs An array of SecCertificateRef instances.
634 * @result errSecSuccess on success, alternative error on failure.
637 SSLSetCertificate (SSLContextRef context
,
638 CFArrayRef _Nullable certRefs
)
639 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
642 * @function SSLSetConnection
643 * @abstract Specify I/O connection - a socket, endpoint, etc., which is
645 * @discussion On the client side, it's assumed that communication
646 * has been established with the desired server on this connection.
647 * On the server side, it's assumed that an incoming client request
648 * has been established.
650 * Must be called prior to SSLHandshake(); subsequently can only be
651 * called when no session is active.
652 * @param context A valid SSLContextRef.
653 * @param connection A SSLConnectionRef.
654 * @result errSecSuccess on success, alternative error on failure.
657 SSLSetConnection (SSLContextRef context
,
658 SSLConnectionRef __nullable connection
)
659 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
662 * @function SSLGetConnection
663 * @abstract Retrieve the I/O connection managed managed by the caller.
664 * @param context A valid SSLContextRef.
665 * @param connection A SSLConnectionRef pointer.
666 * @result errSecSuccess on success, alternative error on failure.
669 SSLGetConnection (SSLContextRef context
,
670 SSLConnectionRef
* __nonnull CF_RETURNS_NOT_RETAINED connection
)
671 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
674 * @function SSLSetPeerDomainName
675 * @abstract Specify the fully qualified doman name of the peer, e.g., "store.apple.com."
676 * @discussion Optional; used to verify the common name field in peer's certificate.
677 * Name is in the form of a C string; NULL termination optional, i.e.,
678 * peerName[peerNameLen+1] may or may not have a NULL. In any case peerNameLen
679 * is the number of bytes of the peer domain name.
680 * @param context A valid SSLContextRef.
681 * @param peerName A C string carrying the peer domain name.
682 * @param peerNameLen Length of the peer domain name string.
683 * @result errSecSuccess on success, alternative error on failure.
686 SSLSetPeerDomainName (SSLContextRef context
,
687 const char * __nullable peerName
,
689 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
692 * @function SSLGetPeerDomainNameLength
693 * @abstract Determine the buffer size needed for SSLGetPeerDomainName().
694 * @param context A valid SSLContextRef.
695 * @param peerNameLen Pointer to where the length of the peer domain name string is stored
696 * @result errSecSuccess on success, alternative error on failure.
699 SSLGetPeerDomainNameLength (SSLContextRef context
,
700 size_t *peerNameLen
) // RETURNED
701 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
704 * @function SSLGetPeerDomainName
705 * @abstract Obtain the value specified in SSLSetPeerDomainName().
706 * @param context A valid SSLContextRef.
707 * @param peerName Pointer to where the peer domain name is stored.
708 * @param peerNameLen Pointer to where the length of the peer domain name string is stored,
709 * up to the length specified by peerNameLen (on input).
710 * @result errSecSuccess on success, alternative error on failure.
713 SSLGetPeerDomainName (SSLContextRef context
,
714 char *peerName
, // returned here
715 size_t *peerNameLen
) // IN/OUT
716 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
719 * @function SSLCopyRequestedPeerNameLength
720 * @abstract [Server Only] obtain the hostname specified by the client in the ServerName extension (SNI)
721 * @param context A valid SSLContextRef.
722 * @param peerNameLen Pointer to where the length of the requested peer domain name string
723 * is stored, up to the length specified by peerNameLen (on input).
724 * @result errSecSuccess on success, alternative error on failure.
727 SSLCopyRequestedPeerNameLength (SSLContextRef ctx
,
729 __SECURETRANSPORT_API_DEPRECATED(macos(10.11, 10.15), ios(9.0, 13.0));
732 * @function SSLCopyRequestedPeerName
733 * @abstract Determine the buffer size needed for SSLCopyRequestedPeerNameLength().
734 * @param context A valid SSLContextRef.
735 * @param peerName Pointer to where the requested peer domain name is stored.
736 * @param peerNameLen Pointer to where the length of the requested peer domain name string
737 * is stored, up to the length specified by peerNameLen (on input).
738 * @result errSecSuccess on success, alternative error on failure.
741 SSLCopyRequestedPeerName (SSLContextRef context
,
744 __SECURETRANSPORT_API_DEPRECATED(macos(10.11, 10.15), ios(9.0, 13.0));
748 * @function SSLSetDatagramHelloCookie
749 * @abstract Specify the Datagram TLS Hello Cookie.
750 * @discussion This is to be called for server side only and is optional.
751 * The default is a zero len cookie. The maximum cookieLen is 32 bytes.
752 * @param context A valid SSLContextRef.
753 * @param cookie Pointer to opaque cookie data.
754 * @param cookieLen Length of cookie data.
755 * @result errSecSuccess on success, alternative error on failure.
758 SSLSetDatagramHelloCookie (SSLContextRef dtlsContext
,
759 const void * __nullable cookie
,
761 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
764 * @function SSLSetMaxDatagramRecordSize
765 * @abstract Specify the maximum record size, including all DTLS record headers.
766 * @discussion This should be set appropriately to avoid fragmentation
767 * of Datagrams during handshake, as fragmented datagrams may
768 * be dropped by some network.
769 * @note This is for Datagram TLS only
770 * @param context A valid SSLContextRef.
771 * @param maxSize Maximum size of datagram record(s).
772 * @result errSecSuccess on success, alternative error on failure.
775 SSLSetMaxDatagramRecordSize (SSLContextRef dtlsContext
,
777 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
780 * @function SSLGetMaxDatagramRecordSize
781 * @abstract Get the maximum record size, including all Datagram TLS record headers.
782 * @note This is for Datagram TLS only
783 * @param context A valid SSLContextRef.
784 * @param maxSize Pointer where maximum size of datagram record(s) is stored.
785 * @result errSecSuccess on success, alternative error on failure.
788 SSLGetMaxDatagramRecordSize (SSLContextRef dtlsContext
,
790 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
793 * @function SSLGetNegotiatedProtocolVersion
794 * @abstract Obtain the actual negotiated protocol version of the active
795 * session, which may be different that the value specified in
796 * SSLSetProtocolVersion(). Returns kSSLProtocolUnknown if no
797 * SSL session is in progress.
798 * @param context A valid SSLContextRef.
799 * @param protocol Pointer where negotiated SSLProtocol is stored.
800 * @result errSecSuccess on success, alternative error on failure.
803 SSLGetNegotiatedProtocolVersion (SSLContextRef context
,
804 SSLProtocol
*protocol
) /* RETURNED */
805 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
808 * @function SSLGetNumberSupportedCiphers
809 * @abstract Determine number and values of all of the SSLCipherSuites we support.
810 * Caller allocates output buffer for SSLGetSupportedCiphers() and passes in
811 * its size in *numCiphers. If supplied buffer is too small, errSSLBufferOverflow
813 * @param context A valid SSLContextRef.
814 * @param numCiphers Pointer where number of supported ciphers is stored.
815 * @result errSecSuccess on success, alternative error on failure.
818 SSLGetNumberSupportedCiphers (SSLContextRef context
,
820 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
823 * @function SSLGetSupportedCiphers
824 * @abstract Get the supported ciphers.
825 * @param context A valid SSLContextRef.
826 * @param ciphers Pointer to array of SSLCipherSuite values where supported ciphersuites
827 * are stored. This array size is specified by the input value of numCiphers.
828 * @param numCiphers Pointer where number of supported ciphers is stored.
829 * @result errSecSuccess on success, alternative error on failure.
832 SSLGetSupportedCiphers (SSLContextRef context
,
833 SSLCipherSuite
*ciphers
, /* RETURNED */
834 size_t *numCiphers
) /* IN/OUT */
835 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
838 * @function SSLGetNumberEnabledCiphers
839 * @abstract Determine number and values of all of the SSLCipherSuites currently enabled.
840 * Caller allocates output buffer for SSLGetEnabledCiphers() and passes in
841 * its size in *numCiphers. If supplied buffer is too small, errSSLBufferOverflow
843 * @param context A valid SSLContextRef.
844 * @param numCiphers Pointer where number of enabled ciphers is stored.
845 * @result errSecSuccess on success, alternative error on failure.
848 SSLGetNumberEnabledCiphers (SSLContextRef context
,
850 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
853 * @function SSLSetEnabledCiphers
854 * @abstract Specify a (typically) restricted set of SSLCipherSuites to be enabled by
855 * the current SSLContext. Can only be called when no session is active. Default
856 * set of enabled SSLCipherSuites is the same as the complete set of supported
857 * SSLCipherSuites as obtained by SSLGetSupportedCiphers().
858 * @param context A valid SSLContextRef.
859 * @param ciphers Array of enabled SSLCipherSuite values. This array size is specified
860 * by the input value of numCiphers.
861 * @param numCiphers Pointer where number of enabled ciphers is stored.
862 * @result errSecSuccess on success, alternative error on failure.
865 SSLSetEnabledCiphers (SSLContextRef context
,
866 const SSLCipherSuite
*ciphers
,
868 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
871 * @function SSLGetEnabledCiphers
872 * @abstract Get the set of supported ciphersuites.
873 * @param context A valid SSLContextRef.
874 * @param ciphers Pointer to array of SSLCipherSuite values where enabled ciphersuites
875 * are stored. This array size is specified by the input value of numCiphers.
876 * @param numCiphers Pointer where number of enabled ciphers is stored.
877 * @result errSecSuccess on success, alternative error on failure.
880 SSLGetEnabledCiphers (SSLContextRef context
,
881 SSLCipherSuite
*ciphers
, /* RETURNED */
882 size_t *numCiphers
) /* IN/OUT */
883 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
886 * @function SSLSetSessionTicketsEnabled
887 * @abstract Forcibly enable or disable session ticket resumption.
888 * @note By default, session tickets are disabled.
889 * @param context A valid SSLContextRef.
890 * @param enabled Boolean indicating if ticket support is enabled (true) or not (false).
891 * @result errSecSuccess on success, alternative error on failure.
894 SSLSetSessionTicketsEnabled (SSLContextRef context
,
896 __SECURETRANSPORT_API_DEPRECATED(macos(10.13, 10.15), ios(11.0, 13.0));
901 * @function SSLSetEnableCertVerify
902 * @abstract Enable/disable peer certificate chain validation. Default is enabled.
903 * @discussion If caller disables, it is the caller's responsibility to call
904 * SSLCopyPeerCertificates() upon successful completion of the handshake
905 * and then to perform external validation of the peer certificate
906 * chain before proceeding with data transfer.
908 * ==========================
909 * MAC OS X ONLY (DEPRECATED)
910 * ==========================
911 * @note This function is not available on iOS, and should be considered
912 * deprecated on Mac OS X. To disable peer certificate chain validation, you
913 * can instead use SSLSetSessionOption to set kSSLSessionOptionBreakOnServerAuth
914 * to true. This will disable verification and cause SSLHandshake to return with
915 * an errSSLServerAuthCompleted result when the peer certificates have been
916 * received; at that time, you can choose to evaluate peer trust yourself, or
917 * simply call SSLHandshake again to proceed with the handshake.
918 * @param context A valid SSLContextRef.
919 * @param enableVerify Boolean indicating if certificate verifiation is enabled (true) or disabled (false).
920 * @result errSecSuccess on success, alternative error on failure.
923 SSLSetEnableCertVerify (SSLContextRef context
,
924 Boolean enableVerify
)
925 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
928 * @function SSLGetEnableCertVerify
929 * @abstract Check whether peer certificate chain validation is enabled.
931 * ==========================
932 * MAC OS X ONLY (DEPRECATED)
933 * ==========================
934 * @note This function is not available on iOS, and should be considered
935 * deprecated on Mac OS X. To check whether peer certificate chain validation
936 * is enabled in a context, call SSLGetSessionOption to obtain the value of
937 * the kSSLSessionOptionBreakOnServerAuth session option flag. If the value
938 * of this option flag is true, then verification is disabled.
939 * @param context A valid SSLContextRef.
940 * @param enableVerify Pointer to Boolean where enable bit is stored.
941 * @result errSecSuccess on success, alternative error on failure.
944 SSLGetEnableCertVerify (SSLContextRef context
,
945 Boolean
*enableVerify
) /* RETURNED */
946 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
949 * @function SSLSetAllowsExpiredCerts
950 * @abstract Specify the option of ignoring certificates' "expired" times.
951 * @discussion This is a common failure in the real SSL world. Default setting for this
952 * flag is false, meaning expired certs result in an errSSLCertExpired error.
954 * ==========================
955 * MAC OS X ONLY (DEPRECATED)
956 * ==========================
957 * @note This function is not available on iOS, and should be considered
958 * deprecated on Mac OS X. To ignore expired certificate errors, first disable
959 * Secure Transport's automatic verification of peer certificates by calling
960 * SSLSetSessionOption to set kSSLSessionOptionBreakOnServerAuth to true. When
961 * SSLHandshake subsequently returns an errSSLServerAuthCompleted result,
962 * your code should obtain the SecTrustRef for the peer's certificates and
963 * perform a custom trust evaluation with SecTrust APIs (see SecTrust.h).
964 * The SecTrustSetOptions function allows you to specify that the expiration
965 * status of certificates should be ignored for this evaluation.
969 * status = SSLSetSessionOption(ctx, kSSLSessionOptionBreakOnServerAuth, true);
971 * status = SSLHandshake(ctx);
973 * if (status == errSSLServerAuthCompleted) {
974 * SecTrustRef peerTrust = NULL;
975 * status = SSLCopyPeerTrust(ctx, &peerTrust);
976 * if (status == errSecSuccess) {
977 * SecTrustResultType trustResult;
978 * // set flag to allow expired certificates
979 * SecTrustSetOptions(peerTrust, kSecTrustOptionAllowExpired);
980 * status = SecTrustEvaluate(peerTrust, &trustResult);
981 * if (status == errSecSuccess) {
982 * // A "proceed" result means the cert is explicitly trusted,
983 * // e.g. "Always Trust" was clicked;
984 * // "Unspecified" means the cert has no explicit trust settings,
985 * // but is implicitly OK since it chains back to a trusted root.
986 * // Any other result means the cert is not trusted.
988 * if (trustResult == kSecTrustResultProceed ||
989 * trustResult == kSecTrustResultUnspecified) {
990 * // certificate is trusted
991 * status = errSSLWouldBlock; // so we call SSLHandshake again
992 * } else if (trustResult == kSecTrustResultRecoverableTrustFailure) {
993 * // not trusted, for some reason other than being expired;
994 * // could ask the user whether to allow the connection here
996 * status = errSSLXCertChainInvalid;
998 * // cannot use this certificate (fatal)
999 * status = errSSLBadCert;
1003 * CFRelease(peerTrust);
1006 * } // errSSLServerAuthCompleted
1008 * } while (status == errSSLWouldBlock);
1009 * @param context A valid SSLContextRef.
1010 * @param allowsExpired Boolean indicating if expired certificates are allowed (true) or not (false).
1011 * @result errSecSuccess on success, alternative error on failure.
1014 SSLSetAllowsExpiredCerts (SSLContextRef context
,
1015 Boolean allowsExpired
)
1016 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1019 * @function SSLGetAllowsExpiredCerts
1020 * @abstract Obtain the current value of an SSLContext's "allowExpiredCerts" flag.
1022 * ==========================
1023 * MAC OS X ONLY (DEPRECATED)
1024 * ==========================
1025 * @note This function is not available on iOS, and should be considered
1026 * deprecated on Mac OS X.
1027 * @param context A valid SSLContextRef.
1028 * @param allowsExpired Pointer to Boolean where the expired certificate allowance Boolean is stored.
1029 * @result errSecSuccess on success, alternative error on failure.
1032 SSLGetAllowsExpiredCerts (SSLContextRef context
,
1033 Boolean
*allowsExpired
) /* RETURNED */
1034 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1037 * @function SSLSetAllowsExpiredRoots
1038 * @abstract Similar to SSLSetAllowsExpiredCerts, SSLSetAllowsExpiredRoots allows the
1039 * option of ignoring "expired" status for root certificates only.
1040 * @discussion Default setting is false, i.e., expired root certs result in an
1041 * errSSLCertExpired error.
1043 * ==========================
1044 * MAC OS X ONLY (DEPRECATED)
1045 * ==========================
1046 * @note This function is not available on iOS, and should be considered
1047 * deprecated on Mac OS X. To ignore expired certificate errors, first disable
1048 * Secure Transport's automatic verification of peer certificates by calling
1049 * SSLSetSessionOption to set kSSLSessionOptionBreakOnServerAuth to true. When
1050 * SSLHandshake subsequently returns an errSSLServerAuthCompleted result,
1051 * your code should obtain the SecTrustRef for the peer's certificates and
1052 * perform a custom trust evaluation with SecTrust APIs (see SecTrust.h).
1053 * The SecTrustSetOptions function allows you to specify that the expiration
1054 * status of certificates should be ignored for this evaluation.
1056 * See the description of the SSLSetAllowsExpiredCerts function (above)
1057 * for a code example. The kSecTrustOptionAllowExpiredRoot option can be used
1058 * instead of kSecTrustOptionAllowExpired to allow expired roots only.
1059 * @param context A valid SSLContextRef.
1060 * @param allowsExpired Boolean indicating if expired roots are allowed.
1061 * @result errSecSuccess on success, alternative error on failure.
1064 SSLSetAllowsExpiredRoots (SSLContextRef context
,
1065 Boolean allowsExpired
)
1066 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1069 * @function SSLGetAllowsExpiredRoots
1070 * @abstract Obtain the current value of an SSLContext's "allow expired roots" flag.
1072 * ==========================
1073 * MAC OS X ONLY (DEPRECATED)
1074 * ==========================
1075 * @note This function is not available on iOS, and should be considered
1076 * deprecated on Mac OS X.
1077 * @param context A valid SSLContextRef.
1078 * @param allowsExpired Pointer to Boolean where the expired root certificate allowance
1079 * Boolean is stored.
1080 * @result errSecSuccess on success, alternative error on failure.
1083 SSLGetAllowsExpiredRoots (SSLContextRef context
,
1084 Boolean
*allowsExpired
) /* RETURNED */
1085 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1088 * @function SSLSetAllowsAnyRoot
1089 * @abstract Specify option of allowing for an unknown root cert, i.e., one which
1090 * this software can not verify as one of a list of known good root certs.
1091 * @discussion Default for this flag is false, in which case one of the following two
1093 * -- The peer returns a cert chain with a root cert, and the chain
1094 * verifies to that root, but the root is not one of our trusted
1095 * roots. This results in errSSLUnknownRootCert on handshake.
1096 * -- The peer returns a cert chain which does not contain a root cert,
1097 * and we can't verify the chain to one of our trusted roots. This
1098 * results in errSSLNoRootCert on handshake.
1100 * Both of these error conditions are ignored when the AllowAnyRoot flag is
1101 * true, allowing connection to a totally untrusted peer.
1103 * ==========================
1104 * MAC OS X ONLY (DEPRECATED)
1105 * ==========================
1106 * @note This function is not available on iOS, and should be considered
1107 * deprecated on Mac OS X. To ignore unknown root cert errors, first disable
1108 * Secure Transport's automatic verification of peer certificates by calling
1109 * SSLSetSessionOption to set kSSLSessionOptionBreakOnServerAuth to true. When
1110 * SSLHandshake subsequently returns an errSSLServerAuthCompleted result,
1111 * your code should obtain the SecTrustRef for the peer's certificates and
1112 * perform a custom trust evaluation with SecTrust APIs (see SecTrust.h).
1114 * See the description of the SSLSetAllowsExpiredCerts function (above)
1115 * for a code example. Note that an unknown root certificate will cause
1116 * SecTrustEvaluate to report kSecTrustResultRecoverableTrustFailure as the
1118 * @param context A valid SSLContextRef.
1119 * @param anyRoot Boolean indicating if any root is allowed (true) or not (false).
1120 * @result errSecSuccess on success, alternative error on failure.
1123 SSLSetAllowsAnyRoot (SSLContextRef context
,
1125 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1128 * @function SSLGetAllowsAnyRoot
1129 * @abstract Obtain the current value of an SSLContext's "allow any root" flag.
1131 * ==========================
1132 * MAC OS X ONLY (DEPRECATED)
1133 * ==========================
1134 * @note This function is not available on iOS, and should be considered
1135 * deprecated on Mac OS X.
1136 * @param context A valid SSLContextRef.
1137 * @param anyRoot Pointer to Boolean to store any root allowance Boolean.
1138 * @result errSecSuccess on success, alternative error on failure.
1141 SSLGetAllowsAnyRoot (SSLContextRef context
,
1142 Boolean
*anyRoot
) /* RETURNED */
1143 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1146 * @function SSLSetTrustedRoots
1147 * @abstract Augment or replace the system's default trusted root certificate set
1149 * @discussion If replaceExisting is true, the specified roots will
1150 * be the only roots which are trusted during this session. If replaceExisting
1151 * is false, the specified roots will be added to the current set of trusted
1152 * root certs. If this function has never been called, the current trusted
1153 * root set is the same as the system's default trusted root set.
1154 * Successive calls with replaceExisting false result in accumulation
1155 * of additional root certs.
1157 * The trustedRoots array contains SecCertificateRefs.
1159 * ==========================
1160 * MAC OS X ONLY (DEPRECATED)
1161 * ==========================
1162 * @note This function is not available on iOS, and should be considered
1163 * deprecated on Mac OS X. To trust specific roots in a session, first disable
1164 * Secure Transport's automatic verification of peer certificates by calling
1165 * SSLSetSessionOption to set kSSLSessionOptionBreakOnServerAuth to true. When
1166 * SSLHandshake subsequently returns an errSSLServerAuthCompleted result,
1167 * your code should obtain the SecTrustRef for the peer's certificates and
1168 * perform a custom trust evaluation with SecTrust APIs (see SecTrust.h).
1170 * See the description of the SSLSetAllowsExpiredCerts function (above)
1171 * for a code example. You can call SecTrustSetAnchorCertificates to
1172 * augment the system's trusted root set, or SecTrustSetAnchorCertificatesOnly
1173 * to make these the only trusted roots, prior to calling SecTrustEvaluate.
1174 * @param context A valid SSLContextRef.
1175 * @param trustedRoots Array of SecCertificateRef roots.
1176 * @param replaceExisting Boolean indicating if provided roots should override all others for this connection.
1177 * @result errSecSuccess on success, alternative error on failure.
1180 SSLSetTrustedRoots (SSLContextRef context
,
1181 CFArrayRef trustedRoots
,
1182 Boolean replaceExisting
)
1183 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1186 * @function SSLCopyTrustedRoots
1187 * @abstract Obtain an array of SecCertificateRefs representing the current
1188 * set of trusted roots.
1189 * @discussion If SSLSetTrustedRoots() has never been called
1190 * for this session, this returns the system's default root set.
1191 * Caller must CFRelease the returned CFArray.
1193 * ==========================
1194 * MAC OS X ONLY (DEPRECATED)
1195 * ==========================
1196 * @note This function is not available on iOS, and should be considered
1197 * deprecated on Mac OS X. To get the current set of trusted roots, call the
1198 * SSLCopyPeerTrust function to obtain the SecTrustRef for the peer certificate
1199 * chain, then SecTrustCopyCustomAnchorCertificates (see SecTrust.h).
1200 * @param context A valid SSLContextRef.
1201 * @param trustedRoots Array of SecCertificateRef roots.
1202 * @param replaceExisting Boolean indicating if provided roots should override all others for this connection.
1203 * @result errSecSuccess on success, alternative error on failure.
1206 SSLCopyTrustedRoots (SSLContextRef context
,
1207 CFArrayRef
* __nonnull CF_RETURNS_RETAINED trustedRoots
) /* RETURNED */
1208 __SECURETRANSPORT_API_DEPRECATED(macos(10.5, 10.9));
1211 * @function SSLCopyPeerCertificates
1212 * @abstract Request peer certificates. Valid anytime, subsequent to a handshake attempt.
1213 * @discussion The certs argument is a CFArray containing SecCertificateRefs.
1214 * Caller must CFRelease the returned array.
1216 * The cert at index 0 of the returned array is the subject (end
1217 * entity) cert; the root cert (or the closest cert to it) is at
1218 * the end of the returned array.
1220 * ==========================
1221 * MAC OS X ONLY (DEPRECATED)
1222 * ==========================
1223 * @note This function is not available on iOS, and should be considered
1224 * deprecated on Mac OS X. To get peer certificates, call SSLCopyPeerTrust
1225 * to obtain the SecTrustRef for the peer certificate chain, then use the
1226 * SecTrustGetCertificateCount and SecTrustGetCertificateAtIndex functions
1227 * to retrieve individual certificates in the chain (see SecTrust.h).
1228 * @param context A valid SSLContextRef.
1229 * @param certs Pointer to CFArrayRef that will store a reference to the peer's certificates.
1230 * @result errSecSuccess on success, alternative error on failure.
1233 SSLCopyPeerCertificates (SSLContextRef context
,
1234 CFArrayRef
* __nonnull CF_RETURNS_RETAINED certs
) /* RETURNED */
1235 __SECURETRANSPORT_API_DEPRECATED(macos(10.5, 10.9));
1237 #endif /* MAC OS X */
1240 * @function SSLCopyPeerTrust
1241 * @abstract Obtain a SecTrustRef representing peer certificates. Valid anytime,
1242 * subsequent to a handshake attempt. Caller must CFRelease the returned
1244 * @discussion The returned trust reference will have already been evaluated for
1245 * you, unless one of the following is true:
1246 * - Your code has disabled automatic certificate verification, by calling
1247 * SSLSetSessionOption to set kSSLSessionOptionBreakOnServerAuth to true.
1248 * - Your code has called SSLSetPeerID, and this session has been resumed
1249 * from an earlier cached session.
1251 * In these cases, your code should call SecTrustEvaluate prior to
1252 * examining the peer certificate chain or trust results (see SecTrust.h).
1254 * @note If you have not called SSLHandshake at least once prior to
1255 * calling this function, the returned trust reference will be NULL.
1256 * @param context A valid SSLContextRef.
1257 * @param trust Pointer to SecTrustRef where peer's SecTrustRef is copied (retained).
1258 * @result errSecSuccess on success, alternative error on failure.
1261 SSLCopyPeerTrust (SSLContextRef context
,
1262 SecTrustRef
* __nonnull CF_RETURNS_RETAINED trust
) /* RETURNED */
1263 __SECURETRANSPORT_API_DEPRECATED(macos(10.6, 10.15), ios(5.0, 13.0));
1266 * @function SSLSetPeerID
1267 * @discussion Specify some data, opaque to this library, which is sufficient
1268 * to uniquely identify the peer of the current session. An example
1269 * would be IP address and port, stored in some caller-private manner.
1270 * To be optionally called prior to SSLHandshake for the current
1271 * session. This is mandatory if this session is to be resumable.
1273 * SecureTransport allocates its own copy of the incoming peerID. The
1274 * data provided in *peerID, while opaque to SecureTransport, is used
1275 * in a byte-for-byte compare to other previous peerID values set by the
1276 * current application. Matching peerID blobs result in SecureTransport
1277 * attempting to resume an SSL session with the same parameters as used
1278 * in the previous session which specified the same peerID bytes.
1279 * @param context A valid SSLContextRef.
1280 * @param peerID Opaque peer ID.
1281 * @param peerIDLen Length of opaque peer ID.
1282 * @result errSecSuccess on success, alternative error on failure.
1285 SSLSetPeerID (SSLContextRef context
,
1286 const void * __nullable peerID
,
1288 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1291 * @function SSLGetPeerID
1292 * @abstract Obtain current PeerID. Returns NULL pointer, zero length if
1293 * SSLSetPeerID has not been called for this context.
1294 * @param context A valid SSLContextRef.
1295 * @param peerID Pointer to storage for the peer ID.
1296 * @param peerIDLen Pointer to storage for the peer ID length.
1297 * @result errSecSuccess on success, alternative error on failure.
1300 SSLGetPeerID (SSLContextRef context
,
1301 const void * __nullable
* __nonnull peerID
,
1303 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1306 * @function SSLGetNegotiatedCipher
1307 * @abstract Obtain the SSLCipherSuite (e.g., SSL_RSA_WITH_DES_CBC_SHA) negotiated
1308 * for this session. Only valid when a session is active.
1309 * @param context A valid SSLContextRef.
1310 * @param cipherSuite Pointer to storage for negotiated SSLCipherSuite.
1311 * @result errSecSuccess on success, alternative error on failure.
1314 SSLGetNegotiatedCipher (SSLContextRef context
,
1315 SSLCipherSuite
*cipherSuite
)
1316 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1319 * @function SSLSetALPNProtocols
1320 * @abstract Set the ALPN protocols to be passed in the ALPN negotiation.
1321 * @discussion This is the list of supported application-layer protocols supported.
1323 * The protocols parameter must be an array of CFStringRef values
1324 * with ASCII-encoded reprensetations of the supported protocols, e.g., "http/1.1".
1326 * @note See RFC 7301 for more information.
1327 * @param context A valid SSLContextRef.
1328 * @param protocols Array of CFStringRefs carrying application protocols.
1329 * @result errSecSuccess on success, alternative error on failure.
1332 SSLSetALPNProtocols (SSLContextRef context
,
1333 CFArrayRef protocols
)
1334 __SECURETRANSPORT_API_DEPRECATED(macos(10.13, 10.15), ios(11.0, 13.0));
1337 * @function SSLCopyALPNProtocols
1338 * @abstract Get the ALPN protocols associated with this SSL context.
1339 * @discussion This is the list of supported application-layer protocols supported.
1341 * The resultant protocols array will contain CFStringRef values containing
1342 * ASCII-encoded representations of the supported protocols, e.g., "http/1.1".
1344 * See RFC 7301 for more information.
1346 * @note The `protocols` pointer must be NULL, otherwise the copy will fail.
1347 * This function will allocate memory for the CFArrayRef container
1348 * if there is data to provide. Otherwise, the pointer will remain NULL.
1349 * @param context A valid SSLContextRef.
1350 * @param protocols Pointer to a CFArrayRef where peer ALPN protocols are stored.
1351 * @result errSecSuccess on success, alternative error on failure.
1354 SSLCopyALPNProtocols (SSLContextRef context
,
1355 CFArrayRef __nullable
* __nonnull protocols
) /* RETURNED */
1356 __SECURETRANSPORT_API_DEPRECATED(macos(10.13, 10.15), ios(11.0, 13.0));
1359 * @function SSLSetOCSPResponse
1360 * @abstract Set the OCSP response for the given SSL session.
1361 * @discussion The response parameter must be a non-NULL CFDataRef containing the
1362 * bytes of the OCSP response.
1363 * @param context A valid SSLContextRef.
1364 * @param response CFDataRef carrying OCSP response.
1365 * @result errSecSuccess on success, alternative error on failure.
1368 SSLSetOCSPResponse (SSLContextRef context
,
1369 CFDataRef __nonnull response
)
1370 __SECURETRANSPORT_API_DEPRECATED(macos(10.13, 10.15), ios(11.0, 13.0));
1372 /********************************************************
1373 *** Session context configuration, server side only. ***
1374 ********************************************************/
1377 * @function SSLSetEncryptionCertificate
1378 * @discussion This function is deprecated in OSX 10.11 and iOS 9.0 and
1379 * has no effect on the TLS handshake since OSX 10.10 and
1380 * iOS 8.0. Using separate RSA certificates for encryption
1381 * and signing is no longer supported.
1382 * @param context A valid SSLContextRef.
1383 * @param certRefs Array of certificates.
1384 * @result errSecSuccess on success, alternative error on failure.
1387 SSLSetEncryptionCertificate (SSLContextRef context
,
1388 CFArrayRef certRefs
)
1389 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.11), ios(5.0, 9.0));
1392 * @enum SSLAuthenticate
1393 * @discussion Optional; Default is kNeverAuthenticate.
1394 * Can only be called when no session is active.
1396 typedef CF_ENUM(int, SSLAuthenticate
) {
1397 kNeverAuthenticate
, /* skip client authentication */
1398 kAlwaysAuthenticate
, /* require it */
1399 kTryAuthenticate
/* try to authenticate, but not an error if client doesn't have a cert */
1403 * @function SSLSetClientSideAuthenticate
1404 * @abstract Specify requirements for client-side authentication.
1405 * @param context A valid SSLContextRef.
1406 * @param auth A SSLAuthenticate enumeration value.
1407 * @result errSecSuccess on success, alternative error on failure.
1410 SSLSetClientSideAuthenticate (SSLContextRef context
,
1411 SSLAuthenticate auth
)
1412 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1415 * @function SSLAddDistinguishedName
1416 * @abstract Add a DER-encoded distinguished name to list of acceptable names
1417 * to be specified in requests for client certificates.
1418 * @param context A valid SSLContextRef.
1419 * @param derDN A DER-encoded Distinguished Name blob.
1420 * @param derDNLen Length of the Distinguished Name blob.
1421 * @result errSecSuccess on success, alternative error on failure.
1424 SSLAddDistinguishedName (SSLContextRef context
,
1425 const void * __nullable derDN
,
1427 __SECURETRANSPORT_API_DEPRECATED(macos(10.4, 10.15), ios(5.0, 13.0));
1432 * @function SSLSetCertificateAuthorities
1433 * @abstract Add a SecCertificateRef, or a CFArray of them, to a server's list
1434 * of acceptable Certificate Authorities (CAs) to present to the client
1435 * when client authentication is performed.
1436 * @discussion If replaceExisting is true, the specified certificate(s) will
1437 * replace a possible existing list of acceptable CAs. If replaceExisting
1438 * is false, the specified certificate(s) will be appended to the existing
1439 * list of acceptable CAs, if any.
1441 * Returns errSecParam if this is called on a SSLContextRef which
1442 * is configured as a client, or when a session is active.
1444 * @note this function is currently not available on iOS.
1445 * @param context A valid SSLContextRef.
1446 * @param certificateOrARray Either a SecCertificateRef (or CFArrayRef of them).
1447 * @param replaceExisting Boolean indicating if existing CAs should be overruled for this connection.
1448 * @result errSecSuccess on success, alternative error on failure.
1451 SSLSetCertificateAuthorities(SSLContextRef context
,
1452 CFTypeRef certificateOrArray
,
1453 Boolean replaceExisting
)
1454 __SECURETRANSPORT_API_DEPRECATED(macos(10.5, 10.15));
1457 * @function SSLCopyCertificateAuthorities
1458 * @abstract Obtain the certificates specified in SSLSetCertificateAuthorities(),
1459 * if any. Returns a NULL array if SSLSetCertificateAuthorities() has not been called.
1460 * @discussion Caller must CFRelease the returned array.
1462 * @note This function is currently not available on iOS.
1463 * @param context A valid SSLContextRef.
1464 * @param certificates Pointer to CFArrayRef storage for retained copy of CAs for this connection.
1465 * @result errSecSuccess on success, alternative error on failure.
1468 SSLCopyCertificateAuthorities(SSLContextRef context
,
1469 CFArrayRef
* __nonnull CF_RETURNS_RETAINED certificates
) /* RETURNED */
1470 __SECURETRANSPORT_API_DEPRECATED(macos(10.5, 10.15));
1472 #endif /* MAC OS X */
1475 * @function SSLCopyDistinguishedNames
1476 * @abstract Obtain the list of acceptable distinguished names as provided by
1477 * a server (if the SSLContextRef is configured as a client), or as
1478 * specified by SSLSetCertificateAuthorities (if the SSLContextRef
1479 * is configured as a server).
1480 * @discussion The returned array contains CFDataRefs, each of which represents
1481 * one DER-encoded RDN. Caller must CFRelease the returned array.
1482 * @param context A valid SSLContextRef.
1483 * @param names Pointer to CFArrayRef storage for retained copy of Distinguished Names.
1484 * @result errSecSuccess on success, alternative error on failure.
1487 SSLCopyDistinguishedNames (SSLContextRef context
,
1488 CFArrayRef
* __nonnull CF_RETURNS_RETAINED names
)
1489 __SECURETRANSPORT_API_DEPRECATED(macos(10.5, 10.15), ios(5.0, 13.0));
1492 * @function SSLGetClientCertificateState
1493 * @abstract Obtain client certificate exchange status.
1494 * @discussion Can be called any time.
1495 * Reflects the *last* client certificate state change;
1496 * subsequent to a renegotiation attempt by either peer, the state
1497 * is reset to kSSLClientCertNone.
1498 * @param context A valid SSLContextRef.
1499 * @param clientState Pointer to SSLClientCertificateState storage.
1500 * @result errSecSuccess on success, alternative error on failure.
1503 SSLGetClientCertificateState (SSLContextRef context
,
1504 SSLClientCertificateState
*clientState
)
1505 __SECURETRANSPORT_API_DEPRECATED(macos(10.3, 10.15), ios(5.0, 13.0));
1510 * @function SSLSetDiffieHellmanParams
1511 * @abstract Specify Diffie-Hellman parameters.
1512 * @discussion Optional; if we are configured to allow
1513 * for D-H ciphers and a D-H cipher is negotiated, and this function has not
1514 * been called, a set of process-wide parameters will be calculated. However
1515 * that can take a long time (30 seconds).
1516 * @note This function is currently not available on iOS.
1517 * @param context A valid SSLContextRef.
1518 * @param clientState Pointer to SSLClientCertificateState storage.
1519 * @result errSecSuccess on success, alternative error on failure.
1522 SSLSetDiffieHellmanParams (SSLContextRef context
,
1523 const void * __nullable dhParams
,
1525 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15));
1528 * @function SSLGetDiffieHellmanParams
1529 * @abstract Return parameter block specified in SSLSetDiffieHellmanParams.
1530 * @discussion Returned data is not copied and belongs to the SSLContextRef.
1531 * @note This function is currently not available on iOS.
1532 * @param context A valid SSLContextRef.
1533 * @param dhParams Pointer to storage for DH parameters (if set), of at length most |*dhParamsLen|.
1534 * @param dhParamsLen (Input and output) length of dhParams.
1535 * @result errSecSuccess on success, alternative error on failure.
1538 SSLGetDiffieHellmanParams (SSLContextRef context
,
1539 const void * __nullable
* __nonnull dhParams
,
1540 size_t *dhParamsLen
)
1541 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15));
1544 * @function SSLSetRsaBlinding
1545 * @abstract Enable/Disable RSA blinding.
1546 * @discussion This feature thwarts a known timing
1547 * attack to which RSA keys are vulnerable; enabling it is a tradeoff
1548 * between performance and security. The default for RSA blinding is
1551 * ==========================
1552 * MAC OS X ONLY (DEPRECATED)
1553 * ==========================
1554 * @note This function is not available on iOS, and should be considered
1555 * deprecated on Mac OS X. RSA blinding is enabled unconditionally, as
1556 * it prevents a known way for an attacker to recover the private key,
1557 * and the performance gain of disabling it is negligible.
1558 * @param context A valid SSLContextRef.
1559 * @param blinding Boolean indicating if RSA blinding is enabled.
1560 * @result errSecSuccess on success, alternative error on failure.
1563 SSLSetRsaBlinding (SSLContextRef context
,
1565 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1568 * @function SSLGetRsaBlinding
1569 * @abstract Get RSA blinding state.
1570 * @discussion See SSLSetRsaBlinding().
1572 * ==========================
1573 * MAC OS X ONLY (DEPRECATED)
1574 * ==========================
1575 * @note This function is not available on iOS, and should be considered
1576 * deprecated on Mac OS X.
1577 * @param context A valid SSLContextRef.
1578 * @param blinding Pointer to Boolean storage for RSA blinding state.
1579 * @result errSecSuccess on success, alternative error on failure.
1582 SSLGetRsaBlinding (SSLContextRef context
,
1584 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.9));
1586 #endif /* MAC OS X */
1588 /*******************************
1589 ******** I/O Functions ********
1590 *******************************/
1593 * Note: depending on the configuration of the underlying I/O
1594 * connection, all SSL I/O functions can return errSSLWouldBlock,
1595 * indicating "not complete, nothing is wrong, except required
1596 * I/O hasn't completed". Caller may need to repeat I/Os as necessary
1597 * if the underlying connection has been configured to behave in
1598 * a non-blocking manner.
1602 * @function SSLHandshake
1603 * @abstract Perform the SSL handshake.
1604 * @discussion On successful return, session is ready for normal secure application
1605 * I/O via SSLWrite and SSLRead.
1607 * Interesting error returns:
1609 * errSSLUnknownRootCert: Peer had a valid cert chain, but the root of
1610 * the chain is unknown.
1612 * errSSLNoRootCert: Peer had a cert chain which did not end in a root.
1614 * errSSLCertExpired: Peer's cert chain had one or more expired certs.
1616 * errSSLXCertChainInvalid: Peer had an invalid cert chain (i.e.,
1617 * signature verification within the chain failed, or no certs
1620 * In all of the above errors, the handshake was aborted; the peer's
1621 * cert chain is available via SSLCopyPeerTrust or SSLCopyPeerCertificates.
1623 * Other interesting result codes:
1625 * errSSLPeerAuthCompleted: Peer's cert chain is valid, or was ignored if
1626 * cert verification was disabled via SSLSetEnableCertVerify. The application
1627 * may decide to continue with the handshake (by calling SSLHandshake
1628 * again), or close the connection at this point.
1630 * errSSLClientCertRequested: The server has requested a client certificate.
1631 * The client may choose to examine the server's certificate and
1632 * distinguished name list, then optionally call SSLSetCertificate prior
1633 * to resuming the handshake by calling SSLHandshake again.
1635 * A return value of errSSLWouldBlock indicates that SSLHandshake has to be
1636 * called again (and again and again until something else is returned).
1637 * @param context A valid SSLContextRef.
1638 * @result errSecSuccess on success, alternative error on failure or incomplete state.
1641 SSLHandshake (SSLContextRef context
)
1642 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1645 * @function SSLReHandshake
1646 * @abstract Server Only: Request renegotation.
1647 * @discussion This will return an error if the server is already renegotiating, or if the session is closed.
1648 * After this return without error, the application should call SSLHandshake() and/or SSLRead() as
1649 * for the original handshake.
1650 * @param context A valid SSLContextRef.
1651 * @result errSecSuccess on success, alternative error on failure.
1654 SSLReHandshake (SSLContextRef context
)
1655 __SECURETRANSPORT_API_DEPRECATED(macos(10.12, 10.15), ios(10.0, 13.0));
1659 * @function SSLWrite
1660 * @abstract Normal application-level write.
1661 * @discussion On both of these, a errSSLWouldBlock return and a partially completed
1662 * transfer - or even zero bytes transferred - are NOT mutually exclusive.
1663 * @param context A valid SSLContextRef.
1664 * @param data Pointer to data to write.
1665 * @param dataLength Length of data to write.
1666 * @param processed Pointer to storage indicating how much data was written.
1667 * @result errSecSuccess on success, alternative error on failure.
1670 SSLWrite (SSLContextRef context
,
1671 const void * __nullable data
,
1673 size_t *processed
) /* RETURNED */
1674 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1678 * @abstract * @abstract Normal application-level write.
1679 * @discussion Data is mallocd by caller; available size specified in
1680 * dataLength; actual number of bytes read returned in
1682 * @param context A valid SSLContextRef.
1683 * @param data Pointer to storage where data can be read.
1684 * @param dataLength Length of data storage.
1685 * @param processed Pointer to storage indicating how much data was read.
1686 * @result errSecSuccess on success, alternative error on failure.
1689 SSLRead (SSLContextRef context
,
1690 void * data
, /* RETURNED */
1692 size_t *processed
) /* RETURNED */
1693 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1696 * @function SSLGetBufferedReadSize
1697 * @abstract Determine how much data the client can be guaranteed to
1698 * obtain via SSLRead() without blocking or causing any low-level
1699 * read operations to occur.
1700 * @param context A valid SSLContextRef.
1701 * @param bufferSize Pointer to store the amount of buffered data to be read.
1702 * @result errSecSuccess on success, alternative error on failure.
1705 SSLGetBufferedReadSize (SSLContextRef context
,
1706 size_t *bufferSize
) /* RETURNED */
1707 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1710 * @function SSLGetDatagramWriteSize
1711 * @abstract Determine how much data the application can be guaranteed to write
1712 * with SSLWrite() without causing fragmentation. The value is based on
1713 * the maximum Datagram Record size defined by the application with
1714 * SSLSetMaxDatagramRecordSize(), minus the DTLS Record header size.
1715 * @param context A valid SSLContextRef (for DTLS).
1716 * @param bufferSize Pointer to store the amount of data that can be written.
1717 * @result errSecSuccess on success, alternative error on failure.
1720 SSLGetDatagramWriteSize (SSLContextRef dtlsContext
,
1722 __SECURETRANSPORT_API_DEPRECATED(macos(10.8, 10.15), ios(5.0, 13.0));
1725 * @function SSLClose
1726 * @abstract Terminate current SSL session.
1727 * @param context A valid SSLContextRef.
1728 * @result errSecSuccess on success, alternative error on failure.
1731 SSLClose (SSLContextRef context
)
1732 __SECURETRANSPORT_API_DEPRECATED(macos(10.2, 10.15), ios(5.0, 13.0));
1735 * @function SSLSetError
1736 * @abstract Set the status of a SSLContextRef.
1737 * @discussion This is to be done after handling steps of the SSL handshake such
1738 * as server certificate validation.
1739 * @param context A valid SSLContextRef.
1740 * @param status Error status to set internally, which will be translated to an alert.
1741 * @result errSecSuccess on success, alternative error on failure.
1744 SSLSetError (SSLContextRef context
,
1746 __SECURETRANSPORT_API_DEPRECATED(macos(10.13, 10.15), ios(11.0, 13.0));
1748 #undef __SECURETRANSPORT_API_DEPRECATED
1750 CF_IMPLICIT_BRIDGING_DISABLED
1751 CF_ASSUME_NONNULL_END
1757 #endif /* !_SECURITY_SECURETRANSPORT_H_ */