gpv_profile_test.go raw

   1  package ring
   2  
   3  import (
   4  	"crypto/rand"
   5  	"testing"
   6  )
   7  
   8  func BenchmarkGPVKeyGen_Breakdown(b *testing.B) {
   9  	p := SmallGPVParams().Ring
  10  
  11  	b.Run("UniformPoly", func(b *testing.B) {
  12  		for i := 0; i < b.N; i++ {
  13  			UniformPolyFrom(p, rand.Reader)
  14  		}
  15  	})
  16  
  17  	b.Run("TernaryPoly", func(b *testing.B) {
  18  		for i := 0; i < b.N; i++ {
  19  			TernaryPolyFrom(p, rand.Reader)
  20  		}
  21  	})
  22  
  23  	b.Run("NTT_n64", func(b *testing.B) {
  24  		poly := UniformPoly(p)
  25  		b.ResetTimer()
  26  		for i := 0; i < b.N; i++ {
  27  			pp := poly.Clone()
  28  			NTT(pp)
  29  		}
  30  	})
  31  
  32  	b.Run("MulPointwise_n64", func(b *testing.B) {
  33  		a := UniformPoly(p)
  34  		NTT(a)
  35  		s := UniformPoly(p)
  36  		NTT(s)
  37  		b.ResetTimer()
  38  		for i := 0; i < b.N; i++ {
  39  			MulPointwise(a, s)
  40  		}
  41  	})
  42  
  43  	b.Run("crypto_rand_128B", func(b *testing.B) {
  44  		buf := make([]byte, 128)
  45  		b.ResetTimer()
  46  		for i := 0; i < b.N; i++ {
  47  			rand.Read(buf)
  48  		}
  49  	})
  50  
  51  	b.Run("crypto_rand_2B_x64", func(b *testing.B) {
  52  		buf := make([]byte, 2)
  53  		b.ResetTimer()
  54  		for i := 0; i < b.N; i++ {
  55  			for j := 0; j < 64; j++ {
  56  				rand.Read(buf)
  57  			}
  58  		}
  59  	})
  60  
  61  	b.Run("crypto_rand_1B_x64", func(b *testing.B) {
  62  		buf := make([]byte, 1)
  63  		b.ResetTimer()
  64  		for i := 0; i < b.N; i++ {
  65  			for j := 0; j < 64; j++ {
  66  				rand.Read(buf)
  67  			}
  68  		}
  69  	})
  70  }
  71