bump google.golang.org/grpc v1.20.1
full diff: https://github.com/grpc/grpc-go/compare/v1.12.2...v1.20.1 Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
		
							
								
								
									
										132
									
								
								vendor/google.golang.org/grpc/credentials/credentials.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										132
									
								
								vendor/google.golang.org/grpc/credentials/credentials.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -23,6 +23,7 @@ | ||||
| package credentials // import "google.golang.org/grpc/credentials" | ||||
|  | ||||
| import ( | ||||
| 	"context" | ||||
| 	"crypto/tls" | ||||
| 	"crypto/x509" | ||||
| 	"errors" | ||||
| @@ -31,12 +32,10 @@ import ( | ||||
| 	"net" | ||||
| 	"strings" | ||||
|  | ||||
| 	"golang.org/x/net/context" | ||||
| 	"github.com/golang/protobuf/proto" | ||||
| 	"google.golang.org/grpc/credentials/internal" | ||||
| ) | ||||
|  | ||||
| // alpnProtoStr are the specified application level protocols for gRPC. | ||||
| var alpnProtoStr = []string{"h2"} | ||||
|  | ||||
| // PerRPCCredentials defines the common interface for the credentials which need to | ||||
| // attach security information to every RPC (e.g., oauth2). | ||||
| type PerRPCCredentials interface { | ||||
| @@ -107,6 +106,25 @@ type TransportCredentials interface { | ||||
| 	OverrideServerName(string) error | ||||
| } | ||||
|  | ||||
| // Bundle is a combination of TransportCredentials and PerRPCCredentials. | ||||
| // | ||||
| // It also contains a mode switching method, so it can be used as a combination | ||||
| // of different credential policies. | ||||
| // | ||||
| // Bundle cannot be used together with individual TransportCredentials. | ||||
| // PerRPCCredentials from Bundle will be appended to other PerRPCCredentials. | ||||
| // | ||||
| // This API is experimental. | ||||
| type Bundle interface { | ||||
| 	TransportCredentials() TransportCredentials | ||||
| 	PerRPCCredentials() PerRPCCredentials | ||||
| 	// NewWithMode should make a copy of Bundle, and switch mode. Modifying the | ||||
| 	// existing Bundle may cause races. | ||||
| 	// | ||||
| 	// NewWithMode returns nil if the requested mode is not supported. | ||||
| 	NewWithMode(mode string) (Bundle, error) | ||||
| } | ||||
|  | ||||
| // TLSInfo contains the auth information for a TLS authenticated connection. | ||||
| // It implements the AuthInfo interface. | ||||
| type TLSInfo struct { | ||||
| @@ -118,6 +136,18 @@ func (t TLSInfo) AuthType() string { | ||||
| 	return "tls" | ||||
| } | ||||
|  | ||||
| // GetSecurityValue returns security info requested by channelz. | ||||
| func (t TLSInfo) GetSecurityValue() ChannelzSecurityValue { | ||||
| 	v := &TLSChannelzSecurityValue{ | ||||
| 		StandardName: cipherSuiteLookup[t.State.CipherSuite], | ||||
| 	} | ||||
| 	// Currently there's no way to get LocalCertificate info from tls package. | ||||
| 	if len(t.State.PeerCertificates) > 0 { | ||||
| 		v.RemoteCertificate = t.State.PeerCertificates[0].Raw | ||||
| 	} | ||||
| 	return v | ||||
| } | ||||
|  | ||||
| // tlsCreds is the credentials required for authenticating a connection using TLS. | ||||
| type tlsCreds struct { | ||||
| 	// TLS configuration | ||||
| @@ -155,7 +185,7 @@ func (c *tlsCreds) ClientHandshake(ctx context.Context, authority string, rawCon | ||||
| 	case <-ctx.Done(): | ||||
| 		return nil, nil, ctx.Err() | ||||
| 	} | ||||
| 	return conn, TLSInfo{conn.ConnectionState()}, nil | ||||
| 	return internal.WrapSyscallConn(rawConn, conn), TLSInfo{conn.ConnectionState()}, nil | ||||
| } | ||||
|  | ||||
| func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) { | ||||
| @@ -163,7 +193,7 @@ func (c *tlsCreds) ServerHandshake(rawConn net.Conn) (net.Conn, AuthInfo, error) | ||||
| 	if err := conn.Handshake(); err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| 	return conn, TLSInfo{conn.ConnectionState()}, nil | ||||
| 	return internal.WrapSyscallConn(rawConn, conn), TLSInfo{conn.ConnectionState()}, nil | ||||
| } | ||||
|  | ||||
| func (c *tlsCreds) Clone() TransportCredentials { | ||||
| @@ -175,10 +205,23 @@ func (c *tlsCreds) OverrideServerName(serverNameOverride string) error { | ||||
| 	return nil | ||||
| } | ||||
|  | ||||
| const alpnProtoStrH2 = "h2" | ||||
|  | ||||
| func appendH2ToNextProtos(ps []string) []string { | ||||
| 	for _, p := range ps { | ||||
| 		if p == alpnProtoStrH2 { | ||||
| 			return ps | ||||
| 		} | ||||
| 	} | ||||
| 	ret := make([]string, 0, len(ps)+1) | ||||
| 	ret = append(ret, ps...) | ||||
| 	return append(ret, alpnProtoStrH2) | ||||
| } | ||||
|  | ||||
| // NewTLS uses c to construct a TransportCredentials based on TLS. | ||||
| func NewTLS(c *tls.Config) TransportCredentials { | ||||
| 	tc := &tlsCreds{cloneTLSConfig(c)} | ||||
| 	tc.config.NextProtos = alpnProtoStr | ||||
| 	tc.config.NextProtos = appendH2ToNextProtos(tc.config.NextProtos) | ||||
| 	return tc | ||||
| } | ||||
|  | ||||
| @@ -218,3 +261,78 @@ func NewServerTLSFromFile(certFile, keyFile string) (TransportCredentials, error | ||||
| 	} | ||||
| 	return NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}), nil | ||||
| } | ||||
|  | ||||
| // ChannelzSecurityInfo defines the interface that security protocols should implement | ||||
| // in order to provide security info to channelz. | ||||
| type ChannelzSecurityInfo interface { | ||||
| 	GetSecurityValue() ChannelzSecurityValue | ||||
| } | ||||
|  | ||||
| // ChannelzSecurityValue defines the interface that GetSecurityValue() return value | ||||
| // should satisfy. This interface should only be satisfied by *TLSChannelzSecurityValue | ||||
| // and *OtherChannelzSecurityValue. | ||||
| type ChannelzSecurityValue interface { | ||||
| 	isChannelzSecurityValue() | ||||
| } | ||||
|  | ||||
| // TLSChannelzSecurityValue defines the struct that TLS protocol should return | ||||
| // from GetSecurityValue(), containing security info like cipher and certificate used. | ||||
| type TLSChannelzSecurityValue struct { | ||||
| 	StandardName      string | ||||
| 	LocalCertificate  []byte | ||||
| 	RemoteCertificate []byte | ||||
| } | ||||
|  | ||||
| func (*TLSChannelzSecurityValue) isChannelzSecurityValue() {} | ||||
|  | ||||
| // OtherChannelzSecurityValue defines the struct that non-TLS protocol should return | ||||
| // from GetSecurityValue(), which contains protocol specific security info. Note | ||||
| // the Value field will be sent to users of channelz requesting channel info, and | ||||
| // thus sensitive info should better be avoided. | ||||
| type OtherChannelzSecurityValue struct { | ||||
| 	Name  string | ||||
| 	Value proto.Message | ||||
| } | ||||
|  | ||||
| func (*OtherChannelzSecurityValue) isChannelzSecurityValue() {} | ||||
|  | ||||
| var cipherSuiteLookup = map[uint16]string{ | ||||
| 	tls.TLS_RSA_WITH_RC4_128_SHA:                "TLS_RSA_WITH_RC4_128_SHA", | ||||
| 	tls.TLS_RSA_WITH_3DES_EDE_CBC_SHA:           "TLS_RSA_WITH_3DES_EDE_CBC_SHA", | ||||
| 	tls.TLS_RSA_WITH_AES_128_CBC_SHA:            "TLS_RSA_WITH_AES_128_CBC_SHA", | ||||
| 	tls.TLS_RSA_WITH_AES_256_CBC_SHA:            "TLS_RSA_WITH_AES_256_CBC_SHA", | ||||
| 	tls.TLS_RSA_WITH_AES_128_GCM_SHA256:         "TLS_RSA_WITH_AES_128_GCM_SHA256", | ||||
| 	tls.TLS_RSA_WITH_AES_256_GCM_SHA384:         "TLS_RSA_WITH_AES_256_GCM_SHA384", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_RC4_128_SHA:        "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA:    "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA:    "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_RC4_128_SHA:          "TLS_ECDHE_RSA_WITH_RC4_128_SHA", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA:     "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA:      "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA:      "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:   "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384:   "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384: "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384", | ||||
| 	tls.TLS_FALLBACK_SCSV:                       "TLS_FALLBACK_SCSV", | ||||
| 	tls.TLS_RSA_WITH_AES_128_CBC_SHA256:         "TLS_RSA_WITH_AES_128_CBC_SHA256", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256: "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256:   "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256", | ||||
| 	tls.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305:    "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305", | ||||
| 	tls.TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305:  "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305", | ||||
| } | ||||
|  | ||||
| // cloneTLSConfig returns a shallow clone of the exported | ||||
| // fields of cfg, ignoring the unexported sync.Once, which | ||||
| // contains a mutex and must not be copied. | ||||
| // | ||||
| // If cfg is nil, a new zero tls.Config is returned. | ||||
| // | ||||
| // TODO: inline this function if possible. | ||||
| func cloneTLSConfig(cfg *tls.Config) *tls.Config { | ||||
| 	if cfg == nil { | ||||
| 		return &tls.Config{} | ||||
| 	} | ||||
|  | ||||
| 	return cfg.Clone() | ||||
| } | ||||
|   | ||||
							
								
								
									
										60
									
								
								vendor/google.golang.org/grpc/credentials/credentials_util_go17.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										60
									
								
								vendor/google.golang.org/grpc/credentials/credentials_util_go17.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,60 +0,0 @@ | ||||
| // +build go1.7 | ||||
| // +build !go1.8 | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2016 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| package credentials | ||||
|  | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| ) | ||||
|  | ||||
| // cloneTLSConfig returns a shallow clone of the exported | ||||
| // fields of cfg, ignoring the unexported sync.Once, which | ||||
| // contains a mutex and must not be copied. | ||||
| // | ||||
| // If cfg is nil, a new zero tls.Config is returned. | ||||
| func cloneTLSConfig(cfg *tls.Config) *tls.Config { | ||||
| 	if cfg == nil { | ||||
| 		return &tls.Config{} | ||||
| 	} | ||||
| 	return &tls.Config{ | ||||
| 		Rand:                        cfg.Rand, | ||||
| 		Time:                        cfg.Time, | ||||
| 		Certificates:                cfg.Certificates, | ||||
| 		NameToCertificate:           cfg.NameToCertificate, | ||||
| 		GetCertificate:              cfg.GetCertificate, | ||||
| 		RootCAs:                     cfg.RootCAs, | ||||
| 		NextProtos:                  cfg.NextProtos, | ||||
| 		ServerName:                  cfg.ServerName, | ||||
| 		ClientAuth:                  cfg.ClientAuth, | ||||
| 		ClientCAs:                   cfg.ClientCAs, | ||||
| 		InsecureSkipVerify:          cfg.InsecureSkipVerify, | ||||
| 		CipherSuites:                cfg.CipherSuites, | ||||
| 		PreferServerCipherSuites:    cfg.PreferServerCipherSuites, | ||||
| 		SessionTicketsDisabled:      cfg.SessionTicketsDisabled, | ||||
| 		SessionTicketKey:            cfg.SessionTicketKey, | ||||
| 		ClientSessionCache:          cfg.ClientSessionCache, | ||||
| 		MinVersion:                  cfg.MinVersion, | ||||
| 		MaxVersion:                  cfg.MaxVersion, | ||||
| 		CurvePreferences:            cfg.CurvePreferences, | ||||
| 		DynamicRecordSizingDisabled: cfg.DynamicRecordSizingDisabled, | ||||
| 		Renegotiation:               cfg.Renegotiation, | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										57
									
								
								vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										57
									
								
								vendor/google.golang.org/grpc/credentials/credentials_util_pre_go17.go
									
									
									
										generated
									
									
										vendored
									
									
								
							| @@ -1,57 +0,0 @@ | ||||
| // +build !go1.7 | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2016 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| package credentials | ||||
|  | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| ) | ||||
|  | ||||
| // cloneTLSConfig returns a shallow clone of the exported | ||||
| // fields of cfg, ignoring the unexported sync.Once, which | ||||
| // contains a mutex and must not be copied. | ||||
| // | ||||
| // If cfg is nil, a new zero tls.Config is returned. | ||||
| func cloneTLSConfig(cfg *tls.Config) *tls.Config { | ||||
| 	if cfg == nil { | ||||
| 		return &tls.Config{} | ||||
| 	} | ||||
| 	return &tls.Config{ | ||||
| 		Rand:                     cfg.Rand, | ||||
| 		Time:                     cfg.Time, | ||||
| 		Certificates:             cfg.Certificates, | ||||
| 		NameToCertificate:        cfg.NameToCertificate, | ||||
| 		GetCertificate:           cfg.GetCertificate, | ||||
| 		RootCAs:                  cfg.RootCAs, | ||||
| 		NextProtos:               cfg.NextProtos, | ||||
| 		ServerName:               cfg.ServerName, | ||||
| 		ClientAuth:               cfg.ClientAuth, | ||||
| 		ClientCAs:                cfg.ClientCAs, | ||||
| 		InsecureSkipVerify:       cfg.InsecureSkipVerify, | ||||
| 		CipherSuites:             cfg.CipherSuites, | ||||
| 		PreferServerCipherSuites: cfg.PreferServerCipherSuites, | ||||
| 		SessionTicketsDisabled:   cfg.SessionTicketsDisabled, | ||||
| 		SessionTicketKey:         cfg.SessionTicketKey, | ||||
| 		ClientSessionCache:       cfg.ClientSessionCache, | ||||
| 		MinVersion:               cfg.MinVersion, | ||||
| 		MaxVersion:               cfg.MaxVersion, | ||||
| 		CurvePreferences:         cfg.CurvePreferences, | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										61
									
								
								vendor/google.golang.org/grpc/credentials/internal/syscallconn.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								vendor/google.golang.org/grpc/credentials/internal/syscallconn.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,61 @@ | ||||
| // +build !appengine | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2018 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| // Package internal contains credentials-internal code. | ||||
| package internal | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| 	"syscall" | ||||
| ) | ||||
|  | ||||
| type sysConn = syscall.Conn | ||||
|  | ||||
| // syscallConn keeps reference of rawConn to support syscall.Conn for channelz. | ||||
| // SyscallConn() (the method in interface syscall.Conn) is explicitly | ||||
| // implemented on this type, | ||||
| // | ||||
| // Interface syscall.Conn is implemented by most net.Conn implementations (e.g. | ||||
| // TCPConn, UnixConn), but is not part of net.Conn interface. So wrapper conns | ||||
| // that embed net.Conn don't implement syscall.Conn. (Side note: tls.Conn | ||||
| // doesn't embed net.Conn, so even if syscall.Conn is part of net.Conn, it won't | ||||
| // help here). | ||||
| type syscallConn struct { | ||||
| 	net.Conn | ||||
| 	// sysConn is a type alias of syscall.Conn. It's necessary because the name | ||||
| 	// `Conn` collides with `net.Conn`. | ||||
| 	sysConn | ||||
| } | ||||
|  | ||||
| // WrapSyscallConn tries to wrap rawConn and newConn into a net.Conn that | ||||
| // implements syscall.Conn. rawConn will be used to support syscall, and newConn | ||||
| // will be used for read/write. | ||||
| // | ||||
| // This function returns newConn if rawConn doesn't implement syscall.Conn. | ||||
| func WrapSyscallConn(rawConn, newConn net.Conn) net.Conn { | ||||
| 	sysConn, ok := rawConn.(syscall.Conn) | ||||
| 	if !ok { | ||||
| 		return newConn | ||||
| 	} | ||||
| 	return &syscallConn{ | ||||
| 		Conn:    newConn, | ||||
| 		sysConn: sysConn, | ||||
| 	} | ||||
| } | ||||
							
								
								
									
										30
									
								
								vendor/google.golang.org/grpc/credentials/internal/syscallconn_appengine.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/google.golang.org/grpc/credentials/internal/syscallconn_appengine.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // +build appengine | ||||
|  | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2018 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  * | ||||
|  */ | ||||
|  | ||||
| package internal | ||||
|  | ||||
| import ( | ||||
| 	"net" | ||||
| ) | ||||
|  | ||||
| // WrapSyscallConn returns newConn on appengine. | ||||
| func WrapSyscallConn(rawConn, newConn net.Conn) net.Conn { | ||||
| 	return newConn | ||||
| } | ||||
| @@ -1,8 +1,8 @@ | ||||
| // +build go1.8 | ||||
| // +build go1.12 | ||||
| 
 | ||||
| /* | ||||
|  * | ||||
|  * Copyright 2017 gRPC authors. | ||||
|  * Copyright 2019 gRPC authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
| @@ -20,19 +20,11 @@ | ||||
| 
 | ||||
| package credentials | ||||
| 
 | ||||
| import ( | ||||
| 	"crypto/tls" | ||||
| ) | ||||
| import "crypto/tls" | ||||
| 
 | ||||
| // cloneTLSConfig returns a shallow clone of the exported | ||||
| // fields of cfg, ignoring the unexported sync.Once, which | ||||
| // contains a mutex and must not be copied. | ||||
| // | ||||
| // If cfg is nil, a new zero tls.Config is returned. | ||||
| func cloneTLSConfig(cfg *tls.Config) *tls.Config { | ||||
| 	if cfg == nil { | ||||
| 		return &tls.Config{} | ||||
| 	} | ||||
| 
 | ||||
| 	return cfg.Clone() | ||||
| // This init function adds cipher suite constants only defined in Go 1.12. | ||||
| func init() { | ||||
| 	cipherSuiteLookup[tls.TLS_AES_128_GCM_SHA256] = "TLS_AES_128_GCM_SHA256" | ||||
| 	cipherSuiteLookup[tls.TLS_AES_256_GCM_SHA384] = "TLS_AES_256_GCM_SHA384" | ||||
| 	cipherSuiteLookup[tls.TLS_CHACHA20_POLY1305_SHA256] = "TLS_CHACHA20_POLY1305_SHA256" | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Sebastiaan van Stijn
					Sebastiaan van Stijn