diff options
-rw-r--r-- | src/lib/libssl/d1_both.c | 129 | ||||
-rw-r--r-- | src/lib/libssl/s3_srvr.c | 73 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/d1_both.c | 129 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/s3_srvr.c | 73 | ||||
-rw-r--r-- | src/lib/libssl/src/ssl/ssl_cert.c | 41 | ||||
-rw-r--r-- | src/lib/libssl/ssl_cert.c | 41 |
6 files changed, 300 insertions, 186 deletions
diff --git a/src/lib/libssl/d1_both.c b/src/lib/libssl/d1_both.c index bd4267238f..f27588fcff 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.22 2014/07/02 20:45:26 miod Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.23 2014/07/10 08:25:00 guenther 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. |
@@ -233,8 +233,11 @@ dtls1_do_write(SSL *s, int type) | |||
233 | s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), | 233 | s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), |
234 | BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); | 234 | BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); |
235 | 235 | ||
236 | /* I've seen the kernel return bogus numbers when it doesn't know | 236 | /* |
237 | * (initial write), so just make sure we have a reasonable number */ | 237 | * I've seen the kernel return bogus numbers when it |
238 | * doesn't know the MTU (ie., the initial write), so just | ||
239 | * make sure we have a reasonable number | ||
240 | */ | ||
238 | if (s->d1->mtu < dtls1_min_mtu()) { | 241 | if (s->d1->mtu < dtls1_min_mtu()) { |
239 | s->d1->mtu = 0; | 242 | s->d1->mtu = 0; |
240 | s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); | 243 | s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); |
@@ -306,11 +309,12 @@ dtls1_do_write(SSL *s, int type) | |||
306 | ret = dtls1_write_bytes(s, type, | 309 | ret = dtls1_write_bytes(s, type, |
307 | &s->init_buf->data[s->init_off], len); | 310 | &s->init_buf->data[s->init_off], len); |
308 | if (ret < 0) { | 311 | if (ret < 0) { |
309 | /* might need to update MTU here, but we don't know | 312 | /* |
310 | * which previous packet caused the failure -- so can't | 313 | * Might need to update MTU here, but we don't know |
311 | * really retransmit anything. continue as if everything | 314 | * which previous packet caused the failure -- so |
312 | * is fine and wait for an alert to handle the | 315 | * can't really retransmit anything. continue as |
313 | * retransmit | 316 | * if everything is fine and wait for an alert to |
317 | * handle the retransmit | ||
314 | */ | 318 | */ |
315 | if (BIO_ctrl(SSL_get_wbio(s), | 319 | if (BIO_ctrl(SSL_get_wbio(s), |
316 | BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0) | 320 | BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0) |
@@ -320,22 +324,30 @@ dtls1_do_write(SSL *s, int type) | |||
320 | return (-1); | 324 | return (-1); |
321 | } else { | 325 | } else { |
322 | 326 | ||
323 | /* bad if this assert fails, only part of the handshake | 327 | /* |
324 | * message got sent. but why would this happen? */ | 328 | * Bad if this assert fails, only part of the |
329 | * handshake message got sent. but why would | ||
330 | * this happen? | ||
331 | */ | ||
325 | OPENSSL_assert(len == (unsigned int)ret); | 332 | OPENSSL_assert(len == (unsigned int)ret); |
326 | 333 | ||
327 | if (type == SSL3_RT_HANDSHAKE && | 334 | if (type == SSL3_RT_HANDSHAKE && |
328 | !s->d1->retransmitting) { | 335 | !s->d1->retransmitting) { |
329 | /* should not be done for 'Hello Request's, but in that case | 336 | /* |
330 | * we'll ignore the result anyway */ | 337 | * Should not be done for 'Hello Request's, |
338 | * but in that case we'll ignore the result | ||
339 | * anyway | ||
340 | */ | ||
331 | unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; | 341 | unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; |
332 | const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; | 342 | const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; |
333 | int xlen; | 343 | int xlen; |
334 | 344 | ||
335 | if (frag_off == 0 && | 345 | if (frag_off == 0 && |
336 | s->version != DTLS1_BAD_VER) { | 346 | s->version != DTLS1_BAD_VER) { |
337 | /* reconstruct message header is if it | 347 | /* |
338 | * is being sent in single fragment */ | 348 | * Reconstruct message header is if it |
349 | * is being sent in single fragment | ||
350 | */ | ||
339 | *p++ = msg_hdr->type; | 351 | *p++ = msg_hdr->type; |
340 | l2n3(msg_hdr->msg_len, p); | 352 | l2n3(msg_hdr->msg_len, p); |
341 | s2n (msg_hdr->seq, p); | 353 | s2n (msg_hdr->seq, p); |
@@ -373,7 +385,8 @@ dtls1_do_write(SSL *s, int type) | |||
373 | } | 385 | } |
374 | 386 | ||
375 | 387 | ||
376 | /* Obtain handshake message of message type 'mt' (any if mt == -1), | 388 | /* |
389 | * Obtain handshake message of message type 'mt' (any if mt == -1), | ||
377 | * maximum acceptable body length 'max'. | 390 | * maximum acceptable body length 'max'. |
378 | * Read an entire handshake message. Handshake messages arrive in | 391 | * Read an entire handshake message. Handshake messages arrive in |
379 | * fragments. | 392 | * fragments. |
@@ -386,8 +399,10 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
386 | unsigned char *p; | 399 | unsigned char *p; |
387 | unsigned long msg_len; | 400 | unsigned long msg_len; |
388 | 401 | ||
389 | /* s3->tmp is used to store messages that are unexpected, caused | 402 | /* |
390 | * by the absence of an optional handshake message */ | 403 | * s3->tmp is used to store messages that are unexpected, caused |
404 | * by the absence of an optional handshake message | ||
405 | */ | ||
391 | if (s->s3->tmp.reuse_message) { | 406 | if (s->s3->tmp.reuse_message) { |
392 | s->s3->tmp.reuse_message = 0; | 407 | s->s3->tmp.reuse_message = 0; |
393 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { | 408 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { |
@@ -472,8 +487,10 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
472 | 487 | ||
473 | if ( s->d1->r_msg_hdr.frag_off == 0) /* first fragment */ | 488 | if ( s->d1->r_msg_hdr.frag_off == 0) /* first fragment */ |
474 | { | 489 | { |
475 | /* msg_len is limited to 2^24, but is effectively checked | 490 | /* |
476 | * against max above */ | 491 | * msg_len is limited to 2^24, but is effectively checked |
492 | * against max above | ||
493 | */ | ||
477 | if (!BUF_MEM_grow_clean(s->init_buf, | 494 | if (!BUF_MEM_grow_clean(s->init_buf, |
478 | msg_len + DTLS1_HM_HEADER_LENGTH)) { | 495 | msg_len + DTLS1_HM_HEADER_LENGTH)) { |
479 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, ERR_R_BUF_LIB); | 496 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, ERR_R_BUF_LIB); |
@@ -486,8 +503,10 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
486 | s->d1->r_msg_hdr.type = msg_hdr->type; | 503 | s->d1->r_msg_hdr.type = msg_hdr->type; |
487 | s->d1->r_msg_hdr.seq = msg_hdr->seq; | 504 | s->d1->r_msg_hdr.seq = msg_hdr->seq; |
488 | } else if (msg_len != s->d1->r_msg_hdr.msg_len) { | 505 | } else if (msg_len != s->d1->r_msg_hdr.msg_len) { |
489 | /* They must be playing with us! BTW, failure to enforce | 506 | /* |
490 | * upper limit would open possibility for buffer overrun. */ | 507 | * They must be playing with us! BTW, failure to enforce |
508 | * upper limit would open possibility for buffer overrun. | ||
509 | */ | ||
491 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, | 510 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, |
492 | SSL_R_EXCESSIVE_MESSAGE_SIZE); | 511 | SSL_R_EXCESSIVE_MESSAGE_SIZE); |
493 | return SSL_AD_ILLEGAL_PARAMETER; | 512 | return SSL_AD_ILLEGAL_PARAMETER; |
@@ -499,7 +518,8 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
499 | static int | 518 | static int |
500 | dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) | 519 | dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) |
501 | { | 520 | { |
502 | /* (0) check whether the desired fragment is available | 521 | /* |
522 | * (0) check whether the desired fragment is available | ||
503 | * if so: | 523 | * if so: |
504 | * (1) copy over the fragment to s->init_buf->data[] | 524 | * (1) copy over the fragment to s->init_buf->data[] |
505 | * (2) update s->init_num | 525 | * (2) update s->init_num |
@@ -561,7 +581,8 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
561 | if ((msg_hdr->frag_off + frag_len) > msg_hdr->msg_len) | 581 | if ((msg_hdr->frag_off + frag_len) > msg_hdr->msg_len) |
562 | goto err; | 582 | goto err; |
563 | 583 | ||
564 | /* Determine maximum allowed message size. Depends on (user set) | 584 | /* |
585 | * Determine maximum allowed message size. Depends on (user set) | ||
565 | * maximum certificate length, but 16k is minimum. | 586 | * maximum certificate length, but 16k is minimum. |
566 | */ | 587 | */ |
567 | if (DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH < | 588 | if (DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH < |
@@ -595,7 +616,8 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
595 | } | 616 | } |
596 | } | 617 | } |
597 | 618 | ||
598 | /* If message is already reassembled, this must be a | 619 | /* |
620 | * If message is already reassembled, this must be a | ||
599 | * retransmit and can be dropped. | 621 | * retransmit and can be dropped. |
600 | */ | 622 | */ |
601 | if (frag->reassembly == NULL) { | 623 | if (frag->reassembly == NULL) { |
@@ -672,13 +694,15 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
672 | seq64be[7] = (unsigned char) msg_hdr->seq; | 694 | seq64be[7] = (unsigned char) msg_hdr->seq; |
673 | item = pqueue_find(s->d1->buffered_messages, seq64be); | 695 | item = pqueue_find(s->d1->buffered_messages, seq64be); |
674 | 696 | ||
675 | /* If we already have an entry and this one is a fragment, | 697 | /* |
698 | * If we already have an entry and this one is a fragment, | ||
676 | * don't discard it and rather try to reassemble it. | 699 | * don't discard it and rather try to reassemble it. |
677 | */ | 700 | */ |
678 | if (item != NULL && frag_len < msg_hdr->msg_len) | 701 | if (item != NULL && frag_len < msg_hdr->msg_len) |
679 | item = NULL; | 702 | item = NULL; |
680 | 703 | ||
681 | /* Discard the message if sequence number was already there, is | 704 | /* |
705 | * Discard the message if sequence number was already there, is | ||
682 | * too far in the future, already in the queue or if we received | 706 | * too far in the future, already in the queue or if we received |
683 | * a FINISHED before the SERVER_HELLO, which then must be a stale | 707 | * a FINISHED before the SERVER_HELLO, which then must be a stale |
684 | * retransmit. | 708 | * retransmit. |
@@ -791,10 +815,12 @@ again: | |||
791 | 815 | ||
792 | if (!s->server && s->d1->r_msg_hdr.frag_off == 0 && | 816 | if (!s->server && s->d1->r_msg_hdr.frag_off == 0 && |
793 | wire[0] == SSL3_MT_HELLO_REQUEST) { | 817 | wire[0] == SSL3_MT_HELLO_REQUEST) { |
794 | /* The server may always send 'Hello Request' messages -- | 818 | /* |
819 | * The server may always send 'Hello Request' messages -- | ||
795 | * we are doing a handshake anyway now, so ignore them | 820 | * we are doing a handshake anyway now, so ignore them |
796 | * if their format is correct. Does not count for | 821 | * if their format is correct. Does not count for |
797 | * 'Finished' MAC. */ | 822 | * 'Finished' MAC. |
823 | */ | ||
798 | if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) { | 824 | if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) { |
799 | if (s->msg_callback) | 825 | if (s->msg_callback) |
800 | s->msg_callback(0, s->version, | 826 | s->msg_callback(0, s->version, |
@@ -834,8 +860,10 @@ again: | |||
834 | } else | 860 | } else |
835 | i = 0; | 861 | i = 0; |
836 | 862 | ||
837 | /* XDTLS: an incorrectly formatted fragment should cause the | 863 | /* |
838 | * handshake to fail */ | 864 | * XDTLS: an incorrectly formatted fragment should cause the |
865 | * handshake to fail | ||
866 | */ | ||
839 | if (i != (int)frag_len) { | 867 | if (i != (int)frag_len) { |
840 | al = SSL3_AD_ILLEGAL_PARAMETER; | 868 | al = SSL3_AD_ILLEGAL_PARAMETER; |
841 | SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT, | 869 | SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT, |
@@ -845,10 +873,12 @@ again: | |||
845 | 873 | ||
846 | *ok = 1; | 874 | *ok = 1; |
847 | 875 | ||
848 | /* Note that s->init_num is *not* used as current offset in | 876 | /* |
877 | * Note that s->init_num is *not* used as current offset in | ||
849 | * s->init_buf->data, but as a counter summing up fragments' | 878 | * s->init_buf->data, but as a counter summing up fragments' |
850 | * lengths: as soon as they sum up to handshake packet | 879 | * lengths: as soon as they sum up to handshake packet |
851 | * length, we assume we have got all the fragments. */ | 880 | * length, we assume we have got all the fragments. |
881 | */ | ||
852 | s->init_num = frag_len; | 882 | s->init_num = frag_len; |
853 | return frag_len; | 883 | return frag_len; |
854 | 884 | ||
@@ -878,7 +908,8 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
878 | p += i; | 908 | p += i; |
879 | l = i; | 909 | l = i; |
880 | 910 | ||
881 | /* Copy the finished so we can use it for | 911 | /* |
912 | * Copy the finished so we can use it for | ||
882 | * renegotiation checks | 913 | * renegotiation checks |
883 | */ | 914 | */ |
884 | if (s->type == SSL_ST_CONNECT) { | 915 | if (s->type == SSL_ST_CONNECT) { |
@@ -907,7 +938,8 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
907 | return (dtls1_do_write(s, SSL3_RT_HANDSHAKE)); | 938 | return (dtls1_do_write(s, SSL3_RT_HANDSHAKE)); |
908 | } | 939 | } |
909 | 940 | ||
910 | /* for these 2 messages, we need to | 941 | /* |
942 | * for these 2 messages, we need to | ||
911 | * ssl->enc_read_ctx re-init | 943 | * ssl->enc_read_ctx re-init |
912 | * ssl->s3->read_sequence zero | 944 | * ssl->s3->read_sequence zero |
913 | * ssl->s3->read_mac_secret re-init | 945 | * ssl->s3->read_mac_secret re-init |
@@ -1031,8 +1063,10 @@ dtls1_read_failed(SSL *s, int code) | |||
1031 | } | 1063 | } |
1032 | 1064 | ||
1033 | if (!dtls1_is_timer_expired(s)) { | 1065 | if (!dtls1_is_timer_expired(s)) { |
1034 | /* not a timeout, none of our business, | 1066 | /* |
1035 | let higher layers handle this. in fact it's probably an error */ | 1067 | * not a timeout, none of our business, let higher layers |
1068 | * handle this. in fact it's probably an error | ||
1069 | */ | ||
1036 | return code; | 1070 | return code; |
1037 | } | 1071 | } |
1038 | 1072 | ||
@@ -1048,13 +1082,16 @@ dtls1_read_failed(SSL *s, int code) | |||
1048 | int | 1082 | int |
1049 | dtls1_get_queue_priority(unsigned short seq, int is_ccs) | 1083 | dtls1_get_queue_priority(unsigned short seq, int is_ccs) |
1050 | { | 1084 | { |
1051 | /* The index of the retransmission queue actually is the message sequence number, | 1085 | /* |
1052 | * since the queue only contains messages of a single handshake. However, the | 1086 | * The index of the retransmission queue actually is the message |
1053 | * ChangeCipherSpec has no message sequence number and so using only the sequence | 1087 | * sequence number, since the queue only contains messages of a |
1054 | * will result in the CCS and Finished having the same index. To prevent this, | 1088 | * single handshake. However, the ChangeCipherSpec has no message |
1055 | * the sequence number is multiplied by 2. In case of a CCS 1 is subtracted. | 1089 | * sequence number and so using only the sequence will result in |
1056 | * This does not only differ CSS and Finished, it also maintains the order of the | 1090 | * the CCS and Finished having the same index. To prevent this, the |
1057 | * index (important for priority queues) and fits in the unsigned short variable. | 1091 | * sequence number is multiplied by 2. In case of a CCS 1 is |
1092 | * subtracted. This does not only differ CSS and Finished, it also | ||
1093 | * maintains the order of the index (important for priority queues) | ||
1094 | * and fits in the unsigned short variable. | ||
1058 | */ | 1095 | */ |
1059 | return seq * 2 - is_ccs; | 1096 | return seq * 2 - is_ccs; |
1060 | } | 1097 | } |
@@ -1092,8 +1129,10 @@ dtls1_buffer_message(SSL *s, int is_ccs) | |||
1092 | hm_fragment *frag; | 1129 | hm_fragment *frag; |
1093 | unsigned char seq64be[8]; | 1130 | unsigned char seq64be[8]; |
1094 | 1131 | ||
1095 | /* this function is called immediately after a message has | 1132 | /* |
1096 | * been serialized */ | 1133 | * This function is called immediately after a message has |
1134 | * been serialized | ||
1135 | */ | ||
1097 | OPENSSL_assert(s->init_off == 0); | 1136 | OPENSSL_assert(s->init_off == 0); |
1098 | 1137 | ||
1099 | frag = dtls1_hm_fragment_new(s->init_num, 0); | 1138 | frag = dtls1_hm_fragment_new(s->init_num, 0); |
diff --git a/src/lib/libssl/s3_srvr.c b/src/lib/libssl/s3_srvr.c index f24d0f9cf8..a3e62ea323 100644 --- a/src/lib/libssl/s3_srvr.c +++ b/src/lib/libssl/s3_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_srvr.c,v 1.68 2014/07/09 11:25:42 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.69 2014/07/10 08:25:00 guenther Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -312,8 +312,10 @@ ssl3_accept(SSL *s) | |||
312 | ret = -1; | 312 | ret = -1; |
313 | goto end; | 313 | goto end; |
314 | } else { | 314 | } else { |
315 | /* s->state == SSL_ST_RENEGOTIATE, | 315 | /* |
316 | * we will just send a HelloRequest */ | 316 | * s->state == SSL_ST_RENEGOTIATE, |
317 | * we will just send a HelloRequest | ||
318 | */ | ||
317 | s->ctx->stats.sess_accept_renegotiate++; | 319 | s->ctx->stats.sess_accept_renegotiate++; |
318 | s->state = SSL3_ST_SW_HELLO_REQ_A; | 320 | s->state = SSL3_ST_SW_HELLO_REQ_A; |
319 | } | 321 | } |
@@ -404,19 +406,21 @@ ssl3_accept(SSL *s) | |||
404 | ) | 406 | ) |
405 | /* | 407 | /* |
406 | * option SSL_OP_EPHEMERAL_RSA sends temporary | 408 | * option SSL_OP_EPHEMERAL_RSA sends temporary |
407 | * RSA key even when forbidden by protocol specs | 409 | * RSA key even when forbidden by protocol |
408 | * (handshake may fail as clients are not | 410 | * specs (handshake may fail as clients are |
409 | * required to be able to handle this) | 411 | * not required to be able to handle this) |
410 | */ | 412 | */ |
411 | s->s3->tmp.use_rsa_tmp = 1; | 413 | s->s3->tmp.use_rsa_tmp = 1; |
412 | else | 414 | else |
413 | s->s3->tmp.use_rsa_tmp = 0; | 415 | s->s3->tmp.use_rsa_tmp = 0; |
414 | 416 | ||
415 | 417 | ||
416 | /* only send if a DH key exchange, fortezza or | 418 | /* |
419 | * Only send if a DH key exchange, fortezza or | ||
417 | * RSA but we have a sign only certificate | 420 | * RSA but we have a sign only certificate |
418 | * | 421 | * |
419 | * PSK: may send PSK identity hints | 422 | * PSK: send ServerKeyExchange if PSK identity |
423 | * hint is provided | ||
420 | * | 424 | * |
421 | * For ECC ciphersuites, we send a serverKeyExchange | 425 | * For ECC ciphersuites, we send a serverKeyExchange |
422 | * message only if the cipher suite is either | 426 | * message only if the cipher suite is either |
@@ -425,8 +429,6 @@ ssl3_accept(SSL *s) | |||
425 | * public key for key exchange. | 429 | * public key for key exchange. |
426 | */ | 430 | */ |
427 | if (s->s3->tmp.use_rsa_tmp | 431 | if (s->s3->tmp.use_rsa_tmp |
428 | /* PSK: send ServerKeyExchange if PSK identity | ||
429 | * hint if provided */ | ||
430 | #ifndef OPENSSL_NO_PSK | 432 | #ifndef OPENSSL_NO_PSK |
431 | || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint) | 433 | || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint) |
432 | #endif | 434 | #endif |
@@ -1070,8 +1072,10 @@ ssl3_get_client_hello(SSL *s) | |||
1070 | } | 1072 | } |
1071 | } | 1073 | } |
1072 | if (j == 0) { | 1074 | if (j == 0) { |
1073 | /* we need to have the cipher in the cipher | 1075 | /* |
1074 | * list if we are asked to reuse it */ | 1076 | * We need to have the cipher in the cipher |
1077 | * list if we are asked to reuse it | ||
1078 | */ | ||
1075 | al = SSL_AD_ILLEGAL_PARAMETER; | 1079 | al = SSL_AD_ILLEGAL_PARAMETER; |
1076 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, | 1080 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, |
1077 | SSL_R_REQUIRED_CIPHER_MISSING); | 1081 | SSL_R_REQUIRED_CIPHER_MISSING); |
@@ -1841,8 +1845,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1841 | *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE; | 1845 | *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE; |
1842 | l2n3(n, d); | 1846 | l2n3(n, d); |
1843 | 1847 | ||
1844 | /* we should now have things packed up, so lets send | 1848 | /* we should now have things packed up, so lets send it off */ |
1845 | * it off */ | ||
1846 | s->init_num = n + 4; | 1849 | s->init_num = n + 4; |
1847 | s->init_off = 0; | 1850 | s->init_off = 0; |
1848 | } | 1851 | } |
@@ -1928,9 +1931,7 @@ ssl3_send_certificate_request(SSL *s) | |||
1928 | *(d++) = SSL3_MT_CERTIFICATE_REQUEST; | 1931 | *(d++) = SSL3_MT_CERTIFICATE_REQUEST; |
1929 | l2n3(n, d); | 1932 | l2n3(n, d); |
1930 | 1933 | ||
1931 | /* we should now have things packed up, so lets send | 1934 | /* we should now have things packed up, so lets send it off */ |
1932 | * it off */ | ||
1933 | |||
1934 | s->init_num = n + 4; | 1935 | s->init_num = n + 4; |
1935 | s->init_off = 0; | 1936 | s->init_off = 0; |
1936 | #ifdef NETSCAPE_HANG_BUG | 1937 | #ifdef NETSCAPE_HANG_BUG |
@@ -1975,10 +1976,9 @@ ssl3_get_client_key_exchange(SSL *s) | |||
1975 | EC_POINT *clnt_ecpoint = NULL; | 1976 | EC_POINT *clnt_ecpoint = NULL; |
1976 | BN_CTX *bn_ctx = NULL; | 1977 | BN_CTX *bn_ctx = NULL; |
1977 | 1978 | ||
1978 | 1979 | /* 2048 maxlen is a guess. How long a key does that permit? */ | |
1979 | n = s->method->ssl_get_message(s, SSL3_ST_SR_KEY_EXCH_A, | 1980 | n = s->method->ssl_get_message(s, SSL3_ST_SR_KEY_EXCH_A, |
1980 | SSL3_ST_SR_KEY_EXCH_B, SSL3_MT_CLIENT_KEY_EXCHANGE, | 1981 | SSL3_ST_SR_KEY_EXCH_B, SSL3_MT_CLIENT_KEY_EXCHANGE, 2048, &ok); |
1981 | 2048, /* ??? */ &ok); | ||
1982 | if (!ok) | 1982 | if (!ok) |
1983 | return ((int)n); | 1983 | return ((int)n); |
1984 | p = (unsigned char *)s->init_msg; | 1984 | p = (unsigned char *)s->init_msg; |
@@ -1990,8 +1990,10 @@ ssl3_get_client_key_exchange(SSL *s) | |||
1990 | if (s->s3->tmp.use_rsa_tmp) { | 1990 | if (s->s3->tmp.use_rsa_tmp) { |
1991 | if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL)) | 1991 | if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL)) |
1992 | rsa = s->cert->rsa_tmp; | 1992 | rsa = s->cert->rsa_tmp; |
1993 | /* Don't do a callback because rsa_tmp should | 1993 | /* |
1994 | * be sent already */ | 1994 | * Don't do a callback because rsa_tmp should |
1995 | * be sent already | ||
1996 | */ | ||
1995 | if (rsa == NULL) { | 1997 | if (rsa == NULL) { |
1996 | al = SSL_AD_HANDSHAKE_FAILURE; | 1998 | al = SSL_AD_HANDSHAKE_FAILURE; |
1997 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | 1999 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, |
@@ -2054,7 +2056,8 @@ ssl3_get_client_key_exchange(SSL *s) | |||
2054 | al = SSL_AD_DECODE_ERROR; | 2056 | al = SSL_AD_DECODE_ERROR; |
2055 | /* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER); */ | 2057 | /* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER); */ |
2056 | 2058 | ||
2057 | /* The Klima-Pokorny-Rosa extension of | 2059 | /* |
2060 | * The Klima-Pokorny-Rosa extension of | ||
2058 | * Bleichenbacher's attack | 2061 | * Bleichenbacher's attack |
2059 | * (http://eprint.iacr.org/2003/052/) exploits | 2062 | * (http://eprint.iacr.org/2003/052/) exploits |
2060 | * the version number check as a "bad version | 2063 | * the version number check as a "bad version |
@@ -2227,7 +2230,8 @@ ssl3_get_client_key_exchange(SSL *s) | |||
2227 | } | 2230 | } |
2228 | ret = 2; /* Skip certificate verify processing */ | 2231 | ret = 2; /* Skip certificate verify processing */ |
2229 | } else { | 2232 | } else { |
2230 | /* Get client's public key from encoded point | 2233 | /* |
2234 | * Get client's public key from encoded point | ||
2231 | * in the ClientKeyExchange message. | 2235 | * in the ClientKeyExchange message. |
2232 | */ | 2236 | */ |
2233 | if ((bn_ctx = BN_CTX_new()) == NULL) { | 2237 | if ((bn_ctx = BN_CTX_new()) == NULL) { |
@@ -2474,9 +2478,9 @@ ssl3_get_cert_verify(SSL *s) | |||
2474 | EVP_MD_CTX mctx; | 2478 | EVP_MD_CTX mctx; |
2475 | EVP_MD_CTX_init(&mctx); | 2479 | EVP_MD_CTX_init(&mctx); |
2476 | 2480 | ||
2481 | /* 516 maxlen is enough for 4096 bit RSA key with TLS v1.2 */ | ||
2477 | n = s->method->ssl_get_message(s, SSL3_ST_SR_CERT_VRFY_A, | 2482 | n = s->method->ssl_get_message(s, SSL3_ST_SR_CERT_VRFY_A, |
2478 | SSL3_ST_SR_CERT_VRFY_B, -1, | 2483 | SSL3_ST_SR_CERT_VRFY_B, -1, 516, &ok); |
2479 | 516, /* Enough for 4096 bit RSA key with TLS v1.2 */ &ok); | ||
2480 | if (!ok) | 2484 | if (!ok) |
2481 | return ((int)n); | 2485 | return ((int)n); |
2482 | 2486 | ||
@@ -2815,8 +2819,10 @@ ssl3_get_client_certificate(SSL *s) | |||
2815 | s->session->peer = sk_X509_shift(sk); | 2819 | s->session->peer = sk_X509_shift(sk); |
2816 | s->session->verify_result = s->verify_result; | 2820 | s->session->verify_result = s->verify_result; |
2817 | 2821 | ||
2818 | /* With the current implementation, sess_cert will always be NULL | 2822 | /* |
2819 | * when we arrive here. */ | 2823 | * With the current implementation, sess_cert will always be NULL |
2824 | * when we arrive here | ||
2825 | */ | ||
2820 | if (s->session->sess_cert == NULL) { | 2826 | if (s->session->sess_cert == NULL) { |
2821 | s->session->sess_cert = ssl_sess_cert_new(); | 2827 | s->session->sess_cert = ssl_sess_cert_new(); |
2822 | if (s->session->sess_cert == NULL) { | 2828 | if (s->session->sess_cert == NULL) { |
@@ -2828,8 +2834,11 @@ ssl3_get_client_certificate(SSL *s) | |||
2828 | if (s->session->sess_cert->cert_chain != NULL) | 2834 | if (s->session->sess_cert->cert_chain != NULL) |
2829 | sk_X509_pop_free(s->session->sess_cert->cert_chain, X509_free); | 2835 | sk_X509_pop_free(s->session->sess_cert->cert_chain, X509_free); |
2830 | s->session->sess_cert->cert_chain = sk; | 2836 | s->session->sess_cert->cert_chain = sk; |
2831 | /* Inconsistency alert: cert_chain does *not* include the | 2837 | |
2832 | * peer's own certificate, while we do include it in s3_clnt.c */ | 2838 | /* |
2839 | * Inconsistency alert: cert_chain does *not* include the | ||
2840 | * peer's own certificate, while we do include it in s3_clnt.c | ||
2841 | */ | ||
2833 | 2842 | ||
2834 | sk = NULL; | 2843 | sk = NULL; |
2835 | 2844 | ||
@@ -3080,9 +3089,9 @@ ssl3_get_next_proto(SSL *s) | |||
3080 | return (-1); | 3089 | return (-1); |
3081 | } | 3090 | } |
3082 | 3091 | ||
3092 | /* 514 maxlen is enough for the payload format below */ | ||
3083 | n = s->method->ssl_get_message(s, SSL3_ST_SR_NEXT_PROTO_A, | 3093 | n = s->method->ssl_get_message(s, SSL3_ST_SR_NEXT_PROTO_A, |
3084 | SSL3_ST_SR_NEXT_PROTO_B, SSL3_MT_NEXT_PROTO, | 3094 | SSL3_ST_SR_NEXT_PROTO_B, SSL3_MT_NEXT_PROTO, 514, &ok); |
3085 | 514, /* See the payload format below */ &ok); | ||
3086 | if (!ok) | 3095 | if (!ok) |
3087 | return ((int)n); | 3096 | return ((int)n); |
3088 | 3097 | ||
diff --git a/src/lib/libssl/src/ssl/d1_both.c b/src/lib/libssl/src/ssl/d1_both.c index bd4267238f..f27588fcff 100644 --- a/src/lib/libssl/src/ssl/d1_both.c +++ b/src/lib/libssl/src/ssl/d1_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_both.c,v 1.22 2014/07/02 20:45:26 miod Exp $ */ | 1 | /* $OpenBSD: d1_both.c,v 1.23 2014/07/10 08:25:00 guenther 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. |
@@ -233,8 +233,11 @@ dtls1_do_write(SSL *s, int type) | |||
233 | s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), | 233 | s->d1->mtu = BIO_ctrl(SSL_get_wbio(s), |
234 | BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); | 234 | BIO_CTRL_DGRAM_QUERY_MTU, 0, NULL); |
235 | 235 | ||
236 | /* I've seen the kernel return bogus numbers when it doesn't know | 236 | /* |
237 | * (initial write), so just make sure we have a reasonable number */ | 237 | * I've seen the kernel return bogus numbers when it |
238 | * doesn't know the MTU (ie., the initial write), so just | ||
239 | * make sure we have a reasonable number | ||
240 | */ | ||
238 | if (s->d1->mtu < dtls1_min_mtu()) { | 241 | if (s->d1->mtu < dtls1_min_mtu()) { |
239 | s->d1->mtu = 0; | 242 | s->d1->mtu = 0; |
240 | s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); | 243 | s->d1->mtu = dtls1_guess_mtu(s->d1->mtu); |
@@ -306,11 +309,12 @@ dtls1_do_write(SSL *s, int type) | |||
306 | ret = dtls1_write_bytes(s, type, | 309 | ret = dtls1_write_bytes(s, type, |
307 | &s->init_buf->data[s->init_off], len); | 310 | &s->init_buf->data[s->init_off], len); |
308 | if (ret < 0) { | 311 | if (ret < 0) { |
309 | /* might need to update MTU here, but we don't know | 312 | /* |
310 | * which previous packet caused the failure -- so can't | 313 | * Might need to update MTU here, but we don't know |
311 | * really retransmit anything. continue as if everything | 314 | * which previous packet caused the failure -- so |
312 | * is fine and wait for an alert to handle the | 315 | * can't really retransmit anything. continue as |
313 | * retransmit | 316 | * if everything is fine and wait for an alert to |
317 | * handle the retransmit | ||
314 | */ | 318 | */ |
315 | if (BIO_ctrl(SSL_get_wbio(s), | 319 | if (BIO_ctrl(SSL_get_wbio(s), |
316 | BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0) | 320 | BIO_CTRL_DGRAM_MTU_EXCEEDED, 0, NULL) > 0) |
@@ -320,22 +324,30 @@ dtls1_do_write(SSL *s, int type) | |||
320 | return (-1); | 324 | return (-1); |
321 | } else { | 325 | } else { |
322 | 326 | ||
323 | /* bad if this assert fails, only part of the handshake | 327 | /* |
324 | * message got sent. but why would this happen? */ | 328 | * Bad if this assert fails, only part of the |
329 | * handshake message got sent. but why would | ||
330 | * this happen? | ||
331 | */ | ||
325 | OPENSSL_assert(len == (unsigned int)ret); | 332 | OPENSSL_assert(len == (unsigned int)ret); |
326 | 333 | ||
327 | if (type == SSL3_RT_HANDSHAKE && | 334 | if (type == SSL3_RT_HANDSHAKE && |
328 | !s->d1->retransmitting) { | 335 | !s->d1->retransmitting) { |
329 | /* should not be done for 'Hello Request's, but in that case | 336 | /* |
330 | * we'll ignore the result anyway */ | 337 | * Should not be done for 'Hello Request's, |
338 | * but in that case we'll ignore the result | ||
339 | * anyway | ||
340 | */ | ||
331 | unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; | 341 | unsigned char *p = (unsigned char *)&s->init_buf->data[s->init_off]; |
332 | const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; | 342 | const struct hm_header_st *msg_hdr = &s->d1->w_msg_hdr; |
333 | int xlen; | 343 | int xlen; |
334 | 344 | ||
335 | if (frag_off == 0 && | 345 | if (frag_off == 0 && |
336 | s->version != DTLS1_BAD_VER) { | 346 | s->version != DTLS1_BAD_VER) { |
337 | /* reconstruct message header is if it | 347 | /* |
338 | * is being sent in single fragment */ | 348 | * Reconstruct message header is if it |
349 | * is being sent in single fragment | ||
350 | */ | ||
339 | *p++ = msg_hdr->type; | 351 | *p++ = msg_hdr->type; |
340 | l2n3(msg_hdr->msg_len, p); | 352 | l2n3(msg_hdr->msg_len, p); |
341 | s2n (msg_hdr->seq, p); | 353 | s2n (msg_hdr->seq, p); |
@@ -373,7 +385,8 @@ dtls1_do_write(SSL *s, int type) | |||
373 | } | 385 | } |
374 | 386 | ||
375 | 387 | ||
376 | /* Obtain handshake message of message type 'mt' (any if mt == -1), | 388 | /* |
389 | * Obtain handshake message of message type 'mt' (any if mt == -1), | ||
377 | * maximum acceptable body length 'max'. | 390 | * maximum acceptable body length 'max'. |
378 | * Read an entire handshake message. Handshake messages arrive in | 391 | * Read an entire handshake message. Handshake messages arrive in |
379 | * fragments. | 392 | * fragments. |
@@ -386,8 +399,10 @@ dtls1_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
386 | unsigned char *p; | 399 | unsigned char *p; |
387 | unsigned long msg_len; | 400 | unsigned long msg_len; |
388 | 401 | ||
389 | /* s3->tmp is used to store messages that are unexpected, caused | 402 | /* |
390 | * by the absence of an optional handshake message */ | 403 | * s3->tmp is used to store messages that are unexpected, caused |
404 | * by the absence of an optional handshake message | ||
405 | */ | ||
391 | if (s->s3->tmp.reuse_message) { | 406 | if (s->s3->tmp.reuse_message) { |
392 | s->s3->tmp.reuse_message = 0; | 407 | s->s3->tmp.reuse_message = 0; |
393 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { | 408 | if ((mt >= 0) && (s->s3->tmp.message_type != mt)) { |
@@ -472,8 +487,10 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
472 | 487 | ||
473 | if ( s->d1->r_msg_hdr.frag_off == 0) /* first fragment */ | 488 | if ( s->d1->r_msg_hdr.frag_off == 0) /* first fragment */ |
474 | { | 489 | { |
475 | /* msg_len is limited to 2^24, but is effectively checked | 490 | /* |
476 | * against max above */ | 491 | * msg_len is limited to 2^24, but is effectively checked |
492 | * against max above | ||
493 | */ | ||
477 | if (!BUF_MEM_grow_clean(s->init_buf, | 494 | if (!BUF_MEM_grow_clean(s->init_buf, |
478 | msg_len + DTLS1_HM_HEADER_LENGTH)) { | 495 | msg_len + DTLS1_HM_HEADER_LENGTH)) { |
479 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, ERR_R_BUF_LIB); | 496 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, ERR_R_BUF_LIB); |
@@ -486,8 +503,10 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
486 | s->d1->r_msg_hdr.type = msg_hdr->type; | 503 | s->d1->r_msg_hdr.type = msg_hdr->type; |
487 | s->d1->r_msg_hdr.seq = msg_hdr->seq; | 504 | s->d1->r_msg_hdr.seq = msg_hdr->seq; |
488 | } else if (msg_len != s->d1->r_msg_hdr.msg_len) { | 505 | } else if (msg_len != s->d1->r_msg_hdr.msg_len) { |
489 | /* They must be playing with us! BTW, failure to enforce | 506 | /* |
490 | * upper limit would open possibility for buffer overrun. */ | 507 | * They must be playing with us! BTW, failure to enforce |
508 | * upper limit would open possibility for buffer overrun. | ||
509 | */ | ||
491 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, | 510 | SSLerr(SSL_F_DTLS1_PREPROCESS_FRAGMENT, |
492 | SSL_R_EXCESSIVE_MESSAGE_SIZE); | 511 | SSL_R_EXCESSIVE_MESSAGE_SIZE); |
493 | return SSL_AD_ILLEGAL_PARAMETER; | 512 | return SSL_AD_ILLEGAL_PARAMETER; |
@@ -499,7 +518,8 @@ dtls1_preprocess_fragment(SSL *s, struct hm_header_st *msg_hdr, int max) | |||
499 | static int | 518 | static int |
500 | dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) | 519 | dtls1_retrieve_buffered_fragment(SSL *s, long max, int *ok) |
501 | { | 520 | { |
502 | /* (0) check whether the desired fragment is available | 521 | /* |
522 | * (0) check whether the desired fragment is available | ||
503 | * if so: | 523 | * if so: |
504 | * (1) copy over the fragment to s->init_buf->data[] | 524 | * (1) copy over the fragment to s->init_buf->data[] |
505 | * (2) update s->init_num | 525 | * (2) update s->init_num |
@@ -561,7 +581,8 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
561 | if ((msg_hdr->frag_off + frag_len) > msg_hdr->msg_len) | 581 | if ((msg_hdr->frag_off + frag_len) > msg_hdr->msg_len) |
562 | goto err; | 582 | goto err; |
563 | 583 | ||
564 | /* Determine maximum allowed message size. Depends on (user set) | 584 | /* |
585 | * Determine maximum allowed message size. Depends on (user set) | ||
565 | * maximum certificate length, but 16k is minimum. | 586 | * maximum certificate length, but 16k is minimum. |
566 | */ | 587 | */ |
567 | if (DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH < | 588 | if (DTLS1_HM_HEADER_LENGTH + SSL3_RT_MAX_ENCRYPTED_LENGTH < |
@@ -595,7 +616,8 @@ dtls1_reassemble_fragment(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
595 | } | 616 | } |
596 | } | 617 | } |
597 | 618 | ||
598 | /* If message is already reassembled, this must be a | 619 | /* |
620 | * If message is already reassembled, this must be a | ||
599 | * retransmit and can be dropped. | 621 | * retransmit and can be dropped. |
600 | */ | 622 | */ |
601 | if (frag->reassembly == NULL) { | 623 | if (frag->reassembly == NULL) { |
@@ -672,13 +694,15 @@ dtls1_process_out_of_seq_message(SSL *s, struct hm_header_st* msg_hdr, int *ok) | |||
672 | seq64be[7] = (unsigned char) msg_hdr->seq; | 694 | seq64be[7] = (unsigned char) msg_hdr->seq; |
673 | item = pqueue_find(s->d1->buffered_messages, seq64be); | 695 | item = pqueue_find(s->d1->buffered_messages, seq64be); |
674 | 696 | ||
675 | /* If we already have an entry and this one is a fragment, | 697 | /* |
698 | * If we already have an entry and this one is a fragment, | ||
676 | * don't discard it and rather try to reassemble it. | 699 | * don't discard it and rather try to reassemble it. |
677 | */ | 700 | */ |
678 | if (item != NULL && frag_len < msg_hdr->msg_len) | 701 | if (item != NULL && frag_len < msg_hdr->msg_len) |
679 | item = NULL; | 702 | item = NULL; |
680 | 703 | ||
681 | /* Discard the message if sequence number was already there, is | 704 | /* |
705 | * Discard the message if sequence number was already there, is | ||
682 | * too far in the future, already in the queue or if we received | 706 | * too far in the future, already in the queue or if we received |
683 | * a FINISHED before the SERVER_HELLO, which then must be a stale | 707 | * a FINISHED before the SERVER_HELLO, which then must be a stale |
684 | * retransmit. | 708 | * retransmit. |
@@ -791,10 +815,12 @@ again: | |||
791 | 815 | ||
792 | if (!s->server && s->d1->r_msg_hdr.frag_off == 0 && | 816 | if (!s->server && s->d1->r_msg_hdr.frag_off == 0 && |
793 | wire[0] == SSL3_MT_HELLO_REQUEST) { | 817 | wire[0] == SSL3_MT_HELLO_REQUEST) { |
794 | /* The server may always send 'Hello Request' messages -- | 818 | /* |
819 | * The server may always send 'Hello Request' messages -- | ||
795 | * we are doing a handshake anyway now, so ignore them | 820 | * we are doing a handshake anyway now, so ignore them |
796 | * if their format is correct. Does not count for | 821 | * if their format is correct. Does not count for |
797 | * 'Finished' MAC. */ | 822 | * 'Finished' MAC. |
823 | */ | ||
798 | if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) { | 824 | if (wire[1] == 0 && wire[2] == 0 && wire[3] == 0) { |
799 | if (s->msg_callback) | 825 | if (s->msg_callback) |
800 | s->msg_callback(0, s->version, | 826 | s->msg_callback(0, s->version, |
@@ -834,8 +860,10 @@ again: | |||
834 | } else | 860 | } else |
835 | i = 0; | 861 | i = 0; |
836 | 862 | ||
837 | /* XDTLS: an incorrectly formatted fragment should cause the | 863 | /* |
838 | * handshake to fail */ | 864 | * XDTLS: an incorrectly formatted fragment should cause the |
865 | * handshake to fail | ||
866 | */ | ||
839 | if (i != (int)frag_len) { | 867 | if (i != (int)frag_len) { |
840 | al = SSL3_AD_ILLEGAL_PARAMETER; | 868 | al = SSL3_AD_ILLEGAL_PARAMETER; |
841 | SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT, | 869 | SSLerr(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT, |
@@ -845,10 +873,12 @@ again: | |||
845 | 873 | ||
846 | *ok = 1; | 874 | *ok = 1; |
847 | 875 | ||
848 | /* Note that s->init_num is *not* used as current offset in | 876 | /* |
877 | * Note that s->init_num is *not* used as current offset in | ||
849 | * s->init_buf->data, but as a counter summing up fragments' | 878 | * s->init_buf->data, but as a counter summing up fragments' |
850 | * lengths: as soon as they sum up to handshake packet | 879 | * lengths: as soon as they sum up to handshake packet |
851 | * length, we assume we have got all the fragments. */ | 880 | * length, we assume we have got all the fragments. |
881 | */ | ||
852 | s->init_num = frag_len; | 882 | s->init_num = frag_len; |
853 | return frag_len; | 883 | return frag_len; |
854 | 884 | ||
@@ -878,7 +908,8 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
878 | p += i; | 908 | p += i; |
879 | l = i; | 909 | l = i; |
880 | 910 | ||
881 | /* Copy the finished so we can use it for | 911 | /* |
912 | * Copy the finished so we can use it for | ||
882 | * renegotiation checks | 913 | * renegotiation checks |
883 | */ | 914 | */ |
884 | if (s->type == SSL_ST_CONNECT) { | 915 | if (s->type == SSL_ST_CONNECT) { |
@@ -907,7 +938,8 @@ dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen) | |||
907 | return (dtls1_do_write(s, SSL3_RT_HANDSHAKE)); | 938 | return (dtls1_do_write(s, SSL3_RT_HANDSHAKE)); |
908 | } | 939 | } |
909 | 940 | ||
910 | /* for these 2 messages, we need to | 941 | /* |
942 | * for these 2 messages, we need to | ||
911 | * ssl->enc_read_ctx re-init | 943 | * ssl->enc_read_ctx re-init |
912 | * ssl->s3->read_sequence zero | 944 | * ssl->s3->read_sequence zero |
913 | * ssl->s3->read_mac_secret re-init | 945 | * ssl->s3->read_mac_secret re-init |
@@ -1031,8 +1063,10 @@ dtls1_read_failed(SSL *s, int code) | |||
1031 | } | 1063 | } |
1032 | 1064 | ||
1033 | if (!dtls1_is_timer_expired(s)) { | 1065 | if (!dtls1_is_timer_expired(s)) { |
1034 | /* not a timeout, none of our business, | 1066 | /* |
1035 | let higher layers handle this. in fact it's probably an error */ | 1067 | * not a timeout, none of our business, let higher layers |
1068 | * handle this. in fact it's probably an error | ||
1069 | */ | ||
1036 | return code; | 1070 | return code; |
1037 | } | 1071 | } |
1038 | 1072 | ||
@@ -1048,13 +1082,16 @@ dtls1_read_failed(SSL *s, int code) | |||
1048 | int | 1082 | int |
1049 | dtls1_get_queue_priority(unsigned short seq, int is_ccs) | 1083 | dtls1_get_queue_priority(unsigned short seq, int is_ccs) |
1050 | { | 1084 | { |
1051 | /* The index of the retransmission queue actually is the message sequence number, | 1085 | /* |
1052 | * since the queue only contains messages of a single handshake. However, the | 1086 | * The index of the retransmission queue actually is the message |
1053 | * ChangeCipherSpec has no message sequence number and so using only the sequence | 1087 | * sequence number, since the queue only contains messages of a |
1054 | * will result in the CCS and Finished having the same index. To prevent this, | 1088 | * single handshake. However, the ChangeCipherSpec has no message |
1055 | * the sequence number is multiplied by 2. In case of a CCS 1 is subtracted. | 1089 | * sequence number and so using only the sequence will result in |
1056 | * This does not only differ CSS and Finished, it also maintains the order of the | 1090 | * the CCS and Finished having the same index. To prevent this, the |
1057 | * index (important for priority queues) and fits in the unsigned short variable. | 1091 | * sequence number is multiplied by 2. In case of a CCS 1 is |
1092 | * subtracted. This does not only differ CSS and Finished, it also | ||
1093 | * maintains the order of the index (important for priority queues) | ||
1094 | * and fits in the unsigned short variable. | ||
1058 | */ | 1095 | */ |
1059 | return seq * 2 - is_ccs; | 1096 | return seq * 2 - is_ccs; |
1060 | } | 1097 | } |
@@ -1092,8 +1129,10 @@ dtls1_buffer_message(SSL *s, int is_ccs) | |||
1092 | hm_fragment *frag; | 1129 | hm_fragment *frag; |
1093 | unsigned char seq64be[8]; | 1130 | unsigned char seq64be[8]; |
1094 | 1131 | ||
1095 | /* this function is called immediately after a message has | 1132 | /* |
1096 | * been serialized */ | 1133 | * This function is called immediately after a message has |
1134 | * been serialized | ||
1135 | */ | ||
1097 | OPENSSL_assert(s->init_off == 0); | 1136 | OPENSSL_assert(s->init_off == 0); |
1098 | 1137 | ||
1099 | frag = dtls1_hm_fragment_new(s->init_num, 0); | 1138 | frag = dtls1_hm_fragment_new(s->init_num, 0); |
diff --git a/src/lib/libssl/src/ssl/s3_srvr.c b/src/lib/libssl/src/ssl/s3_srvr.c index f24d0f9cf8..a3e62ea323 100644 --- a/src/lib/libssl/src/ssl/s3_srvr.c +++ b/src/lib/libssl/src/ssl/s3_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: s3_srvr.c,v 1.68 2014/07/09 11:25:42 jsing Exp $ */ | 1 | /* $OpenBSD: s3_srvr.c,v 1.69 2014/07/10 08:25:00 guenther Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -312,8 +312,10 @@ ssl3_accept(SSL *s) | |||
312 | ret = -1; | 312 | ret = -1; |
313 | goto end; | 313 | goto end; |
314 | } else { | 314 | } else { |
315 | /* s->state == SSL_ST_RENEGOTIATE, | 315 | /* |
316 | * we will just send a HelloRequest */ | 316 | * s->state == SSL_ST_RENEGOTIATE, |
317 | * we will just send a HelloRequest | ||
318 | */ | ||
317 | s->ctx->stats.sess_accept_renegotiate++; | 319 | s->ctx->stats.sess_accept_renegotiate++; |
318 | s->state = SSL3_ST_SW_HELLO_REQ_A; | 320 | s->state = SSL3_ST_SW_HELLO_REQ_A; |
319 | } | 321 | } |
@@ -404,19 +406,21 @@ ssl3_accept(SSL *s) | |||
404 | ) | 406 | ) |
405 | /* | 407 | /* |
406 | * option SSL_OP_EPHEMERAL_RSA sends temporary | 408 | * option SSL_OP_EPHEMERAL_RSA sends temporary |
407 | * RSA key even when forbidden by protocol specs | 409 | * RSA key even when forbidden by protocol |
408 | * (handshake may fail as clients are not | 410 | * specs (handshake may fail as clients are |
409 | * required to be able to handle this) | 411 | * not required to be able to handle this) |
410 | */ | 412 | */ |
411 | s->s3->tmp.use_rsa_tmp = 1; | 413 | s->s3->tmp.use_rsa_tmp = 1; |
412 | else | 414 | else |
413 | s->s3->tmp.use_rsa_tmp = 0; | 415 | s->s3->tmp.use_rsa_tmp = 0; |
414 | 416 | ||
415 | 417 | ||
416 | /* only send if a DH key exchange, fortezza or | 418 | /* |
419 | * Only send if a DH key exchange, fortezza or | ||
417 | * RSA but we have a sign only certificate | 420 | * RSA but we have a sign only certificate |
418 | * | 421 | * |
419 | * PSK: may send PSK identity hints | 422 | * PSK: send ServerKeyExchange if PSK identity |
423 | * hint is provided | ||
420 | * | 424 | * |
421 | * For ECC ciphersuites, we send a serverKeyExchange | 425 | * For ECC ciphersuites, we send a serverKeyExchange |
422 | * message only if the cipher suite is either | 426 | * message only if the cipher suite is either |
@@ -425,8 +429,6 @@ ssl3_accept(SSL *s) | |||
425 | * public key for key exchange. | 429 | * public key for key exchange. |
426 | */ | 430 | */ |
427 | if (s->s3->tmp.use_rsa_tmp | 431 | if (s->s3->tmp.use_rsa_tmp |
428 | /* PSK: send ServerKeyExchange if PSK identity | ||
429 | * hint if provided */ | ||
430 | #ifndef OPENSSL_NO_PSK | 432 | #ifndef OPENSSL_NO_PSK |
431 | || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint) | 433 | || ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint) |
432 | #endif | 434 | #endif |
@@ -1070,8 +1072,10 @@ ssl3_get_client_hello(SSL *s) | |||
1070 | } | 1072 | } |
1071 | } | 1073 | } |
1072 | if (j == 0) { | 1074 | if (j == 0) { |
1073 | /* we need to have the cipher in the cipher | 1075 | /* |
1074 | * list if we are asked to reuse it */ | 1076 | * We need to have the cipher in the cipher |
1077 | * list if we are asked to reuse it | ||
1078 | */ | ||
1075 | al = SSL_AD_ILLEGAL_PARAMETER; | 1079 | al = SSL_AD_ILLEGAL_PARAMETER; |
1076 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, | 1080 | SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, |
1077 | SSL_R_REQUIRED_CIPHER_MISSING); | 1081 | SSL_R_REQUIRED_CIPHER_MISSING); |
@@ -1841,8 +1845,7 @@ ssl3_send_server_key_exchange(SSL *s) | |||
1841 | *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE; | 1845 | *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE; |
1842 | l2n3(n, d); | 1846 | l2n3(n, d); |
1843 | 1847 | ||
1844 | /* we should now have things packed up, so lets send | 1848 | /* we should now have things packed up, so lets send it off */ |
1845 | * it off */ | ||
1846 | s->init_num = n + 4; | 1849 | s->init_num = n + 4; |
1847 | s->init_off = 0; | 1850 | s->init_off = 0; |
1848 | } | 1851 | } |
@@ -1928,9 +1931,7 @@ ssl3_send_certificate_request(SSL *s) | |||
1928 | *(d++) = SSL3_MT_CERTIFICATE_REQUEST; | 1931 | *(d++) = SSL3_MT_CERTIFICATE_REQUEST; |
1929 | l2n3(n, d); | 1932 | l2n3(n, d); |
1930 | 1933 | ||
1931 | /* we should now have things packed up, so lets send | 1934 | /* we should now have things packed up, so lets send it off */ |
1932 | * it off */ | ||
1933 | |||
1934 | s->init_num = n + 4; | 1935 | s->init_num = n + 4; |
1935 | s->init_off = 0; | 1936 | s->init_off = 0; |
1936 | #ifdef NETSCAPE_HANG_BUG | 1937 | #ifdef NETSCAPE_HANG_BUG |
@@ -1975,10 +1976,9 @@ ssl3_get_client_key_exchange(SSL *s) | |||
1975 | EC_POINT *clnt_ecpoint = NULL; | 1976 | EC_POINT *clnt_ecpoint = NULL; |
1976 | BN_CTX *bn_ctx = NULL; | 1977 | BN_CTX *bn_ctx = NULL; |
1977 | 1978 | ||
1978 | 1979 | /* 2048 maxlen is a guess. How long a key does that permit? */ | |
1979 | n = s->method->ssl_get_message(s, SSL3_ST_SR_KEY_EXCH_A, | 1980 | n = s->method->ssl_get_message(s, SSL3_ST_SR_KEY_EXCH_A, |
1980 | SSL3_ST_SR_KEY_EXCH_B, SSL3_MT_CLIENT_KEY_EXCHANGE, | 1981 | SSL3_ST_SR_KEY_EXCH_B, SSL3_MT_CLIENT_KEY_EXCHANGE, 2048, &ok); |
1981 | 2048, /* ??? */ &ok); | ||
1982 | if (!ok) | 1982 | if (!ok) |
1983 | return ((int)n); | 1983 | return ((int)n); |
1984 | p = (unsigned char *)s->init_msg; | 1984 | p = (unsigned char *)s->init_msg; |
@@ -1990,8 +1990,10 @@ ssl3_get_client_key_exchange(SSL *s) | |||
1990 | if (s->s3->tmp.use_rsa_tmp) { | 1990 | if (s->s3->tmp.use_rsa_tmp) { |
1991 | if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL)) | 1991 | if ((s->cert != NULL) && (s->cert->rsa_tmp != NULL)) |
1992 | rsa = s->cert->rsa_tmp; | 1992 | rsa = s->cert->rsa_tmp; |
1993 | /* Don't do a callback because rsa_tmp should | 1993 | /* |
1994 | * be sent already */ | 1994 | * Don't do a callback because rsa_tmp should |
1995 | * be sent already | ||
1996 | */ | ||
1995 | if (rsa == NULL) { | 1997 | if (rsa == NULL) { |
1996 | al = SSL_AD_HANDSHAKE_FAILURE; | 1998 | al = SSL_AD_HANDSHAKE_FAILURE; |
1997 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, | 1999 | SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, |
@@ -2054,7 +2056,8 @@ ssl3_get_client_key_exchange(SSL *s) | |||
2054 | al = SSL_AD_DECODE_ERROR; | 2056 | al = SSL_AD_DECODE_ERROR; |
2055 | /* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER); */ | 2057 | /* SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,SSL_R_BAD_PROTOCOL_VERSION_NUMBER); */ |
2056 | 2058 | ||
2057 | /* The Klima-Pokorny-Rosa extension of | 2059 | /* |
2060 | * The Klima-Pokorny-Rosa extension of | ||
2058 | * Bleichenbacher's attack | 2061 | * Bleichenbacher's attack |
2059 | * (http://eprint.iacr.org/2003/052/) exploits | 2062 | * (http://eprint.iacr.org/2003/052/) exploits |
2060 | * the version number check as a "bad version | 2063 | * the version number check as a "bad version |
@@ -2227,7 +2230,8 @@ ssl3_get_client_key_exchange(SSL *s) | |||
2227 | } | 2230 | } |
2228 | ret = 2; /* Skip certificate verify processing */ | 2231 | ret = 2; /* Skip certificate verify processing */ |
2229 | } else { | 2232 | } else { |
2230 | /* Get client's public key from encoded point | 2233 | /* |
2234 | * Get client's public key from encoded point | ||
2231 | * in the ClientKeyExchange message. | 2235 | * in the ClientKeyExchange message. |
2232 | */ | 2236 | */ |
2233 | if ((bn_ctx = BN_CTX_new()) == NULL) { | 2237 | if ((bn_ctx = BN_CTX_new()) == NULL) { |
@@ -2474,9 +2478,9 @@ ssl3_get_cert_verify(SSL *s) | |||
2474 | EVP_MD_CTX mctx; | 2478 | EVP_MD_CTX mctx; |
2475 | EVP_MD_CTX_init(&mctx); | 2479 | EVP_MD_CTX_init(&mctx); |
2476 | 2480 | ||
2481 | /* 516 maxlen is enough for 4096 bit RSA key with TLS v1.2 */ | ||
2477 | n = s->method->ssl_get_message(s, SSL3_ST_SR_CERT_VRFY_A, | 2482 | n = s->method->ssl_get_message(s, SSL3_ST_SR_CERT_VRFY_A, |
2478 | SSL3_ST_SR_CERT_VRFY_B, -1, | 2483 | SSL3_ST_SR_CERT_VRFY_B, -1, 516, &ok); |
2479 | 516, /* Enough for 4096 bit RSA key with TLS v1.2 */ &ok); | ||
2480 | if (!ok) | 2484 | if (!ok) |
2481 | return ((int)n); | 2485 | return ((int)n); |
2482 | 2486 | ||
@@ -2815,8 +2819,10 @@ ssl3_get_client_certificate(SSL *s) | |||
2815 | s->session->peer = sk_X509_shift(sk); | 2819 | s->session->peer = sk_X509_shift(sk); |
2816 | s->session->verify_result = s->verify_result; | 2820 | s->session->verify_result = s->verify_result; |
2817 | 2821 | ||
2818 | /* With the current implementation, sess_cert will always be NULL | 2822 | /* |
2819 | * when we arrive here. */ | 2823 | * With the current implementation, sess_cert will always be NULL |
2824 | * when we arrive here | ||
2825 | */ | ||
2820 | if (s->session->sess_cert == NULL) { | 2826 | if (s->session->sess_cert == NULL) { |
2821 | s->session->sess_cert = ssl_sess_cert_new(); | 2827 | s->session->sess_cert = ssl_sess_cert_new(); |
2822 | if (s->session->sess_cert == NULL) { | 2828 | if (s->session->sess_cert == NULL) { |
@@ -2828,8 +2834,11 @@ ssl3_get_client_certificate(SSL *s) | |||
2828 | if (s->session->sess_cert->cert_chain != NULL) | 2834 | if (s->session->sess_cert->cert_chain != NULL) |
2829 | sk_X509_pop_free(s->session->sess_cert->cert_chain, X509_free); | 2835 | sk_X509_pop_free(s->session->sess_cert->cert_chain, X509_free); |
2830 | s->session->sess_cert->cert_chain = sk; | 2836 | s->session->sess_cert->cert_chain = sk; |
2831 | /* Inconsistency alert: cert_chain does *not* include the | 2837 | |
2832 | * peer's own certificate, while we do include it in s3_clnt.c */ | 2838 | /* |
2839 | * Inconsistency alert: cert_chain does *not* include the | ||
2840 | * peer's own certificate, while we do include it in s3_clnt.c | ||
2841 | */ | ||
2833 | 2842 | ||
2834 | sk = NULL; | 2843 | sk = NULL; |
2835 | 2844 | ||
@@ -3080,9 +3089,9 @@ ssl3_get_next_proto(SSL *s) | |||
3080 | return (-1); | 3089 | return (-1); |
3081 | } | 3090 | } |
3082 | 3091 | ||
3092 | /* 514 maxlen is enough for the payload format below */ | ||
3083 | n = s->method->ssl_get_message(s, SSL3_ST_SR_NEXT_PROTO_A, | 3093 | n = s->method->ssl_get_message(s, SSL3_ST_SR_NEXT_PROTO_A, |
3084 | SSL3_ST_SR_NEXT_PROTO_B, SSL3_MT_NEXT_PROTO, | 3094 | SSL3_ST_SR_NEXT_PROTO_B, SSL3_MT_NEXT_PROTO, 514, &ok); |
3085 | 514, /* See the payload format below */ &ok); | ||
3086 | if (!ok) | 3095 | if (!ok) |
3087 | return ((int)n); | 3096 | return ((int)n); |
3088 | 3097 | ||
diff --git a/src/lib/libssl/src/ssl/ssl_cert.c b/src/lib/libssl/src/ssl/ssl_cert.c index 5b5ffac06f..6aae59e310 100644 --- a/src/lib/libssl/src/ssl/ssl_cert.c +++ b/src/lib/libssl/src/ssl/ssl_cert.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_cert.c,v 1.40 2014/07/09 11:25:42 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.41 2014/07/10 08:25:00 guenther Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -195,9 +195,11 @@ ssl_cert_dup(CERT *cert) | |||
195 | return (NULL); | 195 | return (NULL); |
196 | } | 196 | } |
197 | 197 | ||
198 | /* | ||
199 | * same as ret->key = ret->pkeys + (cert->key - cert->pkeys), | ||
200 | * if you find that more readable | ||
201 | */ | ||
198 | ret->key = &ret->pkeys[cert->key - &cert->pkeys[0]]; | 202 | ret->key = &ret->pkeys[cert->key - &cert->pkeys[0]]; |
199 | /* or ret->key = ret->pkeys + (cert->key - cert->pkeys), | ||
200 | * if you find that more readable */ | ||
201 | 203 | ||
202 | ret->valid = cert->valid; | 204 | ret->valid = cert->valid; |
203 | ret->mask_k = cert->mask_k; | 205 | ret->mask_k = cert->mask_k; |
@@ -256,9 +258,11 @@ ssl_cert_dup(CERT *cert) | |||
256 | CRYPTO_LOCK_EVP_PKEY); | 258 | CRYPTO_LOCK_EVP_PKEY); |
257 | 259 | ||
258 | switch (i) { | 260 | switch (i) { |
259 | /* If there was anything special to do for | 261 | /* |
262 | * If there was anything special to do for | ||
260 | * certain types of keys, we'd do it here. | 263 | * certain types of keys, we'd do it here. |
261 | * (Nothing at the moment, I think.) */ | 264 | * (Nothing at the moment, I think.) |
265 | */ | ||
262 | 266 | ||
263 | case SSL_PKEY_RSA_ENC: | 267 | case SSL_PKEY_RSA_ENC: |
264 | case SSL_PKEY_RSA_SIGN: | 268 | case SSL_PKEY_RSA_SIGN: |
@@ -285,12 +289,15 @@ ssl_cert_dup(CERT *cert) | |||
285 | } | 289 | } |
286 | } | 290 | } |
287 | 291 | ||
288 | /* ret->extra_certs *should* exist, but currently the own certificate | 292 | /* |
289 | * chain is held inside SSL_CTX */ | 293 | * ret->extra_certs *should* exist, but currently the own certificate |
294 | * chain is held inside SSL_CTX | ||
295 | */ | ||
290 | 296 | ||
291 | ret->references = 1; | 297 | ret->references = 1; |
292 | /* Set digests to defaults. NB: we don't copy existing values as they | 298 | /* |
293 | * will be set during handshake. | 299 | * Set digests to defaults. NB: we don't copy existing values |
300 | * as they will be set during handshake. | ||
294 | */ | 301 | */ |
295 | ssl_cert_set_default_md(ret); | 302 | ssl_cert_set_default_md(ret); |
296 | 303 | ||
@@ -339,7 +346,8 @@ ssl_cert_free(CERT *c) | |||
339 | int | 346 | int |
340 | ssl_cert_inst(CERT **o) | 347 | ssl_cert_inst(CERT **o) |
341 | { | 348 | { |
342 | /* Create a CERT if there isn't already one | 349 | /* |
350 | * Create a CERT if there isn't already one | ||
343 | * (which cannot really happen, as it is initially created in | 351 | * (which cannot really happen, as it is initially created in |
344 | * SSL_CTX_new; but the earlier code usually allows for that one | 352 | * SSL_CTX_new; but the earlier code usually allows for that one |
345 | * being non-existant, so we follow that behaviour, as it might | 353 | * being non-existant, so we follow that behaviour, as it might |
@@ -431,16 +439,17 @@ ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) | |||
431 | X509_STORE_CTX_set_ex_data(&ctx, | 439 | X509_STORE_CTX_set_ex_data(&ctx, |
432 | SSL_get_ex_data_X509_STORE_CTX_idx(), s); | 440 | SSL_get_ex_data_X509_STORE_CTX_idx(), s); |
433 | 441 | ||
434 | /* We need to inherit the verify parameters. These can be determined by | 442 | /* |
435 | * the context: if its a server it will verify SSL client certificates | 443 | * We need to inherit the verify parameters. These can be |
436 | * or vice versa. | 444 | * determined by the context: if its a server it will verify |
445 | * SSL client certificates or vice versa. | ||
437 | */ | 446 | */ |
438 | |||
439 | X509_STORE_CTX_set_default(&ctx, | 447 | X509_STORE_CTX_set_default(&ctx, |
440 | s->server ? "ssl_client" : "ssl_server"); | 448 | s->server ? "ssl_client" : "ssl_server"); |
441 | 449 | ||
442 | /* Anything non-default in "param" should overwrite anything in the | 450 | /* |
443 | * ctx. | 451 | * Anything non-default in "param" should overwrite anything |
452 | * in the ctx. | ||
444 | */ | 453 | */ |
445 | X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&ctx), s->param); | 454 | X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&ctx), s->param); |
446 | 455 | ||
diff --git a/src/lib/libssl/ssl_cert.c b/src/lib/libssl/ssl_cert.c index 5b5ffac06f..6aae59e310 100644 --- a/src/lib/libssl/ssl_cert.c +++ b/src/lib/libssl/ssl_cert.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_cert.c,v 1.40 2014/07/09 11:25:42 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_cert.c,v 1.41 2014/07/10 08:25:00 guenther Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -195,9 +195,11 @@ ssl_cert_dup(CERT *cert) | |||
195 | return (NULL); | 195 | return (NULL); |
196 | } | 196 | } |
197 | 197 | ||
198 | /* | ||
199 | * same as ret->key = ret->pkeys + (cert->key - cert->pkeys), | ||
200 | * if you find that more readable | ||
201 | */ | ||
198 | ret->key = &ret->pkeys[cert->key - &cert->pkeys[0]]; | 202 | ret->key = &ret->pkeys[cert->key - &cert->pkeys[0]]; |
199 | /* or ret->key = ret->pkeys + (cert->key - cert->pkeys), | ||
200 | * if you find that more readable */ | ||
201 | 203 | ||
202 | ret->valid = cert->valid; | 204 | ret->valid = cert->valid; |
203 | ret->mask_k = cert->mask_k; | 205 | ret->mask_k = cert->mask_k; |
@@ -256,9 +258,11 @@ ssl_cert_dup(CERT *cert) | |||
256 | CRYPTO_LOCK_EVP_PKEY); | 258 | CRYPTO_LOCK_EVP_PKEY); |
257 | 259 | ||
258 | switch (i) { | 260 | switch (i) { |
259 | /* If there was anything special to do for | 261 | /* |
262 | * If there was anything special to do for | ||
260 | * certain types of keys, we'd do it here. | 263 | * certain types of keys, we'd do it here. |
261 | * (Nothing at the moment, I think.) */ | 264 | * (Nothing at the moment, I think.) |
265 | */ | ||
262 | 266 | ||
263 | case SSL_PKEY_RSA_ENC: | 267 | case SSL_PKEY_RSA_ENC: |
264 | case SSL_PKEY_RSA_SIGN: | 268 | case SSL_PKEY_RSA_SIGN: |
@@ -285,12 +289,15 @@ ssl_cert_dup(CERT *cert) | |||
285 | } | 289 | } |
286 | } | 290 | } |
287 | 291 | ||
288 | /* ret->extra_certs *should* exist, but currently the own certificate | 292 | /* |
289 | * chain is held inside SSL_CTX */ | 293 | * ret->extra_certs *should* exist, but currently the own certificate |
294 | * chain is held inside SSL_CTX | ||
295 | */ | ||
290 | 296 | ||
291 | ret->references = 1; | 297 | ret->references = 1; |
292 | /* Set digests to defaults. NB: we don't copy existing values as they | 298 | /* |
293 | * will be set during handshake. | 299 | * Set digests to defaults. NB: we don't copy existing values |
300 | * as they will be set during handshake. | ||
294 | */ | 301 | */ |
295 | ssl_cert_set_default_md(ret); | 302 | ssl_cert_set_default_md(ret); |
296 | 303 | ||
@@ -339,7 +346,8 @@ ssl_cert_free(CERT *c) | |||
339 | int | 346 | int |
340 | ssl_cert_inst(CERT **o) | 347 | ssl_cert_inst(CERT **o) |
341 | { | 348 | { |
342 | /* Create a CERT if there isn't already one | 349 | /* |
350 | * Create a CERT if there isn't already one | ||
343 | * (which cannot really happen, as it is initially created in | 351 | * (which cannot really happen, as it is initially created in |
344 | * SSL_CTX_new; but the earlier code usually allows for that one | 352 | * SSL_CTX_new; but the earlier code usually allows for that one |
345 | * being non-existant, so we follow that behaviour, as it might | 353 | * being non-existant, so we follow that behaviour, as it might |
@@ -431,16 +439,17 @@ ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk) | |||
431 | X509_STORE_CTX_set_ex_data(&ctx, | 439 | X509_STORE_CTX_set_ex_data(&ctx, |
432 | SSL_get_ex_data_X509_STORE_CTX_idx(), s); | 440 | SSL_get_ex_data_X509_STORE_CTX_idx(), s); |
433 | 441 | ||
434 | /* We need to inherit the verify parameters. These can be determined by | 442 | /* |
435 | * the context: if its a server it will verify SSL client certificates | 443 | * We need to inherit the verify parameters. These can be |
436 | * or vice versa. | 444 | * determined by the context: if its a server it will verify |
445 | * SSL client certificates or vice versa. | ||
437 | */ | 446 | */ |
438 | |||
439 | X509_STORE_CTX_set_default(&ctx, | 447 | X509_STORE_CTX_set_default(&ctx, |
440 | s->server ? "ssl_client" : "ssl_server"); | 448 | s->server ? "ssl_client" : "ssl_server"); |
441 | 449 | ||
442 | /* Anything non-default in "param" should overwrite anything in the | 450 | /* |
443 | * ctx. | 451 | * Anything non-default in "param" should overwrite anything |
452 | * in the ctx. | ||
444 | */ | 453 | */ |
445 | X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&ctx), s->param); | 454 | X509_VERIFY_PARAM_set1(X509_STORE_CTX_get0_param(&ctx), s->param); |
446 | 455 | ||