From b267db08b22de7a7bbe700530fd9e71ca060610f Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Wed, 24 May 2023 02:29:15 +0200 Subject: [PATCH] crypto/tls: add VersionName Fixes #46308 Change-Id: I5162b26cbce61ae5df5d2e093cf8a28406d15863 Reviewed-on: https://go-review.googlesource.com/c/go/+/497377 Auto-Submit: Filippo Valsorda Reviewed-by: Marten Seemann Reviewed-by: Roland Shoemaker Reviewed-by: Ian Lance Taylor TryBot-Result: Gopher Robot Reviewed-by: Samuli Silvius Reviewed-by: Damien Neil Run-TryBot: Filippo Valsorda --- api/next/46308.txt | 1 + src/crypto/tls/common.go | 20 ++++++++++++++++++++ src/crypto/tls/tls_test.go | 9 +++++++++ 3 files changed, 30 insertions(+) create mode 100644 api/next/46308.txt diff --git a/api/next/46308.txt b/api/next/46308.txt new file mode 100644 index 0000000000..ea6b605651 --- /dev/null +++ b/api/next/46308.txt @@ -0,0 +1 @@ +pkg crypto/tls, func VersionName(uint16) string #46308 diff --git a/src/crypto/tls/common.go b/src/crypto/tls/common.go index f49cc01760..829db2316e 100644 --- a/src/crypto/tls/common.go +++ b/src/crypto/tls/common.go @@ -36,6 +36,26 @@ const ( VersionSSL30 = 0x0300 ) +// VersionName returns the name for the provided TLS version number +// (e.g. "TLS 1.3"), or a fallback representation of the value if the +// version is not implemented by this package. +func VersionName(version uint16) string { + switch version { + case VersionSSL30: + return "SSLv3" + case VersionTLS10: + return "TLS 1.0" + case VersionTLS11: + return "TLS 1.1" + case VersionTLS12: + return "TLS 1.2" + case VersionTLS13: + return "TLS 1.3" + default: + return fmt.Sprintf("0x%04X", version) + } +} + const ( maxPlaintext = 16384 // maximum plaintext payload length maxCiphertext = 16384 + 2048 // maximum ciphertext payload length diff --git a/src/crypto/tls/tls_test.go b/src/crypto/tls/tls_test.go index 610cffa094..4e4d6a9d21 100644 --- a/src/crypto/tls/tls_test.go +++ b/src/crypto/tls/tls_test.go @@ -1590,6 +1590,15 @@ func TestCipherSuites(t *testing.T) { } } +func TestVersionName(t *testing.T) { + if got, exp := VersionName(VersionTLS13), "TLS 1.3"; got != exp { + t.Errorf("unexpected VersionName: got %q, expected %q", got, exp) + } + if got, exp := VersionName(0x12a), "0x012A"; got != exp { + t.Errorf("unexpected fallback VersionName: got %q, expected %q", got, exp) + } +} + // http2isBadCipher is copied from net/http. // TODO: if it ends up exposed somewhere, use that instead. func http2isBadCipher(cipher uint16) bool { -- 2.44.0