v2 / bench / crypto / ecdsa / ecdsa.go
63 lines · 54 sloc · 1.66 KB · f7cc9d5daaeaa37e3bdfca77f142e5b3a5ff3a0f
Raw
1package main
2
3import (
4 "crypto/ecdsa"
5 "crypto/elliptic"
6 "crypto/rand"
7 "fmt"
8 "time"
9)
10
11func main() {
12 iterations := 1000
13
14 fmt.Println("Benchmarking key generation...")
15 var totalGenTime int64
16 for i := 0; i < iterations; i++ {
17 start := time.Now()
18 _, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
19 if err != nil {
20 panic(err)
21 }
22 totalGenTime += time.Since(start).Microseconds()
23 }
24 avgGenTime := totalGenTime / int64(iterations)
25 fmt.Printf("Average key generation time: %d µs\n", avgGenTime)
26
27 privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
28 if err != nil {
29 panic(err)
30 }
31 message := []byte("Benchmark message")
32
33 fmt.Println("Benchmarking signing...")
34 var totalSignTime int64
35 for i := 0; i < iterations; i++ {
36 start := time.Now()
37 _, _, err := ecdsa.Sign(rand.Reader, privKey, message)
38 if err != nil {
39 panic(err)
40 }
41 totalSignTime += time.Since(start).Microseconds()
42 }
43 avgSignTime := totalSignTime / int64(iterations)
44 fmt.Printf("Average sign time: %d µs\n", avgSignTime)
45
46 r, s, err := ecdsa.Sign(rand.Reader, privKey, message)
47 if err != nil {
48 panic(err)
49 }
50
51 pubKey := &privKey.PublicKey
52
53 fmt.Println("Benchmarking verification...")
54 var totalVerifyTime int64
55 for i := 0; i < iterations; i++ {
56 start := time.Now()
57 ecdsa.Verify(pubKey, message, r, s)
58 totalVerifyTime += time.Since(start).Microseconds()
59 }
60 avgVerifyTime := totalVerifyTime / int64(iterations)
61 fmt.Printf("Average verify time: %d µs\n", avgVerifyTime)
62}
63
64