2020-03-02 16:50:34 +00:00
. \" Automatically generated by Pod::Man 2.25 (Pod::Simple 3.16)
. \"
. \" 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
. .
. \" Set up some character translations and predefined strings. \*(-- will
. \" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
. \" double quote, and \*(R" will give a right double quote. \*(C+ will
. \" give a nicer C++. Capital omega is used to do unbreakable dashes and
. \" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
. \" nothing in troff, for use with C<>.
.tr \(*W -
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{ \
. ds -- \(*W -
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W \h '-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W \h '-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el \{ \
. ds -- \| \(em \|
. ds PI \(*p
. ds L" ``
. ds R" ''
'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 turned on, 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.
.ie \nF \{ \
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
. .
. nr % 0
. rr F
. \}
.el \{ \
. de IX
. .
. \}
. \"
. \" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
. \" Fear. Run. Save yourself. No user-serviceable parts.
. \" fudge factors for nroff and troff
.if n \{ \
. ds #H 0
. ds #V .8m
. ds #F .3m
. ds #[ \f1
. ds #] \fP
. \}
.if t \{ \
. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
. ds #V .6m
. ds #F 0
. ds #[ \&
. ds #] \&
. \}
. \" simple accents for nroff and troff
.if n \{ \
. ds ' \&
. ds ` \&
. ds ^ \&
. ds , \&
. ds ~ ~
. ds /
. \}
.if t \{ \
. ds ' \\ k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
. ds ` \\ k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
. ds ^ \\ k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
. ds , \\ k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
. ds ~ \\ k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
. ds / \\ k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
. \}
. \" troff and (daisy-wheel) nroff accents
.ds : \\ k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h '\*(#H'\(*b\h'-\*(#H'
.ds o \\ k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h '\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \* (#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \* (#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
. \" corrections for vroff
.if v .ds ~ \\ k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\ k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
. \" for low resolution devices (crt and lpr)
.if \n (.H>23 .if \n (.V>19 \
\{ \
. ds : e
. ds 8 ss
. ds o a
. ds d- d\h'-1'\(ga
. ds D- D\h'-1'\(hy
. ds th \o 'bp'
. ds Th \o 'LP'
. ds ae ae
. ds Ae AE
. \}
.rm #[ #] #H #V #F C
. \" ========================================================================
. \"
.IX Title "SSL_GET_CLIENT_RANDOM 3"
2020-03-02 17:19:21 +00:00
.TH SSL_GET_CLIENT_RANDOM 3 "2020-03-02" "1.1.1e-dev" "OpenSSL"
2020-03-02 16:50:34 +00:00
. \" 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"
2020-03-02 17:19:21 +00:00
SSL_get_client_random, SSL_get_server_random, SSL_SESSION_get_master_key, SSL_SESSION_set1_master_key \& \- get internal TLS/SSL random values and get/set master key
2020-03-02 16:50:34 +00:00
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/ssl.h>
\&
\& size_t SSL_get_client_random(const SSL *ssl, unsigned char *out, size_t outlen);
\& size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen);
\& size_t SSL_SESSION_get_master_key(const SSL_SESSION *session,
\& unsigned char *out, size_t outlen);
\& int SSL_SESSION_set1_master_key(SSL_SESSION *sess, const unsigned char *in,
\& size_t len);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
\& \fI SSL_get_client_random()\fR extracts the random value sent from the client
to the server during the initial \s -1SSL/TLS\s 0 handshake. It copies as many
bytes as it can of this value into the buffer provided in \fB out\fR ,
which must have at least \fB outlen\fR bytes available. It returns the
total number of bytes that were actually copied. If \fB outlen\fR is
zero, \fI SSL_get_client_random()\fR copies nothing, and returns the
total size of the client_random value.
.PP
\& \fI SSL_get_server_random()\fR behaves the same, but extracts the random value
sent from the server to the client during the initial \s -1SSL/TLS\s 0 handshake.
.PP
\& \fI SSL_SESSION_get_master_key()\fR behaves the same, but extracts the master
secret used to guarantee the security of the \s -1SSL/TLS\s 0 session. This one
can be dangerous if misused; see \s -1NOTES\s 0 below.
.PP
\& \fI SSL_SESSION_set1_master_key()\fR sets the master key value associated with the
\& \s -1SSL_SESSION\s 0 \fB sess\fR . For example, this could be used to set up a session based
\& \s -1PSK\s 0 (see \fI SSL_CTX_set_psk_use_session_callback\fR \| (3)). The master key of length
\& \fB len\fR should be provided at \fB in\fR . The supplied master key is copied by the
function, so the caller is responsible for freeing and cleaning any memory
associated with \fB in\fR . The caller must ensure that the length of the key is
suitable for the ciphersuite associated with the \s -1SSL_SESSION\s 0.
.SH "NOTES"
.IX Header "NOTES"
You probably shouldn't use these functions.
.PP
These functions expose internal values from the \s -1TLS\s 0 handshake, for
use in low-level protocols. You probably should not use them, unless
you are implementing something that needs access to the internal protocol
details.
.PP
Despite the names of \fI SSL_get_client_random()\fR and \fI SSL_get_server_random()\fR , they
\& \s -1ARE\s 0 \s -1NOT\s 0 random number generators. Instead, they return the mostly-random values that
were already generated and used in the \s -1TLS\s 0 protocol. Using them
in place of \fI RAND_bytes()\fR would be grossly foolish.
.PP
The security of your \s -1TLS\s 0 session depends on keeping the master key secret:
do not expose it, or any information about it, to anybody.
If you need to calculate another secret value that depends on the master
secret, you should probably use \fI SSL_export_keying_material()\fR instead, and
forget that you ever saw these functions.
.PP
In current versions of the \s -1TLS\s 0 protocols, the length of client_random
(and also server_random) is always \s -1SSL3_RANDOM_SIZE\s 0 bytes. Support for
other outlen arguments to the SSL_get_*\fI _random()\fR functions is provided
in case of the unlikely event that a future version or variant of \s -1TLS\s 0
uses some other length there.
.PP
Finally, though the \* (L"client_random\* (R" and \* (L"server_random\* (R" values are called
\& \* (L"random\* (R", many \s -1TLS\s 0 implementations will generate four bytes of those
values based on their view of the current time.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\& \fI SSL_SESSION_set1_master_key()\fR returns 1 on success or 0 on failure.
.PP
For the other functions, if \fB outlen\fR is greater than 0 then these functions
return the number of bytes actually copied, which will be less than or equal to
\& \fB outlen\fR . If \fB outlen\fR is 0 then these functions return the maximum number
of bytes they would copy \* (-- that is, the length of the underlying field.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\& \fI ssl\fR \| (7),
\& \fI RAND_bytes\fR \| (3),
\& \fI SSL_export_keying_material\fR \| (3),
\& \fI SSL_CTX_set_psk_use_session_callback\fR \| (3)
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright 2015\- 2017 The OpenSSL Project Authors. All Rights Reserved.
.PP
2020-03-02 17:19:21 +00:00
Licensed under the OpenSSL license (the \* (L"License\* (R"). You may not use
2020-03-02 16:50:34 +00:00
this file except in compliance with the License. You can obtain a copy
in the file \s -1LICENSE\s 0 in the source distribution or at
<https://www.openssl.org/source/license.html>.