...
1 package internal
2
3 import (
4 "github.com/cloudflare/circl/pke/kyber/internal/common"
5 )
6
7
8 type Vec [K]common.Poly
9
10
11
12
13
14 func (v *Vec) DeriveNoise(seed []byte, nonce uint8, eta int) {
15 for i := 0; i < K; i++ {
16 v[i].DeriveNoise(seed, nonce+uint8(i), eta)
17 }
18 }
19
20
21
22
23
24
25
26
27
28 func PolyDotHat(p *common.Poly, a, b *Vec) {
29 var t common.Poly
30 *p = common.Poly{}
31 for i := 0; i < K; i++ {
32 t.MulHat(&a[i], &b[i])
33 p.Add(&t, p)
34 }
35 }
36
37
38
39
40 func (v *Vec) BarrettReduce() {
41 for i := 0; i < K; i++ {
42 v[i].BarrettReduce()
43 }
44 }
45
46
47
48
49 func (v *Vec) Normalize() {
50 for i := 0; i < K; i++ {
51 v[i].Normalize()
52 }
53 }
54
55
56 func (v *Vec) InvNTT() {
57 for i := 0; i < K; i++ {
58 v[i].InvNTT()
59 }
60 }
61
62
63 func (v *Vec) NTT() {
64 for i := 0; i < K; i++ {
65 v[i].NTT()
66 }
67 }
68
69
70 func (v *Vec) Add(a, b *Vec) {
71 for i := 0; i < K; i++ {
72 v[i].Add(&a[i], &b[i])
73 }
74 }
75
76
77 func (v *Vec) Pack(buf []byte) {
78 for i := 0; i < K; i++ {
79 v[i].Pack(buf[common.PolySize*i:])
80 }
81 }
82
83
84 func (v *Vec) Unpack(buf []byte) {
85 for i := 0; i < K; i++ {
86 v[i].Unpack(buf[common.PolySize*i:])
87 }
88 }
89
90
91
92
93 func (v *Vec) CompressTo(m []byte, d int) {
94 size := compressedPolySize(d)
95 for i := 0; i < K; i++ {
96 v[i].CompressTo(m[size*i:], d)
97 }
98 }
99
100
101
102
103 func (v *Vec) Decompress(m []byte, d int) {
104 size := compressedPolySize(d)
105 for i := 0; i < K; i++ {
106 v[i].Decompress(m[size*i:], d)
107 }
108 }
109
110
111 func compressedPolySize(d int) int {
112 switch d {
113 case 4:
114 return 128
115 case 5:
116 return 160
117 case 10:
118 return 320
119 case 11:
120 return 352
121 }
122 panic("unsupported d")
123 }
124
View as plain text