Skip to content

Commit 3f23fe4

Browse files
authored
Merge pull request #16 from Zondax/dev
some updates
2 parents 4dea4ef + 29ef6fc commit 3f23fe4

File tree

7 files changed

+167
-99
lines changed

7 files changed

+167
-99
lines changed

.circleci/config.yml

Lines changed: 0 additions & 18 deletions
This file was deleted.

.github/dependabot.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: github-actions
4+
directory: "/"
5+
schedule:
6+
interval: daily
7+
time: "11:00"
8+
open-pull-requests-limit: 10
9+
- package-ecosystem: gomod
10+
directory: "/"
11+
schedule:
12+
interval: daily
13+
time: "11:00"
14+
open-pull-requests-limit: 10
15+
labels:
16+
- T:dependencies

.github/workflows/test.yml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
name: Test
2+
on:
3+
workflow_dispatch:
4+
push:
5+
pull_request:
6+
branches:
7+
- main
8+
9+
jobs:
10+
Test:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v3
14+
- name: Set up Go
15+
uses: actions/setup-go@v3
16+
with:
17+
go-version: "1.21"
18+
- name: Testing build
19+
run: go build
20+
- name: Run common tests
21+
run: go test -run '.' common_test.go common.go types.go

app.go

Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*******************************************************************************
2-
* (c) 2019 ZondaX GmbH
2+
* (c) 2019 - 2023 ZondaX AG
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -22,38 +22,6 @@ import (
2222
ledger_go "github.com/zondax/ledger-go"
2323
)
2424

25-
const (
26-
CLA = 0x06
27-
28-
INSGetVersion = 0
29-
INSGetAddrSECP256K1 = 1
30-
INSSignSECP256K1 = 2
31-
INSSignDataCap = 5
32-
INSSignClientDeal = 6
33-
INSSignRawBytes = 7
34-
)
35-
36-
const (
37-
PayloadChunkInit = 0
38-
PayloadChunkAdd = 1
39-
PayloadChunkLast = 2
40-
)
41-
42-
const HardenCount int = 2
43-
44-
// LedgerFilecoin represents a connection to the Ledger app
45-
type LedgerFilecoin struct {
46-
api ledger_go.LedgerDevice
47-
version VersionInfo
48-
}
49-
50-
type SignatureAnswer struct {
51-
r []byte
52-
s []byte
53-
v uint8
54-
derSignature []byte
55-
}
56-
5725
func (sa *SignatureAnswer) SignatureBytes() []byte {
5826
out := make([]byte, 65)
5927
copy(out[:32], sa.r)
@@ -175,9 +143,15 @@ func (ledger *LedgerFilecoin) GetVersion() (*VersionInfo, error) {
175143
return &ledger.version, nil
176144
}
177145

146+
// Deprecated: Use Sign method instead.
147+
func (ledger *LedgerFilecoin) SignSECP256K1(bip44Path []uint32, transaction []byte) (*SignatureAnswer, error) {
148+
return ledger.Sign(bip44Path, transaction)
149+
}
150+
151+
178152
// SignSECP256K1 signs a transaction using Filecoin user app
179153
// this command requires user confirmation in the device
180-
func (ledger *LedgerFilecoin) SignSECP256K1(bip44Path []uint32, transaction []byte) (*SignatureAnswer, error) {
154+
func (ledger *LedgerFilecoin) Sign(bip44Path []uint32, transaction []byte) (*SignatureAnswer, error) {
181155
signatureBytes, err := ledger.sign(bip44Path, transaction)
182156
if err != nil {
183157
return nil, err
@@ -197,23 +171,43 @@ func (ledger *LedgerFilecoin) SignSECP256K1(bip44Path []uint32, transaction []by
197171
return &signatureAnswer, nil
198172
}
199173

174+
175+
176+
// Deprecated: Use GetPublicKey instead.
177+
func (ledger *LedgerFilecoin) GetPublicKeySECP256K1(bip44Path []uint32) ([]byte, error) {
178+
pubkey, err := ledger.GetPublicKey(bip44Path)
179+
return pubkey, err
180+
}
181+
182+
200183
// GetPublicKeySECP256K1 retrieves the public key for the corresponding bip44 derivation path
201184
// this command DOES NOT require user confirmation in the device
202-
func (ledger *LedgerFilecoin) GetPublicKeySECP256K1(bip44Path []uint32) ([]byte, error) {
203-
pubkey, _, _, err := ledger.retrieveAddressPubKeySECP256K1(bip44Path, false)
185+
func (ledger *LedgerFilecoin) GetPublicKey(bip44Path []uint32) ([]byte, error) {
186+
pubkey, _, _, err := ledger.retrieveAddressPubKey(bip44Path, false)
204187
return pubkey, err
205188
}
206189

190+
// Deprecated: Use GetAddressPubKey instead.
191+
func (ledger *LedgerFilecoin) GetAddressPubKeySECP256K1(bip44Path []uint32) (pubkey []byte, addrByte []byte, addrString string, err error) {
192+
return ledger.GetAddressPubKey(bip44Path)
193+
}
194+
207195
// GetAddressPubKeySECP256K1 returns the pubkey and addresses
208196
// this command does not require user confirmation
209-
func (ledger *LedgerFilecoin) GetAddressPubKeySECP256K1(bip44Path []uint32) (pubkey []byte, addrByte []byte, addrString string, err error) {
210-
return ledger.retrieveAddressPubKeySECP256K1(bip44Path, false)
197+
func (ledger *LedgerFilecoin) GetAddressPubKey(bip44Path []uint32) (pubkey []byte, addrByte []byte, addrString string, err error) {
198+
return ledger.retrieveAddressPubKey(bip44Path, false)
199+
}
200+
201+
202+
// Deprecated: Use ShowAddressPubKey instead.
203+
func (ledger *LedgerFilecoin) ShowAddressPubKeySECP256K1(bip44Path []uint32) (pubkey []byte, addrByte []byte, addrString string, err error) {
204+
return ledger.ShowAddressPubKey(bip44Path)
211205
}
212206

213207
// ShowAddressPubKeySECP256K1 returns the pubkey (compressed) and addresses
214208
// this command requires user confirmation in the device
215-
func (ledger *LedgerFilecoin) ShowAddressPubKeySECP256K1(bip44Path []uint32) (pubkey []byte, addrByte []byte, addrString string, err error) {
216-
return ledger.retrieveAddressPubKeySECP256K1(bip44Path, true)
209+
func (ledger *LedgerFilecoin) ShowAddressPubKey(bip44Path []uint32) (pubkey []byte, addrByte []byte, addrString string, err error) {
210+
return ledger.retrieveAddressPubKey(bip44Path, true)
217211
}
218212

219213
func (ledger *LedgerFilecoin) GetBip44bytes(bip44Path []uint32, hardenCount int) ([]byte, error) {
@@ -247,7 +241,7 @@ func (ledger *LedgerFilecoin) sign(bip44Path []uint32, transaction []byte) ([]by
247241
payloadLen := byte(len(chunks[chunkIndex]))
248242

249243
if chunkIndex == 0 {
250-
header := []byte{CLA, INSSignSECP256K1, PayloadChunkInit, 0, payloadLen}
244+
header := []byte{CLA, INSSign, PayloadChunkInit, 0, payloadLen}
251245
message = append(header, chunks[chunkIndex]...)
252246
} else {
253247

@@ -256,7 +250,7 @@ func (ledger *LedgerFilecoin) sign(bip44Path []uint32, transaction []byte) ([]by
256250
payloadDesc = byte(PayloadChunkLast)
257251
}
258252

259-
header := []byte{CLA, INSSignSECP256K1, payloadDesc, 0, payloadLen}
253+
header := []byte{CLA, INSSign, payloadDesc, 0, payloadLen}
260254
message = append(header, chunks[chunkIndex]...)
261255
}
262256

@@ -282,8 +276,8 @@ func (ledger *LedgerFilecoin) sign(bip44Path []uint32, transaction []byte) ([]by
282276
return finalResponse, nil
283277
}
284278

285-
// retrieveAddressPubKeySECP256K1 returns the pubkey and address
286-
func (ledger *LedgerFilecoin) retrieveAddressPubKeySECP256K1(bip44Path []uint32, requireConfirmation bool) (pubkey []byte, addrByte []byte, addrString string, err error) {
279+
// retrieveAddressPubKey returns the pubkey and address
280+
func (ledger *LedgerFilecoin) retrieveAddressPubKey(bip44Path []uint32, requireConfirmation bool) (pubkey []byte, addrByte []byte, addrString string, err error) {
287281
pathBytes, err := ledger.GetBip44bytes(bip44Path, HardenCount)
288282
if err != nil {
289283
return nil, nil, "", err
@@ -295,7 +289,7 @@ func (ledger *LedgerFilecoin) retrieveAddressPubKeySECP256K1(bip44Path []uint32,
295289
}
296290

297291
// Prepare message
298-
header := []byte{CLA, INSGetAddrSECP256K1, p1, 0, 0}
292+
header := []byte{CLA, INSGetAddr, p1, 0, 0}
299293
message := append(header, pathBytes...)
300294
message[4] = byte(len(message) - len(header)) // update length
301295

app_test.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ package ledger_filecoin_go
1919
import (
2020
"encoding/hex"
2121
"fmt"
22-
"testing"
23-
24-
"github.com/btcsuite/btcd"
22+
"github.com/btcsuite/btcd/btcec/v2"
23+
ecdsa "github.com/btcsuite/btcd/btcec/v2/ecdsa"
2524
"github.com/ipsn/go-secp256k1"
2625
"github.com/stretchr/testify/assert"
2726
"github.com/stretchr/testify/require"
2827
"golang.org/x/crypto/blake2b"
28+
"testing"
2929
)
3030

3131
// Ledger Test Mnemonic: equip will roof matter pink blind book anxiety banner elbow sun young
@@ -66,7 +66,7 @@ func Test_UserGetPublicKey(t *testing.T) {
6666

6767
path := []uint32{44, 461, 5, 0, 21}
6868

69-
pubKey, err := app.GetPublicKeySECP256K1(path)
69+
pubKey, err := app.GetPublicKey(path)
7070
if err != nil {
7171
t.Fatalf("Detected error, err: %s\n", err.Error())
7272
}
@@ -90,7 +90,7 @@ func Test_GetAddressPubKeySECP256K1_Zero(t *testing.T) {
9090

9191
path := []uint32{44, 461, 0, 0, 0}
9292

93-
pubKey, addrByte, addrString, err := app.GetAddressPubKeySECP256K1(path)
93+
pubKey, addrByte, addrString, err := app.GetAddressPubKey(path)
9494
if err != nil {
9595
t.Fatalf("Detected error, err: %s\n", err.Error())
9696
}
@@ -116,7 +116,7 @@ func Test_GetAddressPubKeySECP256K1(t *testing.T) {
116116

117117
path := []uint32{44, 461, 5, 0, 21}
118118

119-
pubKey, addrByte, addrString, err := app.GetAddressPubKeySECP256K1(path)
119+
pubKey, addrByte, addrString, err := app.GetAddressPubKey(path)
120120
if err != nil {
121121
t.Fatalf("Detected error, err: %s\n", err.Error())
122122
}
@@ -142,7 +142,7 @@ func Test_ShowAddressPubKeySECP256K1(t *testing.T) {
142142

143143
path := []uint32{44, 461, 5, 0, 21}
144144

145-
pubKey, addrByte, addrString, err := app.ShowAddressPubKeySECP256K1(path)
145+
pubKey, addrByte, addrString, err := app.ShowAddressPubKey(path)
146146
if err != nil {
147147
t.Fatalf("Detected error, err: %s\n", err.Error())
148148
}
@@ -185,7 +185,7 @@ func Test_UserPK_HDPaths(t *testing.T) {
185185
for i := uint32(0); i < 10; i++ {
186186
path[4] = i
187187

188-
pubKey, err := app.GetPublicKeySECP256K1(path)
188+
pubKey, err := app.GetPublicKey(path)
189189
if err != nil {
190190
t.Fatalf("Detected error, err: %s\n", err.Error())
191191
}
@@ -214,24 +214,24 @@ func Test_Sign(t *testing.T) {
214214

215215
message, _ := hex.DecodeString("8a0058310396a1a3e4ea7a14d49985e661b22401d44fed402d1d0925b243c923589c0fbc7e32cd04e29ed78d15d37d3aaa3fe6da3358310386b454258c589475f7d16f5aac018a79f6c1169d20fc33921dd8b5ce1cac6c348f90a3603624f6aeb91b64518c2e80950144000186a01961a8430009c44200000040")
216216

217-
signature, err := app.SignSECP256K1(path, message)
217+
signature, err := app.Sign(path, message)
218218
if err != nil {
219219
t.Fatalf("[Sign] Error: %s\n", err.Error())
220220
}
221221

222222
// Verify Signature
223-
pubKey, err := app.GetPublicKeySECP256K1(path)
223+
pubKey, err := app.GetPublicKey(path)
224224
if err != nil {
225225
t.Fatalf("Detected error, err: %s\n", err.Error())
226226
}
227227

228-
pub2, err := btcec.ParsePubKey(pubKey, btcec.S256())
228+
pub2, err := btcec.ParsePubKey(pubKey)
229229
if err != nil {
230230
t.Fatalf("[ParsePK] Error: " + err.Error())
231231
return
232232
}
233233

234-
sig2, err := btcec.ParseDERSignature(signature.derSignature, btcec.S256())
234+
sig2, err := ecdsa.ParseDERSignature(signature.derSignature)
235235
if err != nil {
236236
t.Fatalf("[ParseSig] Error: " + err.Error())
237237
return
@@ -261,24 +261,24 @@ func Test_Sign2(t *testing.T) {
261261

262262
message, _ := hex.DecodeString("8a0055019f4c34943e4b92f4542bed08af54be955629fc6f5501ef8fd1e48a1e0f1a49310ec675bc677a3954147400430003e81903e84200014200010040")
263263

264-
signature, err := app.SignSECP256K1(path, message)
264+
signature, err := app.Sign(path, message)
265265
if err != nil {
266266
t.Fatalf("[Sign] Error: %s\n", err.Error())
267267
}
268268

269269
// Verify Signature
270-
pubKey, err := app.GetPublicKeySECP256K1(path)
270+
pubKey, err := app.GetPublicKey(path)
271271
if err != nil {
272272
t.Fatalf("Detected error, err: %s\n", err.Error())
273273
}
274274

275-
pub2, err := btcec.ParsePubKey(pubKey, btcec.S256())
275+
pub2, err := btcec.ParsePubKey(pubKey)
276276
if err != nil {
277277
t.Fatalf("[ParsePK] Error: " + err.Error())
278278
return
279279
}
280280

281-
sig2, err := btcec.ParseDERSignature(signature.derSignature, btcec.S256())
281+
sig2, err := ecdsa.ParseDERSignature(signature.derSignature)
282282
if err != nil {
283283
t.Fatalf("[ParseSig] Error: " + err.Error())
284284
return
@@ -310,24 +310,24 @@ func Test_Sign3(t *testing.T) {
310310

311311
message, _ := hex.DecodeString("8a0055019f4c34943e4b92f4542bed08af54be955629fc6f5501ef8fd1e48a1e0f1a49310ec675bc677a3954147400430003e81903e84200014200010040")
312312

313-
signature, err := app.SignSECP256K1(path, message)
313+
signature, err := app.Sign(path, message)
314314
if err != nil {
315315
t.Fatalf("[Sign] Error: %s\n", err.Error())
316316
}
317317

318318
// Verify Signature
319-
pubKey, err := app.GetPublicKeySECP256K1(path)
319+
pubKey, err := app.GetPublicKey(path)
320320
if err != nil {
321321
t.Fatalf("Detected error, err: %s\n", err.Error())
322322
}
323323

324-
pub2, err := btcec.ParsePubKey(pubKey, btcec.S256())
324+
pub2, err := btcec.ParsePubKey(pubKey)
325325
if err != nil {
326326
t.Fatalf("[ParsePK] Error: " + err.Error())
327327
return
328328
}
329329

330-
sig2, err := btcec.ParseDERSignature(signature.derSignature, btcec.S256())
330+
sig2, err := ecdsa.ParseDERSignature(signature.derSignature)
331331
if err != nil {
332332
t.Fatalf("[ParseSig] Error: " + err.Error())
333333
return
@@ -377,7 +377,7 @@ func Test_Sign_Fails(t *testing.T) {
377377
garbage := []byte{65}
378378
message = append(garbage, message...)
379379

380-
_, err = app.SignSECP256K1(path, message)
380+
_, err = app.Sign(path, message)
381381
assert.Error(t, err)
382382
errMessage := err.Error()
383383
assert.Equal(t, errMessage, "Unexpected data type")
@@ -386,7 +386,7 @@ func Test_Sign_Fails(t *testing.T) {
386386
garbage = []byte{65}
387387
message = append(message, garbage...)
388388

389-
_, err = app.SignSECP256K1(path, message)
389+
_, err = app.Sign(path, message)
390390
assert.Error(t, err)
391391
errMessage = err.Error()
392392
assert.Equal(t, errMessage, "Unexpected CBOR EOF")

0 commit comments

Comments
 (0)