X-Git-Url: https://git.openssl.org/?a=blobdiff_plain;f=ssl%2Fd1_clnt.c;h=566c1545e7e60a24f4a1bd73c0c48f9b2d26fca0;hb=fbfcb2243941bc84b7585711feb906610f9111c4;hp=fde0defef967c6fb462cfdcf814a0b112fa0dd78;hpb=57787ac81444938a876f185cdd73875c8f53e208;p=openssl.git diff --git a/ssl/d1_clnt.c b/ssl/d1_clnt.c index fde0defef9..566c1545e7 100644 --- a/ssl/d1_clnt.c +++ b/ssl/d1_clnt.c @@ -271,7 +271,6 @@ int dtls1_connect(SSL *s) memset(s->s3->client_random, 0, sizeof(s->s3->client_random)); s->d1->send_cookie = 0; s->hit = 0; - s->d1->change_cipher_spec_ok = 0; /* * Should have been reset by ssl3_get_finished, too. */ @@ -376,7 +375,7 @@ int dtls1_connect(SSL *s) sizeof(sctpauthkey), sctpauthkey); #endif - s->state = SSL3_ST_CR_FINISHED_A; + s->state = SSL3_ST_CR_CHANGE_A; } else s->state = DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A; } @@ -628,7 +627,7 @@ int dtls1_connect(SSL *s) if (s->tlsext_ticket_expected) s->s3->tmp.next_state = SSL3_ST_CR_SESSION_TICKET_A; else - s->s3->tmp.next_state = SSL3_ST_CR_FINISHED_A; + s->s3->tmp.next_state = SSL3_ST_CR_CHANGE_A; } s->init_num = 0; break; @@ -638,7 +637,7 @@ int dtls1_connect(SSL *s) ret = ssl3_get_new_session_ticket(s); if (ret <= 0) goto end; - s->state = SSL3_ST_CR_FINISHED_A; + s->state = SSL3_ST_CR_CHANGE_A; s->init_num = 0; break; @@ -651,9 +650,19 @@ int dtls1_connect(SSL *s) s->init_num = 0; break; + case SSL3_ST_CR_CHANGE_A: + case SSL3_ST_CR_CHANGE_B: + ret = ssl3_get_change_cipher_spec(s, SSL3_ST_CR_CHANGE_A, + SSL3_ST_CR_CHANGE_B); + if (ret <= 0) + goto end; + + s->state = SSL3_ST_CR_FINISHED_A; + s->init_num = 0; + break; + case SSL3_ST_CR_FINISHED_A: case SSL3_ST_CR_FINISHED_B: - s->d1->change_cipher_spec_ok = 1; ret = ssl3_get_finished(s, SSL3_ST_CR_FINISHED_A, SSL3_ST_CR_FINISHED_B); if (ret <= 0)