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