Intel HE Acceleration Library for FPGAs
Intel Homomorphic Encryption Acceleration Library for FPGAs, accelerating the modular arithmetic operations used in homomorphic encryption on Intel FPGAs.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Namespaces | Functions | Variables
number_theory_util.h File Reference
#include <cstdint>
#include <cmath>
#include <iostream>
#include <limits>
#include <vector>
#include "fpga_assert.h"

Go to the source code of this file.

Classes

class  intel::hexl::fpga::MultiplyFactor
 

Namespaces

 intel
 
 intel::hexl
 
 intel::hexl::fpga
 

Functions

bool intel::hexl::fpga::IsPowerOfTwo (uint64_t num)
 
uint64_t intel::hexl::fpga::MSB (uint64_t modulus)
 
uint64_t intel::hexl::fpga::Log2 (uint64_t x)
 
uint64_t intel::hexl::fpga::MaximumValue (uint64_t bits)
 
uint128_t intel::hexl::fpga::MultiplyUInt64 (uint64_t x, uint64_t y)
 
void intel::hexl::fpga::MultiplyUInt64 (uint64_t x, uint64_t y, uint64_t *prod_hi, uint64_t *prod_lo)
 
template<int BitShift>
uint64_t intel::hexl::fpga::MultiplyUInt64Hi (uint64_t x, uint64_t y)
 
uint64_t intel::hexl::fpga::DivideUInt128UInt64Lo (uint64_t x1, uint64_t x0, uint64_t y)
 
template<int BitShift>
uint64_t intel::hexl::fpga::MultiplyUIntModLazy (uint64_t x, uint64_t y_operand, uint64_t y_barrett_factor, uint64_t modulus)
 
template<int BitShift>
uint64_t intel::hexl::fpga::MultiplyUIntModLazy (uint64_t x, uint64_t y, uint64_t modulus)
 
unsigned char intel::hexl::fpga::AddUInt64 (uint64_t operand1, uint64_t operand2, uint64_t *result)
 
bool intel::hexl::fpga::IsPrime (uint64_t n)
 
std::vector< uint64_t > intel::hexl::fpga::GeneratePrimes (size_t num_primes, size_t bit_size, size_t ntt_size=1)
 
uint64_t intel::hexl::fpga::BarrettReduce64 (uint64_t input, uint64_t modulus, uint64_t q_barr)
 
template<int InputModFactor>
uint64_t intel::hexl::fpga::ReduceMod (uint64_t x, uint64_t modulus, const uint64_t *twice_modulus=nullptr, const uint64_t *four_times_modulus=nullptr)
 
uint64_t intel::hexl::fpga::BarrettReduce128 (uint64_t input_hi, uint64_t input_lo, uint64_t modulus)
 
uint64_t intel::hexl::fpga::ReverseBitsUInt (uint64_t x, uint64_t bits)
 
uint64_t intel::hexl::fpga::InverseUIntMod (uint64_t a, uint64_t modulus)
 
uint64_t intel::hexl::fpga::MultiplyUIntMod (uint64_t x, uint64_t y, uint64_t modulus)
 
uint64_t intel::hexl::fpga::MultiplyMod (uint64_t x, uint64_t y, uint64_t y_precon, uint64_t modulus)
 
uint64_t intel::hexl::fpga::AddUIntMod (uint64_t x, uint64_t y, uint64_t modulus)
 
uint64_t intel::hexl::fpga::SubUIntMod (uint64_t x, uint64_t y, uint64_t modulus)
 
uint64_t intel::hexl::fpga::PowMod (uint64_t base, uint64_t exp, uint64_t modulus)
 
bool intel::hexl::fpga::IsPrimitiveRoot (uint64_t root, uint64_t degree, uint64_t modulus)
 
uint64_t intel::hexl::fpga::GeneratePrimitiveRoot (uint64_t degree, uint64_t modulus)
 
uint64_t intel::hexl::fpga::MinimalPrimitiveRoot (uint64_t degree, uint64_t modulus)
 
void intel::hexl::fpga::ComputeRootOfUnityPowers (uint64_t m_q, uint64_t m_degree, uint64_t m_degree_bits, uint64_t m_w, uint64_t *inv_root_of_unity_powers, uint64_t *precon64_inv_root_of_unity_powers, uint64_t *root_of_unity_powers, uint64_t *precon64_root_of_unity_powers)
 

Variables

__extension__ typedef unsigned
__int128 
intel::hexl::fpga::uint128_t