github.com/yinchengtsinghua/golang-Eos-dpos-Ethereum@v0.0.0-20190121132951-92cc4225ed8e/whisper/whisperv5/benchmarks_test.go (about)

     1  
     2  //此源码被清华学神尹成大魔王专业翻译分析并修改
     3  //尹成QQ77025077
     4  //尹成微信18510341407
     5  //尹成所在QQ群721929980
     6  //尹成邮箱 yinc13@mails.tsinghua.edu.cn
     7  //尹成毕业于清华大学,微软区块链领域全球最有价值专家
     8  //https://mvp.microsoft.com/zh-cn/PublicProfile/4033620
     9  //
    10  //
    11  //
    12  //
    13  //
    14  //
    15  //
    16  //
    17  //
    18  //
    19  //
    20  //
    21  //
    22  //
    23  //
    24  
    25  package whisperv5
    26  
    27  import (
    28  	"testing"
    29  
    30  	"github.com/ethereum/go-ethereum/crypto"
    31  )
    32  
    33  func BenchmarkDeriveKeyMaterial(b *testing.B) {
    34  	for i := 0; i < b.N; i++ {
    35  		deriveKeyMaterial([]byte("test"), 0)
    36  	}
    37  }
    38  
    39  func BenchmarkEncryptionSym(b *testing.B) {
    40  	InitSingleTest()
    41  
    42  	params, err := generateMessageParams()
    43  	if err != nil {
    44  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    45  	}
    46  
    47  	for i := 0; i < b.N; i++ {
    48  		msg, _ := NewSentMessage(params)
    49  		_, err := msg.Wrap(params)
    50  		if err != nil {
    51  			b.Errorf("failed Wrap with seed %d: %s.", seed, err)
    52  			b.Errorf("i = %d, len(msg.Raw) = %d, params.Payload = %d.", i, len(msg.Raw), len(params.Payload))
    53  			return
    54  		}
    55  	}
    56  }
    57  
    58  func BenchmarkEncryptionAsym(b *testing.B) {
    59  	InitSingleTest()
    60  
    61  	params, err := generateMessageParams()
    62  	if err != nil {
    63  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    64  	}
    65  	key, err := crypto.GenerateKey()
    66  	if err != nil {
    67  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
    68  	}
    69  	params.KeySym = nil
    70  	params.Dst = &key.PublicKey
    71  
    72  	for i := 0; i < b.N; i++ {
    73  		msg, _ := NewSentMessage(params)
    74  		_, err := msg.Wrap(params)
    75  		if err != nil {
    76  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    77  		}
    78  	}
    79  }
    80  
    81  func BenchmarkDecryptionSymValid(b *testing.B) {
    82  	InitSingleTest()
    83  
    84  	params, err := generateMessageParams()
    85  	if err != nil {
    86  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
    87  	}
    88  	msg, _ := NewSentMessage(params)
    89  	env, err := msg.Wrap(params)
    90  	if err != nil {
    91  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
    92  	}
    93  	f := Filter{KeySym: params.KeySym}
    94  
    95  	for i := 0; i < b.N; i++ {
    96  		msg := env.Open(&f)
    97  		if msg == nil {
    98  			b.Fatalf("failed to open with seed %d.", seed)
    99  		}
   100  	}
   101  }
   102  
   103  func BenchmarkDecryptionSymInvalid(b *testing.B) {
   104  	InitSingleTest()
   105  
   106  	params, err := generateMessageParams()
   107  	if err != nil {
   108  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   109  	}
   110  	msg, _ := NewSentMessage(params)
   111  	env, err := msg.Wrap(params)
   112  	if err != nil {
   113  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   114  	}
   115  	f := Filter{KeySym: []byte("arbitrary stuff here")}
   116  
   117  	for i := 0; i < b.N; i++ {
   118  		msg := env.Open(&f)
   119  		if msg != nil {
   120  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   121  		}
   122  	}
   123  }
   124  
   125  func BenchmarkDecryptionAsymValid(b *testing.B) {
   126  	InitSingleTest()
   127  
   128  	params, err := generateMessageParams()
   129  	if err != nil {
   130  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   131  	}
   132  	key, err := crypto.GenerateKey()
   133  	if err != nil {
   134  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   135  	}
   136  	f := Filter{KeyAsym: key}
   137  	params.KeySym = nil
   138  	params.Dst = &key.PublicKey
   139  	msg, _ := NewSentMessage(params)
   140  	env, err := msg.Wrap(params)
   141  	if err != nil {
   142  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   143  	}
   144  
   145  	for i := 0; i < b.N; i++ {
   146  		msg := env.Open(&f)
   147  		if msg == nil {
   148  			b.Fatalf("fail to open, seed: %d.", seed)
   149  		}
   150  	}
   151  }
   152  
   153  func BenchmarkDecryptionAsymInvalid(b *testing.B) {
   154  	InitSingleTest()
   155  
   156  	params, err := generateMessageParams()
   157  	if err != nil {
   158  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   159  	}
   160  	key, err := crypto.GenerateKey()
   161  	if err != nil {
   162  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   163  	}
   164  	params.KeySym = nil
   165  	params.Dst = &key.PublicKey
   166  	msg, _ := NewSentMessage(params)
   167  	env, err := msg.Wrap(params)
   168  	if err != nil {
   169  		b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   170  	}
   171  
   172  	key, err = crypto.GenerateKey()
   173  	if err != nil {
   174  		b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err)
   175  	}
   176  	f := Filter{KeyAsym: key}
   177  
   178  	for i := 0; i < b.N; i++ {
   179  		msg := env.Open(&f)
   180  		if msg != nil {
   181  			b.Fatalf("opened envelope with invalid key, seed: %d.", seed)
   182  		}
   183  	}
   184  }
   185  
   186  func increment(x []byte) {
   187  	for i := 0; i < len(x); i++ {
   188  		x[i]++
   189  		if x[i] != 0 {
   190  			break
   191  		}
   192  	}
   193  }
   194  
   195  func BenchmarkPoW(b *testing.B) {
   196  	InitSingleTest()
   197  
   198  	params, err := generateMessageParams()
   199  	if err != nil {
   200  		b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
   201  	}
   202  	params.Payload = make([]byte, 32)
   203  	params.PoW = 10.0
   204  	params.TTL = 1
   205  
   206  	for i := 0; i < b.N; i++ {
   207  		increment(params.Payload)
   208  		msg, _ := NewSentMessage(params)
   209  		_, err := msg.Wrap(params)
   210  		if err != nil {
   211  			b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
   212  		}
   213  	}
   214  }