github.com/shyftnetwork/go-empyrean@v1.8.3-0.20191127201940-fbfca9338f04/whisper/whisperv6/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 whisperv6
    18  
    19  import (
    20  	"crypto/sha256"
    21  	"os"
    22  	"os/exec"
    23  	"testing"
    24  
    25  	"github.com/ShyftNetwork/go-empyrean/crypto"
    26  	"golang.org/x/crypto/pbkdf2"
    27  )
    28  
    29  func TestMain(m *testing.M) {
    30  	exec.Command("/bin/sh", "../shyft-cli/shyftTestDbClean.sh")
    31  	retCode := m.Run()
    32  	exec.Command("/bin/sh", "../shyft-cli/shyftTestDbClean.sh")
    33  	os.Exit(retCode)
    34  }
    35  
    36  func BenchmarkDeriveKeyMaterial(b *testing.B) {
    37  	for i := 0; i < b.N; i++ {
    38  		pbkdf2.Key([]byte("test"), nil, 65356, aesKeyLength, sha256.New)
    39  	}
    40  }
    41  
    42  func BenchmarkEncryptionSym(b *testing.B) {
    43  	InitSingleTest()
    44  
    45  	params, err := generateMessageParams()
    46  	if err != nil {
    47  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    48  	}
    49  
    50  	for i := 0; i < b.N; i++ {
    51  		msg, _ := NewSentMessage(params)
    52  		_, err := msg.Wrap(params)
    53  		if err != nil {
    54  			b.Errorf("failed Wrap with seed %d: %s.", seed, err)
    55  			b.Errorf("i = %d, len(msg.Raw) = %d, params.Payload = %d.", i, len(msg.Raw), len(params.Payload))
    56  			return
    57  		}
    58  	}
    59  }
    60  
    61  func BenchmarkEncryptionAsym(b *testing.B) {
    62  	InitSingleTest()
    63  
    64  	params, err := generateMessageParams()
    65  	if err != nil {
    66  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    67  	}
    68  	key, err := crypto.GenerateKey()
    69  	if err != nil {
    70  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
    71  	}
    72  	params.KeySym = nil
    73  	params.Dst = &key.PublicKey
    74  
    75  	for i := 0; i < b.N; i++ {
    76  		msg, _ := NewSentMessage(params)
    77  		_, err := msg.Wrap(params)
    78  		if err != nil {
    79  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    80  		}
    81  	}
    82  }
    83  
    84  func BenchmarkDecryptionSymValid(b *testing.B) {
    85  	InitSingleTest()
    86  
    87  	params, err := generateMessageParams()
    88  	if err != nil {
    89  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    90  	}
    91  	msg, _ := NewSentMessage(params)
    92  	env, err := msg.Wrap(params)
    93  	if err != nil {
    94  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    95  	}
    96  	f := Filter{KeySym: params.KeySym}
    97  
    98  	for i := 0; i < b.N; i++ {
    99  		msg := env.Open(&f)
   100  		if msg == nil {
   101  			b.Fatalf("failed to open with seed %d.", seed)
   102  		}
   103  	}
   104  }
   105  
   106  func BenchmarkDecryptionSymInvalid(b *testing.B) {
   107  	InitSingleTest()
   108  
   109  	params, err := generateMessageParams()
   110  	if err != nil {
   111  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   112  	}
   113  	msg, _ := NewSentMessage(params)
   114  	env, err := msg.Wrap(params)
   115  	if err != nil {
   116  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   117  	}
   118  	f := Filter{KeySym: []byte("arbitrary stuff here")}
   119  
   120  	for i := 0; i < b.N; i++ {
   121  		msg := env.Open(&f)
   122  		if msg != nil {
   123  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   124  		}
   125  	}
   126  }
   127  
   128  func BenchmarkDecryptionAsymValid(b *testing.B) {
   129  	InitSingleTest()
   130  
   131  	params, err := generateMessageParams()
   132  	if err != nil {
   133  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   134  	}
   135  	key, err := crypto.GenerateKey()
   136  	if err != nil {
   137  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   138  	}
   139  	f := Filter{KeyAsym: key}
   140  	params.KeySym = nil
   141  	params.Dst = &key.PublicKey
   142  	msg, _ := NewSentMessage(params)
   143  	env, err := msg.Wrap(params)
   144  	if err != nil {
   145  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   146  	}
   147  
   148  	for i := 0; i < b.N; i++ {
   149  		msg := env.Open(&f)
   150  		if msg == nil {
   151  			b.Fatalf("fail to open, seed: %d.", seed)
   152  		}
   153  	}
   154  }
   155  
   156  func BenchmarkDecryptionAsymInvalid(b *testing.B) {
   157  	InitSingleTest()
   158  
   159  	params, err := generateMessageParams()
   160  	if err != nil {
   161  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   162  	}
   163  	key, err := crypto.GenerateKey()
   164  	if err != nil {
   165  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   166  	}
   167  	params.KeySym = nil
   168  	params.Dst = &key.PublicKey
   169  	msg, _ := NewSentMessage(params)
   170  	env, err := msg.Wrap(params)
   171  	if err != nil {
   172  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   173  	}
   174  
   175  	key, err = crypto.GenerateKey()
   176  	if err != nil {
   177  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   178  	}
   179  	f := Filter{KeyAsym: key}
   180  
   181  	for i := 0; i < b.N; i++ {
   182  		msg := env.Open(&f)
   183  		if msg != nil {
   184  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   185  		}
   186  	}
   187  }
   188  
   189  func increment(x []byte) {
   190  	for i := 0; i < len(x); i++ {
   191  		x[i]++
   192  		if x[i] != 0 {
   193  			break
   194  		}
   195  	}
   196  }
   197  
   198  func BenchmarkPoW(b *testing.B) {
   199  	InitSingleTest()
   200  
   201  	params, err := generateMessageParams()
   202  	if err != nil {
   203  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   204  	}
   205  	params.Payload = make([]byte, 32)
   206  	params.PoW = 10.0
   207  	params.TTL = 1
   208  
   209  	for i := 0; i < b.N; i++ {
   210  		increment(params.Payload)
   211  		msg, _ := NewSentMessage(params)
   212  		_, err := msg.Wrap(params)
   213  		if err != nil {
   214  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   215  		}
   216  	}
   217  }