github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/whisper/whisperv6/benchmarks_test.go (about)

     1  
     2  //<developer>
     3  //    <name>linapex 曹一峰</name>
     4  //    <email>linapex@163.com</email>
     5  //    <wx>superexc</wx>
     6  //    <qqgroup>128148617</qqgroup>
     7  //    <url>https://jsq.ink</url>
     8  //    <role>pku engineer</role>
     9  //    <date>2019-03-16 19:16:46</date>
    10  //</624450125124603904>
    11  
    12  
    13  package whisperv6
    14  
    15  import (
    16  	"crypto/sha256"
    17  	"testing"
    18  
    19  	"github.com/ethereum/go-ethereum/crypto"
    20  	"golang.org/x/crypto/pbkdf2"
    21  )
    22  
    23  func BenchmarkDeriveKeyMaterial(b *testing.B) {
    24  	for i := 0; i < b.N; i++ {
    25  		pbkdf2.Key([]byte("test"), nil, 65356, aesKeyLength, sha256.New)
    26  	}
    27  }
    28  
    29  func BenchmarkEncryptionSym(b *testing.B) {
    30  	InitSingleTest()
    31  
    32  	params, err := generateMessageParams()
    33  	if err != nil {
    34  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    35  	}
    36  
    37  	for i := 0; i < b.N; i++ {
    38  		msg, _ := NewSentMessage(params)
    39  		_, err := msg.Wrap(params)
    40  		if err != nil {
    41  			b.Errorf("failed Wrap with seed %d: %s.", seed, err)
    42  			b.Errorf("i = %d, len(msg.Raw) = %d, params.Payload = %d.", i, len(msg.Raw), len(params.Payload))
    43  			return
    44  		}
    45  	}
    46  }
    47  
    48  func BenchmarkEncryptionAsym(b *testing.B) {
    49  	InitSingleTest()
    50  
    51  	params, err := generateMessageParams()
    52  	if err != nil {
    53  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    54  	}
    55  	key, err := crypto.GenerateKey()
    56  	if err != nil {
    57  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
    58  	}
    59  	params.KeySym = nil
    60  	params.Dst = &key.PublicKey
    61  
    62  	for i := 0; i < b.N; i++ {
    63  		msg, _ := NewSentMessage(params)
    64  		_, err := msg.Wrap(params)
    65  		if err != nil {
    66  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    67  		}
    68  	}
    69  }
    70  
    71  func BenchmarkDecryptionSymValid(b *testing.B) {
    72  	InitSingleTest()
    73  
    74  	params, err := generateMessageParams()
    75  	if err != nil {
    76  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    77  	}
    78  	msg, _ := NewSentMessage(params)
    79  	env, err := msg.Wrap(params)
    80  	if err != nil {
    81  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    82  	}
    83  	f := Filter{KeySym: params.KeySym}
    84  
    85  	for i := 0; i < b.N; i++ {
    86  		msg := env.Open(&f)
    87  		if msg == nil {
    88  			b.Fatalf("failed to open with seed %d.", seed)
    89  		}
    90  	}
    91  }
    92  
    93  func BenchmarkDecryptionSymInvalid(b *testing.B) {
    94  	InitSingleTest()
    95  
    96  	params, err := generateMessageParams()
    97  	if err != nil {
    98  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    99  	}
   100  	msg, _ := NewSentMessage(params)
   101  	env, err := msg.Wrap(params)
   102  	if err != nil {
   103  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   104  	}
   105  	f := Filter{KeySym: []byte("arbitrary stuff here")}
   106  
   107  	for i := 0; i < b.N; i++ {
   108  		msg := env.Open(&f)
   109  		if msg != nil {
   110  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   111  		}
   112  	}
   113  }
   114  
   115  func BenchmarkDecryptionAsymValid(b *testing.B) {
   116  	InitSingleTest()
   117  
   118  	params, err := generateMessageParams()
   119  	if err != nil {
   120  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   121  	}
   122  	key, err := crypto.GenerateKey()
   123  	if err != nil {
   124  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   125  	}
   126  	f := Filter{KeyAsym: key}
   127  	params.KeySym = nil
   128  	params.Dst = &key.PublicKey
   129  	msg, _ := NewSentMessage(params)
   130  	env, err := msg.Wrap(params)
   131  	if err != nil {
   132  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   133  	}
   134  
   135  	for i := 0; i < b.N; i++ {
   136  		msg := env.Open(&f)
   137  		if msg == nil {
   138  			b.Fatalf("fail to open, seed: %d.", seed)
   139  		}
   140  	}
   141  }
   142  
   143  func BenchmarkDecryptionAsymInvalid(b *testing.B) {
   144  	InitSingleTest()
   145  
   146  	params, err := generateMessageParams()
   147  	if err != nil {
   148  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   149  	}
   150  	key, err := crypto.GenerateKey()
   151  	if err != nil {
   152  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   153  	}
   154  	params.KeySym = nil
   155  	params.Dst = &key.PublicKey
   156  	msg, _ := NewSentMessage(params)
   157  	env, err := msg.Wrap(params)
   158  	if err != nil {
   159  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   160  	}
   161  
   162  	key, err = crypto.GenerateKey()
   163  	if err != nil {
   164  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   165  	}
   166  	f := Filter{KeyAsym: key}
   167  
   168  	for i := 0; i < b.N; i++ {
   169  		msg := env.Open(&f)
   170  		if msg != nil {
   171  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   172  		}
   173  	}
   174  }
   175  
   176  func increment(x []byte) {
   177  	for i := 0; i < len(x); i++ {
   178  		x[i]++
   179  		if x[i] != 0 {
   180  			break
   181  		}
   182  	}
   183  }
   184  
   185  func BenchmarkPoW(b *testing.B) {
   186  	InitSingleTest()
   187  
   188  	params, err := generateMessageParams()
   189  	if err != nil {
   190  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   191  	}
   192  	params.Payload = make([]byte, 32)
   193  	params.PoW = 10.0
   194  	params.TTL = 1
   195  
   196  	for i := 0; i < b.N; i++ {
   197  		increment(params.Payload)
   198  		msg, _ := NewSentMessage(params)
   199  		_, err := msg.Wrap(params)
   200  		if err != nil {
   201  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   202  		}
   203  	}
   204  }
   205