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