Documentation ¶
Overview ¶
Package ringqp is implements a wrapper for both the ringQ and ringP.
Index ¶
- type Poly
- func (p Poly) BinarySize() (dataLen int)
- func (p *Poly) Copy(other Poly)
- func (p *Poly) CopyLvl(levelQ, levelP int, other Poly)
- func (p Poly) CopyNew() *Poly
- func (p Poly) Equal(other *Poly) (v bool)
- func (p Poly) LevelP() int
- func (p Poly) LevelQ() int
- func (p Poly) MarshalBinary() (data []byte, err error)
- func (p *Poly) ReadFrom(r io.Reader) (n int64, err error)
- func (p *Poly) Resize(levelQ, levelP int)
- func (p *Poly) UnmarshalBinary(data []byte) (err error)
- func (p Poly) WriteTo(w io.Writer) (n int64, err error)
- type Ring
- func (r Ring) Add(p1, p2, p3 Poly)
- func (r Ring) AddLazy(p1, p2, p3 Poly)
- func (r Ring) AtLevel(levelQ, levelP int) Ring
- func (r Ring) Automorphism(p1 Poly, galEl uint64, p2 Poly)
- func (r Ring) AutomorphismNTT(p1 Poly, galEl uint64, p2 Poly)
- func (r Ring) AutomorphismNTTWithIndex(p1 Poly, index []uint64, p2 Poly)
- func (r Ring) AutomorphismNTTWithIndexThenAddLazy(p1 Poly, index []uint64, p2 Poly)
- func (r Ring) Equal(p1, p2 Poly) (v bool)
- func (r Ring) EvalPolyScalar(pol []Poly, pt uint64, p3 Poly)
- func (r Ring) ExtendBasisSmallNormAndCenter(polyInQ ring.Poly, levelP int, polyOutQ, polyOutP ring.Poly)
- func (r Ring) IMForm(p1, p2 Poly)
- func (r Ring) INTT(p1, p2 Poly)
- func (r Ring) INTTLazy(p1, p2 Poly)
- func (r Ring) Inverse(scalar ring.RNSScalar)
- func (r Ring) LevelP() int
- func (r Ring) LevelQ() int
- func (r Ring) Log2OfStandardDeviation(poly Poly) (std float64)
- func (r Ring) MForm(p1, p2 Poly)
- func (r Ring) MulCoeffsMontgomery(p1, p2, p3 Poly)
- func (r Ring) MulCoeffsMontgomeryLazy(p1, p2, p3 Poly)
- func (r Ring) MulCoeffsMontgomeryLazyThenAddLazy(p1, p2, p3 Poly)
- func (r Ring) MulCoeffsMontgomeryLazyThenSubLazy(p1, p2, p3 Poly)
- func (r Ring) MulCoeffsMontgomeryThenAdd(p1, p2, p3 Poly)
- func (r Ring) MulCoeffsMontgomeryThenSub(p1, p2, p3 Poly)
- func (r Ring) MulRNSScalar(s1, s2, sout ring.RNSScalar)
- func (r Ring) MulRNSScalarMontgomery(p Poly, scalar []uint64, pOut Poly)
- func (r Ring) MulScalar(p1 Poly, scalar uint64, p2 Poly)
- func (r Ring) N() int
- func (r Ring) NTT(p1, p2 Poly)
- func (r Ring) NTTLazy(p1, p2 Poly)
- func (r Ring) Neg(p1, p2 Poly)
- func (r Ring) NewPoly() Poly
- func (r Ring) NewRNSScalar() ring.RNSScalar
- func (r Ring) NewRNSScalarFromUInt64(v uint64) ring.RNSScalar
- func (r Ring) PolyToBigintCentered(p1 Poly, gap int, coeffsBigint []*big.Int)
- func (r Ring) Reduce(p1, p2 Poly)
- func (r Ring) Sub(p1, p2, p3 Poly)
- func (r Ring) SubRNSScalar(s1, s2, sout ring.RNSScalar)
- type UniformSampler
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Poly ¶
Poly represents a polynomial in the ring of polynomial modulo Q*P. This type is simply the union type between two ring.Poly, each one containing the modulus Q and P coefficients of that polynomial. The modulus Q represent the ciphertext modulus and the modulus P the special primes for the RNS decomposition during homomorphic operations involving keys.
func NewPoly ¶
NewPoly creates a new polynomial at the given levels. If levelQ or levelP are negative, the corresponding polynomial will be nil.
func (Poly) BinarySize ¶
BinarySize returns the serialized size of the object in bytes. It assumes that each coefficient takes 8 bytes.
func (*Poly) Copy ¶
Copy copies the coefficients of other on the target polynomial. This method simply calls the Copy method for each of its sub-polynomials.
func (*Poly) CopyLvl ¶
CopyLvl copies the values of other on the target polynomial. The operation is performed at levelQ for the ringQ and levelP for the ringP.
func (Poly) LevelP ¶
LevelP returns the level of the polynomial modulo P. Returns -1 if the modulus P is absent.
func (Poly) LevelQ ¶
LevelQ returns the level of the polynomial modulo Q. Returns -1 if the modulus Q is absent.
func (Poly) MarshalBinary ¶
MarshalBinary encodes the object into a binary form on a newly allocated slice of bytes.
func (*Poly) ReadFrom ¶
ReadFrom reads on the object from an io.Writer. It implements the io.ReaderFrom interface.
Unless r implements the buffer.Reader interface (see see lattigo/utils/buffer/reader.go), it will be wrapped into a bufio.Reader. Since this requires allocation, it is preferable to pass a buffer.Reader directly:
- When reading multiple values from a io.Reader, it is preferable to first first wrap io.Reader in a pre-allocated bufio.Reader.
- When reading from a var b []byte, it is preferable to pass a buffer.NewBuffer(b) as w (see lattigo/utils/buffer/buffer.go).
func (*Poly) Resize ¶
Resize resizes the levels of the target polynomial to the provided levels. If the provided level is larger than the current level, then allocates zero coefficients, otherwise dereferences the coefficients above the provided level. Nil polynomials are unaffected.
func (*Poly) UnmarshalBinary ¶
UnmarshalBinary decodes a slice of bytes generated by MarshalBinary or WriteTo on the object.
func (Poly) WriteTo ¶
WriteTo writes the object on an io.Writer. It implements the io.WriterTo interface, and will write exactly object.BinarySize() bytes on w.
Unless w implements the buffer.Writer interface (see lattigo/utils/buffer/writer.go), it will be wrapped into a bufio.Writer. Since this requires allocations, it is preferable to pass a buffer.Writer directly:
- When writing multiple times to a io.Writer, it is preferable to first wrap the io.Writer in a pre-allocated bufio.Writer.
- When writing to a pre-allocated var b []byte, it is preferable to pass buffer.NewBuffer(b) as w (see lattigo/utils/buffer/buffer.go).
type Ring ¶
Ring is a structure that implements the operation in the ring R_QP. This type is simply a union type between the two Ring types representing R_Q and R_P.
func (Ring) AddLazy ¶
AddLazy adds p1 to p2 coefficient-wise and writes the result on p3 without modular reduction.
func (Ring) AtLevel ¶
AtLevel returns a shallow copy of the target ring configured to carry on operations at the specified levels.
func (Ring) Automorphism ¶
Automorphism applies the automorphism X^{i} -> X^{i*gen} on p1 and writes the result on p2. Method is not in place.
func (Ring) AutomorphismNTT ¶
AutomorphismNTT applies the automorphism X^{i} -> X^{i*gen} on p1 and writes the result on p2. Method is not in place. Inputs are assumed to be in the NTT domain.
func (Ring) AutomorphismNTTWithIndex ¶
AutomorphismNTTWithIndex applies the automorphism X^{i} -> X^{i*gen} on p1 and writes the result on p2. Index of automorphism must be provided. Method is not in place.
func (Ring) AutomorphismNTTWithIndexThenAddLazy ¶
AutomorphismNTTWithIndexThenAddLazy applies the automorphism X^{i} -> X^{i*gen} on p1 and adds the result on p2. Index of automorphism must be provided. Method is not in place.
func (Ring) EvalPolyScalar ¶
EvalPolyScalar evaluate the polynomial pol at pt and writes the result in p3
func (Ring) ExtendBasisSmallNormAndCenter ¶
func (r Ring) ExtendBasisSmallNormAndCenter(polyInQ ring.Poly, levelP int, polyOutQ, polyOutP ring.Poly)
ExtendBasisSmallNormAndCenter extends a small-norm polynomial polQ in R_Q to a polynomial polQP in R_QP.
func (Ring) IMForm ¶
IMForm switches back p1 from the Montgomery domain to the conventional domain and writes the result on p2.
func (Ring) INTTLazy ¶
INTTLazy computes the inverse-NTT of p1 and returns the result on p2. Output values are in the range [0, 2q-1].
func (Ring) Inverse ¶
Inverse computes the modular inverse of a scalar a expressed in a CRT decomposition. The inversion is done in-place and assumes that a is in Montgomery form.
func (Ring) Log2OfStandardDeviation ¶
Log2OfStandardDeviation returns base 2 logarithm of the standard deviation of the coefficients of the polynomial.
func (Ring) MulCoeffsMontgomery ¶
MulCoeffsMontgomery multiplies p1 by p2 coefficient-wise with a Montgomery modular reduction.
func (Ring) MulCoeffsMontgomeryLazy ¶
MulCoeffsMontgomeryLazy multiplies p1 by p2 coefficient-wise with a constant-time Montgomery modular reduction. Result is within [0, 2q-1].
func (Ring) MulCoeffsMontgomeryLazyThenAddLazy ¶
MulCoeffsMontgomeryLazyThenAddLazy multiplies p1 by p2 coefficient-wise with a constant-time Montgomery modular reduction and adds the result on p3. Result is within [0, 2q-1]
func (Ring) MulCoeffsMontgomeryLazyThenSubLazy ¶
MulCoeffsMontgomeryLazyThenSubLazy multiplies p1 by p2 coefficient-wise with a Montgomery modular reduction and subtracts the result from p3.
func (Ring) MulCoeffsMontgomeryThenAdd ¶
MulCoeffsMontgomeryThenAdd multiplies p1 by p2 coefficient-wise with a Montgomery modular reduction and adds the result to p3.
func (Ring) MulCoeffsMontgomeryThenSub ¶
MulCoeffsMontgomeryThenSub multiplies p1 by p2 coefficient-wise with a Montgomery modular reduction and subtracts the result from p3.
func (Ring) MulRNSScalar ¶
MulRNSScalar multiplies s1 and s2 and stores the result in sout.
func (Ring) MulRNSScalarMontgomery ¶
MulRNSScalarMontgomery multiplies p with a scalar value expressed in the CRT decomposition. It assumes the scalar decomposition to be in Montgomery form.
func (Ring) NTTLazy ¶
NTTLazy computes the NTT of p1 and returns the result on p2. Output values are in the range [0, 2q-1].
func (Ring) NewRNSScalar ¶
NewRNSScalar creates a new Scalar value (i.e., a degree-0 polynomial) in the RingQP.
func (Ring) NewRNSScalarFromUInt64 ¶
NewRNSScalarFromUInt64 creates a new Scalar in the RingQP initialized with value v.
func (Ring) PolyToBigintCentered ¶
PolyToBigintCentered reconstructs p1 and returns the result in an array of Int. Coefficients are centered around Q/2 gap defines coefficients X^{i*gap} that will be reconstructed. For example, if gap = 1, then all coefficients are reconstructed, while if gap = 2 then only coefficients X^{2*i} are reconstructed.
func (Ring) Reduce ¶
Reduce applies the modular reduction on the coefficients of p1 and returns the result on p2.
func (Ring) SubRNSScalar ¶
SubRNSScalar subtracts s2 to s1 and stores the result in sout.
type UniformSampler ¶
type UniformSampler struct {
// contains filtered or unexported fields
}
UniformSampler is a type for sampling polynomials in Ring.
func NewUniformSampler ¶
func NewUniformSampler(prng sampling.PRNG, r Ring) (s UniformSampler)
NewUniformSampler instantiates a new UniformSampler from a given PRNG.
func (UniformSampler) AtLevel ¶
func (s UniformSampler) AtLevel(levelQ, levelP int) UniformSampler
AtLevel returns a shallow copy of the target sampler that operates at the specified levels.
func (UniformSampler) Read ¶
func (s UniformSampler) Read(p Poly)
Read samples a new polynomial with uniform distribution and stores it into p.
func (UniformSampler) ReadNew ¶
func (s UniformSampler) ReadNew() (p Poly)
ReadNew samples a new polynomial with uniform distribution and returns it.
func (UniformSampler) WithPRNG ¶
func (s UniformSampler) WithPRNG(prng sampling.PRNG) UniformSampler