mirror of
https://github.com/luxfi/lattice.git
synced 2026-09-24 00:25:44 +00:00
31 lines
1.5 KiB
Go
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
|
|
}
|