diff options
author | jsing <> | 2016-12-04 14:25:44 +0000 |
---|---|---|
committer | jsing <> | 2016-12-04 14:25:44 +0000 |
commit | 125562152f7bac1aa3f59cb62b9845b28dd7d530 (patch) | |
tree | 18c6c4735c5c0051c1ae3fc6ab69b9a96bc58574 /src | |
parent | e7683d50eff2e1aefa31cab62a549eedbdcef5a1 (diff) | |
download | openbsd-125562152f7bac1aa3f59cb62b9845b28dd7d530.tar.gz openbsd-125562152f7bac1aa3f59cb62b9845b28dd7d530.tar.bz2 openbsd-125562152f7bac1aa3f59cb62b9845b28dd7d530.zip |
Cleanup some of ssl3_send_client_kex_rsa() - tmp_buf is really the
premaster secret, so name it accordingly. Also, remove bogus assignment
of master_key_length - the correct value is assigned when the master_key
is set.
ok beck@ doug@
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/s3_clnt.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c index a70e5492a3..7a327a76a3 100644 --- a/src/lib/libssl/s3_clnt.c +++ b/src/lib/libssl/s3_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_clnt.c,v 1.147 2016/12/03 12:38:10 jsing Exp $ */ | 1 | /* $OpenBSD: s3_clnt.c,v 1.148 2016/12/04 14:25:44 jsing Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -1877,12 +1877,16 @@ static int | |||
1877 | ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, unsigned char *p, | 1877 | ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, unsigned char *p, |
1878 | int *outlen) | 1878 | int *outlen) |
1879 | { | 1879 | { |
1880 | unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH]; | 1880 | unsigned char pms[SSL_MAX_MASTER_KEY_LENGTH]; |
1881 | EVP_PKEY *pkey = NULL; | 1881 | EVP_PKEY *pkey = NULL; |
1882 | unsigned char *q; | 1882 | unsigned char *q; |
1883 | int ret = -1; | 1883 | int ret = -1; |
1884 | int n; | 1884 | int n; |
1885 | 1885 | ||
1886 | /* | ||
1887 | * RSA-Encrypted Premaster Secret Message - RFC 5246 section 7.4.7.1. | ||
1888 | */ | ||
1889 | |||
1886 | pkey = X509_get_pubkey(sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); | 1890 | pkey = X509_get_pubkey(sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].x509); |
1887 | if (pkey == NULL || pkey->type != EVP_PKEY_RSA || | 1891 | if (pkey == NULL || pkey->type != EVP_PKEY_RSA || |
1888 | pkey->pkey.rsa == NULL) { | 1892 | pkey->pkey.rsa == NULL) { |
@@ -1891,16 +1895,14 @@ ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, unsigned char *p, | |||
1891 | goto err; | 1895 | goto err; |
1892 | } | 1896 | } |
1893 | 1897 | ||
1894 | tmp_buf[0] = s->client_version >> 8; | 1898 | pms[0] = s->client_version >> 8; |
1895 | tmp_buf[1] = s->client_version & 0xff; | 1899 | pms[1] = s->client_version & 0xff; |
1896 | arc4random_buf(&tmp_buf[2], sizeof(tmp_buf) - 2); | 1900 | arc4random_buf(&pms[2], sizeof(pms) - 2); |
1897 | |||
1898 | s->session->master_key_length = sizeof(tmp_buf); | ||
1899 | 1901 | ||
1900 | q = p; | 1902 | q = p; |
1901 | p += 2; | 1903 | p += 2; |
1902 | 1904 | ||
1903 | n = RSA_public_encrypt(sizeof(tmp_buf), tmp_buf, p, pkey->pkey.rsa, | 1905 | n = RSA_public_encrypt(sizeof(pms), pms, p, pkey->pkey.rsa, |
1904 | RSA_PKCS1_PADDING); | 1906 | RSA_PKCS1_PADDING); |
1905 | if (n <= 0) { | 1907 | if (n <= 0) { |
1906 | SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, | 1908 | SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, |
@@ -1913,13 +1915,13 @@ ssl3_send_client_kex_rsa(SSL *s, SESS_CERT *sess_cert, unsigned char *p, | |||
1913 | 1915 | ||
1914 | s->session->master_key_length = | 1916 | s->session->master_key_length = |
1915 | s->method->ssl3_enc->generate_master_secret(s, | 1917 | s->method->ssl3_enc->generate_master_secret(s, |
1916 | s->session->master_key, tmp_buf, sizeof(tmp_buf)); | 1918 | s->session->master_key, pms, sizeof(pms)); |
1917 | 1919 | ||
1918 | *outlen = n; | 1920 | *outlen = n; |
1919 | ret = 1; | 1921 | ret = 1; |
1920 | 1922 | ||
1921 | err: | 1923 | err: |
1922 | explicit_bzero(tmp_buf, sizeof(tmp_buf)); | 1924 | explicit_bzero(pms, sizeof(pms)); |
1923 | EVP_PKEY_free(pkey); | 1925 | EVP_PKEY_free(pkey); |
1924 | 1926 | ||
1925 | return (ret); | 1927 | return (ret); |