Alternative TLS implementation in Go
Go to file
Adam Langley 0d94116736 crypto/tls: buffer handshake messages.
This change causes TLS handshake messages to be buffered and written in
a single Write to the underlying net.Conn.

There are two reasons to want to do this:

Firstly, it's slightly preferable to do this in order to save sending
several, small packets over the network where a single one will do.

Secondly, since 37c28759ca46cf381a466e32168a793165d9c9e9 errors from
Write have been returned from a handshake. This means that, if a peer
closes the connection during a handshake, a “broken pipe” error may
result from tls.Conn.Handshake(). This can mask any, more detailed,
fatal alerts that the peer may have sent because a read will never
happen.

Buffering handshake messages means that the peer will not receive, and
possibly reject, any of a flow while it's still being written.

Fixes #15709

Change-Id: I38dcff1abecc06e52b2de647ea98713ce0fb9a21
Reviewed-on: https://go-review.googlesource.com/23609
Reviewed-by: Andrew Gerrand <adg@golang.org>
Run-TryBot: Andrew Gerrand <adg@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2016-06-01 23:26:04 +00:00
testdata crypto/tls: allow renegotiation to be handled by a client. 2016-04-28 17:56:28 +00:00
alert.go crypto/tls: make error prefix uniform. 2016-04-14 16:28:53 +00:00
cipher_suites.go crypto/tls: Update references to draft-ietf-tls-downgrade-scsv-00. 2016-03-25 22:10:37 +00:00
common.go crypto/tls: allow renegotiation to be handled by a client. 2016-04-28 17:56:28 +00:00
conn_test.go crypto/tls: adjust dynamic record sizes to grow arithmetically 2016-05-27 16:34:57 +00:00
conn.go crypto/tls: buffer handshake messages. 2016-06-01 23:26:04 +00:00
example_test.go crypto/x509: add example of using a custom root list. 2014-02-19 11:18:35 -05:00
generate_cert.go crypto/tls: Support ECDSA keys in generate_cert.go 2014-07-28 14:46:34 -07:00
handshake_client_test.go crypto/tls: buffer handshake messages. 2016-06-01 23:26:04 +00:00
handshake_client.go crypto/tls: buffer handshake messages. 2016-06-01 23:26:04 +00:00
handshake_messages_test.go crypto/tls: decouple handshake signatures from the handshake hash. 2015-04-30 03:47:02 +00:00
handshake_messages.go crypto/tls: allow renegotiation to be handled by a client. 2016-04-28 17:56:28 +00:00
handshake_server_test.go crypto/tls: Never resume sessions across different versions. 2016-05-18 21:20:33 +00:00
handshake_server.go crypto/tls: buffer handshake messages. 2016-06-01 23:26:04 +00:00
handshake_test.go crypto/tls: rework reference tests. 2013-12-20 11:37:05 -05:00
key_agreement.go crypto/tls: make error prefix uniform. 2016-04-14 16:28:53 +00:00
prf_test.go crypto/tls: decouple handshake signatures from the handshake hash. 2015-04-30 03:47:02 +00:00
prf.go all: standardize RFC mention format 2016-04-12 21:07:52 +00:00
ticket.go crypto/tls: minor refactors for readability 2016-03-14 21:17:37 +00:00
tls_test.go crypto/tls: remove unused variable in benchmark code 2016-06-01 00:06:09 +00:00
tls.go crypto/tls: document certificate chains in LoadX509KeyPair 2016-05-16 23:19:05 +00:00