summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authortb <>2020-12-15 16:04:49 +0000
committertb <>2020-12-15 16:04:49 +0000
commit504bf1627e800924a2e652013e03bb332dbcb7e3 (patch)
tree846602078876e31b51a7a0cbda8fb147198266a3 /src/lib
parent49f8c65dfe3b1b8b8e597c81e67ab5078e7372a1 (diff)
downloadopenbsd-504bf1627e800924a2e652013e03bb332dbcb7e3.tar.gz
openbsd-504bf1627e800924a2e652013e03bb332dbcb7e3.tar.bz2
openbsd-504bf1627e800924a2e652013e03bb332dbcb7e3.zip
Use natural sizes for S3I(s)->tmp's *_md arrays
It is a historical artifact that cert_verify_md[], finish_md[] and peer_finish_md[] are twice as large as they need to be. This is confusing, especially for finish_md[] and peer_finish_md[] which are copied to to previous_client_finished[] and previous_server_finished[] which are only half as large. It is easy to check that they will never get more than EVP_MAX_MD_SIZE data written to them. In 1998, EVP_MAX_MD_SIZE was 20 bytes long (for SHA-1). This got bumped to 16+20 for the SSLv3-specific md5+sha1. Apparently under the impression that EVP_MAX_MD_SIZE was still 20 bytes, someone else doubled finish_md[]'s size to EVP_MAX_MD_SIZE*2 and added /* actually only needs to be 16+20 */. A bit later finish_md[] was split up, and still a bit later the comment was amended for TLSv1. Shortly thereafter SHA-512 required a bump of EVP_MAX_MD_SIZE to 64 by a third person and we have been carrying 192 bytes of untouched memory in each of our SSLs ever since. ok inoguchi jsing (jsing had the same diff)
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libssl/ssl_locl.h10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/lib/libssl/ssl_locl.h b/src/lib/libssl/ssl_locl.h
index 80a7d95be5..312c18f7ca 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.309 2020/12/14 15:20:31 tb Exp $ */ 1/* $OpenBSD: ssl_locl.h,v 1.310 2020/12/15 16:04:49 tb 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 *
@@ -892,13 +892,11 @@ typedef struct ssl3_state_internal_st {
892 struct { 892 struct {
893 int new_mac_secret_size; 893 int new_mac_secret_size;
894 894
895 /* actually only needs to be 16+20 */ 895 unsigned char cert_verify_md[EVP_MAX_MD_SIZE];
896 unsigned char cert_verify_md[EVP_MAX_MD_SIZE*2];
897 896
898 /* actually only need to be 16+20 for SSLv3 and 12 for TLS */ 897 unsigned char finish_md[EVP_MAX_MD_SIZE];
899 unsigned char finish_md[EVP_MAX_MD_SIZE*2];
900 size_t finish_md_len; 898 size_t finish_md_len;
901 unsigned char peer_finish_md[EVP_MAX_MD_SIZE*2]; 899 unsigned char peer_finish_md[EVP_MAX_MD_SIZE];
902 size_t peer_finish_md_len; 900 size_t peer_finish_md_len;
903 901
904 unsigned long message_size; 902 unsigned long message_size;