summaryrefslogtreecommitdiff
path: root/src/lib/libssl/d1_clnt.c
diff options
context:
space:
mode:
authorbeck <>2017-05-07 04:22:24 +0000
committerbeck <>2017-05-07 04:22:24 +0000
commit3b455600d14ddcf2be0dcd2d4765d1b7854cd1c5 (patch)
tree9f980ffff8490ca0af628971a6d8ceb4a23d3b99 /src/lib/libssl/d1_clnt.c
parent2145114fc4f04a6a75134ef92bc551a976292150 (diff)
downloadopenbsd-3b455600d14ddcf2be0dcd2d4765d1b7854cd1c5.tar.gz
openbsd-3b455600d14ddcf2be0dcd2d4765d1b7854cd1c5.tar.bz2
openbsd-3b455600d14ddcf2be0dcd2d4765d1b7854cd1c5.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 'src/lib/libssl/d1_clnt.c')
-rw-r--r--src/lib/libssl/d1_clnt.c72
1 files changed, 36 insertions, 36 deletions
diff --git a/src/lib/libssl/d1_clnt.c b/src/lib/libssl/d1_clnt.c
index 802aa5cde0..3eebf98417 100644
--- a/src/lib/libssl/d1_clnt.c
+++ b/src/lib/libssl/d1_clnt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: d1_clnt.c,v 1.75 2017/05/06 22:24:57 beck Exp $ */ 1/* $OpenBSD: d1_clnt.c,v 1.76 2017/05/07 04:22:24 beck Exp $ */
2/* 2/*
3 * DTLS implementation written by Nagendra Modadugu 3 * DTLS implementation written by Nagendra Modadugu
4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005. 4 * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
@@ -198,12 +198,12 @@ dtls1_connect(SSL *s)
198 198
199 199
200 for (;;) { 200 for (;;) {
201 state = s->internal->state; 201 state = S3I(s)->hs.state;
202 202
203 switch (s->internal->state) { 203 switch (S3I(s)->hs.state) {
204 case SSL_ST_RENEGOTIATE: 204 case SSL_ST_RENEGOTIATE:
205 s->internal->renegotiate = 1; 205 s->internal->renegotiate = 1;
206 s->internal->state = SSL_ST_CONNECT; 206 S3I(s)->hs.state = SSL_ST_CONNECT;
207 s->ctx->internal->stats.sess_connect_renegotiate++; 207 s->ctx->internal->stats.sess_connect_renegotiate++;
208 /* break */ 208 /* break */
209 case SSL_ST_BEFORE: 209 case SSL_ST_BEFORE:
@@ -239,7 +239,7 @@ dtls1_connect(SSL *s)
239 239
240 /* don't push the buffering BIO quite yet */ 240 /* don't push the buffering BIO quite yet */
241 241
242 s->internal->state = SSL3_ST_CW_CLNT_HELLO_A; 242 S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A;
243 s->ctx->internal->stats.sess_connect++; 243 s->ctx->internal->stats.sess_connect++;
244 s->internal->init_num = 0; 244 s->internal->init_num = 0;
245 /* mark client_random uninitialized */ 245 /* mark client_random uninitialized */
@@ -267,10 +267,10 @@ dtls1_connect(SSL *s)
267 goto end; 267 goto end;
268 268
269 if (D1I(s)->send_cookie) { 269 if (D1I(s)->send_cookie) {
270 s->internal->state = SSL3_ST_CW_FLUSH; 270 S3I(s)->hs.state = SSL3_ST_CW_FLUSH;
271 S3I(s)->hs.next_state = SSL3_ST_CR_SRVR_HELLO_A; 271 S3I(s)->hs.next_state = SSL3_ST_CR_SRVR_HELLO_A;
272 } else 272 } else
273 s->internal->state = SSL3_ST_CR_SRVR_HELLO_A; 273 S3I(s)->hs.state = SSL3_ST_CR_SRVR_HELLO_A;
274 274
275 s->internal->init_num = 0; 275 s->internal->init_num = 0;
276 276
@@ -288,9 +288,9 @@ dtls1_connect(SSL *s)
288 else { 288 else {
289 if (s->internal->hit) { 289 if (s->internal->hit) {
290 290
291 s->internal->state = SSL3_ST_CR_FINISHED_A; 291 S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
292 } else 292 } else
293 s->internal->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A; 293 S3I(s)->hs.state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A;
294 } 294 }
295 s->internal->init_num = 0; 295 s->internal->init_num = 0;
296 break; 296 break;
@@ -303,9 +303,9 @@ dtls1_connect(SSL *s)
303 goto end; 303 goto end;
304 dtls1_stop_timer(s); 304 dtls1_stop_timer(s);
305 if ( D1I(s)->send_cookie) /* start again, with a cookie */ 305 if ( D1I(s)->send_cookie) /* start again, with a cookie */
306 s->internal->state = SSL3_ST_CW_CLNT_HELLO_A; 306 S3I(s)->hs.state = SSL3_ST_CW_CLNT_HELLO_A;
307 else 307 else
308 s->internal->state = SSL3_ST_CR_CERT_A; 308 S3I(s)->hs.state = SSL3_ST_CR_CERT_A;
309 s->internal->init_num = 0; 309 s->internal->init_num = 0;
310 break; 310 break;
311 311
@@ -317,9 +317,9 @@ dtls1_connect(SSL *s)
317 if (ret == 2) { 317 if (ret == 2) {
318 s->internal->hit = 1; 318 s->internal->hit = 1;
319 if (s->internal->tlsext_ticket_expected) 319 if (s->internal->tlsext_ticket_expected)
320 s->internal->state = SSL3_ST_CR_SESSION_TICKET_A; 320 S3I(s)->hs.state = SSL3_ST_CR_SESSION_TICKET_A;
321 else 321 else
322 s->internal->state = SSL3_ST_CR_FINISHED_A; 322 S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
323 s->internal->init_num = 0; 323 s->internal->init_num = 0;
324 break; 324 break;
325 } 325 }
@@ -330,12 +330,12 @@ dtls1_connect(SSL *s)
330 if (ret <= 0) 330 if (ret <= 0)
331 goto end; 331 goto end;
332 if (s->internal->tlsext_status_expected) 332 if (s->internal->tlsext_status_expected)
333 s->internal->state = SSL3_ST_CR_CERT_STATUS_A; 333 S3I(s)->hs.state = SSL3_ST_CR_CERT_STATUS_A;
334 else 334 else
335 s->internal->state = SSL3_ST_CR_KEY_EXCH_A; 335 S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
336 } else { 336 } else {
337 skip = 1; 337 skip = 1;
338 s->internal->state = SSL3_ST_CR_KEY_EXCH_A; 338 S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
339 } 339 }
340 s->internal->init_num = 0; 340 s->internal->init_num = 0;
341 break; 341 break;
@@ -345,7 +345,7 @@ dtls1_connect(SSL *s)
345 ret = ssl3_get_server_key_exchange(s); 345 ret = ssl3_get_server_key_exchange(s);
346 if (ret <= 0) 346 if (ret <= 0)
347 goto end; 347 goto end;
348 s->internal->state = SSL3_ST_CR_CERT_REQ_A; 348 S3I(s)->hs.state = SSL3_ST_CR_CERT_REQ_A;
349 s->internal->init_num = 0; 349 s->internal->init_num = 0;
350 350
351 /* at this point we check that we have the 351 /* at this point we check that we have the
@@ -361,7 +361,7 @@ dtls1_connect(SSL *s)
361 ret = ssl3_get_certificate_request(s); 361 ret = ssl3_get_certificate_request(s);
362 if (ret <= 0) 362 if (ret <= 0)
363 goto end; 363 goto end;
364 s->internal->state = SSL3_ST_CR_SRVR_DONE_A; 364 S3I(s)->hs.state = SSL3_ST_CR_SRVR_DONE_A;
365 s->internal->init_num = 0; 365 s->internal->init_num = 0;
366 break; 366 break;
367 367
@@ -376,7 +376,7 @@ dtls1_connect(SSL *s)
376 else 376 else
377 S3I(s)->hs.next_state = SSL3_ST_CW_KEY_EXCH_A; 377 S3I(s)->hs.next_state = SSL3_ST_CW_KEY_EXCH_A;
378 s->internal->init_num = 0; 378 s->internal->init_num = 0;
379 s->internal->state = S3I(s)->hs.next_state; 379 S3I(s)->hs.state = S3I(s)->hs.next_state;
380 break; 380 break;
381 381
382 case SSL3_ST_CW_CERT_A: 382 case SSL3_ST_CW_CERT_A:
@@ -387,7 +387,7 @@ dtls1_connect(SSL *s)
387 ret = ssl3_send_client_certificate(s); 387 ret = ssl3_send_client_certificate(s);
388 if (ret <= 0) 388 if (ret <= 0)
389 goto end; 389 goto end;
390 s->internal->state = SSL3_ST_CW_KEY_EXCH_A; 390 S3I(s)->hs.state = SSL3_ST_CW_KEY_EXCH_A;
391 s->internal->init_num = 0; 391 s->internal->init_num = 0;
392 break; 392 break;
393 393
@@ -403,9 +403,9 @@ dtls1_connect(SSL *s)
403 /* For TLS, cert_req is set to 2, so a cert chain 403 /* For TLS, cert_req is set to 2, so a cert chain
404 * of nothing is sent, but no verify packet is sent */ 404 * of nothing is sent, but no verify packet is sent */
405 if (S3I(s)->tmp.cert_req == 1) { 405 if (S3I(s)->tmp.cert_req == 1) {
406 s->internal->state = SSL3_ST_CW_CERT_VRFY_A; 406 S3I(s)->hs.state = SSL3_ST_CW_CERT_VRFY_A;
407 } else { 407 } else {
408 s->internal->state = SSL3_ST_CW_CHANGE_A; 408 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
409 S3I(s)->change_cipher_spec = 0; 409 S3I(s)->change_cipher_spec = 0;
410 } 410 }
411 411
@@ -418,7 +418,7 @@ dtls1_connect(SSL *s)
418 ret = ssl3_send_client_verify(s); 418 ret = ssl3_send_client_verify(s);
419 if (ret <= 0) 419 if (ret <= 0)
420 goto end; 420 goto end;
421 s->internal->state = SSL3_ST_CW_CHANGE_A; 421 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
422 s->internal->init_num = 0; 422 s->internal->init_num = 0;
423 S3I(s)->change_cipher_spec = 0; 423 S3I(s)->change_cipher_spec = 0;
424 break; 424 break;
@@ -432,7 +432,7 @@ dtls1_connect(SSL *s)
432 if (ret <= 0) 432 if (ret <= 0)
433 goto end; 433 goto end;
434 434
435 s->internal->state = SSL3_ST_CW_FINISHED_A; 435 S3I(s)->hs.state = SSL3_ST_CW_FINISHED_A;
436 s->internal->init_num = 0; 436 s->internal->init_num = 0;
437 437
438 s->session->cipher = S3I(s)->hs.new_cipher; 438 s->session->cipher = S3I(s)->hs.new_cipher;
@@ -461,14 +461,14 @@ dtls1_connect(SSL *s)
461 TLS_MD_CLIENT_FINISH_CONST_SIZE); 461 TLS_MD_CLIENT_FINISH_CONST_SIZE);
462 if (ret <= 0) 462 if (ret <= 0)
463 goto end; 463 goto end;
464 s->internal->state = SSL3_ST_CW_FLUSH; 464 S3I(s)->hs.state = SSL3_ST_CW_FLUSH;
465 465
466 /* clear flags */ 466 /* clear flags */
467 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER; 467 s->s3->flags&= ~SSL3_FLAGS_POP_BUFFER;
468 if (s->internal->hit) { 468 if (s->internal->hit) {
469 S3I(s)->hs.next_state = SSL_ST_OK; 469 S3I(s)->hs.next_state = SSL_ST_OK;
470 if (s->s3->flags & SSL3_FLAGS_DELAY_CLIENT_FINISHED) { 470 if (s->s3->flags & SSL3_FLAGS_DELAY_CLIENT_FINISHED) {
471 s->internal->state = SSL_ST_OK; 471 S3I(s)->hs.state = SSL_ST_OK;
472 s->s3->flags |= SSL3_FLAGS_POP_BUFFER; 472 s->s3->flags |= SSL3_FLAGS_POP_BUFFER;
473 S3I(s)->delay_buf_pop_ret = 0; 473 S3I(s)->delay_buf_pop_ret = 0;
474 } 474 }
@@ -490,7 +490,7 @@ dtls1_connect(SSL *s)
490 ret = ssl3_get_new_session_ticket(s); 490 ret = ssl3_get_new_session_ticket(s);
491 if (ret <= 0) 491 if (ret <= 0)
492 goto end; 492 goto end;
493 s->internal->state = SSL3_ST_CR_FINISHED_A; 493 S3I(s)->hs.state = SSL3_ST_CR_FINISHED_A;
494 s->internal->init_num = 0; 494 s->internal->init_num = 0;
495 break; 495 break;
496 496
@@ -499,7 +499,7 @@ dtls1_connect(SSL *s)
499 ret = ssl3_get_cert_status(s); 499 ret = ssl3_get_cert_status(s);
500 if (ret <= 0) 500 if (ret <= 0)
501 goto end; 501 goto end;
502 s->internal->state = SSL3_ST_CR_KEY_EXCH_A; 502 S3I(s)->hs.state = SSL3_ST_CR_KEY_EXCH_A;
503 s->internal->init_num = 0; 503 s->internal->init_num = 0;
504 break; 504 break;
505 505
@@ -513,9 +513,9 @@ dtls1_connect(SSL *s)
513 dtls1_stop_timer(s); 513 dtls1_stop_timer(s);
514 514
515 if (s->internal->hit) 515 if (s->internal->hit)
516 s->internal->state = SSL3_ST_CW_CHANGE_A; 516 S3I(s)->hs.state = SSL3_ST_CW_CHANGE_A;
517 else 517 else
518 s->internal->state = SSL_ST_OK; 518 S3I(s)->hs.state = SSL_ST_OK;
519 519
520 520
521 s->internal->init_num = 0; 521 s->internal->init_num = 0;
@@ -527,14 +527,14 @@ dtls1_connect(SSL *s)
527 /* If the write error was fatal, stop trying */ 527 /* If the write error was fatal, stop trying */
528 if (!BIO_should_retry(s->wbio)) { 528 if (!BIO_should_retry(s->wbio)) {
529 s->internal->rwstate = SSL_NOTHING; 529 s->internal->rwstate = SSL_NOTHING;
530 s->internal->state = S3I(s)->hs.next_state; 530 S3I(s)->hs.state = S3I(s)->hs.next_state;
531 } 531 }
532 532
533 ret = -1; 533 ret = -1;
534 goto end; 534 goto end;
535 } 535 }
536 s->internal->rwstate = SSL_NOTHING; 536 s->internal->rwstate = SSL_NOTHING;
537 s->internal->state = S3I(s)->hs.next_state; 537 S3I(s)->hs.state = S3I(s)->hs.next_state;
538 break; 538 break;
539 539
540 case SSL_ST_OK: 540 case SSL_ST_OK:
@@ -583,11 +583,11 @@ dtls1_connect(SSL *s)
583 goto end; 583 goto end;
584 } 584 }
585 585
586 if ((cb != NULL) && (s->internal->state != state)) { 586 if ((cb != NULL) && (S3I(s)->hs.state != state)) {
587 new_state = s->internal->state; 587 new_state = S3I(s)->hs.state;
588 s->internal->state = state; 588 S3I(s)->hs.state = state;
589 cb(s, SSL_CB_CONNECT_LOOP, 1); 589 cb(s, SSL_CB_CONNECT_LOOP, 1);
590 s->internal->state = new_state; 590 S3I(s)->hs.state = new_state;
591 } 591 }
592 } 592 }
593 skip = 0; 593 skip = 0;