Skip to content

Commit 8ae1e67

Browse files
authored
nebula v1.10 compat (#26)
* bump nebula to current master for cert-v2 support * prefer Nebula's public key handling functions where possible
1 parent ff7ea2b commit 8ae1e67

File tree

7 files changed

+100
-109
lines changed

7 files changed

+100
-109
lines changed

client_test.go

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"crypto/rand"
99
"crypto/sha256"
1010
"encoding/json"
11-
"encoding/pem"
1211
"errors"
1312
"fmt"
1413
"io"
@@ -54,7 +53,7 @@ func TestEnroll(t *testing.T) {
5453
oidcExpiresAt := time.Now()
5554
counter := uint(5)
5655
ca, _ := dnapitest.NebulaCACert()
57-
caPEM, err := ca.MarshalToPEM()
56+
caPEM, err := ca.MarshalPEM()
5857
require.NoError(t, err)
5958

6059
ts.ExpectEnrollment(code, message.NetworkCurve25519, func(req message.EnrollRequest) []byte {
@@ -78,7 +77,7 @@ func TestEnroll(t *testing.T) {
7877
HostID: hostID,
7978
Counter: counter,
8079
Config: cfg,
81-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
80+
TrustedKeys: ca.MarshalPublicKeyPEM(),
8281
Organization: message.HostOrgMetadata{
8382
ID: orgID,
8483
Name: orgName,
@@ -109,7 +108,7 @@ func TestEnroll(t *testing.T) {
109108
assert.Empty(t, ts.Errors())
110109
assert.Equal(t, 0, ts.RequestsRemaining())
111110

112-
tk, err := keys.NewTrustedKey(ed25519.PublicKey(ca.Details.PublicKey))
111+
tk, err := keys.NewTrustedKey(ed25519.PublicKey(ca.PublicKey()))
113112
require.NoError(t, err)
114113

115114
assert.Equal(t, hostID, creds.HostID)
@@ -129,7 +128,7 @@ func TestEnroll(t *testing.T) {
129128
}
130129
err = yaml.Unmarshal(cfg, &y)
131130
require.NoError(t, err)
132-
_, rest, err := cert.UnmarshalX25519PublicKey(y.Test.DHPubkey)
131+
_, rest, _, err := cert.UnmarshalPublicKeyFromPEM(y.Test.DHPubkey)
133132
assert.NoError(t, err)
134133
assert.Len(t, rest, 0)
135134
assert.Equal(t, code, y.Test.Code)
@@ -182,7 +181,7 @@ func TestDoUpdate(t *testing.T) {
182181
t.Cleanup(func() { ts.Close() })
183182

184183
ca, caPrivkey := dnapitest.NebulaCACert()
185-
caPEM, err := ca.MarshalToPEM()
184+
caPEM, err := ca.MarshalPEM()
186185
require.NoError(t, err)
187186

188187
c := NewClient(useragent, ts.URL)
@@ -209,7 +208,7 @@ func TestDoUpdate(t *testing.T) {
209208
HostID: "foobar",
210209
Counter: 1,
211210
Config: cfg,
212-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
211+
TrustedKeys: ca.MarshalPublicKeyPEM(),
213212
Organization: message.HostOrgMetadata{
214213
ID: "foobaz",
215214
Name: "foobar's foo org",
@@ -278,7 +277,7 @@ func TestDoUpdate(t *testing.T) {
278277
Config: dnapitest.NebulaCfg(caPEM),
279278
Counter: 2,
280279
Nonce: dnapitest.GetNonce(r),
281-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
280+
TrustedKeys: ca.MarshalPublicKeyPEM(),
282281
Organization: message.HostOrgMetadata{
283282
ID: "foobaz",
284283
Name: "foobar's foo org",
@@ -333,7 +332,7 @@ func TestDoUpdate(t *testing.T) {
333332
Config: dnapitest.NebulaCfg(caPEM),
334333
Counter: 0,
335334
Nonce: dnapitest.GetNonce(r),
336-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
335+
TrustedKeys: ca.MarshalPublicKeyPEM(),
337336
Organization: message.HostOrgMetadata{
338337
ID: "foobaz",
339338
Name: "foobar's foo org",
@@ -393,7 +392,7 @@ func TestDoUpdate(t *testing.T) {
393392
Config: dnapitest.NebulaCfg(caPEM),
394393
Counter: 3,
395394
Nonce: dnapitest.GetNonce(r),
396-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
395+
TrustedKeys: ca.MarshalPublicKeyPEM(),
397396
Organization: message.HostOrgMetadata{
398397
ID: orgID,
399398
Name: orgName,
@@ -453,7 +452,7 @@ func TestDoUpdate_P256(t *testing.T) {
453452
t.Cleanup(func() { ts.Close() })
454453

455454
ca, caPrivkey := dnapitest.NebulaCACertP256()
456-
caPEM, err := ca.MarshalToPEM()
455+
caPEM, err := ca.MarshalPEM()
457456
require.NoError(t, err)
458457

459458
c := NewClient(useragent, ts.URL)
@@ -480,7 +479,7 @@ func TestDoUpdate_P256(t *testing.T) {
480479
HostID: "foobar",
481480
Counter: 1,
482481
Config: cfg,
483-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
482+
TrustedKeys: ca.MarshalPublicKeyPEM(),
484483
Organization: message.HostOrgMetadata{
485484
ID: "foobaz",
486485
Name: "foobar's foo org",
@@ -638,7 +637,7 @@ func TestDoUpdate_P256(t *testing.T) {
638637
Config: dnapitest.NebulaCfg(caPEM),
639638
Counter: 3,
640639
Nonce: dnapitest.GetNonce(r),
641-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
640+
TrustedKeys: ca.MarshalPublicKeyPEM(),
642641
Organization: message.HostOrgMetadata{
643642
ID: "foobaz",
644643
Name: "foobar's foo org",
@@ -693,7 +692,7 @@ func TestCommandResponse(t *testing.T) {
693692
t.Cleanup(func() { ts.Close() })
694693

695694
ca, _ := dnapitest.NebulaCACert()
696-
caPEM, err := ca.MarshalToPEM()
695+
caPEM, err := ca.MarshalPEM()
697696
require.NoError(t, err)
698697

699698
c := NewClient(useragent, ts.URL)
@@ -720,7 +719,7 @@ func TestCommandResponse(t *testing.T) {
720719
HostID: "foobar",
721720
Counter: 1,
722721
Config: cfg,
723-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
722+
TrustedKeys: ca.MarshalPublicKeyPEM(),
724723
Organization: message.HostOrgMetadata{
725724
ID: "foobaz",
726725
Name: "foobar's foo org",
@@ -798,7 +797,7 @@ func TestStreamCommandResponse(t *testing.T) {
798797
t.Cleanup(func() { ts.Close() })
799798

800799
ca, _ := dnapitest.NebulaCACert()
801-
caPEM, err := ca.MarshalToPEM()
800+
caPEM, err := ca.MarshalPEM()
802801
require.NoError(t, err)
803802

804803
c := NewClient(useragent, ts.URL)
@@ -825,7 +824,7 @@ func TestStreamCommandResponse(t *testing.T) {
825824
HostID: "foobar",
826825
Counter: 1,
827826
Config: cfg,
828-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
827+
TrustedKeys: ca.MarshalPublicKeyPEM(),
829828
Organization: message.HostOrgMetadata{
830829
ID: "foobaz",
831830
Name: "foobar's foo org",
@@ -924,7 +923,7 @@ func TestReauthenticate(t *testing.T) {
924923
t.Cleanup(func() { ts.Close() })
925924

926925
ca, caPrivkey := dnapitest.NebulaCACert()
927-
caPEM, err := ca.MarshalToPEM()
926+
caPEM, err := ca.MarshalPEM()
928927
require.NoError(t, err)
929928

930929
c := NewClient(useragent, ts.URL)
@@ -951,7 +950,7 @@ func TestReauthenticate(t *testing.T) {
951950
HostID: "foobar",
952951
Counter: 1,
953952
Config: cfg,
954-
TrustedKeys: marshalCAPublicKey(ca.Details.Curve, ca.Details.PublicKey),
953+
TrustedKeys: ca.MarshalPublicKeyPEM(),
955954
Organization: message.HostOrgMetadata{
956955
ID: "foobaz",
957956
Name: "foobar's foo org",
@@ -1062,17 +1061,6 @@ func TestOverrideTimeout(t *testing.T) {
10621061
require.ErrorIs(t, err, context.DeadlineExceeded)
10631062
}
10641063

1065-
func marshalCAPublicKey(curve cert.Curve, pubkey []byte) []byte {
1066-
switch curve {
1067-
case cert.Curve_CURVE25519:
1068-
return pem.EncodeToMemory(&pem.Block{Type: keys.NebulaEd25519PublicKeyBanner, Bytes: pubkey})
1069-
case cert.Curve_P256:
1070-
return pem.EncodeToMemory(&pem.Block{Type: keys.NebulaECDSAP256PublicKeyBanner, Bytes: pubkey})
1071-
default:
1072-
panic("unsupported curve")
1073-
}
1074-
}
1075-
10761064
func TestGetOidcPollCode(t *testing.T) {
10771065
t.Parallel()
10781066

@@ -1217,3 +1205,15 @@ func TestDownloads(t *testing.T) {
12171205
assert.Equal(t, "0.8.4", resp.VersionInfo.Latest.DNClient)
12181206
assert.Equal(t, "0.5.1", resp.VersionInfo.Latest.Mobile)
12191207
}
1208+
1209+
func TestNebulaPemBanners(t *testing.T) {
1210+
const NebulaECDSAP256PublicKeyBanner = "NEBULA ECDSA P256 PUBLIC KEY"
1211+
const NebulaEd25519PublicKeyBanner = "NEBULA ED25519 PUBLIC KEY"
1212+
ca, _ := dnapitest.NebulaCACert()
1213+
pub := ca.MarshalPublicKeyPEM()
1214+
assert.Contains(t, string(pub), NebulaEd25519PublicKeyBanner)
1215+
1216+
ca, _ = dnapitest.NebulaCACertP256()
1217+
pub = ca.MarshalPublicKeyPEM()
1218+
assert.Contains(t, string(pub), NebulaECDSAP256PublicKeyBanner)
1219+
}

dnapitest/dnapitest.go

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ import (
1414
"fmt"
1515
"io"
1616
"math/big"
17-
"net"
1817
"net/http"
1918
"net/http/httptest"
19+
"net/netip"
2020
"time"
2121

2222
"github.com/DefinedNet/dnapi/keys"
@@ -484,33 +484,33 @@ func NebulaCfg(caCert []byte) []byte {
484484
return nebulaCfg
485485
}
486486

487-
func NebulaCACert() (*cert.NebulaCertificate, ed25519.PrivateKey) {
487+
func NebulaCACert() (cert.Certificate, ed25519.PrivateKey) {
488488
pub, priv, err := ed25519.GenerateKey(rand.Reader)
489489
if err != nil {
490490
panic(err)
491491
}
492492

493-
nc := &cert.NebulaCertificate{
494-
Details: cert.NebulaCertificateDetails{
495-
Name: "UnitTesting",
496-
Groups: []string{"testa", "testb"},
497-
Ips: []*net.IPNet{},
498-
Subnets: []*net.IPNet{},
499-
NotBefore: time.Now(),
500-
NotAfter: time.Now().Add(24 * time.Hour),
501-
PublicKey: pub,
502-
IsCA: true,
503-
},
493+
nc := cert.TBSCertificate{
494+
Version: cert.Version1,
495+
Curve: cert.Curve_CURVE25519,
496+
Name: "UnitTesting",
497+
Groups: []string{"testa", "testb"},
498+
Networks: []netip.Prefix{},
499+
UnsafeNetworks: []netip.Prefix{},
500+
NotBefore: time.Now(),
501+
NotAfter: time.Now().Add(24 * time.Hour),
502+
PublicKey: pub,
503+
IsCA: true,
504504
}
505-
err = nc.Sign(nc.Details.Curve, priv)
505+
out, err := nc.Sign(nil, nc.Curve, priv)
506506
if err != nil {
507507
panic(err)
508508
}
509509

510-
return nc, priv
510+
return out, priv
511511
}
512512

513-
func NebulaCACertP256() (*cert.NebulaCertificate, *ecdsa.PrivateKey) {
513+
func NebulaCACertP256() (cert.Certificate, *ecdsa.PrivateKey) {
514514
key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
515515
if err != nil {
516516
panic(err)
@@ -526,23 +526,22 @@ func NebulaCACertP256() (*cert.NebulaCertificate, *ecdsa.PrivateKey) {
526526
rawPriv := eKey.Bytes()
527527
pub := eKey.PublicKey().Bytes()
528528

529-
nc := &cert.NebulaCertificate{
530-
Details: cert.NebulaCertificateDetails{
531-
Curve: cert.Curve_P256,
532-
Name: "UnitTesting",
533-
Groups: []string{"testa", "testb"},
534-
Ips: []*net.IPNet{},
535-
Subnets: []*net.IPNet{},
536-
NotBefore: time.Now(),
537-
NotAfter: time.Now().Add(24 * time.Hour),
538-
PublicKey: pub,
539-
IsCA: true,
540-
},
529+
nc := cert.TBSCertificate{
530+
Version: cert.Version1,
531+
Curve: cert.Curve_P256,
532+
Name: "UnitTesting",
533+
Groups: []string{"testa", "testb"},
534+
Networks: []netip.Prefix{},
535+
UnsafeNetworks: []netip.Prefix{},
536+
NotBefore: time.Now(),
537+
NotAfter: time.Now().Add(24 * time.Hour),
538+
PublicKey: pub,
539+
IsCA: true,
541540
}
542-
err = nc.Sign(nc.Details.Curve, rawPriv)
541+
out, err := nc.Sign(nil, nc.Curve, rawPriv)
543542
if err != nil {
544543
panic(err)
545544
}
546545

547-
return nc, key
546+
return out, key
548547
}

go.mod

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,21 @@
11
module github.com/DefinedNet/dnapi
22

3-
go 1.24.0
3+
go 1.25
44

55
require (
6-
github.com/sirupsen/logrus v1.9.2
7-
github.com/slackhq/nebula v1.7.1
8-
github.com/stretchr/testify v1.8.2
9-
golang.org/x/crypto v0.42.0
6+
github.com/sirupsen/logrus v1.9.3
7+
github.com/slackhq/nebula v1.10.1-0.20251210163936-3ec527e42cec
8+
github.com/stretchr/testify v1.11.1
9+
golang.org/x/crypto v0.46.0
1010
gopkg.in/yaml.v2 v2.4.0
1111
)
1212

1313
require (
1414
github.com/davecgh/go-spew v1.1.1 // indirect
15-
github.com/google/go-cmp v0.5.9 // indirect
1615
github.com/kr/pretty v0.3.1 // indirect
1716
github.com/pmezard/go-difflib v1.0.0 // indirect
18-
golang.org/x/sys v0.36.0 // indirect
19-
google.golang.org/protobuf v1.30.0 // indirect
17+
golang.org/x/sys v0.39.0 // indirect
18+
google.golang.org/protobuf v1.36.10 // indirect
2019
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
2120
gopkg.in/yaml.v3 v3.0.1 // indirect
2221
)

go.sum

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3
22
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
33
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
44
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5-
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
6-
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
7-
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
8-
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
5+
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
6+
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
97
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
108
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
119
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -16,32 +14,23 @@ github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
1614
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
1715
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
1816
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
17+
github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8=
1918
github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs=
20-
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
21-
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
22-
github.com/sirupsen/logrus v1.9.2 h1:oxx1eChJGI6Uks2ZC4W1zpLlVgqB8ner4EuQwV4Ik1Y=
23-
github.com/sirupsen/logrus v1.9.2/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
24-
github.com/slackhq/nebula v1.7.1 h1:+kzPkx9rMXJKj43N7Zcdb+ZsHAX+/u2beS7qPHbWhdw=
25-
github.com/slackhq/nebula v1.7.1/go.mod h1:cnaoahkUipDs1vrNoIszyp0QPRIQN9Pm68ppQEW1Fhg=
19+
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
20+
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
21+
github.com/slackhq/nebula v1.10.1-0.20251210163936-3ec527e42cec h1:F251X4hgG3Fen49ouS7yUVcwYkvvCjb5bmRFAbMnm+c=
22+
github.com/slackhq/nebula v1.10.1-0.20251210163936-3ec527e42cec/go.mod h1:mqXWEQjg+I1r5KeCqji83gA0rZPCY9yvP25USUBFGxc=
2623
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
27-
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
28-
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
2924
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
30-
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
31-
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
32-
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
33-
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
34-
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
35-
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
36-
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
37-
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
25+
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
26+
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
27+
golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
28+
golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
3829
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
39-
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
40-
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
41-
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
42-
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
43-
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
44-
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
30+
golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
31+
golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
32+
google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
33+
google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
4534
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
4635
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
4736
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

0 commit comments

Comments
 (0)