Files
2023-12-15 21:45:54 +01:00

31 lines
1.5 KiB
Go

// Package he implements scheme agnostic functionalities for RLWE-based Homomorphic Encryption schemes implemented in Lattice.
package he
import (
"github.com/luxdefi/lattice/v5/core/rlwe"
"github.com/luxdefi/lattice/v5/ring"
"github.com/luxdefi/lattice/v5/ring/ringqp"
)
// Encoder defines a set of common and scheme agnostic method provided by an Encoder struct.
type Encoder[T any, U *ring.Poly | ringqp.Poly | *rlwe.Plaintext] interface {
Encode(values []T, metaData *rlwe.MetaData, output U) (err error)
}
// Evaluator defines a set of common and scheme agnostic method provided by an Evaluator struct.
type Evaluator interface {
rlwe.ParameterProvider
Add(op0 *rlwe.Ciphertext, op1 rlwe.Operand, opOut *rlwe.Ciphertext) (err error)
AddNew(op0 *rlwe.Ciphertext, op1 rlwe.Operand) (opOut *rlwe.Ciphertext, err error)
Sub(op0 *rlwe.Ciphertext, op1 rlwe.Operand, opOut *rlwe.Ciphertext) (err error)
SubNew(op0 *rlwe.Ciphertext, op1 rlwe.Operand) (opOut *rlwe.Ciphertext, err error)
Mul(op0 *rlwe.Ciphertext, op1 rlwe.Operand, opOut *rlwe.Ciphertext) (err error)
MulNew(op0 *rlwe.Ciphertext, op1 rlwe.Operand) (opOut *rlwe.Ciphertext, err error)
MulRelin(op0 *rlwe.Ciphertext, op1 rlwe.Operand, opOut *rlwe.Ciphertext) (err error)
MulRelinNew(op0 *rlwe.Ciphertext, op1 rlwe.Operand) (opOut *rlwe.Ciphertext, err error)
MulThenAdd(op0 *rlwe.Ciphertext, op1 rlwe.Operand, opOut *rlwe.Ciphertext) (err error)
Relinearize(op0, op1 *rlwe.Ciphertext) (err error)
Rescale(op0, op1 *rlwe.Ciphertext) (err error)
GetEvaluatorBuffer() *rlwe.EvaluatorBuffers // TODO extract
}