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