-
Notifications
You must be signed in to change notification settings - Fork 176
/
elements.go
39 lines (32 loc) · 1.16 KB
/
elements.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package rlwe
import (
"math/big"
"github.com/tuneinsight/lattigo/v4/ring"
)
// AdditiveShare is a type for storing additively shared values in Z_Q[X] (RNS domain).
type AdditiveShare struct {
Value ring.Poly
}
// AdditiveShareBigint is a type for storing additively shared values
// in Z (positional domain).
type AdditiveShareBigint struct {
Value []*big.Int
}
// NewAdditiveShare instantiates a new additive share struct for the ring defined
// by the given parameters at maximum level.
func NewAdditiveShare(params Parameters) *AdditiveShare {
return &AdditiveShare{Value: *ring.NewPoly(params.N(), 0)}
}
// NewAdditiveShareAtLevel instantiates a new additive share struct for the ring defined
// by the given parameters at level `level`.
func NewAdditiveShareAtLevel(params Parameters, level int) *AdditiveShare {
return &AdditiveShare{Value: *ring.NewPoly(params.N(), level)}
}
// NewAdditiveShareBigint instantiates a new additive share struct composed of "n" big.Int elements.
func NewAdditiveShareBigint(params Parameters, n int) *AdditiveShareBigint {
v := make([]*big.Int, n)
for i := range v {
v[i] = new(big.Int)
}
return &AdditiveShareBigint{Value: v}
}