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