gpv_sign_profile_test.go raw
1 package ring
2
3 import (
4 "crypto/rand"
5 "testing"
6
7 "golang.org/x/crypto/sha3"
8 )
9
10 func BenchmarkGPVSign_Breakdown(b *testing.B) {
11 p := SmallGPVParams().Ring
12 sigma := SmallGPVParams().Sigma
13
14 b.Run("GaussianSampler_new", func(b *testing.B) {
15 for i := 0; i < b.N; i++ {
16 NewGaussianSampler(sigma)
17 }
18 })
19
20 b.Run("GaussianSamplePoly", func(b *testing.B) {
21 gs := NewGaussianSampler(sigma)
22 b.ResetTimer()
23 for i := 0; i < b.N; i++ {
24 gs.SamplePoly(p)
25 }
26 })
27
28 b.Run("SHAKE256_hash", func(b *testing.B) {
29 data := make([]byte, 256)
30 rand.Read(data)
31 b.ResetTimer()
32 for i := 0; i < b.N; i++ {
33 h := sha3.NewShake256()
34 h.Write(data)
35 out := make([]byte, 32)
36 h.Read(out)
37 }
38 })
39
40 b.Run("hashToChallenge", func(b *testing.B) {
41 w := UniformPoly(p)
42 msg := []byte("benchmark")
43 b.ResetTimer()
44 for i := 0; i < b.N; i++ {
45 hashToChallenge(p, w, msg)
46 }
47 })
48
49 b.Run("Serialize", func(b *testing.B) {
50 poly := UniformPoly(p)
51 b.ResetTimer()
52 for i := 0; i < b.N; i++ {
53 Serialize(poly)
54 }
55 })
56 }
57