Skip to content

Commit 97bf398

Browse files
committed
use chunk processing functions from ledger_go
1 parent 00e7521 commit 97bf398

File tree

5 files changed

+70
-142
lines changed

5 files changed

+70
-142
lines changed

app.go

Lines changed: 7 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -209,12 +209,9 @@ func (ledger *LedgerFilecoin) sign(bip44Path []uint32, transaction []byte, curve
209209
return nil, err
210210
}
211211

212-
chunks, err := prepareChunks(pathBytes, transaction)
213-
if err != nil {
214-
return nil, err
215-
}
212+
chunks := ledger_go.PrepareChunks(pathBytes, transaction)
216213

217-
return ledger.processChunks(chunks, INSSign)
214+
return ledger_go.ProcessChunks(ledger.api, chunks, CLA, INSSign, apduP2Default, handleExchangeError)
218215
}
219216

220217
// SignPersonalMessageFVM signs a personal message for FVM (Filecoin Virtual Machine)
@@ -241,12 +238,9 @@ func (ledger *LedgerFilecoin) signPersonalMessage(bip44Path []uint32, message []
241238
binary.BigEndian.PutUint32(fullMessage[0:messageLengthPrefixSize], messageLen)
242239
copy(fullMessage[messageLengthPrefixSize:], message)
243240

244-
chunks, err := prepareChunks(pathBytes, fullMessage)
245-
if err != nil {
246-
return nil, err
247-
}
241+
chunks := ledger_go.PrepareChunks(pathBytes, fullMessage)
248242

249-
return ledger.processChunks(chunks, INSSignPersonalMsg)
243+
return ledger_go.ProcessChunks(ledger.api, chunks, CLA, INSSignPersonalMsg, apduP2Default, handleExchangeError)
250244
}
251245

252246
// retrieveAddressPubKey returns the pubkey and address
@@ -274,12 +268,9 @@ func (ledger *LedgerFilecoin) signRawBytes(bip44Path []uint32, message []byte) (
274268
copy(fullMessage, varintLen)
275269
copy(fullMessage[len(varintLen):], message)
276270

277-
chunks, err := prepareChunks(pathBytes, fullMessage)
278-
if err != nil {
279-
return nil, err
280-
}
271+
chunks := ledger_go.PrepareChunks(pathBytes, fullMessage)
281272

282-
return ledger.processChunks(chunks, INSSignRawBytes)
273+
return ledger_go.ProcessChunks(ledger.api, chunks, CLA, INSSignRawBytes, apduP2Default, handleExchangeError)
283274
}
284275

285276
func parseSignatureResponse(signatureBytes []byte) (*SignatureAnswer, error) {
@@ -295,34 +286,7 @@ func parseSignatureResponse(signatureBytes []byte) (*SignatureAnswer, error) {
295286
}, nil
296287
}
297288

298-
func (ledger *LedgerFilecoin) processChunks(chunks [][]byte, instruction byte) ([]byte, error) {
299-
var finalResponse []byte
300-
301-
for chunkIndex, chunk := range chunks {
302-
payloadLen := byte(len(chunk))
303-
payloadDesc := PayloadChunkAdd
304-
305-
if chunkIndex == 0 {
306-
payloadDesc = PayloadChunkInit
307-
} else if chunkIndex == len(chunks)-1 {
308-
payloadDesc = PayloadChunkLast
309-
}
310-
311-
header := []byte{CLA, instruction, byte(payloadDesc), apduP2Default, payloadLen}
312-
message := append(header, chunk...)
313-
314-
response, err := ledger.api.Exchange(message)
315-
if err != nil {
316-
return nil, handleExchangeError(err, response)
317-
}
318-
319-
finalResponse = response
320-
}
321-
322-
return finalResponse, nil
323-
}
324-
325-
func handleExchangeError(err error, response []byte) error {
289+
func handleExchangeError(err error, response []byte, instruction byte) error {
326290
errorMsg := err.Error()
327291
switch {
328292
case errorMsg == "[APDU_CODE_BAD_KEY_HANDLE] The parameters in the data field are incorrect":

common.go

Lines changed: 1 addition & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,10 @@ package ledger_filecoin_go
1919
import (
2020
"encoding/binary"
2121
"fmt"
22-
"math"
2322
)
2423

2524
const (
26-
userMessageChunkSize = 250
27-
publicKeyLength = 65
25+
publicKeyLength = 65
2826

2927
// Signature-related constants
3028
signatureLength = 65
@@ -115,29 +113,3 @@ func GetBip44bytes(bip44Path []uint32, hardenCount int) ([]byte, error) {
115113
}
116114
return message, nil
117115
}
118-
119-
func prepareChunks(bip44PathBytes []byte, transaction []byte) ([][]byte, error) {
120-
var packetIndex = 0
121-
// first chunk + number of chunk needed for transaction
122-
var packetCount = 1 + int(math.Ceil(float64(len(transaction))/float64(userMessageChunkSize)))
123-
124-
chunks := make([][]byte, packetCount)
125-
126-
// First chunk is path
127-
chunks[0] = bip44PathBytes
128-
packetIndex++
129-
130-
for packetIndex < packetCount {
131-
var start = (packetIndex - 1) * userMessageChunkSize
132-
var end = packetIndex * userMessageChunkSize
133-
134-
if end >= len(transaction) {
135-
chunks[packetIndex] = transaction[start:]
136-
} else {
137-
chunks[packetIndex] = transaction[start:end]
138-
}
139-
packetIndex++
140-
}
141-
142-
return chunks, nil
143-
}

common_test.go

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@
1717
package ledger_filecoin_go
1818

1919
import (
20-
"encoding/hex"
2120
"fmt"
22-
"github.com/stretchr/testify/assert"
2321
"testing"
22+
23+
"github.com/stretchr/testify/assert"
2424
)
2525

2626
func Test_PrintVersion(t *testing.T) {
@@ -100,22 +100,3 @@ func Test_PathGeneration3(t *testing.T) {
100100
fmt.Sprintf("%x", pathBytes),
101101
"Unexpected PathBytes\n")
102102
}
103-
104-
func Test_ChunkGeneration(t *testing.T) {
105-
bip44Path := []uint32{44, 123, 0, 0, 0}
106-
107-
pathBytes, err := GetBip44bytes(bip44Path, 0)
108-
if err != nil {
109-
t.Fatalf("Detected error, err: %s\n", err.Error())
110-
}
111-
112-
message, _ := hex.DecodeString("885501fd1d0f4dfcd7e99afcb99a8326b7dc459d32c6285501b882619d46558f3d9e316d11b48dcf211327025a0144000186a0430009c4430061a80040")
113-
114-
chunks, err := prepareChunks(pathBytes, message)
115-
116-
assert.Equal(
117-
t,
118-
chunks[0],
119-
pathBytes,
120-
"First chunk should be pathBytes\n")
121-
}

go.mod

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,25 +7,27 @@ toolchain go1.24.3
77
require (
88
github.com/btcsuite/btcd/btcec/v2 v2.3.4
99
github.com/ipsn/go-secp256k1 v0.0.0-20180726113642-9d62b9f0bc52
10-
github.com/stretchr/testify v1.9.0
11-
github.com/zondax/ledger-go v1.0.0
12-
golang.org/x/crypto v0.39.0
10+
github.com/stretchr/testify v1.10.0
11+
github.com/zondax/ledger-go v1.0.1
12+
golang.org/x/crypto v0.41.0
1313
)
1414

1515
require (
1616
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect
17-
github.com/davecgh/go-spew v1.1.1 // indirect
17+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
1818
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
1919
github.com/golang/protobuf v1.5.4 // indirect
20-
github.com/kr/text v0.2.0 // indirect
2120
github.com/pkg/errors v0.9.1 // indirect
22-
github.com/pmezard/go-difflib v1.0.0 // indirect
21+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
22+
github.com/zondax/golem v0.27.0 // indirect
2323
github.com/zondax/hid v0.9.2 // indirect
24-
golang.org/x/net v0.41.0 // indirect
25-
golang.org/x/sys v0.33.0 // indirect
26-
golang.org/x/text v0.26.0 // indirect
27-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 // indirect
28-
google.golang.org/grpc v1.73.0 // indirect
29-
google.golang.org/protobuf v1.36.6 // indirect
24+
go.uber.org/multierr v1.11.0 // indirect
25+
go.uber.org/zap v1.27.0 // indirect
26+
golang.org/x/net v0.43.0 // indirect
27+
golang.org/x/sys v0.35.0 // indirect
28+
golang.org/x/text v0.28.0 // indirect
29+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c // indirect
30+
google.golang.org/grpc v1.75.0 // indirect
31+
google.golang.org/protobuf v1.36.8 // indirect
3032
gopkg.in/yaml.v3 v3.0.1 // indirect
3133
)

go.sum

Lines changed: 46 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,14 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurT
22
github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04=
33
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ=
44
github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc=
5-
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
6-
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
7-
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
5+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
6+
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
87
github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0=
98
github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc=
109
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc=
1110
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs=
12-
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
13-
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
11+
github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
12+
github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
1413
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
1514
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
1615
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
@@ -27,42 +26,52 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
2726
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
2827
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
2928
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
30-
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
31-
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
32-
github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
33-
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
34-
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
35-
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
29+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
30+
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
31+
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
32+
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
33+
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
34+
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
35+
github.com/zondax/golem v0.27.0 h1:IbBjGIXF3SoGOZHsILJvIM/F/ylwJzMcHAcggiqniPw=
36+
github.com/zondax/golem v0.27.0/go.mod h1:AmorCgJPt00L8xN1VrMBe13PSifoZksnQ1Ge906bu4A=
3637
github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U=
3738
github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM=
38-
github.com/zondax/ledger-go v1.0.0 h1:BvNoksIyRqyQTW78rIZP9A44WwAminKiomQa7jXp9EI=
39-
github.com/zondax/ledger-go v1.0.0/go.mod h1:HpgkgFh3Jkwi9iYLDATdyRxc8CxqxcywsFj6QerWzvo=
39+
github.com/zondax/ledger-go v1.0.1 h1:Ks/2tz/dOF+dbRynfZ0dEhcdL1lqw43Sa0zMXHpQ3aQ=
40+
github.com/zondax/ledger-go v1.0.1/go.mod h1:j7IgMY39f30apthJYMd1YsHZRqdyu4KbVmUp0nU78X0=
4041
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
4142
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
42-
go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ=
43-
go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y=
44-
go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M=
45-
go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE=
46-
go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY=
47-
go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg=
48-
go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o=
49-
go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w=
50-
go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs=
51-
go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc=
52-
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
53-
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
54-
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
55-
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
56-
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
57-
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
58-
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
59-
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
60-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7 h1:pFyd6EwwL2TqFf8emdthzeX+gZE1ElRq3iM8pui4KBY=
61-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250707201910-8d1bb00bc6a7/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A=
62-
google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok=
63-
google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc=
64-
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
65-
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
43+
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
44+
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
45+
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
46+
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
47+
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
48+
go.opentelemetry.io/otel/sdk v1.37.0/go.mod h1:VredYzxUvuo2q3WRcDnKDjbdvmO0sCzOvVAiY+yUkAg=
49+
go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFhbjxHHspCPc=
50+
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
51+
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
52+
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
53+
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
54+
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
55+
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
56+
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
57+
go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8=
58+
go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
59+
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
60+
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
61+
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
62+
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
63+
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
64+
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
65+
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
66+
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
67+
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
68+
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
69+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c h1:qXWI/sQtv5UKboZ/zUk7h+mrf/lXORyI+n9DKDAusdg=
70+
google.golang.org/genproto/googleapis/rpc v0.0.0-20250818200422-3122310a409c/go.mod h1:gw1tLEfykwDz2ET4a12jcXt4couGAm7IwsVaTy0Sflo=
71+
google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4=
72+
google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
73+
google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
74+
google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
6675
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
6776
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
6877
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=

0 commit comments

Comments
 (0)