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