diff options
Diffstat (limited to 'src/lib/libssl/d1_both.c')
-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 3d2516ce41..92d86da679 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.60 2020/09/26 14:43:17 jsing Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.60.4.1 2021/02/03 07:06:13 tb 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. |
@@ -1060,18 +1060,18 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
1060 | frag->msg_header.frag_len); | 1060 | frag->msg_header.frag_len); |
1061 | 1061 | ||
1062 | /* save current state */ | 1062 | /* save current state */ |
1063 | saved_state.enc_write_ctx = s->internal->enc_write_ctx; | ||
1064 | saved_state.write_hash = s->internal->write_hash; | ||
1065 | saved_state.session = s->session; | 1063 | saved_state.session = s->session; |
1066 | saved_state.epoch = D1I(s)->w_epoch; | 1064 | saved_state.epoch = D1I(s)->w_epoch; |
1067 | 1065 | ||
1068 | D1I(s)->retransmitting = 1; | 1066 | D1I(s)->retransmitting = 1; |
1069 | 1067 | ||
1070 | /* restore state in which the message was originally sent */ | 1068 | /* restore state in which the message was originally sent */ |
1071 | s->internal->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx; | ||
1072 | s->internal->write_hash = frag->msg_header.saved_retransmit_state.write_hash; | ||
1073 | s->session = frag->msg_header.saved_retransmit_state.session; | 1069 | s->session = frag->msg_header.saved_retransmit_state.session; |
1074 | D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch; | 1070 | D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch; |
1071 | if (!tls12_record_layer_set_write_cipher_hash(s->internal->rl, | ||
1072 | frag->msg_header.saved_retransmit_state.enc_write_ctx, | ||
1073 | frag->msg_header.saved_retransmit_state.write_hash, 0)) | ||
1074 | return 0; | ||
1075 | 1075 | ||
1076 | if (frag->msg_header.saved_retransmit_state.epoch == | 1076 | if (frag->msg_header.saved_retransmit_state.epoch == |
1077 | saved_state.epoch - 1) { | 1077 | saved_state.epoch - 1) { |
@@ -1085,10 +1085,11 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
1085 | SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE); | 1085 | SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE); |
1086 | 1086 | ||
1087 | /* restore current state */ | 1087 | /* restore current state */ |
1088 | s->internal->enc_write_ctx = saved_state.enc_write_ctx; | ||
1089 | s->internal->write_hash = saved_state.write_hash; | ||
1090 | s->session = saved_state.session; | 1088 | s->session = saved_state.session; |
1091 | D1I(s)->w_epoch = saved_state.epoch; | 1089 | D1I(s)->w_epoch = saved_state.epoch; |
1090 | if (!tls12_record_layer_set_write_cipher_hash(s->internal->rl, | ||
1091 | s->internal->enc_write_ctx, s->internal->write_hash, 0)) | ||
1092 | return 0; | ||
1092 | 1093 | ||
1093 | if (frag->msg_header.saved_retransmit_state.epoch == | 1094 | if (frag->msg_header.saved_retransmit_state.epoch == |
1094 | saved_state.epoch - 1) { | 1095 | saved_state.epoch - 1) { |