xref: /freebsd-src/crypto/openssl/doc/man3/SSL_get_client_random.pod (revision b077aed33b7b6aefca7b17ddb250cf521f938613)
1e71b7053SJung-uk Kim=pod
2e71b7053SJung-uk Kim
3e71b7053SJung-uk Kim=head1 NAME
4e71b7053SJung-uk Kim
5e71b7053SJung-uk KimSSL_get_client_random,
6e71b7053SJung-uk KimSSL_get_server_random,
7e71b7053SJung-uk KimSSL_SESSION_get_master_key,
8e71b7053SJung-uk KimSSL_SESSION_set1_master_key
9e71b7053SJung-uk Kim- get internal TLS/SSL random values and get/set master key
10e71b7053SJung-uk Kim
11e71b7053SJung-uk Kim=head1 SYNOPSIS
12e71b7053SJung-uk Kim
13e71b7053SJung-uk Kim #include <openssl/ssl.h>
14e71b7053SJung-uk Kim
15e71b7053SJung-uk Kim size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen);
16e71b7053SJung-uk Kim size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen);
17e71b7053SJung-uk Kim size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
18e71b7053SJung-uk Kim                                   unsigned char *out, size_t outlen);
19e71b7053SJung-uk Kim int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
20e71b7053SJung-uk Kim                                 size_t len);
21e71b7053SJung-uk Kim
22e71b7053SJung-uk Kim=head1 DESCRIPTION
23e71b7053SJung-uk Kim
24e71b7053SJung-uk KimSSL_get_client_random() extracts the random value sent from the client
25e71b7053SJung-uk Kimto the server during the initial SSL/TLS handshake.  It copies as many
26e71b7053SJung-uk Kimbytes as it can of this value into the buffer provided in B<out>,
27e71b7053SJung-uk Kimwhich must have at least B<outlen> bytes available. It returns the
28e71b7053SJung-uk Kimtotal number of bytes that were actually copied.  If B<outlen> is
29e71b7053SJung-uk Kimzero, SSL_get_client_random() copies nothing, and returns the
30e71b7053SJung-uk Kimtotal size of the client_random value.
31e71b7053SJung-uk Kim
32e71b7053SJung-uk KimSSL_get_server_random() behaves the same, but extracts the random value
33e71b7053SJung-uk Kimsent from the server to the client during the initial SSL/TLS handshake.
34e71b7053SJung-uk Kim
35e71b7053SJung-uk KimSSL_SESSION_get_master_key() behaves the same, but extracts the master
36e71b7053SJung-uk Kimsecret used to guarantee the security of the SSL/TLS session.  This one
37e71b7053SJung-uk Kimcan be dangerous if misused; see NOTES below.
38e71b7053SJung-uk Kim
39e71b7053SJung-uk KimSSL_SESSION_set1_master_key() sets the master key value associated with the
40e71b7053SJung-uk KimSSL_SESSION B<sess>. For example, this could be used to set up a session based
41e71b7053SJung-uk KimPSK (see L<SSL_CTX_set_psk_use_session_callback(3)>). The master key of length
42e71b7053SJung-uk KimB<len> should be provided at B<in>. The supplied master key is copied by the
43e71b7053SJung-uk Kimfunction, so the caller is responsible for freeing and cleaning any memory
44e71b7053SJung-uk Kimassociated with B<in>. The caller must ensure that the length of the key is
45e71b7053SJung-uk Kimsuitable for the ciphersuite associated with the SSL_SESSION.
46e71b7053SJung-uk Kim
47e71b7053SJung-uk Kim=head1 NOTES
48e71b7053SJung-uk Kim
49e71b7053SJung-uk KimYou probably shouldn't use these functions.
50e71b7053SJung-uk Kim
51e71b7053SJung-uk KimThese functions expose internal values from the TLS handshake, for
52e71b7053SJung-uk Kimuse in low-level protocols.  You probably should not use them, unless
53e71b7053SJung-uk Kimyou are implementing something that needs access to the internal protocol
54e71b7053SJung-uk Kimdetails.
55e71b7053SJung-uk Kim
56e71b7053SJung-uk KimDespite the names of SSL_get_client_random() and SSL_get_server_random(), they
57e71b7053SJung-uk KimARE NOT random number generators.  Instead, they return the mostly-random values that
58e71b7053SJung-uk Kimwere already generated and used in the TLS protocol.  Using them
59e71b7053SJung-uk Kimin place of RAND_bytes() would be grossly foolish.
60e71b7053SJung-uk Kim
61e71b7053SJung-uk KimThe security of your TLS session depends on keeping the master key secret:
62e71b7053SJung-uk Kimdo not expose it, or any information about it, to anybody.
63e71b7053SJung-uk KimIf you need to calculate another secret value that depends on the master
64e71b7053SJung-uk Kimsecret, you should probably use SSL_export_keying_material() instead, and
65e71b7053SJung-uk Kimforget that you ever saw these functions.
66e71b7053SJung-uk Kim
67e71b7053SJung-uk KimIn current versions of the TLS protocols, the length of client_random
68e71b7053SJung-uk Kim(and also server_random) is always SSL3_RANDOM_SIZE bytes. Support for
69e71b7053SJung-uk Kimother outlen arguments to the SSL_get_*_random() functions is provided
70e71b7053SJung-uk Kimin case of the unlikely event that a future version or variant of TLS
71e71b7053SJung-uk Kimuses some other length there.
72e71b7053SJung-uk Kim
73e71b7053SJung-uk KimFinally, though the "client_random" and "server_random" values are called
74e71b7053SJung-uk Kim"random", many TLS implementations will generate four bytes of those
75e71b7053SJung-uk Kimvalues based on their view of the current time.
76e71b7053SJung-uk Kim
77e71b7053SJung-uk Kim
78e71b7053SJung-uk Kim=head1 RETURN VALUES
79e71b7053SJung-uk Kim
80e71b7053SJung-uk KimSSL_SESSION_set1_master_key() returns 1 on success or 0 on failure.
81e71b7053SJung-uk Kim
82e71b7053SJung-uk KimFor the other functions, if B<outlen> is greater than 0 then these functions
83e71b7053SJung-uk Kimreturn the number of bytes actually copied, which will be less than or equal to
84e71b7053SJung-uk KimB<outlen>. If B<outlen> is 0 then these functions return the maximum number
85e71b7053SJung-uk Kimof bytes they would copy -- that is, the length of the underlying field.
86e71b7053SJung-uk Kim
87e71b7053SJung-uk Kim=head1 SEE ALSO
88e71b7053SJung-uk Kim
89e71b7053SJung-uk KimL<ssl(7)>,
90e71b7053SJung-uk KimL<RAND_bytes(3)>,
91e71b7053SJung-uk KimL<SSL_export_keying_material(3)>,
92e71b7053SJung-uk KimL<SSL_CTX_set_psk_use_session_callback(3)>
93e71b7053SJung-uk Kim
94e71b7053SJung-uk Kim
95e71b7053SJung-uk Kim=head1 COPYRIGHT
96e71b7053SJung-uk Kim
97e71b7053SJung-uk KimCopyright 2015-2017 The OpenSSL Project Authors. All Rights Reserved.
98e71b7053SJung-uk Kim
99*b077aed3SPierre ProncheryLicensed under the Apache License 2.0 (the "License").  You may not use
100e71b7053SJung-uk Kimthis file except in compliance with the License.  You can obtain a copy
101e71b7053SJung-uk Kimin the file LICENSE in the source distribution or at
102e71b7053SJung-uk KimL<https://www.openssl.org/source/license.html>.
103e71b7053SJung-uk Kim
104e71b7053SJung-uk Kim=cut
105