From 8b8de70f532de40394f2721dadf1cb485f7d9f2d Mon Sep 17 00:00:00 2001 From: Ethan Frey Date: Tue, 24 Oct 2017 17:01:07 +0200 Subject: [PATCH] Auth module passes all tests --- modules/auth/bench_test.go | 134 ++++++++++++++++----------------- modules/auth/signature_test.go | 4 +- modules/auth/tx.go | 6 +- 3 files changed, 73 insertions(+), 71 deletions(-) diff --git a/modules/auth/bench_test.go b/modules/auth/bench_test.go index c497e2d383..66a5511d57 100644 --- a/modules/auth/bench_test.go +++ b/modules/auth/bench_test.go @@ -1,77 +1,77 @@ package auth -// import ( -// "fmt" -// "testing" +import ( + "fmt" + "testing" -// crypto "github.com/tendermint/go-crypto" -// cmn "github.com/tendermint/tmlibs/common" + crypto "github.com/tendermint/go-crypto" + cmn "github.com/tendermint/tmlibs/common" -// sdk "github.com/cosmos/cosmos-sdk" -// "github.com/cosmos/cosmos-sdk/state" -// "github.com/cosmos/cosmos-sdk/util" -// ) + sdk "github.com/cosmos/cosmos-sdk" + "github.com/cosmos/cosmos-sdk/state" + "github.com/cosmos/cosmos-sdk/util" +) -// func makeSignTx() sdk.Tx { -// key := crypto.GenPrivKeyEd25519().Wrap() -// payload := cmn.RandBytes(32) -// tx := NewSig(util.RawTx{payload}) -// Sign(tx, key) -// return tx.Wrap() -// } +func makeSignTx() interface{} { + key := crypto.GenPrivKeyEd25519().Wrap() + payload := cmn.RandBytes(32) + tx := newSingle(payload) + Sign(tx, key) + return tx +} -// func makeMultiSignTx(cnt int) sdk.Tx { -// payload := cmn.RandBytes(32) -// tx := NewMulti(util.RawTx{payload}) -// for i := 0; i < cnt; i++ { -// key := crypto.GenPrivKeyEd25519().Wrap() -// Sign(tx, key) -// } -// return tx.Wrap() -// } +func makeMultiSignTx(cnt int) interface{} { + payload := cmn.RandBytes(32) + tx := newMulti(payload) + for i := 0; i < cnt; i++ { + key := crypto.GenPrivKeyEd25519().Wrap() + Sign(tx, key) + } + return tx +} -// func makeHandler() sdk.Handler { -// return sdk.ChainDecorators( -// Signatures{}, -// ).WithHandler( -// util.OKHandler{}, -// ) -// } +func makeHandler() sdk.Handler { + return sdk.ChainDecorators( + Signatures{}, + ).WithHandler( + util.OKHandler{}, + ) +} -// func BenchmarkCheckOneSig(b *testing.B) { -// tx := makeSignTx() -// h := makeHandler() -// store := state.NewMemKVStore() -// for i := 1; i <= b.N; i++ { -// ctx := util.MockContext("foo", 100) -// _, err := h.DeliverTx(ctx, store, tx) -// // never should error -// if err != nil { -// panic(err) -// } -// } -// } +func BenchmarkCheckOneSig(b *testing.B) { + tx := makeSignTx() + h := makeHandler() + store := state.NewMemKVStore() + for i := 1; i <= b.N; i++ { + ctx := util.MockContext("foo", 100) + _, err := h.DeliverTx(ctx, store, tx) + // never should error + if err != nil { + panic(err) + } + } +} -// func BenchmarkCheckMultiSig(b *testing.B) { -// sigs := []int{1, 3, 8, 20} -// for _, cnt := range sigs { -// label := fmt.Sprintf("%dsigs", cnt) -// b.Run(label, func(sub *testing.B) { -// benchmarkCheckMultiSig(sub, cnt) -// }) -// } -// } +func BenchmarkCheckMultiSig(b *testing.B) { + sigs := []int{1, 3, 8, 20} + for _, cnt := range sigs { + label := fmt.Sprintf("%dsigs", cnt) + b.Run(label, func(sub *testing.B) { + benchmarkCheckMultiSig(sub, cnt) + }) + } +} -// func benchmarkCheckMultiSig(b *testing.B, cnt int) { -// tx := makeMultiSignTx(cnt) -// h := makeHandler() -// store := state.NewMemKVStore() -// for i := 1; i <= b.N; i++ { -// ctx := util.MockContext("foo", 100) -// _, err := h.DeliverTx(ctx, store, tx) -// // never should error -// if err != nil { -// panic(err) -// } -// } -// } +func benchmarkCheckMultiSig(b *testing.B, cnt int) { + tx := makeMultiSignTx(cnt) + h := makeHandler() + store := state.NewMemKVStore() + for i := 1; i <= b.N; i++ { + ctx := util.MockContext("foo", 100) + _, err := h.DeliverTx(ctx, store, tx) + // never should error + if err != nil { + panic(err) + } + } +} diff --git a/modules/auth/signature_test.go b/modules/auth/signature_test.go index fedb76cef6..29b21f6d57 100644 --- a/modules/auth/signature_test.go +++ b/modules/auth/signature_test.go @@ -67,14 +67,14 @@ func TestSignatureChecks(t *testing.T) { if tc.useMultiSig { mtx := newMulti(raw) for _, k := range tc.keys { - err := Sign(mtx.SignBytes(), k, mtx.NamedSigs) + err := Sign(mtx, k) assert.Nil(err, "%d: %+v", i, err) } tx = mtx } else { otx := newSingle(raw) for _, k := range tc.keys { - err := Sign(otx.SignBytes(), k, otx.NamedSig) + err := Sign(otx, k) assert.Nil(err, "%d: %+v", i, err) } tx = otx diff --git a/modules/auth/tx.go b/modules/auth/tx.go index 1302f0e3bf..28da5c54a9 100644 --- a/modules/auth/tx.go +++ b/modules/auth/tx.go @@ -15,6 +15,7 @@ package auth import ( crypto "github.com/tendermint/go-crypto" + "github.com/tendermint/go-crypto/keys" "github.com/cosmos/cosmos-sdk/errors" ) @@ -163,8 +164,9 @@ func (s *NamedSigs) Signers(signBytes []byte) (res []crypto.PubKey, err error) { // Sign - sign the given data with private key and store // the result in the credentil -func Sign(msg []byte, key crypto.PrivKey, cred Credential) error { +func Sign(signable keys.Signable, key crypto.PrivKey) error { + msg := signable.SignBytes() pubkey := key.PubKey() sig := key.Sign(msg) - return cred.Sign(pubkey, sig) + return signable.Sign(pubkey, sig) }