Skip to content

Commit a2d1f89

Browse files
committed
Add custom tls client support for v2ray h2/grpclite transports
1 parent 7e09beb commit a2d1f89

File tree

14 files changed

+211
-129
lines changed

14 files changed

+211
-129
lines changed

common/tls/client.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ func NewClient(router adapter.Router, serverAddress string, options option.Outbo
3030
}
3131
}
3232

33-
func ClientHandshake(ctx context.Context, conn net.Conn, config Config) (net.Conn, error) {
33+
func ClientHandshake(ctx context.Context, conn net.Conn, config Config) (Conn, error) {
3434
tlsConn := config.Client(conn)
3535
ctx, cancel := context.WithTimeout(ctx, C.TCPTimeout)
3636
defer cancel()

common/tls/config.go

+3
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ type (
1515
)
1616

1717
type Config interface {
18+
NextProtos() []string
19+
SetNextProtos(nextProto []string)
1820
Config() (*STDConfig, error)
1921
Client(conn net.Conn) Conn
2022
}
@@ -28,6 +30,7 @@ type ServerConfig interface {
2830
type Conn interface {
2931
net.Conn
3032
HandshakeContext(ctx context.Context) error
33+
ConnectionState() tls.ConnectionState
3134
}
3235

3336
func ParseTLSVersion(version string) (uint16, error) {

common/tls/ech_client.go

+41-10
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ package tls
44

55
import (
66
"context"
7+
"crypto/tls"
78
"crypto/x509"
89
"encoding/base64"
910
"net"
@@ -12,7 +13,7 @@ import (
1213

1314
"github.com/sagernet/sing-box/adapter"
1415
"github.com/sagernet/sing-box/option"
15-
"github.com/sagernet/sing-box/transport/cloudflaretls"
16+
cftls "github.com/sagernet/sing-box/transport/cloudflaretls"
1617
"github.com/sagernet/sing-dns"
1718
E "github.com/sagernet/sing/common/exceptions"
1819

@@ -21,15 +22,45 @@ import (
2122
)
2223

2324
type echClientConfig struct {
24-
config *tls.Config
25+
config *cftls.Config
26+
}
27+
28+
func (e *echClientConfig) NextProtos() []string {
29+
return e.config.NextProtos
30+
}
31+
32+
func (e *echClientConfig) SetNextProtos(nextProto []string) {
33+
e.config.NextProtos = nextProto
2534
}
2635

2736
func (e *echClientConfig) Config() (*STDConfig, error) {
2837
return nil, E.New("unsupported usage for ECH")
2938
}
3039

3140
func (e *echClientConfig) Client(conn net.Conn) Conn {
32-
return tls.Client(conn, e.config)
41+
return &echConnWrapper{cftls.Client(conn, e.config)}
42+
}
43+
44+
type echConnWrapper struct {
45+
*cftls.Conn
46+
}
47+
48+
func (c *echConnWrapper) ConnectionState() tls.ConnectionState {
49+
state := c.Conn.ConnectionState()
50+
return tls.ConnectionState{
51+
Version: state.Version,
52+
HandshakeComplete: state.HandshakeComplete,
53+
DidResume: state.DidResume,
54+
CipherSuite: state.CipherSuite,
55+
NegotiatedProtocol: state.NegotiatedProtocol,
56+
NegotiatedProtocolIsMutual: state.NegotiatedProtocolIsMutual,
57+
ServerName: state.ServerName,
58+
PeerCertificates: state.PeerCertificates,
59+
VerifiedChains: state.VerifiedChains,
60+
SignedCertificateTimestamps: state.SignedCertificateTimestamps,
61+
OCSPResponse: state.OCSPResponse,
62+
TLSUnique: state.TLSUnique,
63+
}
3364
}
3465

3566
func newECHClient(router adapter.Router, serverAddress string, options option.OutboundTLSOptions) (Config, error) {
@@ -45,7 +76,7 @@ func newECHClient(router adapter.Router, serverAddress string, options option.Ou
4576
return nil, E.New("missing server_name or insecure=true")
4677
}
4778

48-
var tlsConfig tls.Config
79+
var tlsConfig cftls.Config
4980
if options.DisableSNI {
5081
tlsConfig.ServerName = "127.0.0.1"
5182
} else {
@@ -55,7 +86,7 @@ func newECHClient(router adapter.Router, serverAddress string, options option.Ou
5586
tlsConfig.InsecureSkipVerify = options.Insecure
5687
} else if options.DisableSNI {
5788
tlsConfig.InsecureSkipVerify = true
58-
tlsConfig.VerifyConnection = func(state tls.ConnectionState) error {
89+
tlsConfig.VerifyConnection = func(state cftls.ConnectionState) error {
5990
verifyOptions := x509.VerifyOptions{
6091
DNSName: serverName,
6192
Intermediates: x509.NewCertPool(),
@@ -87,7 +118,7 @@ func newECHClient(router adapter.Router, serverAddress string, options option.Ou
87118
if options.CipherSuites != nil {
88119
find:
89120
for _, cipherSuite := range options.CipherSuites {
90-
for _, tlsCipherSuite := range tls.CipherSuites() {
121+
for _, tlsCipherSuite := range cftls.CipherSuites() {
91122
if cipherSuite == tlsCipherSuite.Name {
92123
tlsConfig.CipherSuites = append(tlsConfig.CipherSuites, tlsCipherSuite.ID)
93124
continue find
@@ -124,7 +155,7 @@ func newECHClient(router adapter.Router, serverAddress string, options option.Ou
124155
if err != nil {
125156
return nil, err
126157
}
127-
clientConfig, err := tls.UnmarshalECHConfigs(clientConfigContent)
158+
clientConfig, err := cftls.UnmarshalECHConfigs(clientConfigContent)
128159
if err != nil {
129160
return nil, err
130161
}
@@ -137,8 +168,8 @@ func newECHClient(router adapter.Router, serverAddress string, options option.Ou
137168

138169
const typeHTTPS = 65
139170

140-
func fetchECHClientConfig(router adapter.Router) func(ctx context.Context, serverName string) ([]tls.ECHConfig, error) {
141-
return func(ctx context.Context, serverName string) ([]tls.ECHConfig, error) {
171+
func fetchECHClientConfig(router adapter.Router) func(ctx context.Context, serverName string) ([]cftls.ECHConfig, error) {
172+
return func(ctx context.Context, serverName string) ([]cftls.ECHConfig, error) {
142173
message := &dnsmessage.Message{
143174
Header: dnsmessage.Header{
144175
RecursionDesired: true,
@@ -176,7 +207,7 @@ func fetchECHClientConfig(router adapter.Router) func(ctx context.Context, serve
176207
if err != nil {
177208
return nil, E.Cause(err, "decode ECH config")
178209
}
179-
return tls.UnmarshalECHConfigs(echConfig)
210+
return cftls.UnmarshalECHConfigs(echConfig)
180211
}
181212
}
182213
default:

common/tls/std_client.go

+8
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,14 @@ func newStdClient(serverAddress string, options option.OutboundTLSOptions) (Conf
9999
return &stdClientConfig{&tlsConfig}, nil
100100
}
101101

102+
func (s *stdClientConfig) NextProtos() []string {
103+
return s.config.NextProtos
104+
}
105+
106+
func (s *stdClientConfig) SetNextProtos(nextProto []string) {
107+
s.config.NextProtos = nextProto
108+
}
109+
102110
func (s *stdClientConfig) Config() (*STDConfig, error) {
103111
return s.config, nil
104112
}

common/tls/std_server.go

+8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@ type STDServerConfig struct {
2626
watcher *fsnotify.Watcher
2727
}
2828

29+
func (c *STDServerConfig) NextProtos() []string {
30+
return c.config.NextProtos
31+
}
32+
33+
func (c *STDServerConfig) SetNextProtos(nextProto []string) {
34+
c.config.NextProtos = nextProto
35+
}
36+
2937
func newSTDServer(ctx context.Context, logger log.Logger, options option.InboundTLSOptions) (ServerConfig, error) {
3038
if !options.Enabled {
3139
return nil, nil

common/tls/utls_client.go

+26
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,14 @@ type utlsClientConfig struct {
2222
id utls.ClientHelloID
2323
}
2424

25+
func (e *utlsClientConfig) NextProtos() []string {
26+
return e.config.NextProtos
27+
}
28+
29+
func (e *utlsClientConfig) SetNextProtos(nextProto []string) {
30+
e.config.NextProtos = nextProto
31+
}
32+
2533
func (e *utlsClientConfig) Config() (*STDConfig, error) {
2634
return nil, E.New("unsupported usage for uTLS")
2735
}
@@ -38,6 +46,24 @@ func (c *utlsConnWrapper) HandshakeContext(ctx context.Context) error {
3846
return c.Conn.Handshake()
3947
}
4048

49+
func (c *utlsConnWrapper) ConnectionState() tls.ConnectionState {
50+
state := c.Conn.ConnectionState()
51+
return tls.ConnectionState{
52+
Version: state.Version,
53+
HandshakeComplete: state.HandshakeComplete,
54+
DidResume: state.DidResume,
55+
CipherSuite: state.CipherSuite,
56+
NegotiatedProtocol: state.NegotiatedProtocol,
57+
NegotiatedProtocolIsMutual: state.NegotiatedProtocolIsMutual,
58+
ServerName: state.ServerName,
59+
PeerCertificates: state.PeerCertificates,
60+
VerifiedChains: state.VerifiedChains,
61+
SignedCertificateTimestamps: state.SignedCertificateTimestamps,
62+
OCSPResponse: state.OCSPResponse,
63+
TLSUnique: state.TLSUnique,
64+
}
65+
}
66+
4167
func newUTLSClient(router adapter.Router, serverAddress string, options option.OutboundTLSOptions) (Config, error) {
4268
var serverName string
4369
if options.ServerName != "" {

test/go.mod

+8-8
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@ require github.com/sagernet/sing-box v0.0.0
77
replace github.com/sagernet/sing-box => ../
88

99
require (
10-
github.com/docker/docker v20.10.17+incompatible
10+
github.com/docker/docker v20.10.18+incompatible
1111
github.com/docker/go-connections v0.4.0
12-
github.com/gofrs/uuid v4.2.0+incompatible
13-
github.com/sagernet/sing v0.0.0-20220905164441-f3d346256d4a
12+
github.com/gofrs/uuid v4.3.0+incompatible
13+
github.com/sagernet/sing v0.0.0-20220910144724-62c4ebdbcb3f
1414
github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6
1515
github.com/spyzhov/ajson v0.7.1
1616
github.com/stretchr/testify v1.8.0
17-
golang.org/x/net v0.0.0-20220907135653-1e95f45603a7
17+
golang.org/x/net v0.0.0-20220909164309-bea034e7d591
1818
)
1919

2020
//replace github.com/sagernet/sing => ../../sing
@@ -66,20 +66,21 @@ require (
6666
github.com/sagernet/go-tun2socks v1.16.12-0.20220818015926-16cb67876a61 // indirect
6767
github.com/sagernet/netlink v0.0.0-20220905062125-8043b4a9aa97 // indirect
6868
github.com/sagernet/quic-go v0.0.0-20220818150011-de611ab3e2bb // indirect
69-
github.com/sagernet/sing-dns v0.0.0-20220903082137-b1102b8fc961 // indirect
69+
github.com/sagernet/sing-dns v0.0.0-20220822023312-3e086b06d666 // indirect
7070
github.com/sagernet/sing-tun v0.0.0-20220909114108-a6b5a9289ecb // indirect
7171
github.com/sagernet/sing-vmess v0.0.0-20220907073918-72d7fdf6825f // indirect
72-
github.com/sagernet/smux v0.0.0-20220907034654-1acb8471c15a // indirect
72+
github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195 // indirect
7373
github.com/sirupsen/logrus v1.8.1 // indirect
7474
github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74 // indirect
75+
go.etcd.io/bbolt v1.3.6 // indirect
7576
go.uber.org/atomic v1.10.0 // indirect
7677
go.uber.org/multierr v1.6.0 // indirect
7778
go.uber.org/zap v1.22.0 // indirect
7879
go4.org/netipx v0.0.0-20220812043211-3cc044ffd68d // indirect
7980
golang.org/x/crypto v0.0.0-20220829220503-c86fa9a7ed90 // indirect
8081
golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e // indirect
8182
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
82-
golang.org/x/sys v0.0.0-20220908164124-27713097b956 // indirect
83+
golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 // indirect
8384
golang.org/x/text v0.3.7 // indirect
8485
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
8586
golang.org/x/tools v0.1.11-0.20220513221640-090b14e8501f // indirect
@@ -89,7 +90,6 @@ require (
8990
google.golang.org/grpc v1.49.0 // indirect
9091
google.golang.org/protobuf v1.28.1 // indirect
9192
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
92-
gopkg.in/yaml.v2 v2.4.0 // indirect
9393
gopkg.in/yaml.v3 v3.0.1 // indirect
9494
gotest.tools/v3 v3.3.0 // indirect
9595
gvisor.dev/gvisor v0.0.0-20220901235040-6ca97ef2ce1c // indirect

test/go.sum

+18-16
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
3232
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3333
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
3434
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
35-
github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE=
36-
github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
35+
github.com/docker/docker v20.10.18+incompatible h1:SN84VYXTBNGn92T/QwIRPlum9zfemfitN7pbsp26WSc=
36+
github.com/docker/docker v20.10.18+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
3737
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
3838
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
3939
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
@@ -57,8 +57,8 @@ github.com/go-chi/render v1.0.2 h1:4ER/udB0+fMWB2Jlf15RV3F4A2FDuYi/9f+lFttR/Lg=
5757
github.com/go-chi/render v1.0.2/go.mod h1:/gr3hVkmYR0YlEy3LxCuVRFzEu9Ruok+gFqbIofjao0=
5858
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I=
5959
github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE=
60-
github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
61-
github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
60+
github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc=
61+
github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
6262
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
6363
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
6464
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -165,18 +165,18 @@ github.com/sagernet/quic-go v0.0.0-20220818150011-de611ab3e2bb h1:wc0yQ+SBn4TaTY
165165
github.com/sagernet/quic-go v0.0.0-20220818150011-de611ab3e2bb/go.mod h1:MIccjRKnPTjWwAOpl+AUGWOkzyTd9tERytudxu+1ra4=
166166
github.com/sagernet/sing v0.0.0-20220812082120-05f9836bff8f/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY=
167167
github.com/sagernet/sing v0.0.0-20220817130738-ce854cda8522/go.mod h1:QVsS5L/ZA2Q5UhQwLrn0Trw+msNd/NPGEhBKR/ioWiY=
168-
github.com/sagernet/sing v0.0.0-20220905164441-f3d346256d4a h1:Bqt+eYP7vJocAgAVAXC0B0ZN0uMr6g6exAoF3Ado2pg=
169-
github.com/sagernet/sing v0.0.0-20220905164441-f3d346256d4a/go.mod h1:kZvzh1VDa/Dg/Bt5WaYKU0jl5ept8KKDpl3Ay4gRtRQ=
170-
github.com/sagernet/sing-dns v0.0.0-20220903082137-b1102b8fc961 h1:5JeqhvCGV6AQQiAO0V67Loh2eyO3JNjIQnvRF8NnTE0=
171-
github.com/sagernet/sing-dns v0.0.0-20220903082137-b1102b8fc961/go.mod h1:vKBBy4mNJRaFuJ8H6kYIOPofsZ1JT5mgdwIlebtvnZ4=
168+
github.com/sagernet/sing v0.0.0-20220910144724-62c4ebdbcb3f h1:w1TJq7Lw3It35tDyMsZLtYz4T2msf1UK9JxC85L5+sk=
169+
github.com/sagernet/sing v0.0.0-20220910144724-62c4ebdbcb3f/go.mod h1:kZvzh1VDa/Dg/Bt5WaYKU0jl5ept8KKDpl3Ay4gRtRQ=
170+
github.com/sagernet/sing-dns v0.0.0-20220822023312-3e086b06d666 h1:XUTocA/Ek0dFxUX+xJCWMPPFZCn2GC/uLrBjTSr1vHY=
171+
github.com/sagernet/sing-dns v0.0.0-20220822023312-3e086b06d666/go.mod h1:eDyH7AJmqBGjZQdQmpZIzlbTREudZuWDExMuGKgjRVM=
172172
github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6 h1:JJfDeYYhWunvtxsU/mOVNTmFQmnzGx9dY034qG6G3g4=
173173
github.com/sagernet/sing-shadowsocks v0.0.0-20220819002358-7461bb09a8f6/go.mod h1:EX3RbZvrwAkPI2nuGa78T2iQXmrkT+/VQtskjou42xM=
174174
github.com/sagernet/sing-tun v0.0.0-20220909114108-a6b5a9289ecb h1:/swVU2mgwDwZ9l67v1Sim1ias/ZmriGTxQLnMakPhtQ=
175175
github.com/sagernet/sing-tun v0.0.0-20220909114108-a6b5a9289ecb/go.mod h1:5AhPUv9jWDQ3pv3Mj78SL/1TSjhoaj6WNASxRKLqXqM=
176176
github.com/sagernet/sing-vmess v0.0.0-20220907073918-72d7fdf6825f h1:6l9aXZqAl1JqXJWi89KHpWnM/moQUPGG+XiwMc+yD0A=
177177
github.com/sagernet/sing-vmess v0.0.0-20220907073918-72d7fdf6825f/go.mod h1:u66Vv7NHXJWfeAmhh7JuJp/cwxmuQlM56QoZ7B7Mmd0=
178-
github.com/sagernet/smux v0.0.0-20220907034654-1acb8471c15a h1:GCNwsN8MEckpjGJjK3qjQBQ9qHsoXB9B/KHUWBvE1V4=
179-
github.com/sagernet/smux v0.0.0-20220907034654-1acb8471c15a/go.mod h1:yedWtra8nyGJ+SyI+ziwuaGMzBatbB10P1IOOZbbSK8=
178+
github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195 h1:5VBIbVw9q7aKbrFdT83mjkyvQ+VaRsQ6yflTepfln38=
179+
github.com/sagernet/smux v0.0.0-20220831015742-e0f1988e3195/go.mod h1:yedWtra8nyGJ+SyI+ziwuaGMzBatbB10P1IOOZbbSK8=
180180
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
181181
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
182182
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
@@ -197,6 +197,8 @@ github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74/go.mod h1:DD4vA1
197197
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
198198
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
199199
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
200+
go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU=
201+
go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4=
200202
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
201203
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
202204
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
@@ -251,8 +253,8 @@ golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qx
251253
golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
252254
golang.org/x/net v0.0.0-20211111160137-58aab5ef257a/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
253255
golang.org/x/net v0.0.0-20220630215102-69896b714898/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
254-
golang.org/x/net v0.0.0-20220907135653-1e95f45603a7 h1:1WGATo9HAhkWMbfyuVU0tEFP88OIkUvwaHFveQPvzCQ=
255-
golang.org/x/net v0.0.0-20220907135653-1e95f45603a7/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
256+
golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI=
257+
golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
256258
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
257259
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
258260
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -275,6 +277,7 @@ golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7w
275277
golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
276278
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
277279
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
280+
golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
278281
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
279282
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
280283
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -290,8 +293,8 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc
290293
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
291294
golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
292295
golang.org/x/sys v0.0.0-20220731174439-a90be440212d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
293-
golang.org/x/sys v0.0.0-20220908164124-27713097b956 h1:XeJjHH1KiLpKGb6lvMiksZ9l0fVUh+AmGcm0nOMEBOY=
294-
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
296+
golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2 h1:wM1k/lXfpc5HdkJJyW9GELpd8ERGdnh8sMGL6Gzq3Ho=
297+
golang.org/x/sys v0.0.0-20220909162455-aba9fc2a8ff2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
295298
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
296299
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
297300
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
@@ -370,9 +373,8 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
370373
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
371374
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
372375
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
376+
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
373377
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
374-
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
375-
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
376378
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
377379
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
378380
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

0 commit comments

Comments
 (0)