diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libssl/d1_both.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index 64b9818f52..f554834765 100644 --- a/src/lib/libssl/d1_both.c +++ b/src/lib/libssl/d1_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_both.c,v 1.61 2020/10/11 03:47:59 jsing Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.62 2020/10/15 18:00:31 jsing 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. |
@@ -1055,18 +1055,18 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
1055 | frag->msg_header.frag_len); | 1055 | frag->msg_header.frag_len); |
1056 | 1056 | ||
1057 | /* save current state */ | 1057 | /* save current state */ |
1058 | saved_state.enc_write_ctx = s->internal->enc_write_ctx; | ||
1059 | saved_state.write_hash = s->internal->write_hash; | ||
1060 | saved_state.session = s->session; | 1058 | saved_state.session = s->session; |
1061 | saved_state.epoch = D1I(s)->w_epoch; | 1059 | saved_state.epoch = D1I(s)->w_epoch; |
1062 | 1060 | ||
1063 | D1I(s)->retransmitting = 1; | 1061 | D1I(s)->retransmitting = 1; |
1064 | 1062 | ||
1065 | /* restore state in which the message was originally sent */ | 1063 | /* restore state in which the message was originally sent */ |
1066 | s->internal->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx; | ||
1067 | s->internal->write_hash = frag->msg_header.saved_retransmit_state.write_hash; | ||
1068 | s->session = frag->msg_header.saved_retransmit_state.session; | 1064 | s->session = frag->msg_header.saved_retransmit_state.session; |
1069 | D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch; | 1065 | D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch; |
1066 | if (!tls12_record_layer_set_write_cipher_hash(s->internal->rl, | ||
1067 | frag->msg_header.saved_retransmit_state.enc_write_ctx, | ||
1068 | frag->msg_header.saved_retransmit_state.write_hash, 0)) | ||
1069 | return 0; | ||
1070 | 1070 | ||
1071 | if (frag->msg_header.saved_retransmit_state.epoch == | 1071 | if (frag->msg_header.saved_retransmit_state.epoch == |
1072 | saved_state.epoch - 1) { | 1072 | saved_state.epoch - 1) { |
@@ -1080,10 +1080,11 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
1080 | SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE); | 1080 | SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE); |
1081 | 1081 | ||
1082 | /* restore current state */ | 1082 | /* restore current state */ |
1083 | s->internal->enc_write_ctx = saved_state.enc_write_ctx; | ||
1084 | s->internal->write_hash = saved_state.write_hash; | ||
1085 | s->session = saved_state.session; | 1083 | s->session = saved_state.session; |
1086 | D1I(s)->w_epoch = saved_state.epoch; | 1084 | D1I(s)->w_epoch = saved_state.epoch; |
1085 | if (!tls12_record_layer_set_write_cipher_hash(s->internal->rl, | ||
1086 | s->internal->enc_write_ctx, s->internal->write_hash, 0)) | ||
1087 | return 0; | ||
1087 | 1088 | ||
1088 | if (frag->msg_header.saved_retransmit_state.epoch == | 1089 | if (frag->msg_header.saved_retransmit_state.epoch == |
1089 | saved_state.epoch - 1) { | 1090 | saved_state.epoch - 1) { |