Documentation ¶
Index ¶
- Constants
- func ApproximateCos(K, degree int, dev float64, scnum int) []complex128
- func BigintCos(x *big.Float) (cosx *big.Float)
- func BigintSin(x *big.Float) (sinx *big.Float)
- func NewFloat(x float64) (y *big.Float)
- type EncodingMatrix
- type EncodingMatrixLiteral
- func (mParams *EncodingMatrixLiteral) Depth(actual bool) (depth int)
- func (mParams *EncodingMatrixLiteral) Levels() (levels []int)
- func (mParams *EncodingMatrixLiteral) MarshalBinary() (data []byte, err error)
- func (mParams *EncodingMatrixLiteral) Rotations(logN, logSlots int) (rotations []int)
- func (mParams *EncodingMatrixLiteral) UnmarshalBinary(data []byte) error
- type EvalModLiteral
- type EvalModPoly
- func (evp *EvalModPoly) A() float64
- func (evp *EvalModPoly) B() float64
- func (evp *EvalModPoly) K() float64
- func (evp *EvalModPoly) LevelStart() int
- func (evp *EvalModPoly) MessageRatio() float64
- func (evp *EvalModPoly) QDiff() float64
- func (evp *EvalModPoly) ScFac() float64
- func (evp *EvalModPoly) ScalingFactor() float64
- type Evaluator
- type LinearTransformType
- type SineType
Constants ¶
const ( CoeffsToSlots = LinearTransformType(0) // Homomorphic Encoding SlotsToCoeffs = LinearTransformType(1) // Homomorphic Decoding )
CoeffsToSlots and SlotsToCoeffs are two linear transformations.
const ( Sin = SineType(0) // Standard Chebyshev approximation of (1/2pi) * sin(2pix) Cos1 = SineType(1) // Special approximation (Han and Ki) of pow((1/2pi), 1/2^r) * cos(2pi(x-0.25)/2^r); this method requires a minimum degree of 2*(K-1). Cos2 = SineType(2) // Standard Chebyshev approximation of pow((1/2pi), 1/2^r) * cos(2pi(x-0.25)/2^r) )
Sin and Cos are the two proposed functions for SineType
Variables ¶
This section is empty.
Functions ¶
func ApproximateCos ¶
func ApproximateCos(K, degree int, dev float64, scnum int) []complex128
ApproximateCos computes a polynomial approximation of degree "degree" in Chevyshev basis of the function cos(2*pi*x/2^"scnum") in the range -"K" to "K" The nodes of the Chevyshev approximation are are located from -dev to +dev at each integer value between -K and -K
func BigintCos ¶
BigintCos is an iterative arbitrary precision computation of Cos(x) Iterative process with an error of ~10^{−0.60206*k} after k iterations. ref : Johansson, B. Tomas, An elementary algorithm to evaluate trigonometric functions to high precision, 2018
Types ¶
type EncodingMatrix ¶
type EncodingMatrix struct { EncodingMatrixLiteral // contains filtered or unexported fields }
EncodingMatrix is a struct storing the factorized DFT matrix
func NewHomomorphicEncodingMatrixFromLiteral ¶
func NewHomomorphicEncodingMatrixFromLiteral(mParams EncodingMatrixLiteral, encoder ckks.Encoder) EncodingMatrix
NewHomomorphicEncodingMatrixFromLiteral generates the factorized encoding matrix. scaling : constant by witch the all the matrices will be multuplied by. encoder : ckks.Encoder.
type EncodingMatrixLiteral ¶
type EncodingMatrixLiteral struct { LinearTransformType LinearTransformType LogN int // log(RingDegree) LogSlots int // log(slots) Scaling float64 // constant by which the matrix is multiplied with LevelStart int // Encoding level BitReversed bool // Flag for bit-reverseed input to the DFT (with bit-reversed output), by default false. BSGSRatio float64 // n1/n2 ratio for the bsgs algo for matrix x vector eval ScalingFactor [][]float64 }
EncodingMatrixLiteral is a struct storing the parameters to generate the factorized DFT matrix.
func (*EncodingMatrixLiteral) Depth ¶
func (mParams *EncodingMatrixLiteral) Depth(actual bool) (depth int)
Depth returns the number of levels allocated. If actual == true then returns the number of moduli consumed, else returns the factorization depth.
func (*EncodingMatrixLiteral) Levels ¶
func (mParams *EncodingMatrixLiteral) Levels() (levels []int)
Levels returns the index of the Qi used int CoeffsToSlots.
func (*EncodingMatrixLiteral) MarshalBinary ¶
func (mParams *EncodingMatrixLiteral) MarshalBinary() (data []byte, err error)
MarshalBinary encode the target EncodingMatrixParameters on a slice of bytes.
func (*EncodingMatrixLiteral) Rotations ¶
func (mParams *EncodingMatrixLiteral) Rotations(logN, logSlots int) (rotations []int)
Rotations returns the list of rotations performed during the CoeffsToSlot operation.
func (*EncodingMatrixLiteral) UnmarshalBinary ¶
func (mParams *EncodingMatrixLiteral) UnmarshalBinary(data []byte) error
UnmarshalBinary decodes a slice of bytes on the target EncodingMatrixParameters.
type EvalModLiteral ¶
type EvalModLiteral struct { Q uint64 // Q to reduce by during EvalMod LevelStart int // Starting level of EvalMod ScalingFactor float64 // Scaling factor used during EvalMod SineType SineType // Chose betwenn [Sin(2*pi*x)] or [cos(2*pi*x/r) with double angle formula] MessageRatio float64 // Ratio between Q0 and m, i.e. Q[0]/|m| K int // K parameter (interpolation in the range -K to K) SineDeg int // Degree of the interpolation DoubleAngle int // Number of rescale and double angle formula (only applies for cos) ArcSineDeg int // Degree of the Taylor arcsine composed with f(2*pi*x) (if zero then not used) }
EvalModLiteral a struct for the paramters of the EvalMod step of the bootstrapping
func (*EvalModLiteral) Depth ¶
func (evm *EvalModLiteral) Depth() (depth int)
Depth returns the depth of the SineEval. If true, then also counts the double angle formula.
func (*EvalModLiteral) MarshalBinary ¶
func (evmParams *EvalModLiteral) MarshalBinary() (data []byte, err error)
MarshalBinary encode the target EvalModParameters on a slice of bytes.
func (*EvalModLiteral) QDiff ¶
func (evm *EvalModLiteral) QDiff() float64
QDiff return Q/ClosestedPow2 This is the error introduced by the approximate division by Q
func (*EvalModLiteral) UnmarshalBinary ¶
func (evmParams *EvalModLiteral) UnmarshalBinary(data []byte) (err error)
UnmarshalBinary decodes a slice of bytes on the target EvalModParameters.
type EvalModPoly ¶
type EvalModPoly struct {
// contains filtered or unexported fields
}
EvalModPoly is a struct storing the EvalModLiteral with the polynomials.
func NewEvalModPolyFromLiteral ¶
func NewEvalModPolyFromLiteral(evm EvalModLiteral) EvalModPoly
NewEvalModPolyFromLiteral generates an EvalModPoly fromt the EvalModLiteral.
func (*EvalModPoly) A ¶
func (evp *EvalModPoly) A() float64
A returns the left bound of the sine approximation (scaled by 1/2^r).
func (*EvalModPoly) B ¶
func (evp *EvalModPoly) B() float64
B returns the right bound of the sine approximation (scaled by 1/2^r).
func (*EvalModPoly) LevelStart ¶
func (evp *EvalModPoly) LevelStart() int
LevelStart returns the starting level of the EvalMod.
func (*EvalModPoly) MessageRatio ¶
func (evp *EvalModPoly) MessageRatio() float64
MessageRatio returns the pre-set ratio Q[0]/|m|.
func (*EvalModPoly) QDiff ¶
func (evp *EvalModPoly) QDiff() float64
QDiff return Q/ClosestedPow2 This is the error introduced by the approximate division by Q.
func (*EvalModPoly) ScFac ¶
func (evp *EvalModPoly) ScFac() float64
ScFac returns 1/2^r where r is the number of double angle evaluation.
func (*EvalModPoly) ScalingFactor ¶
func (evp *EvalModPoly) ScalingFactor() float64
ScalingFactor returns scaling factor used during the EvalMod.
type Evaluator ¶
type Evaluator interface { Add(op0, op1 ckks.Operand, ctOut *ckks.Ciphertext) AddNoMod(op0, op1 ckks.Operand, ctOut *ckks.Ciphertext) AddNew(op0, op1 ckks.Operand) (ctOut *ckks.Ciphertext) AddNoModNew(op0, op1 ckks.Operand) (ctOut *ckks.Ciphertext) Sub(op0, op1 ckks.Operand, ctOut *ckks.Ciphertext) SubNoMod(op0, op1 ckks.Operand, ctOut *ckks.Ciphertext) SubNew(op0, op1 ckks.Operand) (ctOut *ckks.Ciphertext) SubNoModNew(op0, op1 ckks.Operand) (ctOut *ckks.Ciphertext) Neg(ctIn *ckks.Ciphertext, ctOut *ckks.Ciphertext) NegNew(ctIn *ckks.Ciphertext) (ctOut *ckks.Ciphertext) AddConstNew(ctIn *ckks.Ciphertext, constant interface{}) (ctOut *ckks.Ciphertext) AddConst(ctIn *ckks.Ciphertext, constant interface{}, ctOut *ckks.Ciphertext) MultByConstNew(ctIn *ckks.Ciphertext, constant interface{}) (ctOut *ckks.Ciphertext) MultByConst(ctIn *ckks.Ciphertext, constant interface{}, ctOut *ckks.Ciphertext) MultByGaussianInteger(ctIn *ckks.Ciphertext, cReal, cImag interface{}, ctOut *ckks.Ciphertext) MultByConstAndAdd(ctIn *ckks.Ciphertext, constant interface{}, ctOut *ckks.Ciphertext) MultByGaussianIntegerAndAdd(ctIn *ckks.Ciphertext, cReal, cImag interface{}, ctOut *ckks.Ciphertext) MultByiNew(ctIn *ckks.Ciphertext) (ctOut *ckks.Ciphertext) MultByi(ctIn *ckks.Ciphertext, ctOut *ckks.Ciphertext) DivByiNew(ctIn *ckks.Ciphertext) (ctOut *ckks.Ciphertext) DivByi(ctIn *ckks.Ciphertext, ctOut *ckks.Ciphertext) ConjugateNew(ctIn *ckks.Ciphertext) (ctOut *ckks.Ciphertext) Conjugate(ctIn *ckks.Ciphertext, ctOut *ckks.Ciphertext) Mul(op0, op1 ckks.Operand, ctOut *ckks.Ciphertext) MulNew(op0, op1 ckks.Operand) (ctOut *ckks.Ciphertext) MulRelin(op0, op1 ckks.Operand, ctOut *ckks.Ciphertext) MulRelinNew(op0, op1 ckks.Operand) (ctOut *ckks.Ciphertext) RotateNew(ctIn *ckks.Ciphertext, k int) (ctOut *ckks.Ciphertext) Rotate(ctIn *ckks.Ciphertext, k int, ctOut *ckks.Ciphertext) RotateHoistedNew(ctIn *ckks.Ciphertext, rotations []int) (ctOut map[int]*ckks.Ciphertext) RotateHoisted(ctIn *ckks.Ciphertext, rotations []int, ctOut map[int]*ckks.Ciphertext) MulByPow2New(ctIn *ckks.Ciphertext, pow2 int) (ctOut *ckks.Ciphertext) MulByPow2(ctIn *ckks.Ciphertext, pow2 int, ctOut *ckks.Ciphertext) PowerOf2(ctIn *ckks.Ciphertext, logPow2 int, ctOut *ckks.Ciphertext) Power(ctIn *ckks.Ciphertext, degree int, ctOut *ckks.Ciphertext) PowerNew(ctIn *ckks.Ciphertext, degree int) (ctOut *ckks.Ciphertext) EvaluatePoly(ctIn *ckks.Ciphertext, pol *ckks.Polynomial, targetScale float64) (ctOut *ckks.Ciphertext, err error) EvaluatePolyVector(ctIn *ckks.Ciphertext, pols []*ckks.Polynomial, encoder ckks.Encoder, slotIndex map[int][]int, targetScale float64) (ctOut *ckks.Ciphertext, err error) InverseNew(ctIn *ckks.Ciphertext, steps int) (ctOut *ckks.Ciphertext) LinearTransformNew(ctIn *ckks.Ciphertext, linearTransform interface{}) (ctOut []*ckks.Ciphertext) LinearTransform(ctIn *ckks.Ciphertext, linearTransform interface{}, ctOut []*ckks.Ciphertext) MultiplyByDiagMatrix(ctIn *ckks.Ciphertext, matrix ckks.LinearTransform, c2DecompQP []rlwe.PolyQP, ctOut *ckks.Ciphertext) MultiplyByDiagMatrixBSGS(ctIn *ckks.Ciphertext, matrix ckks.LinearTransform, c2DecompQP []rlwe.PolyQP, ctOut *ckks.Ciphertext) InnerSumLog(ctIn *ckks.Ciphertext, batch, n int, ctOut *ckks.Ciphertext) InnerSum(ctIn *ckks.Ciphertext, batch, n int, ctOut *ckks.Ciphertext) ReplicateLog(ctIn *ckks.Ciphertext, batch, n int, ctOut *ckks.Ciphertext) Replicate(ctIn *ckks.Ciphertext, batch, n int, ctOut *ckks.Ciphertext) TraceNew(ctIn *ckks.Ciphertext, logSlotsStart, logSlotsEnd int) *ckks.Ciphertext Trace(ctIn *ckks.Ciphertext, logSlotsStart, logSlotsEnd int, ctOut *ckks.Ciphertext) SwitchKeysNew(ctIn *ckks.Ciphertext, switchingKey *rlwe.SwitchingKey) (ctOut *ckks.Ciphertext) SwitchKeys(ctIn *ckks.Ciphertext, switchingKey *rlwe.SwitchingKey, ctOut *ckks.Ciphertext) RelinearizeNew(ctIn *ckks.Ciphertext) (ctOut *ckks.Ciphertext) Relinearize(ctIn *ckks.Ciphertext, ctOut *ckks.Ciphertext) ScaleUpNew(ctIn *ckks.Ciphertext, scale float64) (ctOut *ckks.Ciphertext) ScaleUp(ctIn *ckks.Ciphertext, scale float64, ctOut *ckks.Ciphertext) SetScale(ctIn *ckks.Ciphertext, scale float64) Rescale(ctIn *ckks.Ciphertext, minScale float64, ctOut *ckks.Ciphertext) (err error) DropLevelNew(ctIn *ckks.Ciphertext, levels int) (ctOut *ckks.Ciphertext) DropLevel(ctIn *ckks.Ciphertext, levels int) ReduceNew(ctIn *ckks.Ciphertext) (ctOut *ckks.Ciphertext) Reduce(ctIn *ckks.Ciphertext, ctOut *ckks.Ciphertext) error CoeffsToSlotsNew(ctIn *ckks.Ciphertext, ctsMatrices EncodingMatrix) (ctReal, ctImag *ckks.Ciphertext) CoeffsToSlots(ctIn *ckks.Ciphertext, ctsMatrices EncodingMatrix, ctReal, ctImag *ckks.Ciphertext) SlotsToCoeffsNew(ctReal, ctImag *ckks.Ciphertext, stcMatrices EncodingMatrix) (ctOut *ckks.Ciphertext) SlotsToCoeffs(ctReal, ctImag *ckks.Ciphertext, stcMatrices EncodingMatrix, ctOut *ckks.Ciphertext) EvalModNew(ctIn *ckks.Ciphertext, evalModPoly EvalModPoly) (ctOut *ckks.Ciphertext) GetKeySwitcher() *rlwe.KeySwitcher PoolQMul() [3]*ring.Poly CtxPool() *ckks.Ciphertext ShallowCopy() Evaluator WithKey(rlwe.EvaluationKey) Evaluator }
Evaluator is an interface embeding the ckks.Evaluator interface with additional advanced arithmetic features.
func NewEvaluator ¶
func NewEvaluator(params ckks.Parameters, evaluationKey rlwe.EvaluationKey) Evaluator
NewEvaluator creates a new Evaluator.
type LinearTransformType ¶
type LinearTransformType int
LinearTransformType is a type used to distinguish different linear transformations.