summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2016-12-07 13:40:17 +0000
committerjsing <>2016-12-07 13:40:17 +0000
commit56e95909d58e61a460296a319d62a0a4333ec6c1 (patch)
tree0c579fc46a140feba99f1eced8bdadb68c2ac81a /src
parent44e1e78161e8bc96a33689084d1e4b3f0f5956a4 (diff)
downloadopenbsd-56e95909d58e61a460296a319d62a0a4333ec6c1.tar.gz
openbsd-56e95909d58e61a460296a319d62a0a4333ec6c1.tar.bz2
openbsd-56e95909d58e61a460296a319d62a0a4333ec6c1.zip
Convert ssl3_send_client_kex_dhe() to CBB.
ok doug@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libssl/s3_clnt.c37
1 files changed, 23 insertions, 14 deletions
diff --git a/src/lib/libssl/s3_clnt.c b/src/lib/libssl/s3_clnt.c
index c88835b91e..136bd4c6b4 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.151 2016/12/06 13:42:32 jsing Exp $ */ 1/* $OpenBSD: s3_clnt.c,v 1.152 2016/12/07 13:40:17 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 *
@@ -1938,13 +1938,14 @@ err:
1938} 1938}
1939 1939
1940static int 1940static int
1941ssl3_send_client_kex_dhe(SSL *s, SESS_CERT *sess_cert, unsigned char *p, 1941ssl3_send_client_kex_dhe(SSL *s, SESS_CERT *sess_cert, CBB *cbb)
1942 int *outlen)
1943{ 1942{
1944 DH *dh_srvr = NULL, *dh_clnt = NULL; 1943 DH *dh_srvr = NULL, *dh_clnt = NULL;
1945 unsigned char *key = NULL; 1944 unsigned char *key = NULL;
1946 int key_size, n; 1945 int key_size, key_len;
1946 unsigned char *data;
1947 int ret = -1; 1947 int ret = -1;
1948 CBB dh_Yc;
1948 1949
1949 /* Ensure that we have an ephemeral key for DHE. */ 1950 /* Ensure that we have an ephemeral key for DHE. */
1950 if (sess_cert->peer_dh_tmp == NULL) { 1951 if (sess_cert->peer_dh_tmp == NULL) {
@@ -1970,8 +1971,8 @@ ssl3_send_client_kex_dhe(SSL *s, SESS_CERT *sess_cert, unsigned char *p,
1970 ERR_R_MALLOC_FAILURE); 1971 ERR_R_MALLOC_FAILURE);
1971 goto err; 1972 goto err;
1972 } 1973 }
1973 n = DH_compute_key(key, dh_srvr->pub_key, dh_clnt); 1974 key_len = DH_compute_key(key, dh_srvr->pub_key, dh_clnt);
1974 if (n <= 0) { 1975 if (key_len <= 0) {
1975 SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB); 1976 SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
1976 goto err; 1977 goto err;
1977 } 1978 }
@@ -1979,15 +1980,16 @@ ssl3_send_client_kex_dhe(SSL *s, SESS_CERT *sess_cert, unsigned char *p,
1979 /* Generate master key from the result. */ 1980 /* Generate master key from the result. */
1980 s->session->master_key_length = 1981 s->session->master_key_length =
1981 s->method->ssl3_enc->generate_master_secret(s, 1982 s->method->ssl3_enc->generate_master_secret(s,
1982 s->session->master_key, key, n); 1983 s->session->master_key, key, key_len);
1983 1984
1984 /* Send off the data. */ 1985 if (!CBB_add_u16_length_prefixed(cbb, &dh_Yc))
1985 n = BN_num_bytes(dh_clnt->pub_key); 1986 goto err;
1986 s2n(n, p); 1987 if (!CBB_add_space(&dh_Yc, &data, BN_num_bytes(dh_clnt->pub_key)))
1987 BN_bn2bin(dh_clnt->pub_key, p); 1988 goto err;
1988 n += 2; 1989 BN_bn2bin(dh_clnt->pub_key, data);
1990 if (!CBB_flush(cbb))
1991 goto err;
1989 1992
1990 *outlen = n;
1991 ret = 1; 1993 ret = 1;
1992 1994
1993err: 1995err:
@@ -2264,8 +2266,15 @@ ssl3_send_client_key_exchange(SSL *s)
2264 goto err; 2266 goto err;
2265 n = (int)outlen; 2267 n = (int)outlen;
2266 } else if (alg_k & SSL_kDHE) { 2268 } else if (alg_k & SSL_kDHE) {
2267 if (ssl3_send_client_kex_dhe(s, sess_cert, p, &n) != 1) 2269 if (!CBB_init_fixed(&cbb, p, bufend - p))
2270 goto err;
2271 if (ssl3_send_client_kex_dhe(s, sess_cert, &cbb) != 1)
2272 goto err;
2273 if (!CBB_finish(&cbb, NULL, &outlen))
2274 goto err;
2275 if (outlen > INT_MAX)
2268 goto err; 2276 goto err;
2277 n = (int)outlen;
2269 } else if (alg_k & SSL_kECDHE) { 2278 } else if (alg_k & SSL_kECDHE) {
2270 if (ssl3_send_client_kex_ecdhe(s, sess_cert, p, 2279 if (ssl3_send_client_kex_ecdhe(s, sess_cert, p,
2271 &n) != 1) 2280 &n) != 1)