Skip to content

Commit 5d8b949

Browse files
alexanderbezjackzampolin
authored andcommitted
Merge PR #3763: Disable ED25519 Account Keys
1 parent 172e265 commit 5d8b949

File tree

9 files changed

+40
-27
lines changed

9 files changed

+40
-27
lines changed

PENDING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
* [\#3669] Ensure consistency in message naming, codec registration, and JSON
2525
tags.
26+
* [\#3751] Disable (temporarily) support for ED25519 account key pairs.
2627

2728
### Tendermint
2829

x/auth/ante.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,10 @@ func processSig(
188188
consumeSimSigGas(ctx.GasMeter(), pubKey, sig, params)
189189
}
190190

191-
consumeSigVerificationGas(ctx.GasMeter(), sig.Signature, pubKey, params)
191+
if res := consumeSigVerificationGas(ctx.GasMeter(), sig.Signature, pubKey, params); !res.IsOK() {
192+
return nil, res
193+
}
194+
192195
if !simulate && !pubKey.VerifyBytes(signBytes, sig.Signature) {
193196
return nil, sdk.ErrUnauthorized("signature verification failed").Result()
194197
}
@@ -256,24 +259,31 @@ func ProcessPubKey(acc Account, sig StdSignature, simulate bool) (crypto.PubKey,
256259
// by the concrete type.
257260
//
258261
// TODO: Design a cleaner and flexible way to match concrete public key types.
259-
func consumeSigVerificationGas(meter sdk.GasMeter, sig []byte, pubkey crypto.PubKey, params Params) {
262+
func consumeSigVerificationGas(
263+
meter sdk.GasMeter, sig []byte, pubkey crypto.PubKey, params Params,
264+
) sdk.Result {
265+
260266
pubkeyType := strings.ToLower(fmt.Sprintf("%T", pubkey))
267+
261268
switch {
262269
case strings.Contains(pubkeyType, "ed25519"):
263270
meter.ConsumeGas(params.SigVerifyCostED25519, "ante verify: ed25519")
271+
return sdk.ErrInvalidPubKey("ED25519 public keys are unsupported").Result()
264272

265273
case strings.Contains(pubkeyType, "secp256k1"):
266274
meter.ConsumeGas(params.SigVerifyCostSecp256k1, "ante verify: secp256k1")
275+
return sdk.Result{}
267276

268277
case strings.Contains(pubkeyType, "multisigthreshold"):
269278
var multisignature multisig.Multisignature
270279
codec.Cdc.MustUnmarshalBinaryBare(sig, &multisignature)
271280

272281
multisigPubKey := pubkey.(multisig.PubKeyMultisigThreshold)
273282
consumeMultisignatureVerificationGas(meter, multisignature, multisigPubKey, params)
283+
return sdk.Result{}
274284

275285
default:
276-
panic(fmt.Sprintf("unrecognized signature type: %s", pubkeyType))
286+
return sdk.ErrInvalidPubKey(fmt.Sprintf("unrecognized public key type: %s", pubkeyType)).Result()
277287
}
278288
}
279289

x/auth/ante_test.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -585,19 +585,21 @@ func TestConsumeSignatureVerificationGas(t *testing.T) {
585585
name string
586586
args args
587587
gasConsumed uint64
588-
wantPanic bool
588+
shouldErr bool
589589
}{
590-
{"PubKeyEd25519", args{sdk.NewInfiniteGasMeter(), nil, ed25519.GenPrivKey().PubKey(), params}, DefaultSigVerifyCostED25519, false},
590+
{"PubKeyEd25519", args{sdk.NewInfiniteGasMeter(), nil, ed25519.GenPrivKey().PubKey(), params}, DefaultSigVerifyCostED25519, true},
591591
{"PubKeySecp256k1", args{sdk.NewInfiniteGasMeter(), nil, secp256k1.GenPrivKey().PubKey(), params}, DefaultSigVerifyCostSecp256k1, false},
592592
{"Multisig", args{sdk.NewInfiniteGasMeter(), multisignature1.Marshal(), multisigKey1, params}, expectedCost1, false},
593593
{"unknown key", args{sdk.NewInfiniteGasMeter(), nil, nil, params}, 0, true},
594594
}
595595
for _, tt := range tests {
596596
t.Run(tt.name, func(t *testing.T) {
597-
if tt.wantPanic {
598-
require.Panics(t, func() { consumeSigVerificationGas(tt.args.meter, tt.args.sig, tt.args.pubkey, tt.args.params) })
597+
res := consumeSigVerificationGas(tt.args.meter, tt.args.sig, tt.args.pubkey, tt.args.params)
598+
599+
if tt.shouldErr {
600+
require.False(t, res.IsOK())
599601
} else {
600-
consumeSigVerificationGas(tt.args.meter, tt.args.sig, tt.args.pubkey, tt.args.params)
602+
require.True(t, res.IsOK())
601603
require.Equal(t, tt.gasConsumed, tt.args.meter.GasConsumed(), fmt.Sprintf("%d != %d", tt.gasConsumed, tt.args.meter.GasConsumed()))
602604
}
603605
})

x/auth/test_utils.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ package auth
44
import (
55
abci "github.com/tendermint/tendermint/abci/types"
66
"github.com/tendermint/tendermint/crypto"
7-
"github.com/tendermint/tendermint/crypto/ed25519"
7+
"github.com/tendermint/tendermint/crypto/secp256k1"
88
dbm "github.com/tendermint/tendermint/libs/db"
99
"github.com/tendermint/tendermint/libs/log"
1010

@@ -67,7 +67,7 @@ func newCoins() sdk.Coins {
6767
}
6868

6969
func keyPubAddr() (crypto.PrivKey, crypto.PubKey, sdk.AccAddress) {
70-
key := ed25519.GenPrivKey()
70+
key := secp256k1.GenPrivKey()
7171
pub := key.PubKey()
7272
addr := sdk.AccAddress(pub.Address())
7373
return key, pub, addr

x/bank/app_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
abci "github.com/tendermint/tendermint/abci/types"
1313
"github.com/tendermint/tendermint/crypto"
14-
"github.com/tendermint/tendermint/crypto/ed25519"
14+
"github.com/tendermint/tendermint/crypto/secp256k1"
1515
)
1616

1717
type (
@@ -32,12 +32,12 @@ type (
3232
)
3333

3434
var (
35-
priv1 = ed25519.GenPrivKey()
35+
priv1 = secp256k1.GenPrivKey()
3636
addr1 = sdk.AccAddress(priv1.PubKey().Address())
37-
priv2 = ed25519.GenPrivKey()
37+
priv2 = secp256k1.GenPrivKey()
3838
addr2 = sdk.AccAddress(priv2.PubKey().Address())
39-
addr3 = sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
40-
priv4 = ed25519.GenPrivKey()
39+
addr3 = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address())
40+
priv4 = secp256k1.GenPrivKey()
4141
addr4 = sdk.AccAddress(priv4.PubKey().Address())
4242

4343
coins = sdk.Coins{sdk.NewInt64Coin("foocoin", 10)}

x/ibc/app_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111
"github.com/cosmos/cosmos-sdk/x/mock"
1212

1313
abci "github.com/tendermint/tendermint/abci/types"
14-
"github.com/tendermint/tendermint/crypto/ed25519"
14+
"github.com/tendermint/tendermint/crypto/secp256k1"
1515
)
1616

1717
// initialize the mock application for this module
@@ -36,7 +36,7 @@ func TestIBCMsgs(t *testing.T) {
3636
sourceChain := "source-chain"
3737
destChain := "dest-chain"
3838

39-
priv1 := ed25519.GenPrivKey()
39+
priv1 := secp256k1.GenPrivKey()
4040
addr1 := sdk.AccAddress(priv1.PubKey().Address())
4141
coins := sdk.Coins{sdk.NewInt64Coin("foocoin", 10)}
4242
var emptyCoins sdk.Coins

x/mock/app.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func CreateGenAccounts(numAccs int, genCoins sdk.Coins) (genAccs []auth.Account,
177177
addrKeysSlice := AddrKeysSlice{}
178178

179179
for i := 0; i < numAccs; i++ {
180-
privKey := ed25519.GenPrivKey()
180+
privKey := secp256k1.GenPrivKey()
181181
pubKey := privKey.PubKey()
182182
addr := sdk.AccAddress(pubKey.Address())
183183

@@ -235,12 +235,12 @@ func GenTx(msgs []sdk.Msg, accnums []uint64, seq []uint64, priv ...crypto.PrivKe
235235
return auth.NewStdTx(msgs, fee, sigs, memo)
236236
}
237237

238-
// GeneratePrivKeys generates a total n Ed25519 private keys.
238+
// GeneratePrivKeys generates a total n secp256k1 private keys.
239239
func GeneratePrivKeys(n int) (keys []crypto.PrivKey) {
240240
// TODO: Randomize this between ed25519 and secp256k1
241241
keys = make([]crypto.PrivKey, n)
242242
for i := 0; i < n; i++ {
243-
keys[i] = ed25519.GenPrivKey()
243+
keys[i] = secp256k1.GenPrivKey()
244244
}
245245

246246
return

x/slashing/app_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import (
55

66
"github.com/stretchr/testify/require"
77
abci "github.com/tendermint/tendermint/abci/types"
8-
"github.com/tendermint/tendermint/crypto/ed25519"
8+
"github.com/tendermint/tendermint/crypto/secp256k1"
99

1010
sdk "github.com/cosmos/cosmos-sdk/types"
1111
"github.com/cosmos/cosmos-sdk/x/auth"
@@ -15,7 +15,7 @@ import (
1515
)
1616

1717
var (
18-
priv1 = ed25519.GenPrivKey()
18+
priv1 = secp256k1.GenPrivKey()
1919
addr1 = sdk.AccAddress(priv1.PubKey().Address())
2020
coins = sdk.Coins{sdk.NewInt64Coin("foocoin", 10)}
2121
)

x/staking/test_common.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,20 @@ package staking
22

33
import (
44
"github.com/tendermint/tendermint/crypto"
5-
"github.com/tendermint/tendermint/crypto/ed25519"
5+
"github.com/tendermint/tendermint/crypto/secp256k1"
66

77
sdk "github.com/cosmos/cosmos-sdk/types"
88
"github.com/cosmos/cosmos-sdk/x/auth"
99
"github.com/cosmos/cosmos-sdk/x/staking/types"
1010
)
1111

1212
var (
13-
priv1 = ed25519.GenPrivKey()
13+
priv1 = secp256k1.GenPrivKey()
1414
addr1 = sdk.AccAddress(priv1.PubKey().Address())
15-
priv2 = ed25519.GenPrivKey()
15+
priv2 = secp256k1.GenPrivKey()
1616
addr2 = sdk.AccAddress(priv2.PubKey().Address())
17-
addr3 = sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
18-
priv4 = ed25519.GenPrivKey()
17+
addr3 = sdk.AccAddress(secp256k1.GenPrivKey().PubKey().Address())
18+
priv4 = secp256k1.GenPrivKey()
1919
addr4 = sdk.AccAddress(priv4.PubKey().Address())
2020
coins = sdk.Coins{sdk.NewCoin("foocoin", sdk.NewInt(10))}
2121
fee = auth.NewStdFee(

0 commit comments

Comments
 (0)