ComputeFHE 1.0
General-Purpose Privacy-Preserving Computation Library for TFHE
Loading...
Searching...
No Matches
ALUOptimized.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 Faris Serdar Taşel <fst@cankaya.edu.tr>
3 * SPDX-FileCopyrightText: 2026 Efe Çiftci <efeciftci@cankaya.edu.tr>
4 *
5 * SPDX-License-Identifier: MIT
6 */
7
14#pragma once
16
17namespace computefhe {
18
28 class ALUOptimized : virtual public ALUStandard {
29 public:
31
32 // FHE-Level operations
33 virtual BinaryDigit FHE_MAJ(const BinaryDigit &a, const BinaryDigit &b,
34 const BinaryDigit &c);
35 virtual BinaryDigit FHE_XOR3(const BinaryDigit &a, const BinaryDigit &b,
36 const BinaryDigit &c);
37 virtual BinaryDigit FHE_MulAdd(const BinaryDigit &m,
38 const BinaryDigit &a,
39 const BinaryDigit &b,
40 BinaryDigit *carry_out = nullptr);
41 virtual BinaryDigit FHE_MUX(const BinaryDigit &s, const BinaryDigit &a,
42 const BinaryDigit &b);
43 virtual BinaryDigit FHE_DigitSum(const BinaryDigit &e1,
44 const BinaryDigit &e0,
45 const BinaryDigit &s0);
46
47 // Logic Gates
48 virtual BinaryDigit Gate_MAJ(const BinaryDigit &a, const BinaryDigit &b,
49 const BinaryDigit &c);
51 const BinaryDigit &b,
52 const BinaryDigit &c);
54 const BinaryDigit &a,
55 const BinaryDigit &b,
56 BinaryDigit *carry_out = nullptr);
58 const BinaryDigit &e0,
59 const BinaryDigit &s0);
60
61 // Interface
62 virtual void FullAdder(const BinaryDigit &a, const BinaryDigit &b,
63 const BinaryDigit &c, BinaryDigit &sum,
64 BinaryDigit &carry_out);
65 virtual BinaryDigit CmpLTEq_U(const FixedPoint &a, const FixedPoint &b);
66 virtual BinaryDigit CmpGT_U(const FixedPoint &a, const FixedPoint &b);
67 virtual FixedPoint FullMul(const FixedPoint &a, const FixedPoint &b);
68 virtual FixedPoint Mul(const FixedPoint &a, const FixedPoint &b);
69 virtual void Swap_if(const BinaryDigit &cond, BinaryDigit &a,
70 BinaryDigit &b);
71
72 virtual FixedPoint PAdd(const FixedPoint &a, const FixedPoint &pb);
73 virtual FixedPoint PAddC(const FixedPoint &a, const FixedPoint &pb);
74 virtual FixedPoint PAddNC(const FixedPoint &a, const FixedPoint &pb);
75 virtual FixedPoint PAddCNC(const FixedPoint &a, const FixedPoint &pb);
76 virtual FixedPoint PSub(const FixedPoint &pa, const FixedPoint &b);
77 virtual FixedPoint PSubC(const FixedPoint &pa, const FixedPoint &b);
78 virtual FixedPoint PSubNC(const FixedPoint &pa, const FixedPoint &b);
79 virtual FixedPoint PSubCNC(const FixedPoint &pa, const FixedPoint &b);
80 virtual FixedPoint Neg(const FixedPoint &a);
81
82 virtual uint Get_CtCtAdd_Cost(size_t n_bits);
83 virtual uint Get_CtCtAddNC_Cost(size_t n_bits);
84 virtual uint Get_CtCtSubC_Cost(size_t n_bits);
85 virtual uint Get_CtPtAddC_Cost(size_t n_bits);
86 virtual uint Get_PtCtSub_Cost(size_t n_bits);
87 virtual uint Get_CtPtSubCNC_Cost(size_t n_bits);
88 virtual uint Get_CtNeg_Cost(size_t n_bits);
89 };
90} // namespace computefhe
Defines the standard ALU implementation using fundamental FHE logic gates.
Optimized ALU implementation using specialized multi-input FHE gates.
Definition ALUOptimized.h:28
virtual FixedPoint PAddCNC(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition with carry, but no update to internal state.
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 BinaryDigit CmpLTEq_U(const FixedPoint &a, const FixedPoint &b)
Unsigned Less-Than or Equal.
virtual FixedPoint Mul(const FixedPoint &a, const FixedPoint &b)
Standard multiplication (truncated to input width).
virtual void Swap_if(const BinaryDigit &cond, BinaryDigit &a, BinaryDigit &b)
Conditional swap of two bits if 'cond' is true.
virtual BinaryDigit Gate_XOR3(const BinaryDigit &a, const BinaryDigit &b, const BinaryDigit &c)
3-input XOR gate.
virtual FixedPoint PSubC(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction with carry.
virtual FixedPoint Neg(const FixedPoint &a)
Arithmetic negation: result = -a.
virtual BinaryDigit CmpGT_U(const FixedPoint &a, const FixedPoint &b)
Unsigned Greater-Than.
virtual BinaryDigit Gate_DigitSum(const BinaryDigit &e1, const BinaryDigit &e0, const BinaryDigit &s0)
Performs bitwise digit summation logic.
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 FixedPoint PAddC(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition with carry.
virtual FixedPoint PSubNC(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction without updating internal carry.
virtual FixedPoint PSubCNC(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction with carry, but no update to internal state.
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 FullMul(const FixedPoint &a, const FixedPoint &b)
Performs full multiplication resulting in potentially larger bit-width.
virtual FixedPoint PSub(const FixedPoint &pa, const FixedPoint &b)
Plaintext subtraction: result = pa - b.
virtual FixedPoint PAdd(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition: result = a + pb.
virtual FixedPoint PAddNC(const FixedPoint &a, const FixedPoint &pb)
Plaintext addition without updating internal carry.
Standard ALU implementation using fundamental FHE logic gates.
Definition ALUStandard.h:26
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