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