summaryrefslogtreecommitdiff
path: root/src/lib/libssl/d1_both.c
diff options
context:
space:
mode:
authorbeck <>2017-01-23 06:45:30 +0000
committerbeck <>2017-01-23 06:45:30 +0000
commitfedd988b9f44e5e0ccf1a340f14354f32800d524 (patch)
treedfb700c2a3d1498e8069f1fab4c6691ef0f3fef1 /src/lib/libssl/d1_both.c
parent3b1c7c5973d7e6aca42940bd4e07900c35d585f5 (diff)
downloadopenbsd-fedd988b9f44e5e0ccf1a340f14354f32800d524.tar.gz
openbsd-fedd988b9f44e5e0ccf1a340f14354f32800d524.tar.bz2
openbsd-fedd988b9f44e5e0ccf1a340f14354f32800d524.zip
Move a large part of ssl_st into internal, so we can see what squeals.
ok jsing@
Diffstat (limited to 'src/lib/libssl/d1_both.c')
-rw-r--r--src/lib/libssl/d1_both.c140
1 files changed, 70 insertions, 70 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c
index 962b73ed6c..f440a8baf2 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.43 2017/01/23 04:55:26 beck Exp $ */ 1/* $OpenBSD: d1_both.c,v 1.44 2017/01/23 06:45:30 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.
@@ -223,7 +223,7 @@ dtls1_hm_fragment_free(hm_fragment *frag)
223 free(frag); 223 free(frag);
224} 224}
225 225
226/* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ 226/* send s->internal->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */
227int 227int
228dtls1_do_write(SSL *s, int type) 228dtls1_do_write(SSL *s, int type)
229{ 229{
@@ -253,23 +253,23 @@ dtls1_do_write(SSL *s, int type)
253 OPENSSL_assert(D1I(s)->mtu >= dtls1_min_mtu()); 253 OPENSSL_assert(D1I(s)->mtu >= dtls1_min_mtu());
254 /* should have something reasonable now */ 254 /* should have something reasonable now */
255 255
256 if (s->init_off == 0 && type == SSL3_RT_HANDSHAKE) 256 if (s->internal->init_off == 0 && type == SSL3_RT_HANDSHAKE)
257 OPENSSL_assert(s->init_num == 257 OPENSSL_assert(s->internal->init_num ==
258 (int)D1I(s)->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH); 258 (int)D1I(s)->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH);
259 259
260 if (s->write_hash) 260 if (s->internal->write_hash)
261 mac_size = EVP_MD_CTX_size(s->write_hash); 261 mac_size = EVP_MD_CTX_size(s->internal->write_hash);
262 else 262 else
263 mac_size = 0; 263 mac_size = 0;
264 264
265 if (s->enc_write_ctx && 265 if (s->internal->enc_write_ctx &&
266 (EVP_CIPHER_mode( s->enc_write_ctx->cipher) & EVP_CIPH_CBC_MODE)) 266 (EVP_CIPHER_mode( s->internal->enc_write_ctx->cipher) & EVP_CIPH_CBC_MODE))
267 blocksize = 2 * EVP_CIPHER_block_size(s->enc_write_ctx->cipher); 267 blocksize = 2 * EVP_CIPHER_block_size(s->internal->enc_write_ctx->cipher);
268 else 268 else
269 blocksize = 0; 269 blocksize = 0;
270 270
271 frag_off = 0; 271 frag_off = 0;
272 while (s->init_num) { 272 while (s->internal->init_num) {
273 curr_mtu = D1I(s)->mtu - BIO_wpending(SSL_get_wbio(s)) - 273 curr_mtu = D1I(s)->mtu - BIO_wpending(SSL_get_wbio(s)) -
274 DTLS1_RT_HEADER_LENGTH - mac_size - blocksize; 274 DTLS1_RT_HEADER_LENGTH - mac_size - blocksize;
275 275
@@ -282,36 +282,36 @@ dtls1_do_write(SSL *s, int type)
282 mac_size - blocksize; 282 mac_size - blocksize;
283 } 283 }
284 284
285 if (s->init_num > curr_mtu) 285 if (s->internal->init_num > curr_mtu)
286 len = curr_mtu; 286 len = curr_mtu;
287 else 287 else
288 len = s->init_num; 288 len = s->internal->init_num;
289 289
290 290
291 /* XDTLS: this function is too long. split out the CCS part */ 291 /* XDTLS: this function is too long. split out the CCS part */
292 if (type == SSL3_RT_HANDSHAKE) { 292 if (type == SSL3_RT_HANDSHAKE) {
293 if (s->init_off != 0) { 293 if (s->internal->init_off != 0) {
294 OPENSSL_assert(s->init_off > DTLS1_HM_HEADER_LENGTH); 294 OPENSSL_assert(s->internal->init_off > DTLS1_HM_HEADER_LENGTH);
295 s->init_off -= DTLS1_HM_HEADER_LENGTH; 295 s->internal->init_off -= DTLS1_HM_HEADER_LENGTH;
296 s->init_num += DTLS1_HM_HEADER_LENGTH; 296 s->internal->init_num += DTLS1_HM_HEADER_LENGTH;
297 297
298 if (s->init_num > curr_mtu) 298 if (s->internal->init_num > curr_mtu)
299 len = curr_mtu; 299 len = curr_mtu;
300 else 300 else
301 len = s->init_num; 301 len = s->internal->init_num;
302 } 302 }
303 303
304 dtls1_fix_message_header(s, frag_off, 304 dtls1_fix_message_header(s, frag_off,
305 len - DTLS1_HM_HEADER_LENGTH); 305 len - DTLS1_HM_HEADER_LENGTH);
306 306
307 dtls1_write_message_header(s, 307 dtls1_write_message_header(s,
308 (unsigned char *)&s->init_buf->data[s->init_off]); 308 (unsigned char *)&s->internal->init_buf->data[s->internal->init_off]);
309 309
310 OPENSSL_assert(len >= DTLS1_HM_HEADER_LENGTH); 310 OPENSSL_assert(len >= DTLS1_HM_HEADER_LENGTH);
311 } 311 }
312 312
313 ret = dtls1_write_bytes(s, type, 313 ret = dtls1_write_bytes(s, type,
314 &s->init_buf->data[s->init_off], len); 314 &s->internal->init_buf->data[s->internal->init_off], len);
315 if (ret < 0) { 315 if (ret < 0) {
316 /* 316 /*
317 * Might need to update MTU here, but we don't know 317 * Might need to update MTU here, but we don't know
@@ -342,7 +342,7 @@ dtls1_do_write(SSL *s, int type)
342 * but in that case we'll ignore the result 342 * but in that case we'll ignore the result
343 * anyway 343 * anyway
344 */ 344 */
345 unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; 345 unsigned char *p = (unsigned char *)&s->internal->init_buf->data[s->internal->init_off];
346 const struct hm_header_st *msg_hdr = &D1I(s)->w_msg_hdr; 346 const struct hm_header_st *msg_hdr = &D1I(s)->w_msg_hdr;
347 int xlen; 347 int xlen;
348 348
@@ -366,21 +366,21 @@ dtls1_do_write(SSL *s, int type)
366 tls1_finish_mac(s, p, xlen); 366 tls1_finish_mac(s, p, xlen);
367 } 367 }
368 368
369 if (ret == s->init_num) { 369 if (ret == s->internal->init_num) {
370 if (s->internal->msg_callback) 370 if (s->internal->msg_callback)
371 s->internal->msg_callback(1, s->version, type, 371 s->internal->msg_callback(1, s->version, type,
372 s->init_buf->data, 372 s->internal->init_buf->data,
373 (size_t)(s->init_off + s->init_num), 373 (size_t)(s->internal->init_off + s->internal->init_num),
374 s, s->internal->msg_callback_arg); 374 s, s->internal->msg_callback_arg);
375 375
376 s->init_off = 0; 376 s->internal->init_off = 0;
377 /* done writing this message */ 377 /* done writing this message */
378 s->init_num = 0; 378 s->internal->init_num = 0;
379 379
380 return (1); 380 return (1);
381 } 381 }
382 s->init_off += ret; 382 s->internal->init_off += ret;
383 s->init_num -= ret; 383 s->internal->init_num -= ret;
384 frag_off += (ret -= DTLS1_HM_HEADER_LENGTH); 384 frag_off += (ret -= DTLS1_HM_HEADER_LENGTH);
385 } 385 }
386 } 386 }
@@ -415,9 +415,9 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
415 goto f_err; 415 goto f_err;
416 } 416 }
417 *ok = 1; 417 *ok = 1;
418 s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; 418 s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH;
419 s->init_num = (int)S3I(s)->tmp.message_size; 419 s->internal->init_num = (int)S3I(s)->tmp.message_size;
420 return s->init_num; 420 return s->internal->init_num;
421 } 421 }
422 422
423 msg_hdr = &D1I(s)->r_msg_hdr; 423 msg_hdr = &D1I(s)->r_msg_hdr;
@@ -431,7 +431,7 @@ again:
431 else if (i <= 0 && !*ok) 431 else if (i <= 0 && !*ok)
432 return i; 432 return i;
433 433
434 p = (unsigned char *)s->init_buf->data; 434 p = (unsigned char *)s->internal->init_buf->data;
435 msg_len = msg_hdr->msg_len; 435 msg_len = msg_hdr->msg_len;
436 436
437 /* reconstruct message header */ 437 /* reconstruct message header */
@@ -455,8 +455,8 @@ again:
455 if (!D1I(s)->listen) 455 if (!D1I(s)->listen)
456 D1I(s)->handshake_read_seq++; 456 D1I(s)->handshake_read_seq++;
457 457
458 s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; 458 s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH;
459 return s->init_num; 459 return s->internal->init_num;
460 460
461f_err: 461f_err:
462 ssl3_send_alert(s, SSL3_AL_FATAL, al); 462 ssl3_send_alert(s, SSL3_AL_FATAL, al);
@@ -493,7 +493,7 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max)
493 * msg_len is limited to 2^24, but is effectively checked 493 * msg_len is limited to 2^24, but is effectively checked
494 * against max above 494 * against max above
495 */ 495 */
496 if (!BUF_MEM_grow_clean(s->init_buf, 496 if (!BUF_MEM_grow_clean(s->internal->init_buf,
497 msg_len + DTLS1_HM_HEADER_LENGTH)) { 497 msg_len + DTLS1_HM_HEADER_LENGTH)) {
498 SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, ERR_R_BUF_LIB); 498 SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, ERR_R_BUF_LIB);
499 return SSL_AD_INTERNAL_ERROR; 499 return SSL_AD_INTERNAL_ERROR;
@@ -523,8 +523,8 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok)
523 /* 523 /*
524 * (0) check whether the desired fragment is available 524 * (0) check whether the desired fragment is available
525 * if so: 525 * if so:
526 * (1) copy over the fragment to s->init_buf->data[] 526 * (1) copy over the fragment to s->internal->init_buf->data[]
527 * (2) update s->init_num 527 * (2) update s->internal->init_num
528 */ 528 */
529 pitem *item; 529 pitem *item;
530 hm_fragment *frag; 530 hm_fragment *frag;
@@ -549,7 +549,7 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok)
549 549
550 if (al == 0) /* no alert */ 550 if (al == 0) /* no alert */
551 { 551 {
552 unsigned char *p = (unsigned char *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH; 552 unsigned char *p = (unsigned char *)s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH;
553 memcpy(&p[frag->msg_header.frag_off], 553 memcpy(&p[frag->msg_header.frag_off],
554 frag->fragment, frag->msg_header.frag_len); 554 frag->fragment, frag->msg_header.frag_len);
555 } 555 }
@@ -563,7 +563,7 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok)
563 } 563 }
564 564
565 ssl3_send_alert(s, SSL3_AL_FATAL, al); 565 ssl3_send_alert(s, SSL3_AL_FATAL, al);
566 s->init_num = 0; 566 s->internal->init_num = 0;
567 *ok = 0; 567 *ok = 0;
568 return -1; 568 return -1;
569 } else 569 } else
@@ -581,8 +581,8 @@ dtls1_max_handshake_message_len(const SSL *s)
581 unsigned long max_len; 581 unsigned long max_len;
582 582
583 max_len = DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH; 583 max_len = DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH;
584 if (max_len < (unsigned long)s->max_cert_list) 584 if (max_len < (unsigned long)s->internal->max_cert_list)
585 return s->max_cert_list; 585 return s->internal->max_cert_list;
586 return max_len; 586 return max_len;
587} 587}
588 588
@@ -785,7 +785,7 @@ again:
785 /* see if we have the required fragment already */ 785 /* see if we have the required fragment already */
786 if ((frag_len = dtls1_retrieve_buffered_fragment(s, max, ok)) || *ok) { 786 if ((frag_len = dtls1_retrieve_buffered_fragment(s, max, ok)) || *ok) {
787 if (*ok) 787 if (*ok)
788 s->init_num = frag_len; 788 s->internal->init_num = frag_len;
789 return frag_len; 789 return frag_len;
790 } 790 }
791 791
@@ -794,7 +794,7 @@ again:
794 DTLS1_HM_HEADER_LENGTH, 0); 794 DTLS1_HM_HEADER_LENGTH, 0);
795 if (i <= 0) /* nbio, or an error */ 795 if (i <= 0) /* nbio, or an error */
796 { 796 {
797 s->rwstate = SSL_READING; 797 s->internal->rwstate = SSL_READING;
798 *ok = 0; 798 *ok = 0;
799 return i; 799 return i;
800 } 800 }
@@ -840,7 +840,7 @@ again:
840 DTLS1_HM_HEADER_LENGTH, s, 840 DTLS1_HM_HEADER_LENGTH, s,
841 s->internal->msg_callback_arg); 841 s->internal->msg_callback_arg);
842 842
843 s->init_num = 0; 843 s->internal->init_num = 0;
844 goto again; 844 goto again;
845 } 845 }
846 else /* Incorrectly formated Hello request */ 846 else /* Incorrectly formated Hello request */
@@ -859,13 +859,13 @@ again:
859 s->state = stn; 859 s->state = stn;
860 860
861 if (frag_len > 0) { 861 if (frag_len > 0) {
862 unsigned char *p = (unsigned char *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH; 862 unsigned char *p = (unsigned char *)s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH;
863 863
864 i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, 864 i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE,
865 &p[frag_off], frag_len, 0); 865 &p[frag_off], frag_len, 0);
866 /* XDTLS: fix this--message fragments cannot span multiple packets */ 866 /* XDTLS: fix this--message fragments cannot span multiple packets */
867 if (i <= 0) { 867 if (i <= 0) {
868 s->rwstate = SSL_READING; 868 s->internal->rwstate = SSL_READING;
869 *ok = 0; 869 *ok = 0;
870 return i; 870 return i;
871 } 871 }
@@ -886,17 +886,17 @@ again:
886 *ok = 1; 886 *ok = 1;
887 887
888 /* 888 /*
889 * Note that s->init_num is *not* used as current offset in 889 * Note that s->internal->init_num is *not* used as current offset in
890 * s->init_buf->data, but as a counter summing up fragments' 890 * s->internal->init_buf->data, but as a counter summing up fragments'
891 * lengths: as soon as they sum up to handshake packet 891 * lengths: as soon as they sum up to handshake packet
892 * length, we assume we have got all the fragments. 892 * length, we assume we have got all the fragments.
893 */ 893 */
894 s->init_num = frag_len; 894 s->internal->init_num = frag_len;
895 return frag_len; 895 return frag_len;
896 896
897f_err: 897f_err:
898 ssl3_send_alert(s, SSL3_AL_FATAL, al); 898 ssl3_send_alert(s, SSL3_AL_FATAL, al);
899 s->init_num = 0; 899 s->internal->init_num = 0;
900 900
901 *ok = 0; 901 *ok = 0;
902 return (-1); 902 return (-1);
@@ -916,12 +916,12 @@ dtls1_send_change_cipher_spec(SSL *s, int a, int b)
916 unsigned char *p; 916 unsigned char *p;
917 917
918 if (s->state == a) { 918 if (s->state == a) {
919 p = (unsigned char *)s->init_buf->data; 919 p = (unsigned char *)s->internal->init_buf->data;
920 *p++=SSL3_MT_CCS; 920 *p++=SSL3_MT_CCS;
921 D1I(s)->handshake_write_seq = D1I(s)->next_handshake_write_seq; 921 D1I(s)->handshake_write_seq = D1I(s)->next_handshake_write_seq;
922 s->init_num = DTLS1_CCS_HEADER_LENGTH; 922 s->internal->init_num = DTLS1_CCS_HEADER_LENGTH;
923 923
924 s->init_off = 0; 924 s->internal->init_off = 0;
925 925
926 dtls1_set_message_header_int(s, SSL3_MT_CCS, 0, 926 dtls1_set_message_header_int(s, SSL3_MT_CCS, 0,
927 D1I(s)->handshake_write_seq, 0, 0); 927 D1I(s)->handshake_write_seq, 0, 0);
@@ -1022,21 +1022,21 @@ dtls1_buffer_message(SSL *s, int is_ccs)
1022 * This function is called immediately after a message has 1022 * This function is called immediately after a message has
1023 * been serialized 1023 * been serialized
1024 */ 1024 */
1025 OPENSSL_assert(s->init_off == 0); 1025 OPENSSL_assert(s->internal->init_off == 0);
1026 1026
1027 frag = dtls1_hm_fragment_new(s->init_num, 0); 1027 frag = dtls1_hm_fragment_new(s->internal->init_num, 0);
1028 if (frag == NULL) 1028 if (frag == NULL)
1029 return 0; 1029 return 0;
1030 1030
1031 memcpy(frag->fragment, s->init_buf->data, s->init_num); 1031 memcpy(frag->fragment, s->internal->init_buf->data, s->internal->init_num);
1032 1032
1033 if (is_ccs) { 1033 if (is_ccs) {
1034 OPENSSL_assert(D1I(s)->w_msg_hdr.msg_len + 1034 OPENSSL_assert(D1I(s)->w_msg_hdr.msg_len +
1035 ((s->version == DTLS1_VERSION) ? 1035 ((s->version == DTLS1_VERSION) ?
1036 DTLS1_CCS_HEADER_LENGTH : 3) == (unsigned int)s->init_num); 1036 DTLS1_CCS_HEADER_LENGTH : 3) == (unsigned int)s->internal->init_num);
1037 } else { 1037 } else {
1038 OPENSSL_assert(D1I(s)->w_msg_hdr.msg_len + 1038 OPENSSL_assert(D1I(s)->w_msg_hdr.msg_len +
1039 DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num); 1039 DTLS1_HM_HEADER_LENGTH == (unsigned int)s->internal->init_num);
1040 } 1040 }
1041 1041
1042 frag->msg_header.msg_len = D1I(s)->w_msg_hdr.msg_len; 1042 frag->msg_header.msg_len = D1I(s)->w_msg_hdr.msg_len;
@@ -1047,8 +1047,8 @@ dtls1_buffer_message(SSL *s, int is_ccs)
1047 frag->msg_header.is_ccs = is_ccs; 1047 frag->msg_header.is_ccs = is_ccs;
1048 1048
1049 /* save current state*/ 1049 /* save current state*/
1050 frag->msg_header.saved_retransmit_state.enc_write_ctx = s->enc_write_ctx; 1050 frag->msg_header.saved_retransmit_state.enc_write_ctx = s->internal->enc_write_ctx;
1051 frag->msg_header.saved_retransmit_state.write_hash = s->write_hash; 1051 frag->msg_header.saved_retransmit_state.write_hash = s->internal->write_hash;
1052 frag->msg_header.saved_retransmit_state.session = s->session; 1052 frag->msg_header.saved_retransmit_state.session = s->session;
1053 frag->msg_header.saved_retransmit_state.epoch = D1I(s)->w_epoch; 1053 frag->msg_header.saved_retransmit_state.epoch = D1I(s)->w_epoch;
1054 1054
@@ -1082,8 +1082,8 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
1082 unsigned char save_write_sequence[8]; 1082 unsigned char save_write_sequence[8];
1083 1083
1084 /* 1084 /*
1085 OPENSSL_assert(s->init_num == 0); 1085 OPENSSL_assert(s->internal->init_num == 0);
1086 OPENSSL_assert(s->init_off == 0); 1086 OPENSSL_assert(s->internal->init_off == 0);
1087 */ 1087 */
1088 1088
1089 /* XDTLS: the requested message ought to be found, otherwise error */ 1089 /* XDTLS: the requested message ought to be found, otherwise error */
@@ -1108,25 +1108,25 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
1108 else 1108 else
1109 header_length = DTLS1_HM_HEADER_LENGTH; 1109 header_length = DTLS1_HM_HEADER_LENGTH;
1110 1110
1111 memcpy(s->init_buf->data, frag->fragment, 1111 memcpy(s->internal->init_buf->data, frag->fragment,
1112 frag->msg_header.msg_len + header_length); 1112 frag->msg_header.msg_len + header_length);
1113 s->init_num = frag->msg_header.msg_len + header_length; 1113 s->internal->init_num = frag->msg_header.msg_len + header_length;
1114 1114
1115 dtls1_set_message_header_int(s, frag->msg_header.type, 1115 dtls1_set_message_header_int(s, frag->msg_header.type,
1116 frag->msg_header.msg_len, frag->msg_header.seq, 0, 1116 frag->msg_header.msg_len, frag->msg_header.seq, 0,
1117 frag->msg_header.frag_len); 1117 frag->msg_header.frag_len);
1118 1118
1119 /* save current state */ 1119 /* save current state */
1120 saved_state.enc_write_ctx = s->enc_write_ctx; 1120 saved_state.enc_write_ctx = s->internal->enc_write_ctx;
1121 saved_state.write_hash = s->write_hash; 1121 saved_state.write_hash = s->internal->write_hash;
1122 saved_state.session = s->session; 1122 saved_state.session = s->session;
1123 saved_state.epoch = D1I(s)->w_epoch; 1123 saved_state.epoch = D1I(s)->w_epoch;
1124 1124
1125 D1I(s)->retransmitting = 1; 1125 D1I(s)->retransmitting = 1;
1126 1126
1127 /* restore state in which the message was originally sent */ 1127 /* restore state in which the message was originally sent */
1128 s->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx; 1128 s->internal->enc_write_ctx = frag->msg_header.saved_retransmit_state.enc_write_ctx;
1129 s->write_hash = frag->msg_header.saved_retransmit_state.write_hash; 1129 s->internal->write_hash = frag->msg_header.saved_retransmit_state.write_hash;
1130 s->session = frag->msg_header.saved_retransmit_state.session; 1130 s->session = frag->msg_header.saved_retransmit_state.session;
1131 D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch; 1131 D1I(s)->w_epoch = frag->msg_header.saved_retransmit_state.epoch;
1132 1132
@@ -1142,8 +1142,8 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off,
1142 SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE); 1142 SSL3_RT_CHANGE_CIPHER_SPEC : SSL3_RT_HANDSHAKE);
1143 1143
1144 /* restore current state */ 1144 /* restore current state */
1145 s->enc_write_ctx = saved_state.enc_write_ctx; 1145 s->internal->enc_write_ctx = saved_state.enc_write_ctx;
1146 s->write_hash = saved_state.write_hash; 1146 s->internal->write_hash = saved_state.write_hash;
1147 s->session = saved_state.session; 1147 s->session = saved_state.session;
1148 D1I(s)->w_epoch = saved_state.epoch; 1148 D1I(s)->w_epoch = saved_state.epoch;
1149 1149