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