Remove redundant copies of the Finished messages. We only need one copy, not two. This trims 130 bytes of per-connection memory. Change-Id: I334aa7b1f8608e72426986bfa68534d416f3bda9 Reviewed-on: https://boringssl-review.googlesource.com/11569 Reviewed-by: Adam Langley <agl@google.com>
diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index c91fe81..1dd748d 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c
@@ -1233,6 +1233,15 @@ return 1; } +static size_t copy_finished(void *out, size_t out_len, const uint8_t *in, + size_t in_len) { + if (out_len > in_len) { + out_len = in_len; + } + memcpy(out, in, out_len); + return in_len; +} + size_t SSL_get_finished(const SSL *ssl, void *buf, size_t count) { if (!ssl->s3->initial_handshake_complete || ssl3_protocol_version(ssl) < TLS1_VERSION || @@ -1240,12 +1249,13 @@ return 0; } - size_t ret = ssl->s3->tmp.finish_md_len; - if (count > ret) { - count = ret; + if (ssl->server) { + return copy_finished(buf, count, ssl->s3->previous_server_finished, + ssl->s3->previous_server_finished_len); } - memcpy(buf, ssl->s3->tmp.finish_md, count); - return ret; + + return copy_finished(buf, count, ssl->s3->previous_client_finished, + ssl->s3->previous_client_finished_len); } size_t SSL_get_peer_finished(const SSL *ssl, void *buf, size_t count) { @@ -1255,12 +1265,13 @@ return 0; } - size_t ret = ssl->s3->tmp.peer_finish_md_len; - if (count > ret) { - count = ret; + if (ssl->server) { + return copy_finished(buf, count, ssl->s3->previous_client_finished, + ssl->s3->previous_client_finished_len); } - memcpy(buf, ssl->s3->tmp.peer_finish_md, count); - return ret; + + return copy_finished(buf, count, ssl->s3->previous_server_finished, + ssl->s3->previous_server_finished_len); } int SSL_get_verify_mode(const SSL *ssl) { return ssl->verify_mode; }