51 bool is_arithmetic =
false);
111 virtual uint Get_CtCtAdd_Cost(
size_t n_bits);
112 virtual uint Get_CtCtAddNC_Cost(
size_t n_bits);
113 virtual uint Get_CtCtSubC_Cost(
size_t n_bits);
114 virtual uint Get_CtCtSubNC_Cost(
size_t n_bits);
115 virtual uint Get_CtPtAddC_Cost(
size_t n_bits);
116 virtual uint Get_PtCtSub_Cost(
size_t n_bits);
117 virtual uint Get_CtPtSubCNC_Cost(
size_t n_bits);
118 virtual uint Get_CtNeg_Cost(
size_t n_bits);
119 virtual uint Get_PtFullMul_Cost(
const FixedPoint &pt,
size_t ct_n_bits,
121 virtual uint Get_Pt2sCompFullMul_Cost(
const FixedPoint &pt,
123 virtual uint Get_PtMul_Cost(
const FixedPoint &pt);
124 virtual uint Get_Pt2sCompMul_Cost(
const FixedPoint &pt);
125 virtual uint Get_BoothsMul_Cost(
const FixedPoint &pt,
size_t ct_n_bits);
Defines the abstract base class for FHE-based Arithmetic Logic Units.
Standard ALU implementation using fundamental FHE logic gates.
Definition ALUStandard.h:26
virtual FixedPoint PMulFast(const FixedPoint &a, const FixedPoint &pb)
Optimized standard multiplication by a plaintext constant.
virtual BinaryDigit Gate_DigitSum(const BinaryDigit &e1, const BinaryDigit &e0, const BinaryDigit &s0)
Performs bitwise digit summation logic.
virtual FixedPoint Mul(const FixedPoint &a, const FixedPoint &b)
Standard multiplication (truncated to input width).
virtual FixedPoint PFullMul(const FixedPoint &a, const FixedPoint &pb)
Full multiplication by a plaintext constant.
virtual BinaryDigit CmpGT_U(const FixedPoint &a, const FixedPoint &b)
Unsigned Greater-Than.
virtual FixedPoint AddNC(const FixedPoint &a, const FixedPoint &b)
Addition without updating internal carry.
virtual BinaryDigit CmpNotEq(const FixedPoint &a, const FixedPoint &b)
Not-Equal.
virtual FixedPoint Not(const FixedPoint &a)
Bitwise NOT.
virtual FixedPoint CPSubC(const FixedPoint &a, const FixedPoint &pb)
Ciphertext-Plaintext subtraction with carry.
virtual FixedPoint PFullMulFast(const FixedPoint &a, const FixedPoint &pb)
Optimized full multiplication by a plaintext constant.
virtual void HalfAdder(const BinaryDigit &a, const BinaryDigit &b, BinaryDigit &sum, BinaryDigit &carry_out)
1-bit half adder.
virtual FixedPoint PAddNC(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition without updating internal carry.
virtual BinaryDigit CmpEq(const FixedPoint &a, const FixedPoint &b)
Equal.
virtual void Swap_if(const BinaryDigit &cond, BinaryDigit &a, BinaryDigit &b)
Conditional swap of two bits if 'cond' is true.
virtual FixedPoint PAdd(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition: result = a + pb.
virtual BinaryDigit CmpLT_U(const FixedPoint &a, const FixedPoint &b)
Unsigned Less-Than.
virtual FixedPoint SubCNC(const FixedPoint &a, const FixedPoint &b)
Subtraction with Carry, but without updating internal carry.
virtual BinaryDigit Gate_XOR3(const BinaryDigit &a, const BinaryDigit &b, const BinaryDigit &c)
3-input XOR gate.
virtual FixedPoint PSub(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction: result = pa - b.
virtual FixedPoint Add(const FixedPoint &a, const FixedPoint &b)
Addition: result = a + b.
virtual BinaryDigit CmpGTEq_U(const FixedPoint &a, const FixedPoint &b)
Unsigned Greater-Than or Equal.
virtual FixedPoint ToggleMSB(const FixedPoint &a)
Toggles the Most Significant Bit (useful for sign manipulation).
virtual void DivU(const FixedPoint &a, const FixedPoint &b, FixedPoint &q, FixedPoint &r)
Unsigned division, calculating quotient (q) and remainder (r).
virtual FixedPoint SubNC(const FixedPoint &a, const FixedPoint &b)
Subtraction without updating internal carry.
virtual FixedPoint Neg(const FixedPoint &a)
Arithmetic negation: result = -a.
virtual BinaryDigit Gate_MulAdd(const BinaryDigit &m, const BinaryDigit &a, const BinaryDigit &b, BinaryDigit *carry_out=nullptr)
Multiplies two digits and adds a third, optionally returning carry out.
virtual BinaryDigit CmpGT(const FixedPoint &a, const FixedPoint &b)
Signed Greater-Than.
virtual void Swap_if(const BinaryDigit &cond, FixedPoint &a, FixedPoint &b)
Conditional swap of two FixedPoint values if 'cond' is true.
virtual FixedPoint PSubC(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction with carry.
virtual FixedPoint Sub(const FixedPoint &a, const FixedPoint &b)
Subtraction: result = a - b.
virtual BinaryDigit CmpLTEq_U(const FixedPoint &a, const FixedPoint &b)
Unsigned Less-Than or Equal.
virtual FixedPoint PAddCNC(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition with carry, but no update to internal state.
virtual FixedPoint PSubCNC(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction with carry, but no update to internal state.
virtual FixedPoint AddC(const FixedPoint &a, const FixedPoint &b)
Addition with Carry: result = a + b + carry.
virtual void HalfSubtractor(const BinaryDigit &a, const BinaryDigit &b, BinaryDigit &sum, BinaryDigit &carry_out)
1-bit half subtractor.
virtual FixedPoint FullMul(const FixedPoint &a, const FixedPoint &b)
Performs full multiplication resulting in potentially larger bit-width.
virtual FixedPoint PBoothsMul(const FixedPoint &a, const FixedPoint &pb)
Multiplication using Booth's algorithm with a plaintext constant.
virtual FixedPoint CPSubNC(const FixedPoint &a, const FixedPoint &pb)
Ciphertext-Plaintext subtraction without updating internal carry.
virtual FixedPoint ShiftRight(const FixedPoint &a, size_t shift, bool is_arithmetic=false)
Shift right (supports both logical and arithmetic/signed shifts).
virtual BinaryDigit CmpLTEq(const FixedPoint &a, const FixedPoint &b)
Signed Less-Than or Equal.
virtual BinaryDigit CmpLT(const FixedPoint &a, const FixedPoint &b)
Signed Less-Than.
virtual void FullAdder(const BinaryDigit &a, const BinaryDigit &b, const BinaryDigit &c, BinaryDigit &sum, BinaryDigit &carry_out)
1-bit full adder with explicit carry-in.
virtual FixedPoint Mux(const BinaryDigit &s, const FixedPoint &a, const FixedPoint &b)
Multiplexer for FixedPoint values: returns 'a' if 's' is true, else 'b'.
virtual BinaryDigit CmpGTEq(const FixedPoint &a, const FixedPoint &b)
Signed Greater-Than or Equal.
virtual FixedPoint PMul(const FixedPoint &a, const FixedPoint &pb)
Standard multiplication by a plaintext constant.
virtual FixedPoint CPSub(const FixedPoint &a, const FixedPoint &pb)
Ciphertext-Plaintext subtraction: result = a - pb.
virtual FixedPoint CPSubCNC(const FixedPoint &a, const FixedPoint &pb)
Ciphertext-Plaintext subtraction with carry, no update.
virtual BinaryDigit Gate_MAJ(const BinaryDigit &a, const BinaryDigit &b, const BinaryDigit &c)
Majority gate: returns true if at least two inputs are true.
virtual FixedPoint PAddC(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition with carry.
virtual FixedPoint AddCNC(const FixedPoint &a, const FixedPoint &b)
Addition with Carry, but without updating internal carry.
virtual FixedPoint PSubNC(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction without updating internal carry.
virtual FixedPoint ShiftLeft(const FixedPoint &a, size_t shift)
Logical shift left.
virtual FixedPoint SubC(const FixedPoint &a, const FixedPoint &b)
Subtraction with Borrow (!Carry): result = a - b - !carry.
Abstract base class for FHE-based Arithmetic Logic Units.
Definition BaseALU.h:30
The core manager class for the ComputeFHE library.
Definition ComputeFHE.h:68
A proxy-object representing a single bit that can behave as either a ciphertext or a plaintext.
Definition FixedPoint.h:35
A bit-vector representation of an encrypted or plaintext word.
Definition FixedPoint.h:118