From bad8a54df0431f00f0ee7c04fd75d4abd4b8d0d9 Mon Sep 17 00:00:00 2001 From: Hans Moog <hm@mkjc.net> Date: Wed, 17 Jul 2019 01:05:46 +0200 Subject: [PATCH] Fix: fixed a bug in autopeering --- packages/curl/batch_hasher_test.go | 24 +++++++- packages/identity/identity.go | 4 +- plugins/autopeering/types/peer/peer_test.go | 31 +++++++++++ .../types/response/response_test.go | 55 +++++++++++++++++++ .../bundleprocessor/bundleprocessor_test.go | 6 +- .../bundleprocessor/valuebundleprocessor.go | 2 +- 6 files changed, 114 insertions(+), 8 deletions(-) create mode 100644 plugins/autopeering/types/peer/peer_test.go create mode 100644 plugins/autopeering/types/response/response_test.go diff --git a/packages/curl/batch_hasher_test.go b/packages/curl/batch_hasher_test.go index c7672733..7cd6bb4e 100644 --- a/packages/curl/batch_hasher_test.go +++ b/packages/curl/batch_hasher_test.go @@ -42,15 +42,33 @@ func BenchmarkEd25519(b *testing.B) { wg.Wait() } -func BenchmarkBlake2b(b *testing.B) { - data := make([]byte, 750) +var sampleTransactionData = make([]byte, 750) + +func BenchmarkBytesToTrits(b *testing.B) { + bytes := blake2b.Sum512(sampleTransactionData) + b.ResetTimer() + + var wg sync.WaitGroup + for i := 0; i < b.N; i++ { + wg.Add(1) + + go func() { + _, _ = trinary.BytesToTrits(bytes[:]) + + wg.Done() + }() + } + wg.Wait() +} + +func BenchmarkBlake2b(b *testing.B) { var wg sync.WaitGroup for i := 0; i < b.N; i++ { wg.Add(1) go func() { - blake2b.Sum256(data) + blake2b.Sum256(sampleTransactionData) wg.Done() }() diff --git a/packages/identity/identity.go b/packages/identity/identity.go index ac5a417e..022af162 100644 --- a/packages/identity/identity.go +++ b/packages/identity/identity.go @@ -22,9 +22,11 @@ type Identity struct { func NewIdentity(publicKey []byte, optionalPrivateKey ...[]byte) *Identity { this := &Identity{ Identifier: crypto.Hash20(publicKey), - PublicKey: publicKey, + PublicKey: make([]byte, len(publicKey)), } + copy(this.PublicKey, publicKey) + this.StringIdentifier = fmt.Sprintf("%x", this.Identifier) if len(optionalPrivateKey) == 1 { diff --git a/plugins/autopeering/types/peer/peer_test.go b/plugins/autopeering/types/peer/peer_test.go new file mode 100644 index 00000000..f587001a --- /dev/null +++ b/plugins/autopeering/types/peer/peer_test.go @@ -0,0 +1,31 @@ +package peer + +import ( + "net" + "testing" + "time" + + "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt" + + "github.com/iotaledger/goshimmer/packages/identity" + "github.com/magiconair/properties/assert" +) + +func TestPeer_MarshalUnmarshal(t *testing.T) { + peer := &Peer{ + Address: net.IPv4(127, 0, 0, 1), + Identity: identity.GenerateRandomIdentity(), + GossipPort: 123, + PeeringPort: 456, + Salt: salt.New(30 * time.Second), + } + + restoredPeer, _ := Unmarshal(peer.Marshal()) + + assert.Equal(t, peer.Address, restoredPeer.Address) + assert.Equal(t, peer.Identity.StringIdentifier, restoredPeer.Identity.StringIdentifier) + assert.Equal(t, peer.Identity.PublicKey, restoredPeer.Identity.PublicKey) + assert.Equal(t, peer.GossipPort, restoredPeer.GossipPort) + assert.Equal(t, peer.PeeringPort, restoredPeer.PeeringPort) + assert.Equal(t, peer.Salt, restoredPeer.Salt) +} diff --git a/plugins/autopeering/types/response/response_test.go b/plugins/autopeering/types/response/response_test.go new file mode 100644 index 00000000..4f6c1e23 --- /dev/null +++ b/plugins/autopeering/types/response/response_test.go @@ -0,0 +1,55 @@ +package response + +import ( + "net" + "testing" + "time" + + "github.com/iotaledger/goshimmer/plugins/autopeering/types/peer" + + "github.com/iotaledger/goshimmer/packages/identity" + "github.com/iotaledger/goshimmer/plugins/autopeering/types/salt" +) + +func TestPeer_MarshalUnmarshal(t *testing.T) { + issuer := &peer.Peer{ + Address: net.IPv4(127, 0, 0, 1), + Identity: identity.GenerateRandomIdentity(), + GossipPort: 123, + PeeringPort: 456, + Salt: salt.New(30 * time.Second), + } + + peers := make([]*peer.Peer, 0) + peers = append(peers, &peer.Peer{ + Address: net.IPv4(127, 0, 0, 1), + Identity: identity.GenerateRandomIdentity(), + GossipPort: 124, + PeeringPort: 457, + Salt: salt.New(30 * time.Second), + }, &peer.Peer{ + Address: net.IPv4(127, 0, 0, 1), + Identity: identity.GenerateRandomIdentity(), + GossipPort: 125, + PeeringPort: 458, + Salt: salt.New(30 * time.Second), + }, &peer.Peer{ + Address: net.IPv4(127, 0, 0, 1), + Identity: identity.GenerateRandomIdentity(), + GossipPort: 126, + PeeringPort: 459, + Salt: salt.New(30 * time.Second), + }) + + response := &Response{ + Issuer: issuer, + Type: TYPE_ACCEPT, + Peers: peers, + } + response.Sign() + + _, err := Unmarshal(response.Marshal()) + if err != nil { + t.Error(err) + } +} diff --git a/plugins/bundleprocessor/bundleprocessor_test.go b/plugins/bundleprocessor/bundleprocessor_test.go index 06539a00..14834c67 100644 --- a/plugins/bundleprocessor/bundleprocessor_test.go +++ b/plugins/bundleprocessor/bundleprocessor_test.go @@ -21,7 +21,7 @@ import ( var seed = client.NewSeed("YFHQWAUPCXC9S9DSHP9NDF9RLNPMZVCMSJKUKQP9SWUSUCPRQXCMDVDVZ9SHHESHIQNCXWBJF9UJSWE9Z", consts.SecurityLevelMedium) -func Benchmark(b *testing.B) { +func BenchmarkValidateSignatures(b *testing.B) { bundleFactory := client.NewBundleFactory() bundleFactory.AddInput(seed.GetAddress(0), -400) bundleFactory.AddOutput(seed.GetAddress(1), 400, "Testmessage") @@ -54,11 +54,11 @@ func TestValidateSignatures(t *testing.T) { generatedBundle := bundleFactory.GenerateBundle(tipselection.GetRandomTip(), tipselection.GetRandomTip()) - successfull, err := ValidateSignatures(generatedBundle.GetEssenceHash(), generatedBundle.GetTransactions()) + successful, err := ValidateSignatures(generatedBundle.GetEssenceHash(), generatedBundle.GetTransactions()) if err != nil { t.Error(err) } - assert.Equal(t, successfull, true, "validation failed") + assert.Equal(t, successful, true, "validation failed") } func TestProcessSolidBundleHead_Data(t *testing.T) { diff --git a/plugins/bundleprocessor/valuebundleprocessor.go b/plugins/bundleprocessor/valuebundleprocessor.go index 08c208d9..271fdb06 100644 --- a/plugins/bundleprocessor/valuebundleprocessor.go +++ b/plugins/bundleprocessor/valuebundleprocessor.go @@ -70,7 +70,7 @@ func ValidateSignatures(bundleHash trinary.Hash, txs []*value_transaction.ValueT } // validate all the fragments against the address using Kerl - valid, err := signing.ValidateSignatures(address, fragments, bundleHash, signing.NewKerl) + valid, err := signing.ValidateSignatures(address, fragments, bundleHash) if err != nil { return false, err } -- GitLab