github.com/avence12/go-ethereum@v1.5.10-0.20170320123548-1dfd65f6d047/whisper/whisperv5/benchmarks_test.go (about)

     1  // Copyright 2016 The go-ethereum Authors
     2  // This file is part of the go-ethereum library.
     3  //
     4  // The go-ethereum library is free software: you can redistribute it and/or modify
     5  // it under the terms of the GNU Lesser General Public License as published by
     6  // the Free Software Foundation, either version 3 of the License, or
     7  // (at your option) any later version.
     8  //
     9  // The go-ethereum library is distributed in the hope that it will be useful,
    10  // but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    12  // GNU Lesser General Public License for more details.
    13  //
    14  // You should have received a copy of the GNU Lesser General Public License
    15  // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
    16  
    17  package whisperv5
    18  
    19  import (
    20  	"testing"
    21  
    22  	"github.com/ethereum/go-ethereum/crypto"
    23  )
    24  
    25  func BenchmarkDeriveKeyMaterial(b *testing.B) {
    26  	for i := 0; i < b.N; i++ {
    27  		deriveKeyMaterial([]byte("test"), 0)
    28  	}
    29  }
    30  
    31  func BenchmarkDeriveOneTimeKey(b *testing.B) {
    32  	for i := 0; i < b.N; i++ {
    33  		DeriveOneTimeKey([]byte("test value 1"), []byte("test value 2"), 0)
    34  	}
    35  }
    36  
    37  func BenchmarkEncryptionSym(b *testing.B) {
    38  	InitSingleTest()
    39  
    40  	params, err := generateMessageParams()
    41  	if err != nil {
    42  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    43  	}
    44  
    45  	for i := 0; i < b.N; i++ {
    46  		msg := NewSentMessage(params)
    47  		_, err := msg.Wrap(params)
    48  		if err != nil {
    49  			b.Errorf("failed Wrap with seed %d: %s.", seed, err)
    50  			b.Errorf("i = %d, len(msg.Raw) = %d, params.Payload = %d.", i, len(msg.Raw), len(params.Payload))
    51  			return
    52  		}
    53  	}
    54  }
    55  
    56  func BenchmarkEncryptionAsym(b *testing.B) {
    57  	InitSingleTest()
    58  
    59  	params, err := generateMessageParams()
    60  	if err != nil {
    61  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    62  	}
    63  	key, err := crypto.GenerateKey()
    64  	if err != nil {
    65  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
    66  	}
    67  	params.KeySym = nil
    68  	params.Dst = &key.PublicKey
    69  
    70  	for i := 0; i < b.N; i++ {
    71  		msg := NewSentMessage(params)
    72  		_, err := msg.Wrap(params)
    73  		if err != nil {
    74  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    75  		}
    76  	}
    77  }
    78  
    79  func BenchmarkDecryptionSymValid(b *testing.B) {
    80  	InitSingleTest()
    81  
    82  	params, err := generateMessageParams()
    83  	if err != nil {
    84  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    85  	}
    86  	msg := NewSentMessage(params)
    87  	env, err := msg.Wrap(params)
    88  	if err != nil {
    89  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    90  	}
    91  	f := Filter{KeySym: params.KeySym}
    92  
    93  	for i := 0; i < b.N; i++ {
    94  		msg := env.Open(&f)
    95  		if msg == nil {
    96  			b.Fatalf("failed to open with seed %d.", seed)
    97  		}
    98  	}
    99  }
   100  
   101  func BenchmarkDecryptionSymInvalid(b *testing.B) {
   102  	InitSingleTest()
   103  
   104  	params, err := generateMessageParams()
   105  	if err != nil {
   106  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   107  	}
   108  	msg := NewSentMessage(params)
   109  	env, err := msg.Wrap(params)
   110  	if err != nil {
   111  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   112  	}
   113  	f := Filter{KeySym: []byte("arbitrary stuff here")}
   114  
   115  	for i := 0; i < b.N; i++ {
   116  		msg := env.Open(&f)
   117  		if msg != nil {
   118  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   119  		}
   120  	}
   121  }
   122  
   123  func BenchmarkDecryptionAsymValid(b *testing.B) {
   124  	InitSingleTest()
   125  
   126  	params, err := generateMessageParams()
   127  	if err != nil {
   128  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   129  	}
   130  	key, err := crypto.GenerateKey()
   131  	if err != nil {
   132  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   133  	}
   134  	f := Filter{KeyAsym: key}
   135  	params.KeySym = nil
   136  	params.Dst = &key.PublicKey
   137  	msg := NewSentMessage(params)
   138  	env, err := msg.Wrap(params)
   139  	if err != nil {
   140  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   141  	}
   142  
   143  	for i := 0; i < b.N; i++ {
   144  		msg := env.Open(&f)
   145  		if msg == nil {
   146  			b.Fatalf("fail to open, seed: %d.", seed)
   147  		}
   148  	}
   149  }
   150  
   151  func BenchmarkDecryptionAsymInvalid(b *testing.B) {
   152  	InitSingleTest()
   153  
   154  	params, err := generateMessageParams()
   155  	if err != nil {
   156  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   157  	}
   158  	key, err := crypto.GenerateKey()
   159  	if err != nil {
   160  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   161  	}
   162  	params.KeySym = nil
   163  	params.Dst = &key.PublicKey
   164  	msg := NewSentMessage(params)
   165  	env, err := msg.Wrap(params)
   166  	if err != nil {
   167  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   168  	}
   169  
   170  	key, err = crypto.GenerateKey()
   171  	if err != nil {
   172  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   173  	}
   174  	f := Filter{KeyAsym: key}
   175  
   176  	for i := 0; i < b.N; i++ {
   177  		msg := env.Open(&f)
   178  		if msg != nil {
   179  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   180  		}
   181  	}
   182  }
   183  
   184  func increment(x []byte) {
   185  	for i := 0; i < len(x); i++ {
   186  		x[i]++
   187  		if x[i] != 0 {
   188  			break
   189  		}
   190  	}
   191  }
   192  
   193  func BenchmarkPoW(b *testing.B) {
   194  	InitSingleTest()
   195  
   196  	params, err := generateMessageParams()
   197  	if err != nil {
   198  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   199  	}
   200  	params.Payload = make([]byte, 32)
   201  	params.PoW = 10.0
   202  	params.TTL = 1
   203  
   204  	for i := 0; i < b.N; i++ {
   205  		increment(params.Payload)
   206  		msg := NewSentMessage(params)
   207  		_, err := msg.Wrap(params)
   208  		if err != nil {
   209  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   210  		}
   211  	}
   212  }