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