github.com/shyftnetwork/go-empyrean@v1.8.3-0.20191127201940-fbfca9338f04/whisper/whisperv6/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 whisperv6 18 19 import ( 20 "crypto/sha256" 21 "os" 22 "os/exec" 23 "testing" 24 25 "github.com/ShyftNetwork/go-empyrean/crypto" 26 "golang.org/x/crypto/pbkdf2" 27 ) 28 29 func TestMain(m *testing.M) { 30 exec.Command("/bin/sh", "../shyft-cli/shyftTestDbClean.sh") 31 retCode := m.Run() 32 exec.Command("/bin/sh", "../shyft-cli/shyftTestDbClean.sh") 33 os.Exit(retCode) 34 } 35 36 func BenchmarkDeriveKeyMaterial(b *testing.B) { 37 for i := 0; i < b.N; i++ { 38 pbkdf2.Key([]byte("test"), nil, 65356, aesKeyLength, sha256.New) 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 }