summaryrefslogtreecommitdiff
path: root/static/netbsd/man3/SSL_CTX_set_psk_client_callback.3
diff options
context:
space:
mode:
authorJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:15 -0400
committerJacob McDonnell <jacob@jacobmcdonnell.com>2026-04-25 19:55:15 -0400
commit253e67c8b3a72b3a4757fdbc5845297628db0a4a (patch)
treeadf53b66087aa30dfbf8bf391a1dadb044c3bf4d /static/netbsd/man3/SSL_CTX_set_psk_client_callback.3
parenta9157ce950dfe2fc30795d43b9d79b9d1bffc48b (diff)
docs: Added All NetBSD Manuals
Diffstat (limited to 'static/netbsd/man3/SSL_CTX_set_psk_client_callback.3')
-rw-r--r--static/netbsd/man3/SSL_CTX_set_psk_client_callback.3236
1 files changed, 236 insertions, 0 deletions
diff --git a/static/netbsd/man3/SSL_CTX_set_psk_client_callback.3 b/static/netbsd/man3/SSL_CTX_set_psk_client_callback.3
new file mode 100644
index 00000000..f7a97a77
--- /dev/null
+++ b/static/netbsd/man3/SSL_CTX_set_psk_client_callback.3
@@ -0,0 +1,236 @@
+.\" $NetBSD: SSL_CTX_set_psk_client_callback.3,v 1.5 2026/04/08 17:06:47 christos Exp $
+.\"
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Required to disable full justification in groff 1.23.0.
+.if n .ds AD l
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_set_psk_client_callback 3"
+.TH SSL_CTX_set_psk_client_callback 3 2026-04-07 3.5.6 OpenSSL
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+SSL_psk_client_cb_func,
+SSL_psk_use_session_cb_func,
+SSL_CTX_set_psk_client_callback,
+SSL_set_psk_client_callback,
+SSL_CTX_set_psk_use_session_callback,
+SSL_set_psk_use_session_callback
+\&\- set PSK client callback
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& typedef int (*SSL_psk_use_session_cb_func)(SSL *ssl, const EVP_MD *md,
+\& const unsigned char **id,
+\& size_t *idlen,
+\& SSL_SESSION **sess);
+\&
+\&
+\& void SSL_CTX_set_psk_use_session_callback(SSL_CTX *ctx,
+\& SSL_psk_use_session_cb_func cb);
+\& void SSL_set_psk_use_session_callback(SSL *s, SSL_psk_use_session_cb_func cb);
+\&
+\&
+\& typedef unsigned int (*SSL_psk_client_cb_func)(SSL *ssl,
+\& const char *hint,
+\& char *identity,
+\& unsigned int max_identity_len,
+\& unsigned char *psk,
+\& unsigned int max_psk_len);
+\&
+\& void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, SSL_psk_client_cb_func cb);
+\& void SSL_set_psk_client_callback(SSL *ssl, SSL_psk_client_cb_func cb);
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+A client application wishing to use TLSv1.3 PSKs should use either
+\&\fBSSL_CTX_set_psk_use_session_callback()\fR or \fBSSL_set_psk_use_session_callback()\fR as
+appropriate. These functions cannot be used for TLSv1.2 and below PSKs.
+.PP
+The callback function is given a pointer to the SSL connection in \fBssl\fR.
+.PP
+The first time the callback is called for a connection the \fBmd\fR parameter is
+NULL. In some circumstances the callback will be called a second time. In that
+case the server will have specified a ciphersuite to use already and the PSK
+must be compatible with the digest for that ciphersuite. The digest will be
+given in \fBmd\fR. The PSK returned by the callback is allowed to be different
+between the first and second time it is called.
+.PP
+On successful completion the callback must store a pointer to an identifier for
+the PSK in \fB*id\fR. The identifier length in bytes should be stored in \fB*idlen\fR.
+The memory pointed to by \fB*id\fR remains owned by the application and should
+be freed by it as required at any point after the handshake is complete.
+.PP
+Additionally the callback should store a pointer to an SSL_SESSION object in
+\&\fB*sess\fR. This is used as the basis for the PSK, and should, at a minimum, have
+the following fields set:
+.IP "The master key" 4
+.IX Item "The master key"
+This can be set via a call to \fBSSL_SESSION_set1_master_key\fR\|(3).
+.IP "A ciphersuite" 4
+.IX Item "A ciphersuite"
+Only the handshake digest associated with the ciphersuite is relevant for the
+PSK (the server may go on to negotiate any ciphersuite which is compatible with
+the digest). The application can use any TLSv1.3 ciphersuite. If \fBmd\fR is
+not NULL the handshake digest for the ciphersuite should be the same.
+The ciphersuite can be set via a call to <\fBSSL_SESSION_set_cipher\fR\|(3)>. The
+handshake digest of an SSL_CIPHER object can be checked using
+<\fBSSL_CIPHER_get_handshake_digest\fR\|(3)>.
+.IP "The protocol version" 4
+.IX Item "The protocol version"
+This can be set via a call to \fBSSL_SESSION_set_protocol_version\fR\|(3) and should
+be TLS1_3_VERSION.
+.PP
+Additionally the maximum early data value should be set via a call to
+\&\fBSSL_SESSION_set_max_early_data\fR\|(3) if the PSK will be used for sending early
+data.
+.PP
+Alternatively an SSL_SESSION created from a previous non\-PSK handshake may also
+be used as the basis for a PSK.
+.PP
+Ownership of the SSL_SESSION object is passed to the OpenSSL library and so it
+should not be freed by the application.
+.PP
+Note that as described above, the callback may be called a second time during a
+handshake. Since ownership of the SSL_SESSION is transferred to OpenSSL on each
+call, if the callback wishes to return the same SSL_SESSION pointer on a
+subsequent invocation, it must first call \fBSSL_SESSION_up_ref\fR\|(3) to increment
+the reference count. Failure to do so will result in a use\-after\-free error.
+Alternatively, the callback may return a different SSL_SESSION object on each
+call (e.g., by calling \fBSSL_SESSION_dup\fR\|(3)).
+.PP
+It is also possible for the callback to succeed but not supply a PSK. In this
+case no PSK will be sent to the server but the handshake will continue. To do
+this the callback should return successfully and ensure that \fB*sess\fR is
+NULL. The contents of \fB*id\fR and \fB*idlen\fR will be ignored.
+.PP
+A client application wishing to use PSK ciphersuites for TLSv1.2 and below must
+provide a different callback function. This function will be called when the
+client is sending the ClientKeyExchange message to the server.
+.PP
+The purpose of the callback function is to select the PSK identity and
+the pre\-shared key to use during the connection setup phase.
+.PP
+The callback is set using functions \fBSSL_CTX_set_psk_client_callback()\fR
+or \fBSSL_set_psk_client_callback()\fR. The callback function is given the
+connection in parameter \fBssl\fR, a \fBNUL\fR\-terminated PSK identity hint
+sent by the server in parameter \fBhint\fR, a buffer \fBidentity\fR of
+length \fBmax_identity_len\fR bytes (including the \fBNUL\fR\-terminator) where the
+resulting \fBNUL\fR\-terminated identity is to be stored, and a buffer \fBpsk\fR
+of length \fBmax_psk_len\fR bytes where the resulting pre\-shared key is to
+be stored.
+.PP
+The callback for use in TLSv1.2 will also work in TLSv1.3 although it is
+recommended to use \fBSSL_CTX_set_psk_use_session_callback()\fR
+or \fBSSL_set_psk_use_session_callback()\fR for this purpose instead. If TLSv1.3 has
+been negotiated then OpenSSL will first check to see if a callback has been set
+via \fBSSL_CTX_set_psk_use_session_callback()\fR or \fBSSL_set_psk_use_session_callback()\fR
+and it will use that in preference. If no such callback is present then it will
+check to see if a callback has been set via \fBSSL_CTX_set_psk_client_callback()\fR or
+\&\fBSSL_set_psk_client_callback()\fR and use that. In this case the \fBhint\fR value will
+always be NULL and the handshake digest will default to SHA\-256 for any returned
+PSK. TLSv1.3 early data exchanges are possible in PSK connections only with the
+\&\fBSSL_psk_use_session_cb_func\fR callback, and are not possible with the
+\&\fBSSL_psk_client_cb_func\fR callback.
+.SH NOTES
+.IX Header "NOTES"
+Note that parameter \fBhint\fR given to the callback may be \fBNULL\fR.
+.PP
+A connection established via a TLSv1.3 PSK will appear as if session resumption
+has occurred so that \fBSSL_session_reused\fR\|(3) will return true.
+.PP
+There are no known security issues with sharing the same PSK between TLSv1.2 (or
+below) and TLSv1.3. However, the RFC has this note of caution:
+.PP
+"While there is no known way in which the same PSK might produce related output
+in both versions, only limited analysis has been done. Implementations can
+ensure safety from cross\-protocol related output by not reusing PSKs between
+TLS 1.3 and TLS 1.2."
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+Return values from the \fBSSL_psk_client_cb_func\fR callback are interpreted as
+follows:
+.PP
+On success (callback found a PSK identity and a pre\-shared key to use)
+the length (> 0) of \fBpsk\fR in bytes is returned.
+.PP
+Otherwise or on errors the callback should return 0. In this case
+the connection setup fails.
+.PP
+The SSL_psk_use_session_cb_func callback should return 1 on success or 0 on
+failure. In the event of failure the connection setup fails.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fBssl\fR\|(7),
+\&\fBSSL_CTX_set_psk_find_session_callback\fR\|(3),
+\&\fBSSL_set_psk_find_session_callback\fR\|(3)
+.SH HISTORY
+.IX Header "HISTORY"
+\&\fBSSL_CTX_set_psk_use_session_callback()\fR and \fBSSL_set_psk_use_session_callback()\fR
+were added in OpenSSL 1.1.1.
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright 2006\-2026 The OpenSSL Project Authors. All Rights Reserved.
+.PP
+Licensed under the Apache License 2.0 (the "License"). You may not use
+this file except in compliance with the License. You can obtain a copy
+in the file LICENSE in the source distribution or at
+<https://www.openssl.org/source/license.html>.