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