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