diff --git a/include/openssl/ssl.h b/include/openssl/ssl.h index e4aa7431411f203559217a2e22dff17bdd4dfd43..bf01f60cd3ccb02ba6bd995e59d7e0332ff1d3e6 100644 --- a/include/openssl/ssl.h +++ b/include/openssl/ssl.h @@ -1861,6 +1861,8 @@ __owur size_t SSL_get_server_random(const SSL *ssl, unsigned char *out, size_t outlen); __owur size_t SSL_SESSION_get_master_key(const SSL_SESSION *ssl, unsigned char *out, size_t outlen); +__owur int SSL_SESSION_set1_master_key(SSL_SESSION *sess, unsigned char *in, + size_t len); #define SSL_get_ex_new_index(l, p, newf, dupf, freef) \ CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_SSL, l, p, newf, dupf, freef) diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index bcb012f1072e54dc0d6fed78aa5b0720c6a3ff5a..db14e223504a749895d2019a23bea843df647507 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -3725,6 +3725,19 @@ size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, return outlen; } +int SSL_SESSION_set1_master_key(SSL_SESSION *sess, unsigned char *in, + size_t len) +{ + if (len > sizeof(sess->master_key)) + return 0; + + memcpy(sess->master_key, in, len); + sess->master_key_length = len; + + return 1; +} + + int SSL_set_ex_data(SSL *s, int idx, void *arg) { return (CRYPTO_set_ex_data(&s->ex_data, idx, arg)); diff --git a/util/libssl.num b/util/libssl.num index 959e134ea0938e543e7552d469f6da887d10d44c..25e0750e1a2521bb55dce24632bc91be2227a59d 100644 --- a/util/libssl.num +++ b/util/libssl.num @@ -456,3 +456,4 @@ SSL_set_psk_use_session_callback 456 1_1_1 EXIST::FUNCTION: SSL_CTX_set_psk_use_session_callback 457 1_1_1 EXIST::FUNCTION: SSL_CTX_set_psk_find_session_callback 458 1_1_1 EXIST::FUNCTION: SSL_CIPHER_get_handshake_digest 459 1_1_1 EXIST::FUNCTION: +SSL_SESSION_set1_master_key 460 1_1_1 EXIST::FUNCTION: