Skip to content

Commit f520587

Browse files
committed
Merge branch 'keyfile'
* keyfile: ssh-tpm-keygen: guard against invalid bit lengths a bit better update dependencies remove old marshalling tests implement key descriptions properly agent: Improve error for old keys add gitignore keyfile: description is a string remove workflow environment spam Move key format to ASN.1 TPM Key ssh-tpm-agent: close tpm in test fetch new go-tpm-keyfiles dependency move keytype from ECDSA to ECC Remove RSA SRKs and stick with ECC ones
2 parents bc8a269 + 2adb817 commit f520587

File tree

13 files changed

+266
-379
lines changed

13 files changed

+266
-379
lines changed

.github/workflows/build.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ jobs:
1010
build:
1111
name: Build binaries
1212
runs-on: ubuntu-latest
13-
environment: "Build, sign, release binaries"
1413
strategy:
1514
matrix:
1615
include:

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
bin
2+
*.tar.gz*

agent/agent.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func (a *Agent) List() ([]*agent.Key, error) {
124124
agentKeys = append(agentKeys, &agent.Key{
125125
Format: pk.Type(),
126126
Blob: pk.Marshal(),
127-
Comment: string(k.Comment),
127+
Comment: k.Description(),
128128
})
129129
}
130130

@@ -297,7 +297,12 @@ func LoadKeys(keyDir string) (map[string]*key.Key, error) {
297297

298298
k, err := key.DecodeKey(f)
299299
if err != nil {
300-
slog.Debug("not a TPM sealed key", slog.String("key_path", path), slog.String("error", err.Error()))
300+
if errors.Is(err, key.ErrOldKey) {
301+
slog.Info("TPM key is in an old format. Will not load it.", slog.String("key_path", path), slog.String("error", err.Error()))
302+
303+
} else {
304+
slog.Debug("not a TPM sealed key", slog.String("key_path", path), slog.String("error", err.Error()))
305+
}
301306
return nil
302307
}
303308

agent/agent_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,17 @@ func TestAddKey(t *testing.T) {
4949

5050
client := agent.NewClient(conn)
5151

52-
k, err := key.CreateKey(tpm, tpm2.TPMAlgECDSA, 256, []byte(""), []byte(""))
52+
k, err := key.CreateKey(tpm, tpm2.TPMAlgECC, 256, []byte(""), "")
5353
if err != nil {
5454
t.Fatal(err)
5555
}
5656

57-
_, err = client.Extension(SSH_TPM_AGENT_ADD, key.EncodeKey(k))
57+
encodedkey, err := key.EncodeKey(k)
58+
if err != nil {
59+
t.Fatal(err)
60+
}
61+
62+
_, err = client.Extension(SSH_TPM_AGENT_ADD, encodedkey)
5863
if err != nil {
5964
t.Fatal(err)
6065
}

cmd/ssh-tpm-agent/main.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/foxboron/ssh-tpm-agent/key"
1717
"github.com/foxboron/ssh-tpm-agent/pinentry"
1818
"github.com/foxboron/ssh-tpm-agent/utils"
19+
"github.com/google/go-tpm/tpm2"
1920
"github.com/google/go-tpm/tpm2/transport"
2021
sshagent "golang.org/x/crypto/ssh/agent"
2122
"golang.org/x/exp/slices"
@@ -202,7 +203,8 @@ func main() {
202203

203204
// PIN Callback
204205
func(key *key.Key) ([]byte, error) {
205-
keyHash := sha256.Sum256(key.Public.Bytes())
206+
pbytes := tpm2.New2B(key.Pubkey)
207+
keyHash := sha256.Sum256(pbytes.Bytes())
206208
keyInfo := fmt.Sprintf("ssh-tpm-agent/%x", keyHash)
207209
return pinentry.GetPinentry(keyInfo)
208210
},

cmd/ssh-tpm-agent/main_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,9 @@ func runSSHAuth(t *testing.T, keytype tpm2.TPMAlgID, bits int) {
109109
if err != nil {
110110
t.Fatal(err)
111111
}
112+
defer tpm.Close()
112113

113-
k, err := key.CreateKey(tpm, keytype, bits, []byte(""), []byte(""))
114+
k, err := key.CreateKey(tpm, keytype, bits, []byte(""), "")
114115
if err != nil {
115116
t.Fatalf("failed creating key: %v", err)
116117
}
@@ -185,15 +186,15 @@ func runSSHAuth(t *testing.T, keytype tpm2.TPMAlgID, bits int) {
185186

186187
func TestSSHAuth(t *testing.T) {
187188
t.Run("ecdsa p256 - agent", func(t *testing.T) {
188-
runSSHAuth(t, tpm2.TPMAlgECDSA, 256)
189+
runSSHAuth(t, tpm2.TPMAlgECC, 256)
189190
})
190191
t.Run("rsa - agent", func(t *testing.T) {
191192
runSSHAuth(t, tpm2.TPMAlgRSA, 2048)
192193
})
193194
t.Run("ecdsa p384 - agent", func(t *testing.T) {
194-
runSSHAuth(t, tpm2.TPMAlgECDSA, 384)
195+
runSSHAuth(t, tpm2.TPMAlgECC, 384)
195196
})
196197
t.Run("ecdsa p521 - agent", func(t *testing.T) {
197-
runSSHAuth(t, tpm2.TPMAlgECDSA, 521)
198+
runSSHAuth(t, tpm2.TPMAlgECC, 521)
198199
})
199200
}

cmd/ssh-tpm-keygen/main.go

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"os"
1414
"os/user"
1515
"path"
16+
"slices"
1617
"strings"
1718
"syscall"
1819

@@ -141,6 +142,8 @@ func main() {
141142
}
142143
defer tpm.Close()
143144

145+
supportedECCBitsizes := key.SupportedECCAlgorithms(tpm)
146+
144147
if listsupported {
145148
fmt.Printf("ecdsa bit lengths:")
146149
for _, alg := range key.SupportedECCAlgorithms(tpm) {
@@ -177,16 +180,19 @@ func main() {
177180

178181
slog.Info("Generating new host key", slog.String("algorithm", strings.ToUpper(n)))
179182

180-
k, err := key.CreateKey(tpm, t.alg, t.bits, []byte(""), []byte(defaultComment))
183+
k, err := key.CreateKey(tpm, t.alg, t.bits, []byte(""), defaultComment)
181184
if err != nil {
182185
log.Fatal(err)
183186
}
184187

185188
if err := os.WriteFile(pubkeyFilename, k.AuthorizedKey(), 0o600); err != nil {
186189
log.Fatal(err)
187190
}
188-
189-
if err := os.WriteFile(privatekeyFilename, k.Encode(), 0o600); err != nil {
191+
encodedkey, err := k.Encode()
192+
if err != nil {
193+
log.Fatal(err)
194+
}
195+
if err := os.WriteFile(privatekeyFilename, encodedkey, 0o600); err != nil {
190196
log.Fatal(err)
191197
}
192198

@@ -202,8 +208,13 @@ func main() {
202208

203209
switch keyType {
204210
case "ecdsa":
205-
tpmkeyType = tpm2.TPMAlgECDSA
211+
tpmkeyType = tpm2.TPMAlgECC
206212
filename = "id_ecdsa"
213+
214+
if !slices.Contains(supportedECCBitsizes, bits) {
215+
log.Fatalf("invalid ecdsa key length: TPM does not support %v bits", bits)
216+
}
217+
207218
case "rsa":
208219
tpmkeyType = tpm2.TPMAlgRSA
209220
filename = "id_rsa"
@@ -254,6 +265,9 @@ func main() {
254265
switch key := rawKey.(type) {
255266
case *ecdsa.PrivateKey:
256267
toImportKey = *key
268+
if !slices.Contains(supportedECCBitsizes, key.Params().BitSize) {
269+
log.Fatalf("invalid ecdsa key length: TPM does not support %v bits", key.Params().BitSize)
270+
}
257271
case *rsa.PrivateKey:
258272
if key.N.BitLen() != 2048 {
259273
log.Fatal("can only support 2048 bit RSA")
@@ -327,12 +341,12 @@ func main() {
327341

328342
if importKey != "" {
329343
// TODO: Read public key for comment
330-
k, err = key.ImportKey(tpm, toImportKey, pin, []byte(comment))
344+
k, err = key.ImportKey(tpm, toImportKey, pin, comment)
331345
if err != nil {
332346
log.Fatal(err)
333347
}
334348
} else {
335-
k, err = key.CreateKey(tpm, tpmkeyType, bits, pin, []byte(comment))
349+
k, err = key.CreateKey(tpm, tpmkeyType, bits, pin, comment)
336350
if err != nil {
337351
log.Fatal(err)
338352
}
@@ -344,7 +358,12 @@ func main() {
344358
}
345359
}
346360

347-
if err := os.WriteFile(privatekeyFilename, k.Encode(), 0o600); err != nil {
361+
encodedkey, err := k.Encode()
362+
if err != nil {
363+
log.Fatal(err)
364+
}
365+
366+
if err := os.WriteFile(privatekeyFilename, encodedkey, 0o600); err != nil {
348367
log.Fatal(err)
349368
}
350369

go.mod

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
module github.com/foxboron/ssh-tpm-agent
22

3-
go 1.22
3+
go 1.22.0
44

55
require (
6+
github.com/foxboron/go-tpm-keyfiles v0.0.0-20240224135548-465ca703cf09
67
github.com/foxboron/swtpm_test v0.0.0-20230726224112-46aaafdf7006
78
github.com/google/go-tpm v0.9.1-0.20230807150904-c49efc441a60
8-
github.com/twpayne/go-pinentry v0.2.0
9-
golang.org/x/crypto v0.12.0
10-
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63
11-
golang.org/x/term v0.11.0
9+
github.com/twpayne/go-pinentry v0.3.0
10+
golang.org/x/crypto v0.19.0
11+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225
12+
golang.org/x/term v0.17.0
1213
)
1314

1415
require (
1516
github.com/google/go-tpm-tools v0.3.13-0.20230620182252-4639ecce2aba // indirect
16-
github.com/rs/zerolog v1.26.0 // indirect
17-
go.uber.org/atomic v1.7.0 // indirect
18-
go.uber.org/multierr v1.8.0 // indirect
19-
golang.org/x/sys v0.11.0 // indirect
17+
github.com/mattn/go-colorable v0.1.13 // indirect
18+
github.com/mattn/go-isatty v0.0.20 // indirect
19+
github.com/rs/zerolog v1.32.0 // indirect
20+
golang.org/x/sys v0.17.0 // indirect
2021
)

go.sum

Lines changed: 31 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
2-
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
3-
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
4-
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1+
github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk=
2+
github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ=
3+
github.com/alecthomas/repr v0.2.0 h1:HAzS41CIzNW5syS8Mf9UwXhNH1J9aix/BvDRf1Ml2Yk=
4+
github.com/alecthomas/repr v0.2.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
5+
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
6+
github.com/foxboron/go-tpm-keyfiles v0.0.0-20240224135548-465ca703cf09 h1:GDGfrGCVy9elCgb632QPT5XU8azF5O5CuuurF//oYD0=
7+
github.com/foxboron/go-tpm-keyfiles v0.0.0-20240224135548-465ca703cf09/go.mod h1:Y5SsZTulz5NFq7aigID+rsWMgAq72YHHTUD0Zo2iar8=
58
github.com/foxboron/swtpm_test v0.0.0-20230726224112-46aaafdf7006 h1:50sW4r0PcvlpG4PV8tYh2RVCapszJgaOLRCS2subvV4=
69
github.com/foxboron/swtpm_test v0.0.0-20230726224112-46aaafdf7006/go.mod h1:eIXCMsMYCaqq9m1KSSxXwQG11krpuNPGP3k0uaWrbas=
710
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
@@ -17,60 +20,33 @@ github.com/google/logger v1.1.1 h1:+6Z2geNxc9G+4D4oDO9njjjn2d0wN5d7uOo0vOIW1NQ=
1720
github.com/google/logger v1.1.1/go.mod h1:BkeJZ+1FhQ+/d087r4dzojEg1u2ZX+ZqG1jTUrLM+zQ=
1821
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
1922
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
23+
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
24+
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
25+
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
26+
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
27+
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
28+
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
29+
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
30+
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
2031
github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g=
2132
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
2233
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
2334
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
24-
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
25-
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
26-
github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
27-
github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE=
28-
github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo=
29-
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
30-
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
31-
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
32-
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
33-
github.com/twpayne/go-pinentry v0.2.0 h1:hS5NEJiilop9xP9pBX/1NYduzDlGGMdg1KamTBTrOWw=
34-
github.com/twpayne/go-pinentry v0.2.0/go.mod h1:r6buhMwARxnnL0VRBqfd1tE6Fadk1kfP00GRMutEspY=
35-
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
36-
go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
37-
go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
38-
go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
39-
go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
40-
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
41-
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
42-
golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
43-
golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
44-
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63 h1:m64FZMko/V45gv0bNmrNYoDEq8U5YUhetc9cBWKS1TQ=
45-
golang.org/x/exp v0.0.0-20230817173708-d852ddb80c63/go.mod h1:0v4NqG35kSWCMzLaMeX+IQrlSnVE/bqGSyC2cz/9Le8=
46-
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
47-
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
48-
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
49-
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
50-
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
51-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
52-
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
53-
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
54-
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
55-
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
56-
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
57-
golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
58-
golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
59-
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
60-
golang.org/x/term v0.11.0 h1:F9tnn/DA/Im8nCwm+fX+1/eBwi4qFjRT++MhtVC4ZX0=
61-
golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU=
62-
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
63-
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
64-
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
65-
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
66-
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
67-
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
68-
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
69-
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
35+
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
36+
github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0=
37+
github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
38+
github.com/twpayne/go-pinentry v0.3.0 h1:Rr+fEOZXmeItOb4thjeVaBWJKB9Xa/eojolycyF/26c=
39+
github.com/twpayne/go-pinentry v0.3.0/go.mod h1:iOIZD+9np/2V24OdCGos7Y1/xX90wc6VEAZsgb+r9D4=
40+
golang.org/x/crypto v0.19.0 h1:ENy+Az/9Y1vSrlrvBSyna3PITt4tiZLf7sgCjZBX7Wo=
41+
golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
42+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
43+
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
44+
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
45+
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
46+
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
47+
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
48+
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
49+
golang.org/x/term v0.17.0 h1:mkTF7LCd6WGJNL3K1Ad7kwxNfYAW6a8a8QqtMblp/4U=
50+
golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
7051
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
7152
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
72-
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
73-
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
74-
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
75-
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
76-
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

0 commit comments

Comments
 (0)