summaryrefslogtreecommitdiffstats
path: root/lib/libssl/ssl_clnt.c
diff options
context:
space:
mode:
authorbeck <beck@openbsd.org>2017-05-07 04:22:24 +0000
committerbeck <beck@openbsd.org>2017-05-07 04:22:24 +0000
commit440bed4fbf67c71055029b3e3067c272d9453bf5 (patch)
tree52b4b4cebc1418ac46724df5173a011a50033f2a /lib/libssl/ssl_clnt.c
parentLimit -Werror to gcc4 as was done in libcrypto/libssl/libtls to avoid (diff)
downloadwireguard-openbsd-440bed4fbf67c71055029b3e3067c272d9453bf5.tar.xz
wireguard-openbsd-440bed4fbf67c71055029b3e3067c272d9453bf5.zip
Move state from ssl->internal to the handshake structure.
while we are at it, convert SSLerror to use a function internally, so that we may later allocate the handshake structure and check for it ok jsing@
Diffstat (limited to 'lib/libssl/ssl_clnt.c')
-rw-r--r--lib/libssl/ssl_clnt.c106
1 files changed, 53 insertions, 53 deletions
diff --git a/lib/libssl/ssl_clnt.c b/lib/libssl/ssl_clnt.c
index f6ca3e7f3cb..a1745143f01 100644
--- a/lib/libssl/ssl_clnt.c
+++ b/lib/libssl/ssl_clnt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssl_clnt.c,v 1.13 2017/05/06 22:24:57 beck Exp $ */
+/* $OpenBSD: ssl_clnt.c,v 1.14 2017/05/07 04:22:24 beck Exp $ */
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
@@ -193,12 +193,12 @@ ssl3_connect(SSL *s)
SSL_clear(s);
for (;;) {
- state = s->internal->state;
+ state = S3I(s)->hs.state;
- switch (s->internal->state) {
+ switch (S3I(s)->hs.state) {
case SSL_ST_RENEGOTIATE:
s->internal->renegotiate = 1;
- s->internal->state = SSL_ST_CONNECT;
+ S3I(s)->hs.state = SSL_ST_CONNECT;
s->ctx->internal->stats.sess_connect_renegotiate++;
/* break */
case SSL_ST_BEFORE:
@@ -239,7 +239,7 @@ ssl3_connect(SSL *s)
goto end;
}
- s->internal->state = SSL3_ST_CW_CLNT_HELLO_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A;
s->ctx->internal->stats.sess_connect++;
s->internal->init_num = 0;
break;
@@ -251,7 +251,7 @@ ssl3_connect(SSL *s)
ret = ssl3_client_hello(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CR_SRVR_HELLO_A;
+ S3I(s)->hs.state = SSL3_ST_CR_SRVR_HELLO_A;
s->internal->init_num = 0;
/* turn on buffering for the next lot of output */
@@ -267,13 +267,13 @@ ssl3_connect(SSL *s)
goto end;
if (s->internal->hit) {
- s->internal->state = SSL3_ST_CR_FINISHED_A;
+ S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
if (s->internal->tlsext_ticket_expected) {
/* receive renewed session ticket */
- s->internal->state = SSL3_ST_CR_SESSION_TICKET_A;
+ S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A;
}
} else
- s->internal->state = SSL3_ST_CR_CERT_A;
+ S3I(s)->hs.state = SSL3_ST_CR_CERT_A;
s->internal->init_num = 0;
break;
@@ -285,9 +285,9 @@ ssl3_connect(SSL *s)
if (ret == 2) {
s->internal->hit = 1;
if (s->internal->tlsext_ticket_expected)
- s->internal->state = SSL3_ST_CR_SESSION_TICKET_A;
+ S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A;
else
- s->internal->state = SSL3_ST_CR_FINISHED_A;
+ S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
s->internal->init_num = 0;
break;
}
@@ -298,12 +298,12 @@ ssl3_connect(SSL *s)
if (ret <= 0)
goto end;
if (s->internal->tlsext_status_expected)
- s->internal->state = SSL3_ST_CR_CERT_STATUS_A;
+ S3I(s)->hs.state = SSL3_ST_CR_CERT_STATUS_A;
else
- s->internal->state = SSL3_ST_CR_KEY_EXCH_A;
+ S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
} else {
skip = 1;
- s->internal->state = SSL3_ST_CR_KEY_EXCH_A;
+ S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
}
s->internal->init_num = 0;
break;
@@ -313,7 +313,7 @@ ssl3_connect(SSL *s)
ret = ssl3_get_server_key_exchange(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CR_CERT_REQ_A;
+ S3I(s)->hs.state = SSL3_ST_CR_CERT_REQ_A;
s->internal->init_num = 0;
/*
@@ -331,7 +331,7 @@ ssl3_connect(SSL *s)
ret = ssl3_get_certificate_request(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CR_SRVR_DONE_A;
+ S3I(s)->hs.state = SSL3_ST_CR_SRVR_DONE_A;
s->internal->init_num = 0;
break;
@@ -341,9 +341,9 @@ ssl3_connect(SSL *s)
if (ret <= 0)
goto end;
if (S3I(s)->tmp.cert_req)
- s->internal->state = SSL3_ST_CW_CERT_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_A;
else
- s->internal->state = SSL3_ST_CW_KEY_EXCH_A;
+ S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A;
s->internal->init_num = 0;
break;
@@ -355,7 +355,7 @@ ssl3_connect(SSL *s)
ret = ssl3_send_client_certificate(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CW_KEY_EXCH_A;
+ S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A;
s->internal->init_num = 0;
break;
@@ -381,13 +381,13 @@ ssl3_connect(SSL *s)
* inside the client certificate.
*/
if (S3I(s)->tmp.cert_req == 1) {
- s->internal->state = SSL3_ST_CW_CERT_VRFY_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_A;
} else {
- s->internal->state = SSL3_ST_CW_CHANGE_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
S3I(s)->change_cipher_spec = 0;
}
if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
- s->internal->state = SSL3_ST_CW_CHANGE_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
S3I(s)->change_cipher_spec = 0;
}
@@ -399,7 +399,7 @@ ssl3_connect(SSL *s)
ret = ssl3_send_client_verify(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CW_CHANGE_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
s->internal->init_num = 0;
S3I(s)->change_cipher_spec = 0;
break;
@@ -412,9 +412,9 @@ ssl3_connect(SSL *s)
goto end;
if (S3I(s)->next_proto_neg_seen)
- s->internal->state = SSL3_ST_CW_NEXT_PROTO_A;
+ S3I(s)->hs.state = SSL3_ST_CW_NEXT_PROTO_A;
else
- s->internal->state = SSL3_ST_CW_FINISHED_A;
+ S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A;
s->internal->init_num = 0;
s->session->cipher = S3I(s)->hs.new_cipher;
@@ -436,7 +436,7 @@ ssl3_connect(SSL *s)
ret = ssl3_send_next_proto(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CW_FINISHED_A;
+ S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A;
break;
case SSL3_ST_CW_FINISHED_A:
@@ -448,7 +448,7 @@ ssl3_connect(SSL *s)
if (ret <= 0)
goto end;
s->s3->flags |= SSL3_FLAGS_CCS_OK;
- s->internal->state = SSL3_ST_CW_FLUSH;
+ S3I(s)->hs.state = SSL3_ST_CW_FLUSH;
/* clear flags */
s->s3->flags &= ~SSL3_FLAGS_POP_BUFFER;
@@ -456,7 +456,7 @@ ssl3_connect(SSL *s)
S3I(s)->hs.next_state = SSL_ST_OK;
if (s->s3->flags &
SSL3_FLAGS_DELAY_CLIENT_FINISHED) {
- s->internal->state = SSL_ST_OK;
+ S3I(s)->hs.state = SSL_ST_OK;
s->s3->flags|=SSL3_FLAGS_POP_BUFFER;
S3I(s)->delay_buf_pop_ret = 0;
}
@@ -477,7 +477,7 @@ ssl3_connect(SSL *s)
ret = ssl3_get_new_session_ticket(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CR_FINISHED_A;
+ S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
s->internal->init_num = 0;
break;
@@ -486,7 +486,7 @@ ssl3_connect(SSL *s)
ret = ssl3_get_cert_status(s);
if (ret <= 0)
goto end;
- s->internal->state = SSL3_ST_CR_KEY_EXCH_A;
+ S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
s->internal->init_num = 0;
break;
@@ -499,9 +499,9 @@ ssl3_connect(SSL *s)
goto end;
if (s->internal->hit)
- s->internal->state = SSL3_ST_CW_CHANGE_A;
+ S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
else
- s->internal->state = SSL_ST_OK;
+ S3I(s)->hs.state = SSL_ST_OK;
s->internal->init_num = 0;
break;
@@ -512,7 +512,7 @@ ssl3_connect(SSL *s)
goto end;
}
s->internal->rwstate = SSL_NOTHING;
- s->internal->state = S3I(s)->hs.next_state;
+ S3I(s)->hs.state = S3I(s)->hs.next_state;
break;
case SSL_ST_OK:
@@ -563,11 +563,11 @@ ssl3_connect(SSL *s)
goto end;
}
- if ((cb != NULL) && (s->internal->state != state)) {
- new_state = s->internal->state;
- s->internal->state = state;
+ if ((cb != NULL) && (S3I(s)->hs.state != state)) {
+ new_state = S3I(s)->hs.state;
+ S3I(s)->hs.state = state;
cb(s, SSL_CB_CONNECT_LOOP, 1);
- s->internal->state = new_state;
+ S3I(s)->hs.state = new_state;
}
}
skip = 0;
@@ -591,7 +591,7 @@ ssl3_client_hello(SSL *s)
bufend = (unsigned char *)s->internal->init_buf->data + SSL3_RT_MAX_PLAIN_LENGTH;
- if (s->internal->state == SSL3_ST_CW_CLNT_HELLO_A) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_CLNT_HELLO_A) {
SSL_SESSION *sess = s->session;
if (ssl_supported_version_range(s, NULL, &max_version) != 1) {
@@ -706,7 +706,7 @@ ssl3_client_hello(SSL *s)
ssl3_handshake_msg_finish(s, p - d);
- s->internal->state = SSL3_ST_CW_CLNT_HELLO_B;
+ S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_B;
}
/* SSL3_ST_CW_CLNT_HELLO_B */
@@ -2273,7 +2273,7 @@ ssl3_send_client_key_exchange(SSL *s)
memset(&cbb, 0, sizeof(cbb));
- if (s->internal->state == SSL3_ST_CW_KEY_EXCH_A) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_KEY_EXCH_A) {
alg_k = S3I(s)->hs.new_cipher->algorithm_mkey;
if ((sess_cert = SSI(s)->sess_cert) == NULL) {
@@ -2309,7 +2309,7 @@ ssl3_send_client_key_exchange(SSL *s)
if (!ssl3_handshake_msg_finish_cbb(s, &cbb))
goto err;
- s->internal->state = SSL3_ST_CW_KEY_EXCH_B;
+ S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_B;
}
/* SSL3_ST_CW_KEY_EXCH_B */
@@ -2335,7 +2335,7 @@ ssl3_send_client_verify(SSL *s)
EVP_MD_CTX_init(&mctx);
- if (s->internal->state == SSL3_ST_CW_CERT_VRFY_A) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_CERT_VRFY_A) {
p = ssl3_handshake_msg_start(s, SSL3_MT_CERTIFICATE_VERIFY);
/*
@@ -2459,7 +2459,7 @@ ssl3_send_client_verify(SSL *s)
goto err;
}
- s->internal->state = SSL3_ST_CW_CERT_VRFY_B;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_B;
ssl3_handshake_msg_finish(s, n);
}
@@ -2485,16 +2485,16 @@ ssl3_send_client_certificate(SSL *s)
memset(&cbb, 0, sizeof(cbb));
- if (s->internal->state == SSL3_ST_CW_CERT_A) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_CERT_A) {
if ((s->cert == NULL) || (s->cert->key->x509 == NULL) ||
(s->cert->key->privatekey == NULL))
- s->internal->state = SSL3_ST_CW_CERT_B;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_B;
else
- s->internal->state = SSL3_ST_CW_CERT_C;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_C;
}
/* We need to get a client cert */
- if (s->internal->state == SSL3_ST_CW_CERT_B) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_CERT_B) {
/*
* If we get an error, we need to
* ssl->rwstate=SSL_X509_LOOKUP; return(-1);
@@ -2507,7 +2507,7 @@ ssl3_send_client_certificate(SSL *s)
}
s->internal->rwstate = SSL_NOTHING;
if ((i == 1) && (pkey != NULL) && (x509 != NULL)) {
- s->internal->state = SSL3_ST_CW_CERT_B;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_B;
if (!SSL_use_certificate(s, x509) ||
!SSL_use_PrivateKey(s, pkey))
i = 0;
@@ -2522,10 +2522,10 @@ ssl3_send_client_certificate(SSL *s)
S3I(s)->tmp.cert_req = 2;
/* Ok, we have a cert */
- s->internal->state = SSL3_ST_CW_CERT_C;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_C;
}
- if (s->internal->state == SSL3_ST_CW_CERT_C) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_CERT_C) {
if (!ssl3_handshake_msg_start_cbb(s, &cbb, &client_cert,
SSL3_MT_CERTIFICATE))
goto err;
@@ -2535,7 +2535,7 @@ ssl3_send_client_certificate(SSL *s)
if (!ssl3_handshake_msg_finish_cbb(s, &cbb))
goto err;
- s->internal->state = SSL3_ST_CW_CERT_D;
+ S3I(s)->hs.state = SSL3_ST_CW_CERT_D;
}
/* SSL3_ST_CW_CERT_D */
@@ -2625,7 +2625,7 @@ ssl3_send_next_proto(SSL *s)
memset(&cbb, 0, sizeof(cbb));
- if (s->internal->state == SSL3_ST_CW_NEXT_PROTO_A) {
+ if (S3I(s)->hs.state == SSL3_ST_CW_NEXT_PROTO_A) {
pad_len = 32 - ((s->internal->next_proto_negotiated_len + 2) % 32);
if (!ssl3_handshake_msg_start_cbb(s, &cbb, &nextproto,
@@ -2644,7 +2644,7 @@ ssl3_send_next_proto(SSL *s)
if (!ssl3_handshake_msg_finish_cbb(s, &cbb))
goto err;
- s->internal->state = SSL3_ST_CW_NEXT_PROTO_B;
+ S3I(s)->hs.state = SSL3_ST_CW_NEXT_PROTO_B;
}
return (ssl3_handshake_write(s));