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