github.com/avence12/go-ethereum@v1.5.10-0.20170320123548-1dfd65f6d047/whisper/whisperv5/benchmarks_test.go (about) 1 // Copyright 2016 The go-ethereum Authors 2 // This file is part of the go-ethereum library. 3 // 4 // The go-ethereum library is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU Lesser General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // The go-ethereum library is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU Lesser General Public License for more details. 13 // 14 // You should have received a copy of the GNU Lesser General Public License 15 // along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>. 16 17 package whisperv5 18 19 import ( 20 "testing" 21 22 "github.com/ethereum/go-ethereum/crypto" 23 ) 24 25 func BenchmarkDeriveKeyMaterial(b *testing.B) { 26 for i := 0; i < b.N; i++ { 27 deriveKeyMaterial([]byte("test"), 0) 28 } 29 } 30 31 func BenchmarkDeriveOneTimeKey(b *testing.B) { 32 for i := 0; i < b.N; i++ { 33 DeriveOneTimeKey([]byte("test value 1"), []byte("test value 2"), 0) 34 } 35 } 36 37 func BenchmarkEncryptionSym(b *testing.B) { 38 InitSingleTest() 39 40 params, err := generateMessageParams() 41 if err != nil { 42 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 43 } 44 45 for i := 0; i < b.N; i++ { 46 msg := NewSentMessage(params) 47 _, err := msg.Wrap(params) 48 if err != nil { 49 b.Errorf("failed Wrap with seed %d: %s.", seed, err) 50 b.Errorf("i = %d, len(msg.Raw) = %d, params.Payload = %d.", i, len(msg.Raw), len(params.Payload)) 51 return 52 } 53 } 54 } 55 56 func BenchmarkEncryptionAsym(b *testing.B) { 57 InitSingleTest() 58 59 params, err := generateMessageParams() 60 if err != nil { 61 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 62 } 63 key, err := crypto.GenerateKey() 64 if err != nil { 65 b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) 66 } 67 params.KeySym = nil 68 params.Dst = &key.PublicKey 69 70 for i := 0; i < b.N; i++ { 71 msg := NewSentMessage(params) 72 _, err := msg.Wrap(params) 73 if err != nil { 74 b.Fatalf("failed Wrap with seed %d: %s.", seed, err) 75 } 76 } 77 } 78 79 func BenchmarkDecryptionSymValid(b *testing.B) { 80 InitSingleTest() 81 82 params, err := generateMessageParams() 83 if err != nil { 84 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 85 } 86 msg := NewSentMessage(params) 87 env, err := msg.Wrap(params) 88 if err != nil { 89 b.Fatalf("failed Wrap with seed %d: %s.", seed, err) 90 } 91 f := Filter{KeySym: params.KeySym} 92 93 for i := 0; i < b.N; i++ { 94 msg := env.Open(&f) 95 if msg == nil { 96 b.Fatalf("failed to open with seed %d.", seed) 97 } 98 } 99 } 100 101 func BenchmarkDecryptionSymInvalid(b *testing.B) { 102 InitSingleTest() 103 104 params, err := generateMessageParams() 105 if err != nil { 106 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 107 } 108 msg := NewSentMessage(params) 109 env, err := msg.Wrap(params) 110 if err != nil { 111 b.Fatalf("failed Wrap with seed %d: %s.", seed, err) 112 } 113 f := Filter{KeySym: []byte("arbitrary stuff here")} 114 115 for i := 0; i < b.N; i++ { 116 msg := env.Open(&f) 117 if msg != nil { 118 b.Fatalf("opened envelope with invalid key, seed: %d.", seed) 119 } 120 } 121 } 122 123 func BenchmarkDecryptionAsymValid(b *testing.B) { 124 InitSingleTest() 125 126 params, err := generateMessageParams() 127 if err != nil { 128 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 129 } 130 key, err := crypto.GenerateKey() 131 if err != nil { 132 b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) 133 } 134 f := Filter{KeyAsym: key} 135 params.KeySym = nil 136 params.Dst = &key.PublicKey 137 msg := NewSentMessage(params) 138 env, err := msg.Wrap(params) 139 if err != nil { 140 b.Fatalf("failed Wrap with seed %d: %s.", seed, err) 141 } 142 143 for i := 0; i < b.N; i++ { 144 msg := env.Open(&f) 145 if msg == nil { 146 b.Fatalf("fail to open, seed: %d.", seed) 147 } 148 } 149 } 150 151 func BenchmarkDecryptionAsymInvalid(b *testing.B) { 152 InitSingleTest() 153 154 params, err := generateMessageParams() 155 if err != nil { 156 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 157 } 158 key, err := crypto.GenerateKey() 159 if err != nil { 160 b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) 161 } 162 params.KeySym = nil 163 params.Dst = &key.PublicKey 164 msg := NewSentMessage(params) 165 env, err := msg.Wrap(params) 166 if err != nil { 167 b.Fatalf("failed Wrap with seed %d: %s.", seed, err) 168 } 169 170 key, err = crypto.GenerateKey() 171 if err != nil { 172 b.Fatalf("failed GenerateKey with seed %d: %s.", seed, err) 173 } 174 f := Filter{KeyAsym: key} 175 176 for i := 0; i < b.N; i++ { 177 msg := env.Open(&f) 178 if msg != nil { 179 b.Fatalf("opened envelope with invalid key, seed: %d.", seed) 180 } 181 } 182 } 183 184 func increment(x []byte) { 185 for i := 0; i < len(x); i++ { 186 x[i]++ 187 if x[i] != 0 { 188 break 189 } 190 } 191 } 192 193 func BenchmarkPoW(b *testing.B) { 194 InitSingleTest() 195 196 params, err := generateMessageParams() 197 if err != nil { 198 b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err) 199 } 200 params.Payload = make([]byte, 32) 201 params.PoW = 10.0 202 params.TTL = 1 203 204 for i := 0; i < b.N; i++ { 205 increment(params.Payload) 206 msg := NewSentMessage(params) 207 _, err := msg.Wrap(params) 208 if err != nil { 209 b.Fatalf("failed Wrap with seed %d: %s.", seed, err) 210 } 211 } 212 }