Skip to content
This repository was archived by the owner on Apr 4, 2023. It is now read-only.

Commit 7d87959

Browse files
Merge pull request #72 from ava-labs/match-mm-sig
Match mm sig
2 parents f79a78f + d434d82 commit 7d87959

File tree

7 files changed

+43
-15
lines changed

7 files changed

+43
-15
lines changed

chain/crypto.go

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// Copyright (C) 2019-2021, Ava Labs, Inc. All rights reserved.
2+
// See the file LICENSE for licensing terms.
3+
4+
package chain
5+
6+
import (
7+
"crypto/ecdsa"
8+
9+
"github.com/ethereum/go-ethereum/crypto"
10+
)
11+
12+
const (
13+
legacySigAdj = 27
14+
)
15+
16+
func Sign(dh []byte, priv *ecdsa.PrivateKey) ([]byte, error) {
17+
sig, err := crypto.Sign(dh, priv)
18+
if err != nil {
19+
return nil, err
20+
}
21+
sig[64] += legacySigAdj
22+
return sig, nil
23+
}
24+
25+
func DeriveSender(dh []byte, sig []byte) (*ecdsa.PublicKey, error) {
26+
if len(sig) != crypto.SignatureLength {
27+
return nil, ErrInvalidSignature
28+
}
29+
// Avoid modifying the signature in place in case it is used elsewhere
30+
sigcpy := make([]byte, crypto.SignatureLength)
31+
copy(sigcpy, sig)
32+
sigcpy[64] -= legacySigAdj
33+
return crypto.SigToPub(dh, sigcpy)
34+
}

chain/tx.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,6 @@ func (t *Transaction) Init(g *Genesis) error {
5555
}
5656
t.id = id
5757

58-
// Extract address
59-
if len(t.Signature) != crypto.SignatureLength {
60-
return ErrInvalidSignature
61-
}
62-
6358
// Compute digest hash
6459
dh, err := DigestHash(t.UnsignedTransaction)
6560
if err != nil {
@@ -68,7 +63,7 @@ func (t *Transaction) Init(g *Genesis) error {
6863
t.digestHash = dh
6964

7065
// Derive sender
71-
pk, err := crypto.SigToPub(t.digestHash, t.Signature)
66+
pk, err := DeriveSender(t.digestHash, t.Signature)
7267
if err != nil {
7368
return err
7469
}

chain/tx_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func TestTransaction(t *testing.T) {
4040
if len(dh) != 32 {
4141
t.Fatalf("hash insufficient d=%d", len(dh))
4242
}
43-
tx.Signature, err = crypto.Sign(dh, priv)
43+
tx.Signature, err = Sign(dh, priv)
4444
if err != nil {
4545
t.Fatal(err)
4646
}
@@ -133,7 +133,7 @@ func createTestTx(t *testing.T, blockID ids.ID, priv *ecdsa.PrivateKey) *Transac
133133
if len(dh) != 32 {
134134
t.Fatalf("hash insufficient d=%d", len(dh))
135135
}
136-
sig, err := crypto.Sign(dh, priv)
136+
sig, err := Sign(dh, priv)
137137
if err != nil {
138138
t.Fatal(err)
139139
}

client/helper.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import (
1111
"time"
1212

1313
"github.com/ava-labs/avalanchego/ids"
14-
"github.com/ethereum/go-ethereum/crypto"
1514
"github.com/fatih/color"
1615

1716
"github.com/ava-labs/spacesvm/chain"
@@ -67,7 +66,7 @@ func SignIssueTx(
6766
return ids.Empty, fmt.Errorf("%w: failed to compute digest hash", err)
6867
}
6968

70-
sig, err := crypto.Sign(dh, priv)
69+
sig, err := chain.Sign(dh, priv)
7170
if err != nil {
7271
return ids.Empty, err
7372
}
@@ -144,7 +143,7 @@ func SignIssueRawTx(
144143
return ids.Empty, err
145144
}
146145

147-
sig, err := crypto.Sign(dh, priv)
146+
sig, err := chain.Sign(dh, priv)
148147
if err != nil {
149148
return ids.Empty, err
150149
}

mempool/mempool_benchmark_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ func createTestMempool(
7878
Space: string(pfx),
7979
},
8080
}
81-
sig, err := crypto.Sign(tx.DigestHash(), priv)
81+
sig, err := chain.Sign(tx.DigestHash(), priv)
8282
if err != nil {
8383
b.Fatal(err)
8484
}

mempool/mempool_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func TestMempool(t *testing.T) {
3333
if err != nil {
3434
t.Fatal(err)
3535
}
36-
sig, err := crypto.Sign(dh, priv)
36+
sig, err := chain.Sign(dh, priv)
3737
if err != nil {
3838
t.Fatal(err)
3939
}

tests/integration/integration_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ var _ = ginkgo.Describe("[ClaimTx]", func() {
331331

332332
dh, err := chain.DigestHash(utx)
333333
gomega.Ω(err).Should(gomega.BeNil())
334-
sig, err := crypto.Sign(dh, priv)
334+
sig, err := chain.Sign(dh, priv)
335335
gomega.Ω(err).Should(gomega.BeNil())
336336

337337
tx := chain.NewTx(utx, sig)
@@ -509,7 +509,7 @@ func expectBlkAccept(
509509

510510
dh, err := chain.DigestHash(utx)
511511
gomega.Ω(err).Should(gomega.BeNil())
512-
sig, err := crypto.Sign(dh, signer)
512+
sig, err := chain.Sign(dh, signer)
513513
gomega.Ω(err).Should(gomega.BeNil())
514514

515515
tx := chain.NewTx(utx, sig)

0 commit comments

Comments
 (0)