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