diff options
Diffstat (limited to 'src/lib/libssl/d1_both.c')
| -rw-r--r-- | src/lib/libssl/d1_both.c | 134 |
1 files changed, 67 insertions, 67 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index fd7c07a4d5..4f7f8be6ce 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.81 2022/02/05 14:54:10 jsing Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.82 2022/10/02 16:36:41 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. |
| @@ -206,7 +206,7 @@ dtls1_hm_fragment_free(hm_fragment *frag) | |||
| 206 | free(frag); | 206 | free(frag); |
| 207 | } | 207 | } |
| 208 | 208 | ||
| 209 | /* send s->internal->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ | 209 | /* send s->init_buf in records of type 'type' (SSL3_RT_HANDSHAKE or SSL3_RT_CHANGE_CIPHER_SPEC) */ |
| 210 | int | 210 | int |
| 211 | dtls1_do_write(SSL *s, int type) | 211 | dtls1_do_write(SSL *s, int type) |
| 212 | { | 212 | { |
| @@ -237,15 +237,15 @@ dtls1_do_write(SSL *s, int type) | |||
| 237 | OPENSSL_assert(s->d1->mtu >= dtls1_min_mtu()); | 237 | OPENSSL_assert(s->d1->mtu >= dtls1_min_mtu()); |
| 238 | /* should have something reasonable now */ | 238 | /* should have something reasonable now */ |
| 239 | 239 | ||
| 240 | if (s->internal->init_off == 0 && type == SSL3_RT_HANDSHAKE) | 240 | if (s->init_off == 0 && type == SSL3_RT_HANDSHAKE) |
| 241 | OPENSSL_assert(s->internal->init_num == | 241 | OPENSSL_assert(s->init_num == |
| 242 | (int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH); | 242 | (int)s->d1->w_msg_hdr.msg_len + DTLS1_HM_HEADER_LENGTH); |
| 243 | 243 | ||
| 244 | if (!tls12_record_layer_write_overhead(s->internal->rl, &overhead)) | 244 | if (!tls12_record_layer_write_overhead(s->rl, &overhead)) |
| 245 | return -1; | 245 | return -1; |
| 246 | 246 | ||
| 247 | frag_off = 0; | 247 | frag_off = 0; |
| 248 | while (s->internal->init_num) { | 248 | while (s->init_num) { |
| 249 | curr_mtu = s->d1->mtu - BIO_wpending(SSL_get_wbio(s)) - | 249 | curr_mtu = s->d1->mtu - BIO_wpending(SSL_get_wbio(s)) - |
| 250 | DTLS1_RT_HEADER_LENGTH - overhead; | 250 | DTLS1_RT_HEADER_LENGTH - overhead; |
| 251 | 251 | ||
| @@ -258,22 +258,22 @@ dtls1_do_write(SSL *s, int type) | |||
| 258 | overhead; | 258 | overhead; |
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | if (s->internal->init_num > curr_mtu) | 261 | if (s->init_num > curr_mtu) |
| 262 | len = curr_mtu; | 262 | len = curr_mtu; |
| 263 | else | 263 | else |
| 264 | len = s->internal->init_num; | 264 | len = s->init_num; |
| 265 | 265 | ||
| 266 | /* XDTLS: this function is too long. split out the CCS part */ | 266 | /* XDTLS: this function is too long. split out the CCS part */ |
| 267 | if (type == SSL3_RT_HANDSHAKE) { | 267 | if (type == SSL3_RT_HANDSHAKE) { |
| 268 | if (s->internal->init_off != 0) { | 268 | if (s->init_off != 0) { |
| 269 | OPENSSL_assert(s->internal->init_off > DTLS1_HM_HEADER_LENGTH); | 269 | OPENSSL_assert(s->init_off > DTLS1_HM_HEADER_LENGTH); |
| 270 | s->internal->init_off -= DTLS1_HM_HEADER_LENGTH; | 270 | s->init_off -= DTLS1_HM_HEADER_LENGTH; |
| 271 | s->internal->init_num += DTLS1_HM_HEADER_LENGTH; | 271 | s->init_num += DTLS1_HM_HEADER_LENGTH; |
| 272 | 272 | ||
| 273 | if (s->internal->init_num > curr_mtu) | 273 | if (s->init_num > curr_mtu) |
| 274 | len = curr_mtu; | 274 | len = curr_mtu; |
| 275 | else | 275 | else |
| 276 | len = s->internal->init_num; | 276 | len = s->init_num; |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | dtls1_fix_message_header(s, frag_off, | 279 | dtls1_fix_message_header(s, frag_off, |
| @@ -281,14 +281,14 @@ dtls1_do_write(SSL *s, int type) | |||
| 281 | 281 | ||
| 282 | if (!dtls1_write_message_header(&s->d1->w_msg_hdr, | 282 | if (!dtls1_write_message_header(&s->d1->w_msg_hdr, |
| 283 | s->d1->w_msg_hdr.frag_off, s->d1->w_msg_hdr.frag_len, | 283 | s->d1->w_msg_hdr.frag_off, s->d1->w_msg_hdr.frag_len, |
| 284 | (unsigned char *)&s->internal->init_buf->data[s->internal->init_off])) | 284 | (unsigned char *)&s->init_buf->data[s->init_off])) |
| 285 | return -1; | 285 | return -1; |
| 286 | 286 | ||
| 287 | OPENSSL_assert(len >= DTLS1_HM_HEADER_LENGTH); | 287 | OPENSSL_assert(len >= DTLS1_HM_HEADER_LENGTH); |
| 288 | } | 288 | } |
| 289 | 289 | ||
| 290 | ret = dtls1_write_bytes(s, type, | 290 | ret = dtls1_write_bytes(s, type, |
| 291 | &s->internal->init_buf->data[s->internal->init_off], len); | 291 | &s->init_buf->data[s->init_off], len); |
| 292 | if (ret < 0) { | 292 | if (ret < 0) { |
| 293 | /* | 293 | /* |
| 294 | * Might need to update MTU here, but we don't know | 294 | * Might need to update MTU here, but we don't know |
| @@ -319,7 +319,7 @@ dtls1_do_write(SSL *s, int type) | |||
| 319 | * but in that case we'll ignore the result | 319 | * but in that case we'll ignore the result |
| 320 | * anyway | 320 | * anyway |
| 321 | */ | 321 | */ |
| 322 | unsigned char *p = (unsigned char *)&s->internal->init_buf->data[s->internal->init_off]; | 322 | unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; |
| 323 | const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; | 323 | const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; |
| 324 | int xlen; | 324 | int xlen; |
| 325 | 325 | ||
| @@ -340,21 +340,21 @@ dtls1_do_write(SSL *s, int type) | |||
| 340 | tls1_transcript_record(s, p, xlen); | 340 | tls1_transcript_record(s, p, xlen); |
| 341 | } | 341 | } |
| 342 | 342 | ||
| 343 | if (ret == s->internal->init_num) { | 343 | if (ret == s->init_num) { |
| 344 | if (s->internal->msg_callback) | 344 | if (s->msg_callback) |
| 345 | s->internal->msg_callback(1, s->version, type, | 345 | s->msg_callback(1, s->version, type, |
| 346 | s->internal->init_buf->data, | 346 | s->init_buf->data, |
| 347 | (size_t)(s->internal->init_off + s->internal->init_num), | 347 | (size_t)(s->init_off + s->init_num), |
| 348 | s, s->internal->msg_callback_arg); | 348 | s, s->msg_callback_arg); |
| 349 | 349 | ||
| 350 | s->internal->init_off = 0; | 350 | s->init_off = 0; |
| 351 | /* done writing this message */ | 351 | /* done writing this message */ |
| 352 | s->internal->init_num = 0; | 352 | s->init_num = 0; |
| 353 | 353 | ||
| 354 | return (1); | 354 | return (1); |
| 355 | } | 355 | } |
| 356 | s->internal->init_off += ret; | 356 | s->init_off += ret; |
| 357 | s->internal->init_num -= ret; | 357 | s->init_num -= ret; |
| 358 | frag_off += (ret -= DTLS1_HM_HEADER_LENGTH); | 358 | frag_off += (ret -= DTLS1_HM_HEADER_LENGTH); |
| 359 | } | 359 | } |
| 360 | } | 360 | } |
| @@ -377,7 +377,7 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max) | |||
| 377 | int i, al, ok; | 377 | int i, al, ok; |
| 378 | 378 | ||
| 379 | /* | 379 | /* |
| 380 | * s3->internal->tmp is used to store messages that are unexpected, caused | 380 | * s3->tmp is used to store messages that are unexpected, caused |
| 381 | * by the absence of an optional handshake message | 381 | * by the absence of an optional handshake message |
| 382 | */ | 382 | */ |
| 383 | if (s->s3->hs.tls12.reuse_message) { | 383 | if (s->s3->hs.tls12.reuse_message) { |
| @@ -387,8 +387,8 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max) | |||
| 387 | SSLerror(s, SSL_R_UNEXPECTED_MESSAGE); | 387 | SSLerror(s, SSL_R_UNEXPECTED_MESSAGE); |
| 388 | goto fatal_err; | 388 | goto fatal_err; |
| 389 | } | 389 | } |
| 390 | s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; | 390 | s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; |
| 391 | s->internal->init_num = (int)s->s3->hs.tls12.message_size; | 391 | s->init_num = (int)s->s3->hs.tls12.message_size; |
| 392 | return 1; | 392 | return 1; |
| 393 | } | 393 | } |
| 394 | 394 | ||
| @@ -403,7 +403,7 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max) | |||
| 403 | else if (i <= 0 && !ok) | 403 | else if (i <= 0 && !ok) |
| 404 | return i; | 404 | return i; |
| 405 | 405 | ||
| 406 | p = (unsigned char *)s->internal->init_buf->data; | 406 | p = (unsigned char *)s->init_buf->data; |
| 407 | msg_len = msg_hdr->msg_len; | 407 | msg_len = msg_hdr->msg_len; |
| 408 | 408 | ||
| 409 | /* reconstruct message header */ | 409 | /* reconstruct message header */ |
| @@ -413,9 +413,9 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max) | |||
| 413 | msg_len += DTLS1_HM_HEADER_LENGTH; | 413 | msg_len += DTLS1_HM_HEADER_LENGTH; |
| 414 | 414 | ||
| 415 | tls1_transcript_record(s, p, msg_len); | 415 | tls1_transcript_record(s, p, msg_len); |
| 416 | if (s->internal->msg_callback) | 416 | if (s->msg_callback) |
| 417 | s->internal->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, msg_len, | 417 | s->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, p, msg_len, |
| 418 | s, s->internal->msg_callback_arg); | 418 | s, s->msg_callback_arg); |
| 419 | 419 | ||
| 420 | memset(msg_hdr, 0, sizeof(struct hm_header_st)); | 420 | memset(msg_hdr, 0, sizeof(struct hm_header_st)); |
| 421 | 421 | ||
| @@ -423,7 +423,7 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max) | |||
| 423 | if (!s->d1->listen) | 423 | if (!s->d1->listen) |
| 424 | s->d1->handshake_read_seq++; | 424 | s->d1->handshake_read_seq++; |
| 425 | 425 | ||
| 426 | s->internal->init_msg = s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; | 426 | s->init_msg = s->init_buf->data + DTLS1_HM_HEADER_LENGTH; |
| 427 | return 1; | 427 | return 1; |
| 428 | 428 | ||
| 429 | fatal_err: | 429 | fatal_err: |
| @@ -457,7 +457,7 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
| 457 | * msg_len is limited to 2^24, but is effectively checked | 457 | * msg_len is limited to 2^24, but is effectively checked |
| 458 | * against max above | 458 | * against max above |
| 459 | */ | 459 | */ |
| 460 | if (!BUF_MEM_grow_clean(s->internal->init_buf, | 460 | if (!BUF_MEM_grow_clean(s->init_buf, |
| 461 | msg_len + DTLS1_HM_HEADER_LENGTH)) { | 461 | msg_len + DTLS1_HM_HEADER_LENGTH)) { |
| 462 | SSLerror(s, ERR_R_BUF_LIB); | 462 | SSLerror(s, ERR_R_BUF_LIB); |
| 463 | return SSL_AD_INTERNAL_ERROR; | 463 | return SSL_AD_INTERNAL_ERROR; |
| @@ -486,8 +486,8 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) | |||
| 486 | /* | 486 | /* |
| 487 | * (0) check whether the desired fragment is available | 487 | * (0) check whether the desired fragment is available |
| 488 | * if so: | 488 | * if so: |
| 489 | * (1) copy over the fragment to s->internal->init_buf->data[] | 489 | * (1) copy over the fragment to s->init_buf->data[] |
| 490 | * (2) update s->internal->init_num | 490 | * (2) update s->init_num |
| 491 | */ | 491 | */ |
| 492 | pitem *item; | 492 | pitem *item; |
| 493 | hm_fragment *frag; | 493 | hm_fragment *frag; |
| @@ -512,7 +512,7 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) | |||
| 512 | 512 | ||
| 513 | if (al == 0) /* no alert */ | 513 | if (al == 0) /* no alert */ |
| 514 | { | 514 | { |
| 515 | unsigned char *p = (unsigned char *)s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; | 515 | unsigned char *p = (unsigned char *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH; |
| 516 | memcpy(&p[frag->msg_header.frag_off], | 516 | memcpy(&p[frag->msg_header.frag_off], |
| 517 | frag->fragment, frag->msg_header.frag_len); | 517 | frag->fragment, frag->msg_header.frag_len); |
| 518 | } | 518 | } |
| @@ -526,7 +526,7 @@ dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) | |||
| 526 | } | 526 | } |
| 527 | 527 | ||
| 528 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 528 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 529 | s->internal->init_num = 0; | 529 | s->init_num = 0; |
| 530 | *ok = 0; | 530 | *ok = 0; |
| 531 | return -1; | 531 | return -1; |
| 532 | } else | 532 | } else |
| @@ -544,8 +544,8 @@ dtls1_max_handshake_message_len(const SSL *s) | |||
| 544 | unsigned long max_len; | 544 | unsigned long max_len; |
| 545 | 545 | ||
| 546 | max_len = DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH; | 546 | max_len = DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH; |
| 547 | if (max_len < (unsigned long)s->internal->max_cert_list) | 547 | if (max_len < (unsigned long)s->max_cert_list) |
| 548 | return s->internal->max_cert_list; | 548 | return s->max_cert_list; |
| 549 | return max_len; | 549 | return max_len; |
| 550 | } | 550 | } |
| 551 | 551 | ||
| @@ -749,7 +749,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 749 | /* see if we have the required fragment already */ | 749 | /* see if we have the required fragment already */ |
| 750 | if ((frag_len = dtls1_retrieve_buffered_fragment(s, max, ok)) || *ok) { | 750 | if ((frag_len = dtls1_retrieve_buffered_fragment(s, max, ok)) || *ok) { |
| 751 | if (*ok) | 751 | if (*ok) |
| 752 | s->internal->init_num = frag_len; | 752 | s->init_num = frag_len; |
| 753 | return frag_len; | 753 | return frag_len; |
| 754 | } | 754 | } |
| 755 | 755 | ||
| @@ -758,7 +758,7 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 758 | DTLS1_HM_HEADER_LENGTH, 0); | 758 | DTLS1_HM_HEADER_LENGTH, 0); |
| 759 | if (i <= 0) { | 759 | if (i <= 0) { |
| 760 | /* nbio, or an error */ | 760 | /* nbio, or an error */ |
| 761 | s->internal->rwstate = SSL_READING; | 761 | s->rwstate = SSL_READING; |
| 762 | *ok = 0; | 762 | *ok = 0; |
| 763 | return i; | 763 | return i; |
| 764 | } | 764 | } |
| @@ -797,13 +797,13 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 797 | * 'Finished' MAC. | 797 | * 'Finished' MAC. |
| 798 | */ | 798 | */ |
| 799 | if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) { | 799 | if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) { |
| 800 | if (s->internal->msg_callback) | 800 | if (s->msg_callback) |
| 801 | s->internal->msg_callback(0, s->version, | 801 | s->msg_callback(0, s->version, |
| 802 | SSL3_RT_HANDSHAKE, wire, | 802 | SSL3_RT_HANDSHAKE, wire, |
| 803 | DTLS1_HM_HEADER_LENGTH, s, | 803 | DTLS1_HM_HEADER_LENGTH, s, |
| 804 | s->internal->msg_callback_arg); | 804 | s->msg_callback_arg); |
| 805 | 805 | ||
| 806 | s->internal->init_num = 0; | 806 | s->init_num = 0; |
| 807 | goto again; | 807 | goto again; |
| 808 | } | 808 | } |
| 809 | else /* Incorrectly formated Hello request */ | 809 | else /* Incorrectly formated Hello request */ |
| @@ -821,13 +821,13 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 821 | s->s3->hs.state = stn; | 821 | s->s3->hs.state = stn; |
| 822 | 822 | ||
| 823 | if (frag_len > 0) { | 823 | if (frag_len > 0) { |
| 824 | unsigned char *p = (unsigned char *)s->internal->init_buf->data + DTLS1_HM_HEADER_LENGTH; | 824 | unsigned char *p = (unsigned char *)s->init_buf->data + DTLS1_HM_HEADER_LENGTH; |
| 825 | 825 | ||
| 826 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, | 826 | i = s->method->ssl_read_bytes(s, SSL3_RT_HANDSHAKE, |
| 827 | &p[frag_off], frag_len, 0); | 827 | &p[frag_off], frag_len, 0); |
| 828 | /* XDTLS: fix this--message fragments cannot span multiple packets */ | 828 | /* XDTLS: fix this--message fragments cannot span multiple packets */ |
| 829 | if (i <= 0) { | 829 | if (i <= 0) { |
| 830 | s->internal->rwstate = SSL_READING; | 830 | s->rwstate = SSL_READING; |
| 831 | *ok = 0; | 831 | *ok = 0; |
| 832 | return i; | 832 | return i; |
| 833 | } | 833 | } |
| @@ -845,18 +845,18 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok) | |||
| 845 | } | 845 | } |
| 846 | 846 | ||
| 847 | /* | 847 | /* |
| 848 | * Note that s->internal->init_num is *not* used as current offset in | 848 | * Note that s->init_num is *not* used as current offset in |
| 849 | * s->internal->init_buf->data, but as a counter summing up fragments' | 849 | * s->init_buf->data, but as a counter summing up fragments' |
| 850 | * lengths: as soon as they sum up to handshake packet | 850 | * lengths: as soon as they sum up to handshake packet |
| 851 | * length, we assume we have got all the fragments. | 851 | * length, we assume we have got all the fragments. |
| 852 | */ | 852 | */ |
| 853 | s->internal->init_num = frag_len; | 853 | s->init_num = frag_len; |
| 854 | *ok = 1; | 854 | *ok = 1; |
| 855 | return frag_len; | 855 | return frag_len; |
| 856 | 856 | ||
| 857 | fatal_err: | 857 | fatal_err: |
| 858 | ssl3_send_alert(s, SSL3_AL_FATAL, al); | 858 | ssl3_send_alert(s, SSL3_AL_FATAL, al); |
| 859 | s->internal->init_num = 0; | 859 | s->init_num = 0; |
| 860 | 860 | ||
| 861 | *ok = 0; | 861 | *ok = 0; |
| 862 | return (-1); | 862 | return (-1); |
| @@ -948,17 +948,17 @@ dtls1_buffer_message(SSL *s, int is_ccs) | |||
| 948 | * This function is called immediately after a message has | 948 | * This function is called immediately after a message has |
| 949 | * been serialized | 949 | * been serialized |
| 950 | */ | 950 | */ |
| 951 | OPENSSL_assert(s->internal->init_off == 0); | 951 | OPENSSL_assert(s->init_off == 0); |
| 952 | 952 | ||
| 953 | frag = dtls1_hm_fragment_new(s->internal->init_num, 0); | 953 | frag = dtls1_hm_fragment_new(s->init_num, 0); |
| 954 | if (frag == NULL) | 954 | if (frag == NULL) |
| 955 | return 0; | 955 | return 0; |
| 956 | 956 | ||
| 957 | memcpy(frag->fragment, s->internal->init_buf->data, s->internal->init_num); | 957 | memcpy(frag->fragment, s->init_buf->data, s->init_num); |
| 958 | 958 | ||
| 959 | OPENSSL_assert(s->d1->w_msg_hdr.msg_len + | 959 | OPENSSL_assert(s->d1->w_msg_hdr.msg_len + |
| 960 | (is_ccs ? DTLS1_CCS_HEADER_LENGTH : DTLS1_HM_HEADER_LENGTH) == | 960 | (is_ccs ? DTLS1_CCS_HEADER_LENGTH : DTLS1_HM_HEADER_LENGTH) == |
| 961 | (unsigned int)s->internal->init_num); | 961 | (unsigned int)s->init_num); |
| 962 | 962 | ||
| 963 | frag->msg_header.msg_len = s->d1->w_msg_hdr.msg_len; | 963 | frag->msg_header.msg_len = s->d1->w_msg_hdr.msg_len; |
| 964 | frag->msg_header.seq = s->d1->w_msg_hdr.seq; | 964 | frag->msg_header.seq = s->d1->w_msg_hdr.seq; |
| @@ -970,7 +970,7 @@ dtls1_buffer_message(SSL *s, int is_ccs) | |||
| 970 | /* save current state*/ | 970 | /* save current state*/ |
| 971 | frag->msg_header.saved_retransmit_state.session = s->session; | 971 | frag->msg_header.saved_retransmit_state.session = s->session; |
| 972 | frag->msg_header.saved_retransmit_state.epoch = | 972 | frag->msg_header.saved_retransmit_state.epoch = |
| 973 | tls12_record_layer_write_epoch(s->internal->rl); | 973 | tls12_record_layer_write_epoch(s->rl); |
| 974 | 974 | ||
| 975 | memset(seq64be, 0, sizeof(seq64be)); | 975 | memset(seq64be, 0, sizeof(seq64be)); |
| 976 | seq64be[6] = (unsigned char)(dtls1_get_queue_priority( | 976 | seq64be[6] = (unsigned char)(dtls1_get_queue_priority( |
| @@ -1001,8 +1001,8 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
| 1001 | struct dtls1_retransmit_state saved_state; | 1001 | struct dtls1_retransmit_state saved_state; |
| 1002 | 1002 | ||
| 1003 | /* | 1003 | /* |
| 1004 | OPENSSL_assert(s->internal->init_num == 0); | 1004 | OPENSSL_assert(s->init_num == 0); |
| 1005 | OPENSSL_assert(s->internal->init_off == 0); | 1005 | OPENSSL_assert(s->init_off == 0); |
| 1006 | */ | 1006 | */ |
| 1007 | 1007 | ||
| 1008 | /* XDTLS: the requested message ought to be found, otherwise error */ | 1008 | /* XDTLS: the requested message ought to be found, otherwise error */ |
| @@ -1027,9 +1027,9 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
| 1027 | else | 1027 | else |
| 1028 | header_length = DTLS1_HM_HEADER_LENGTH; | 1028 | header_length = DTLS1_HM_HEADER_LENGTH; |
| 1029 | 1029 | ||
| 1030 | memcpy(s->internal->init_buf->data, frag->fragment, | 1030 | memcpy(s->init_buf->data, frag->fragment, |
| 1031 | frag->msg_header.msg_len + header_length); | 1031 | frag->msg_header.msg_len + header_length); |
| 1032 | s->internal->init_num = frag->msg_header.msg_len + header_length; | 1032 | s->init_num = frag->msg_header.msg_len + header_length; |
| 1033 | 1033 | ||
| 1034 | dtls1_set_message_header_int(s, frag->msg_header.type, | 1034 | dtls1_set_message_header_int(s, frag->msg_header.type, |
| 1035 | frag->msg_header.msg_len, frag->msg_header.seq, 0, | 1035 | frag->msg_header.msg_len, frag->msg_header.seq, 0, |
| @@ -1037,13 +1037,13 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
| 1037 | 1037 | ||
| 1038 | /* save current state */ | 1038 | /* save current state */ |
| 1039 | saved_state.session = s->session; | 1039 | saved_state.session = s->session; |
| 1040 | saved_state.epoch = tls12_record_layer_write_epoch(s->internal->rl); | 1040 | saved_state.epoch = tls12_record_layer_write_epoch(s->rl); |
| 1041 | 1041 | ||
| 1042 | s->d1->retransmitting = 1; | 1042 | s->d1->retransmitting = 1; |
| 1043 | 1043 | ||
| 1044 | /* restore state in which the message was originally sent */ | 1044 | /* restore state in which the message was originally sent */ |
| 1045 | s->session = frag->msg_header.saved_retransmit_state.session; | 1045 | s->session = frag->msg_header.saved_retransmit_state.session; |
| 1046 | if (!tls12_record_layer_use_write_epoch(s->internal->rl, | 1046 | if (!tls12_record_layer_use_write_epoch(s->rl, |
| 1047 | frag->msg_header.saved_retransmit_state.epoch)) | 1047 | frag->msg_header.saved_retransmit_state.epoch)) |
| 1048 | return 0; | 1048 | return 0; |
| 1049 | 1049 | ||
| @@ -1052,7 +1052,7 @@ dtls1_retransmit_message(SSL *s, unsigned short seq, unsigned long frag_off, | |||
| 1052 | 1052 | ||
| 1053 | /* restore current state */ | 1053 | /* restore current state */ |
| 1054 | s->session = saved_state.session; | 1054 | s->session = saved_state.session; |
| 1055 | if (!tls12_record_layer_use_write_epoch(s->internal->rl, | 1055 | if (!tls12_record_layer_use_write_epoch(s->rl, |
| 1056 | saved_state.epoch)) | 1056 | saved_state.epoch)) |
| 1057 | return 0; | 1057 | return 0; |
| 1058 | 1058 | ||
| @@ -1073,7 +1073,7 @@ dtls1_clear_record_buffer(SSL *s) | |||
| 1073 | item = pqueue_pop(s->d1->sent_messages)) { | 1073 | item = pqueue_pop(s->d1->sent_messages)) { |
| 1074 | frag = item->data; | 1074 | frag = item->data; |
| 1075 | if (frag->msg_header.is_ccs) | 1075 | if (frag->msg_header.is_ccs) |
| 1076 | tls12_record_layer_write_epoch_done(s->internal->rl, | 1076 | tls12_record_layer_write_epoch_done(s->rl, |
| 1077 | frag->msg_header.saved_retransmit_state.epoch); | 1077 | frag->msg_header.saved_retransmit_state.epoch); |
| 1078 | dtls1_hm_fragment_free(frag); | 1078 | dtls1_hm_fragment_free(frag); |
| 1079 | pitem_free(item); | 1079 | pitem_free(item); |
