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 }