diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/libssl/d1_pkt.c | 29 | ||||
-rw-r--r-- | src/lib/libssl/ssl_both.c | 22 | ||||
-rw-r--r-- | src/lib/libssl/ssl_clnt.c | 24 | ||||
-rw-r--r-- | src/lib/libssl/ssl_lib.c | 30 | ||||
-rw-r--r-- | src/lib/libssl/ssl_locl.h | 27 | ||||
-rw-r--r-- | src/lib/libssl/ssl_pkt.c | 45 | ||||
-rw-r--r-- | src/lib/libssl/ssl_srvr.c | 24 | ||||
-rw-r--r-- | src/lib/libssl/tls13_lib.c | 14 |
8 files changed, 88 insertions, 127 deletions
diff --git a/src/lib/libssl/d1_pkt.c b/src/lib/libssl/d1_pkt.c index 4f0678f0b8..f99b8ff371 100644 --- a/src/lib/libssl/d1_pkt.c +++ b/src/lib/libssl/d1_pkt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: d1_pkt.c,v 1.106 2021/08/30 19:12:25 jsing Exp $ */ | 1 | /* $OpenBSD: d1_pkt.c,v 1.107 2021/08/30 19:25:43 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. |
@@ -515,10 +515,9 @@ dtls1_get_record(SSL *s) | |||
515 | int | 515 | int |
516 | dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | 516 | dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) |
517 | { | 517 | { |
518 | int al, i, j, ret; | 518 | int al, i, ret; |
519 | unsigned int n; | 519 | unsigned int n; |
520 | SSL3_RECORD_INTERNAL *rr; | 520 | SSL3_RECORD_INTERNAL *rr; |
521 | void (*cb)(const SSL *ssl, int type2, int val) = NULL; | ||
522 | 521 | ||
523 | if (S3I(s)->rbuf.buf == NULL) /* Not initialized yet */ | 522 | if (S3I(s)->rbuf.buf == NULL) /* Not initialized yet */ |
524 | if (!ssl3_setup_buffers(s)) | 523 | if (!ssl3_setup_buffers(s)) |
@@ -727,9 +726,8 @@ dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
727 | 726 | ||
728 | /* no need to check sequence number on HELLO REQUEST messages */ | 727 | /* no need to check sequence number on HELLO REQUEST messages */ |
729 | 728 | ||
730 | if (s->internal->msg_callback) | 729 | ssl_msg_callback(s, 0, SSL3_RT_HANDSHAKE, |
731 | s->internal->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, | 730 | D1I(s)->handshake_fragment, 4); |
732 | D1I(s)->handshake_fragment, 4, s, s->internal->msg_callback_arg); | ||
733 | 731 | ||
734 | if (SSL_is_init_finished(s) && | 732 | if (SSL_is_init_finished(s) && |
735 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && | 733 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && |
@@ -774,19 +772,10 @@ dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
774 | 772 | ||
775 | D1I(s)->alert_fragment_len = 0; | 773 | D1I(s)->alert_fragment_len = 0; |
776 | 774 | ||
777 | if (s->internal->msg_callback) | 775 | ssl_msg_callback(s, 0, SSL3_RT_ALERT, D1I(s)->alert_fragment, 2); |
778 | s->internal->msg_callback(0, s->version, SSL3_RT_ALERT, | ||
779 | D1I(s)->alert_fragment, 2, s, s->internal->msg_callback_arg); | ||
780 | 776 | ||
781 | if (s->internal->info_callback != NULL) | 777 | ssl_info_callback(s, SSL_CB_READ_ALERT, |
782 | cb = s->internal->info_callback; | 778 | (alert_level << 8) | alert_descr); |
783 | else if (s->ctx->internal->info_callback != NULL) | ||
784 | cb = s->ctx->internal->info_callback; | ||
785 | |||
786 | if (cb != NULL) { | ||
787 | j = (alert_level << 8) | alert_descr; | ||
788 | cb(s, SSL_CB_READ_ALERT, j); | ||
789 | } | ||
790 | 779 | ||
791 | if (alert_level == SSL3_AL_WARNING) { | 780 | if (alert_level == SSL3_AL_WARNING) { |
792 | S3I(s)->warn_alert = alert_descr; | 781 | S3I(s)->warn_alert = alert_descr; |
@@ -832,9 +821,7 @@ dtls1_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
832 | 821 | ||
833 | rr->length = 0; | 822 | rr->length = 0; |
834 | 823 | ||
835 | if (s->internal->msg_callback) | 824 | ssl_msg_callback(s, 0, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1); |
836 | s->internal->msg_callback(0, s->version, SSL3_RT_CHANGE_CIPHER_SPEC, | ||
837 | rr->data, 1, s, s->internal->msg_callback_arg); | ||
838 | 825 | ||
839 | /* We can't process a CCS now, because previous handshake | 826 | /* We can't process a CCS now, because previous handshake |
840 | * messages are still missing, so just drop it. | 827 | * messages are still missing, so just drop it. |
diff --git a/src/lib/libssl/ssl_both.c b/src/lib/libssl/ssl_both.c index 03c5a2f1e9..e4834f23dc 100644 --- a/src/lib/libssl/ssl_both.c +++ b/src/lib/libssl/ssl_both.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_both.c,v 1.33 2021/07/01 17:53:39 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_both.c,v 1.34 2021/08/30 19:25:43 jsing 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 | * |
@@ -150,10 +150,8 @@ ssl3_do_write(SSL *s, int type) | |||
150 | (unsigned char *)&s->internal->init_buf->data[s->internal->init_off], ret); | 150 | (unsigned char *)&s->internal->init_buf->data[s->internal->init_off], ret); |
151 | 151 | ||
152 | if (ret == s->internal->init_num) { | 152 | if (ret == s->internal->init_num) { |
153 | if (s->internal->msg_callback) | 153 | ssl_msg_callback(s, 1, type, s->internal->init_buf->data, |
154 | s->internal->msg_callback(1, s->version, type, s->internal->init_buf->data, | 154 | (size_t)(s->internal->init_off + s->internal->init_num)); |
155 | (size_t)(s->internal->init_off + s->internal->init_num), s, | ||
156 | s->internal->msg_callback_arg); | ||
157 | return (1); | 155 | return (1); |
158 | } | 156 | } |
159 | 157 | ||
@@ -456,10 +454,8 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
456 | s->internal->init_num = 0; | 454 | s->internal->init_num = 0; |
457 | skip_message = 1; | 455 | skip_message = 1; |
458 | 456 | ||
459 | if (s->internal->msg_callback) | 457 | ssl_msg_callback(s, 0, |
460 | s->internal->msg_callback(0, s->version, | 458 | SSL3_RT_HANDSHAKE, p, 4); |
461 | SSL3_RT_HANDSHAKE, p, 4, s, | ||
462 | s->internal->msg_callback_arg); | ||
463 | } | 459 | } |
464 | } | 460 | } |
465 | } while (skip_message); | 461 | } while (skip_message); |
@@ -516,11 +512,9 @@ ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok) | |||
516 | tls1_transcript_record(s, (unsigned char *)s->internal->init_buf->data, | 512 | tls1_transcript_record(s, (unsigned char *)s->internal->init_buf->data, |
517 | s->internal->init_num + 4); | 513 | s->internal->init_num + 4); |
518 | 514 | ||
519 | if (s->internal->msg_callback) | 515 | ssl_msg_callback(s, 0, SSL3_RT_HANDSHAKE, |
520 | s->internal->msg_callback(0, s->version, | 516 | s->internal->init_buf->data, |
521 | SSL3_RT_HANDSHAKE, s->internal->init_buf->data, | 517 | (size_t)s->internal->init_num + 4); |
522 | (size_t)s->internal->init_num + 4, s, | ||
523 | s->internal->msg_callback_arg); | ||
524 | } | 518 | } |
525 | 519 | ||
526 | *ok = 1; | 520 | *ok = 1; |
diff --git a/src/lib/libssl/ssl_clnt.c b/src/lib/libssl/ssl_clnt.c index 8864909c9e..519e823354 100644 --- a/src/lib/libssl/ssl_clnt.c +++ b/src/lib/libssl/ssl_clnt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_clnt.c,v 1.107 2021/06/30 09:59:07 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_clnt.c,v 1.108 2021/08/30 19:25:43 jsing 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 | * |
@@ -179,18 +179,12 @@ static int ca_dn_cmp(const X509_NAME * const *a, const X509_NAME * const *b); | |||
179 | int | 179 | int |
180 | ssl3_connect(SSL *s) | 180 | ssl3_connect(SSL *s) |
181 | { | 181 | { |
182 | void (*cb)(const SSL *ssl, int type, int val) = NULL; | ||
183 | int ret = -1; | ||
184 | int new_state, state, skip = 0; | 182 | int new_state, state, skip = 0; |
183 | int ret = -1; | ||
185 | 184 | ||
186 | ERR_clear_error(); | 185 | ERR_clear_error(); |
187 | errno = 0; | 186 | errno = 0; |
188 | 187 | ||
189 | if (s->internal->info_callback != NULL) | ||
190 | cb = s->internal->info_callback; | ||
191 | else if (s->ctx->internal->info_callback != NULL) | ||
192 | cb = s->ctx->internal->info_callback; | ||
193 | |||
194 | s->internal->in_handshake++; | 188 | s->internal->in_handshake++; |
195 | if (!SSL_in_init(s) || SSL_in_before(s)) | 189 | if (!SSL_in_init(s) || SSL_in_before(s)) |
196 | SSL_clear(s); | 190 | SSL_clear(s); |
@@ -210,8 +204,8 @@ ssl3_connect(SSL *s) | |||
210 | case SSL_ST_OK|SSL_ST_CONNECT: | 204 | case SSL_ST_OK|SSL_ST_CONNECT: |
211 | 205 | ||
212 | s->server = 0; | 206 | s->server = 0; |
213 | if (cb != NULL) | 207 | |
214 | cb(s, SSL_CB_HANDSHAKE_START, 1); | 208 | ssl_info_callback(s, SSL_CB_HANDSHAKE_START, 1); |
215 | 209 | ||
216 | if (!ssl_legacy_stack_version(s, s->version)) { | 210 | if (!ssl_legacy_stack_version(s, s->version)) { |
217 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 211 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
@@ -597,8 +591,7 @@ ssl3_connect(SSL *s) | |||
597 | s->internal->handshake_func = ssl3_connect; | 591 | s->internal->handshake_func = ssl3_connect; |
598 | s->ctx->internal->stats.sess_connect_good++; | 592 | s->ctx->internal->stats.sess_connect_good++; |
599 | 593 | ||
600 | if (cb != NULL) | 594 | ssl_info_callback(s, SSL_CB_HANDSHAKE_DONE, 1); |
601 | cb(s, SSL_CB_HANDSHAKE_DONE, 1); | ||
602 | 595 | ||
603 | if (SSL_is_dtls(s)) { | 596 | if (SSL_is_dtls(s)) { |
604 | /* done with handshaking */ | 597 | /* done with handshaking */ |
@@ -623,10 +616,10 @@ ssl3_connect(SSL *s) | |||
623 | goto end; | 616 | goto end; |
624 | } | 617 | } |
625 | 618 | ||
626 | if ((cb != NULL) && (S3I(s)->hs.state != state)) { | 619 | if (S3I(s)->hs.state != state) { |
627 | new_state = S3I(s)->hs.state; | 620 | new_state = S3I(s)->hs.state; |
628 | S3I(s)->hs.state = state; | 621 | S3I(s)->hs.state = state; |
629 | cb(s, SSL_CB_CONNECT_LOOP, 1); | 622 | ssl_info_callback(s, SSL_CB_CONNECT_LOOP, 1); |
630 | S3I(s)->hs.state = new_state; | 623 | S3I(s)->hs.state = new_state; |
631 | } | 624 | } |
632 | } | 625 | } |
@@ -635,8 +628,7 @@ ssl3_connect(SSL *s) | |||
635 | 628 | ||
636 | end: | 629 | end: |
637 | s->internal->in_handshake--; | 630 | s->internal->in_handshake--; |
638 | if (cb != NULL) | 631 | ssl_info_callback(s, SSL_CB_CONNECT_EXIT, ret); |
639 | cb(s, SSL_CB_CONNECT_EXIT, ret); | ||
640 | 632 | ||
641 | return (ret); | 633 | return (ret); |
642 | } | 634 | } |
diff --git a/src/lib/libssl/ssl_lib.c b/src/lib/libssl/ssl_lib.c index bb4b700e0b..c5cc6d05fa 100644 --- a/src/lib/libssl/ssl_lib.c +++ b/src/lib/libssl/ssl_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_lib.c,v 1.262 2021/07/01 17:53:39 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_lib.c,v 1.263 2021/08/30 19:25:43 jsing 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 | * |
@@ -1184,9 +1184,7 @@ SSL_callback_ctrl(SSL *s, int cmd, void (*fp)(void)) | |||
1184 | { | 1184 | { |
1185 | switch (cmd) { | 1185 | switch (cmd) { |
1186 | case SSL_CTRL_SET_MSG_CALLBACK: | 1186 | case SSL_CTRL_SET_MSG_CALLBACK: |
1187 | s->internal->msg_callback = (void (*)(int write_p, int version, | 1187 | s->internal->msg_callback = (ssl_msg_callback_fn *)(fp); |
1188 | int content_type, const void *buf, size_t len, | ||
1189 | SSL *ssl, void *arg))(fp); | ||
1190 | return (1); | 1188 | return (1); |
1191 | 1189 | ||
1192 | default: | 1190 | default: |
@@ -1284,9 +1282,7 @@ SSL_CTX_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp)(void)) | |||
1284 | { | 1282 | { |
1285 | switch (cmd) { | 1283 | switch (cmd) { |
1286 | case SSL_CTRL_SET_MSG_CALLBACK: | 1284 | case SSL_CTRL_SET_MSG_CALLBACK: |
1287 | ctx->internal->msg_callback = (void (*)(int write_p, int version, | 1285 | ctx->internal->msg_callback = (ssl_msg_callback_fn *)fp; |
1288 | int content_type, const void *buf, size_t len, SSL *ssl, | ||
1289 | void *arg))(fp); | ||
1290 | return (1); | 1286 | return (1); |
1291 | 1287 | ||
1292 | default: | 1288 | default: |
@@ -2622,6 +2618,26 @@ ssl_clear_cipher_write_state(SSL *s) | |||
2622 | tls12_record_layer_clear_write_state(s->internal->rl); | 2618 | tls12_record_layer_clear_write_state(s->internal->rl); |
2623 | } | 2619 | } |
2624 | 2620 | ||
2621 | void | ||
2622 | ssl_info_callback(const SSL *s, int type, int value) | ||
2623 | { | ||
2624 | ssl_info_callback_fn *cb; | ||
2625 | |||
2626 | if ((cb = s->internal->info_callback) == NULL) | ||
2627 | cb = s->ctx->internal->info_callback; | ||
2628 | if (cb != NULL) | ||
2629 | cb(s, type, value); | ||
2630 | } | ||
2631 | |||
2632 | void | ||
2633 | ssl_msg_callback(SSL *s, int is_write, int content_type, | ||
2634 | const void *msg_buf, size_t msg_len) | ||
2635 | { | ||
2636 | if (s->internal->msg_callback != NULL) | ||
2637 | s->internal->msg_callback(is_write, s->version, content_type, | ||
2638 | msg_buf, msg_len, s, s->internal->msg_callback_arg); | ||
2639 | } | ||
2640 | |||
2625 | /* Fix this function so that it takes an optional type parameter */ | 2641 | /* Fix this function so that it takes an optional type parameter */ |
2626 | X509 * | 2642 | X509 * |
2627 | SSL_get_certificate(const SSL *s) | 2643 | SSL_get_certificate(const SSL *s) |
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h index d25ac1a1a6..7ff3e0713d 100644 --- a/src/lib/libssl/ssl_locl.h +++ b/src/lib/libssl/ssl_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_locl.h,v 1.357 2021/08/30 19:12:25 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_locl.h,v 1.358 2021/08/30 19:25:43 jsing 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 | * |
@@ -662,6 +662,10 @@ int tls12_record_layer_seal_record(struct tls12_record_layer *rl, | |||
662 | uint8_t content_type, const uint8_t *content, size_t content_len, | 662 | uint8_t content_type, const uint8_t *content, size_t content_len, |
663 | CBB *out); | 663 | CBB *out); |
664 | 664 | ||
665 | typedef void (ssl_info_callback_fn)(const SSL *s, int type, int val); | ||
666 | typedef void (ssl_msg_callback_fn)(int is_write, int version, int content_type, | ||
667 | const void *buf, size_t len, SSL *ssl, void *arg); | ||
668 | |||
665 | typedef struct ssl_ctx_internal_st { | 669 | typedef struct ssl_ctx_internal_st { |
666 | uint16_t min_tls_version; | 670 | uint16_t min_tls_version; |
667 | uint16_t max_tls_version; | 671 | uint16_t max_tls_version; |
@@ -704,11 +708,10 @@ typedef struct ssl_ctx_internal_st { | |||
704 | int (*app_verify_cookie_cb)(SSL *ssl, const unsigned char *cookie, | 708 | int (*app_verify_cookie_cb)(SSL *ssl, const unsigned char *cookie, |
705 | unsigned int cookie_len); | 709 | unsigned int cookie_len); |
706 | 710 | ||
707 | void (*info_callback)(const SSL *ssl,int type,int val); /* used if SSL's info_callback is NULL */ | 711 | ssl_info_callback_fn *info_callback; |
708 | 712 | ||
709 | /* callback that allows applications to peek at protocol messages */ | 713 | /* callback that allows applications to peek at protocol messages */ |
710 | void (*msg_callback)(int write_p, int version, int content_type, | 714 | ssl_msg_callback_fn *msg_callback; |
711 | const void *buf, size_t len, SSL *ssl, void *arg); | ||
712 | void *msg_callback_arg; | 715 | void *msg_callback_arg; |
713 | 716 | ||
714 | int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */ | 717 | int (*default_verify_callback)(int ok,X509_STORE_CTX *ctx); /* called 'verify_callback' in the SSL */ |
@@ -854,17 +857,17 @@ typedef struct ssl_internal_st { | |||
854 | /* true when we are actually in SSL_accept() or SSL_connect() */ | 857 | /* true when we are actually in SSL_accept() or SSL_connect() */ |
855 | int in_handshake; | 858 | int in_handshake; |
856 | int (*handshake_func)(SSL *); | 859 | int (*handshake_func)(SSL *); |
860 | |||
861 | ssl_info_callback_fn *info_callback; | ||
862 | |||
857 | /* callback that allows applications to peek at protocol messages */ | 863 | /* callback that allows applications to peek at protocol messages */ |
858 | void (*msg_callback)(int write_p, int version, int content_type, | 864 | ssl_msg_callback_fn *msg_callback; |
859 | const void *buf, size_t len, SSL *ssl, void *arg); | ||
860 | void *msg_callback_arg; | 865 | void *msg_callback_arg; |
861 | 866 | ||
862 | /* Default generate session ID callback. */ | ||
863 | GEN_SESSION_CB generate_session_id; | ||
864 | |||
865 | int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */ | 867 | int (*verify_callback)(int ok,X509_STORE_CTX *ctx); /* fail if callback returns 0 */ |
866 | 868 | ||
867 | void (*info_callback)(const SSL *ssl,int type,int val); /* optional informational callback */ | 869 | /* Default generate session ID callback. */ |
870 | GEN_SESSION_CB generate_session_id; | ||
868 | 871 | ||
869 | /* TLS extension debug callback */ | 872 | /* TLS extension debug callback */ |
870 | void (*tlsext_debug_cb)(SSL *s, int client_server, int type, | 873 | void (*tlsext_debug_cb)(SSL *s, int client_server, int type, |
@@ -1177,6 +1180,10 @@ void ssl_clear_cipher_read_state(SSL *s); | |||
1177 | void ssl_clear_cipher_write_state(SSL *s); | 1180 | void ssl_clear_cipher_write_state(SSL *s); |
1178 | int ssl_clear_bad_session(SSL *s); | 1181 | int ssl_clear_bad_session(SSL *s); |
1179 | 1182 | ||
1183 | void ssl_info_callback(const SSL *s, int type, int value); | ||
1184 | void ssl_msg_callback(SSL *s, int is_write, int content_type, | ||
1185 | const void *msg_buf, size_t msg_len); | ||
1186 | |||
1180 | CERT *ssl_cert_new(void); | 1187 | CERT *ssl_cert_new(void); |
1181 | CERT *ssl_cert_dup(CERT *cert); | 1188 | CERT *ssl_cert_dup(CERT *cert); |
1182 | void ssl_cert_free(CERT *c); | 1189 | void ssl_cert_free(CERT *c); |
diff --git a/src/lib/libssl/ssl_pkt.c b/src/lib/libssl/ssl_pkt.c index 9aa71f7d4f..049a7df3c3 100644 --- a/src/lib/libssl/ssl_pkt.c +++ b/src/lib/libssl/ssl_pkt.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_pkt.c,v 1.49 2021/08/28 15:20:58 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_pkt.c,v 1.50 2021/08/30 19:25:43 jsing 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 | * |
@@ -714,8 +714,7 @@ ssl3_write_pending(SSL *s, int type, const unsigned char *buf, unsigned int len) | |||
714 | int | 714 | int |
715 | ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | 715 | ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) |
716 | { | 716 | { |
717 | void (*cb)(const SSL *ssl, int type2, int val) = NULL; | 717 | int al, i, ret, rrcount = 0; |
718 | int al, i, j, ret, rrcount = 0; | ||
719 | unsigned int n; | 718 | unsigned int n; |
720 | SSL3_RECORD_INTERNAL *rr; | 719 | SSL3_RECORD_INTERNAL *rr; |
721 | 720 | ||
@@ -914,10 +913,8 @@ ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
914 | goto fatal_err; | 913 | goto fatal_err; |
915 | } | 914 | } |
916 | 915 | ||
917 | if (s->internal->msg_callback) | 916 | ssl_msg_callback(s, 0, SSL3_RT_HANDSHAKE, |
918 | s->internal->msg_callback(0, s->version, SSL3_RT_HANDSHAKE, | 917 | S3I(s)->handshake_fragment, 4); |
919 | S3I(s)->handshake_fragment, 4, s, | ||
920 | s->internal->msg_callback_arg); | ||
921 | 918 | ||
922 | if (SSL_is_init_finished(s) && | 919 | if (SSL_is_init_finished(s) && |
923 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && | 920 | !(s->s3->flags & SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS) && |
@@ -978,19 +975,11 @@ ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
978 | 975 | ||
979 | S3I(s)->alert_fragment_len = 0; | 976 | S3I(s)->alert_fragment_len = 0; |
980 | 977 | ||
981 | if (s->internal->msg_callback) | 978 | ssl_msg_callback(s, 0, SSL3_RT_ALERT, |
982 | s->internal->msg_callback(0, s->version, SSL3_RT_ALERT, | 979 | S3I(s)->alert_fragment, 2); |
983 | S3I(s)->alert_fragment, 2, s, s->internal->msg_callback_arg); | ||
984 | 980 | ||
985 | if (s->internal->info_callback != NULL) | 981 | ssl_info_callback(s, SSL_CB_READ_ALERT, |
986 | cb = s->internal->info_callback; | 982 | (alert_level << 8) | alert_descr); |
987 | else if (s->ctx->internal->info_callback != NULL) | ||
988 | cb = s->ctx->internal->info_callback; | ||
989 | |||
990 | if (cb != NULL) { | ||
991 | j = (alert_level << 8) | alert_descr; | ||
992 | cb(s, SSL_CB_READ_ALERT, j); | ||
993 | } | ||
994 | 983 | ||
995 | if (alert_level == SSL3_AL_WARNING) { | 984 | if (alert_level == SSL3_AL_WARNING) { |
996 | S3I(s)->warn_alert = alert_descr; | 985 | S3I(s)->warn_alert = alert_descr; |
@@ -1064,11 +1053,7 @@ ssl3_read_bytes(SSL *s, int type, unsigned char *buf, int len, int peek) | |||
1064 | 1053 | ||
1065 | rr->length = 0; | 1054 | rr->length = 0; |
1066 | 1055 | ||
1067 | if (s->internal->msg_callback) { | 1056 | ssl_msg_callback(s, 0, SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1); |
1068 | s->internal->msg_callback(0, s->version, | ||
1069 | SSL3_RT_CHANGE_CIPHER_SPEC, rr->data, 1, s, | ||
1070 | s->internal->msg_callback_arg); | ||
1071 | } | ||
1072 | 1057 | ||
1073 | S3I(s)->change_cipher_spec = 1; | 1058 | S3I(s)->change_cipher_spec = 1; |
1074 | if (!ssl3_do_change_cipher_spec(s)) | 1059 | if (!ssl3_do_change_cipher_spec(s)) |
@@ -1224,7 +1209,6 @@ ssl3_send_alert(SSL *s, int level, int desc) | |||
1224 | int | 1209 | int |
1225 | ssl3_dispatch_alert(SSL *s) | 1210 | ssl3_dispatch_alert(SSL *s) |
1226 | { | 1211 | { |
1227 | void (*cb)(const SSL *ssl, int type, int val); | ||
1228 | int ret; | 1212 | int ret; |
1229 | 1213 | ||
1230 | S3I(s)->alert_dispatch = 0; | 1214 | S3I(s)->alert_dispatch = 0; |
@@ -1241,15 +1225,10 @@ ssl3_dispatch_alert(SSL *s) | |||
1241 | if (S3I(s)->send_alert[0] == SSL3_AL_FATAL) | 1225 | if (S3I(s)->send_alert[0] == SSL3_AL_FATAL) |
1242 | (void)BIO_flush(s->wbio); | 1226 | (void)BIO_flush(s->wbio); |
1243 | 1227 | ||
1244 | if (s->internal->msg_callback) | 1228 | ssl_msg_callback(s, 1, SSL3_RT_ALERT, S3I(s)->send_alert, 2); |
1245 | s->internal->msg_callback(1, s->version, SSL3_RT_ALERT, | ||
1246 | S3I(s)->send_alert, 2, s, s->internal->msg_callback_arg); | ||
1247 | 1229 | ||
1248 | if ((cb = s->internal->info_callback) == NULL) | 1230 | ssl_info_callback(s, SSL_CB_WRITE_ALERT, |
1249 | cb = s->ctx->internal->info_callback; | 1231 | (S3I(s)->send_alert[0] << 8) | S3I(s)->send_alert[1]); |
1250 | if (cb != NULL) | ||
1251 | cb(s, SSL_CB_WRITE_ALERT, (S3I(s)->send_alert[0] << 8) | | ||
1252 | S3I(s)->send_alert[1]); | ||
1253 | 1232 | ||
1254 | return ret; | 1233 | return ret; |
1255 | } | 1234 | } |
diff --git a/src/lib/libssl/ssl_srvr.c b/src/lib/libssl/ssl_srvr.c index 2097ccdebf..a473d5af05 100644 --- a/src/lib/libssl/ssl_srvr.c +++ b/src/lib/libssl/ssl_srvr.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ssl_srvr.c,v 1.117 2021/06/29 19:43:15 jsing Exp $ */ | 1 | /* $OpenBSD: ssl_srvr.c,v 1.118 2021/08/30 19:25:43 jsing 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 | * |
@@ -174,20 +174,14 @@ | |||
174 | int | 174 | int |
175 | ssl3_accept(SSL *s) | 175 | ssl3_accept(SSL *s) |
176 | { | 176 | { |
177 | void (*cb)(const SSL *ssl, int type, int val) = NULL; | ||
178 | unsigned long alg_k; | 177 | unsigned long alg_k; |
179 | int ret = -1; | ||
180 | int new_state, state, skip = 0; | 178 | int new_state, state, skip = 0; |
181 | int listen = 0; | 179 | int listen = 0; |
180 | int ret = -1; | ||
182 | 181 | ||
183 | ERR_clear_error(); | 182 | ERR_clear_error(); |
184 | errno = 0; | 183 | errno = 0; |
185 | 184 | ||
186 | if (s->internal->info_callback != NULL) | ||
187 | cb = s->internal->info_callback; | ||
188 | else if (s->ctx->internal->info_callback != NULL) | ||
189 | cb = s->ctx->internal->info_callback; | ||
190 | |||
191 | if (SSL_is_dtls(s)) | 185 | if (SSL_is_dtls(s)) |
192 | listen = D1I(s)->listen; | 186 | listen = D1I(s)->listen; |
193 | 187 | ||
@@ -212,8 +206,8 @@ ssl3_accept(SSL *s) | |||
212 | case SSL_ST_BEFORE|SSL_ST_ACCEPT: | 206 | case SSL_ST_BEFORE|SSL_ST_ACCEPT: |
213 | case SSL_ST_OK|SSL_ST_ACCEPT: | 207 | case SSL_ST_OK|SSL_ST_ACCEPT: |
214 | s->server = 1; | 208 | s->server = 1; |
215 | if (cb != NULL) | 209 | |
216 | cb(s, SSL_CB_HANDSHAKE_START, 1); | 210 | ssl_info_callback(s, SSL_CB_HANDSHAKE_START, 1); |
217 | 211 | ||
218 | if (!ssl_legacy_stack_version(s, s->version)) { | 212 | if (!ssl_legacy_stack_version(s, s->version)) { |
219 | SSLerror(s, ERR_R_INTERNAL_ERROR); | 213 | SSLerror(s, ERR_R_INTERNAL_ERROR); |
@@ -705,8 +699,7 @@ ssl3_accept(SSL *s) | |||
705 | /* s->server=1; */ | 699 | /* s->server=1; */ |
706 | s->internal->handshake_func = ssl3_accept; | 700 | s->internal->handshake_func = ssl3_accept; |
707 | 701 | ||
708 | if (cb != NULL) | 702 | ssl_info_callback(s, SSL_CB_HANDSHAKE_DONE, 1); |
709 | cb(s, SSL_CB_HANDSHAKE_DONE, 1); | ||
710 | } | 703 | } |
711 | 704 | ||
712 | ret = 1; | 705 | ret = 1; |
@@ -735,10 +728,10 @@ ssl3_accept(SSL *s) | |||
735 | } | 728 | } |
736 | 729 | ||
737 | 730 | ||
738 | if ((cb != NULL) && (S3I(s)->hs.state != state)) { | 731 | if (S3I(s)->hs.state != state) { |
739 | new_state = S3I(s)->hs.state; | 732 | new_state = S3I(s)->hs.state; |
740 | S3I(s)->hs.state = state; | 733 | S3I(s)->hs.state = state; |
741 | cb(s, SSL_CB_ACCEPT_LOOP, 1); | 734 | ssl_info_callback(s, SSL_CB_ACCEPT_LOOP, 1); |
742 | S3I(s)->hs.state = new_state; | 735 | S3I(s)->hs.state = new_state; |
743 | } | 736 | } |
744 | } | 737 | } |
@@ -747,8 +740,7 @@ ssl3_accept(SSL *s) | |||
747 | end: | 740 | end: |
748 | /* BIO_flush(s->wbio); */ | 741 | /* BIO_flush(s->wbio); */ |
749 | s->internal->in_handshake--; | 742 | s->internal->in_handshake--; |
750 | if (cb != NULL) | 743 | ssl_info_callback(s, SSL_CB_ACCEPT_EXIT, ret); |
751 | cb(s, SSL_CB_ACCEPT_EXIT, ret); | ||
752 | 744 | ||
753 | return (ret); | 745 | return (ret); |
754 | } | 746 | } |
diff --git a/src/lib/libssl/tls13_lib.c b/src/lib/libssl/tls13_lib.c index f064521c8b..77b4364f56 100644 --- a/src/lib/libssl/tls13_lib.c +++ b/src/lib/libssl/tls13_lib.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tls13_lib.c,v 1.59 2021/04/07 21:48:23 tb Exp $ */ | 1 | /* $OpenBSD: tls13_lib.c,v 1.60 2021/08/30 19:25:43 jsing Exp $ */ |
2 | /* | 2 | /* |
3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
4 | * Copyright (c) 2019 Bob Beck <beck@openbsd.org> | 4 | * Copyright (c) 2019 Bob Beck <beck@openbsd.org> |
@@ -162,8 +162,7 @@ tls13_legacy_handshake_message_recv_cb(void *arg) | |||
162 | return; | 162 | return; |
163 | 163 | ||
164 | tls13_handshake_msg_data(ctx->hs_msg, &cbs); | 164 | tls13_handshake_msg_data(ctx->hs_msg, &cbs); |
165 | s->internal->msg_callback(0, TLS1_3_VERSION, SSL3_RT_HANDSHAKE, | 165 | ssl_msg_callback(s, 0, SSL3_RT_HANDSHAKE, CBS_data(&cbs), CBS_len(&cbs)); |
166 | CBS_data(&cbs), CBS_len(&cbs), s, s->internal->msg_callback_arg); | ||
167 | } | 166 | } |
168 | 167 | ||
169 | static void | 168 | static void |
@@ -177,8 +176,7 @@ tls13_legacy_handshake_message_sent_cb(void *arg) | |||
177 | return; | 176 | return; |
178 | 177 | ||
179 | tls13_handshake_msg_data(ctx->hs_msg, &cbs); | 178 | tls13_handshake_msg_data(ctx->hs_msg, &cbs); |
180 | s->internal->msg_callback(1, TLS1_3_VERSION, SSL3_RT_HANDSHAKE, | 179 | ssl_msg_callback(s, 1, SSL3_RT_HANDSHAKE, CBS_data(&cbs), CBS_len(&cbs)); |
181 | CBS_data(&cbs), CBS_len(&cbs), s, s->internal->msg_callback_arg); | ||
182 | } | 180 | } |
183 | 181 | ||
184 | static void | 182 | static void |
@@ -186,12 +184,8 @@ tls13_legacy_info_cb(void *arg, int state, int ret) | |||
186 | { | 184 | { |
187 | struct tls13_ctx *ctx = arg; | 185 | struct tls13_ctx *ctx = arg; |
188 | SSL *s = ctx->ssl; | 186 | SSL *s = ctx->ssl; |
189 | void (*cb)(const SSL *, int, int); | ||
190 | 187 | ||
191 | if ((cb = s->internal->info_callback) == NULL) | 188 | ssl_info_callback(s, state, ret); |
192 | cb = s->ctx->internal->info_callback; | ||
193 | if (cb != NULL) | ||
194 | cb(s, state, ret); | ||
195 | } | 189 | } |
196 | 190 | ||
197 | static int | 191 | static int |