Intel HEXL for FPGA
Intel Homomorphic Encryption FPGA Acceleration Library, accelerating the modular arithmetic operations used in homomorphic encryption.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Classes | Enumerations | Functions | Variables
intel::hexl::fpga Namespace Reference

Classes

struct  moduli_info_t
 Struct moduli_info_t. More...
 
struct  Object
 Struct Object. More...
 
struct  Object_NTT
 Struct Object NTT Stores the Number Theoretic Transform parameters. More...
 
struct  Object_INTT
 Struct Object INTT Stores the Inverse Number Theoretic Transform parameters. More...
 
struct  Object_DyadicMultiply
 struct Object_DyadicMultiply Stores the parameters for the multiplication More...
 
class  Buffer
 Struct Buffer Structure containing information for the polynomial operations. More...
 
struct  FPGAObject
 Parent Struct FPGAObject stores the blob of objects to be transfered to the FPGA. More...
 
struct  FPGAObject_NTT
 Struct FPGAObject_NTT stores the NTT blob of objects to be transfered to the FPGA. More...
 
struct  FPGAObject_INTT
 Struct FPGAObject_INTT stores the INTT blob of objects to be transfered to the FPGA. More...
 
struct  FPGAObject_DyadicMultiply
 Struct FPGAObject_DyadicMultiply Stores the multiplication blob of objects to be transfered to the FPGA. More...
 
class  Device
 Class Device. More...
 
class  DevicePool
 Class DevicePool. More...
 
class  StackTrace
 Class StackTrace Allows the investigation of the traces dump Dumps the traces. More...
 

Enumerations

enum  DEV_TYPE { NONE = 0, EMU, FPGA }
 enum DEV_TYPE Lists the available device mode: CPU, emulation mode, FPGA More...
 

Functions

void set_worksize_DyadicMultiply (uint64_t ws)
 function set_worksize_DyadicMultiply More...
 
void DyadicMultiply (uint64_t *results, const uint64_t *operand1, const uint64_t *operand2, uint64_t n, const uint64_t *moduli, uint64_t n_moduli)
 function DyadicMultiply Implements the multiplication of two ciphertexts More...
 
bool DyadicMultiplyCompleted ()
 DyadicMultiplyCompleted Executed after the multiplication to wrap up the operation More...
 
void set_worksize_DyadicMultiply_int (uint64_t n)
 set_worksize_DyadicMultiply_int Sets the worksize for the multiplication More...
 
void DyadicMultiply_int (uint64_t *results, const uint64_t *operand1, const uint64_t *operand2, uint64_t n, const uint64_t *moduli, uint64_t n_moduli)
 DyadicMultiply_int Internal implementation of the DyadicMultiply function call More...
 
bool DyadicMultiplyCompleted_int ()
 DyadicMultiplyCompleted_int Internal implementation of the DyadicMultiplyCompleted function. Called after completion of the multiplication operation More...
 
void attach_fpga_pooling ()
 attach_fpga_pooling Attach a device to this thread More...
 
void detach_fpga_pooling ()
 detach_fpga_pooling Detach a device from this thread More...
 
void acquire_FPGA_resources ()
 acquire_FPGA_resources Called at the beginning of the workload to acquire the usage of an FPGA More...
 
void release_FPGA_resources ()
 release_FPGA_resources Called at the end of the workload to release the FPGA More...
 
void set_worksize_INTT (uint64_t ws)
 set_worksize_INTT Sets the work size of the INTT operation More...
 
void INTT (uint64_t *coeff_poly, const uint64_t *inv_root_of_unity_powers, const uint64_t *precon_inv_root_of_unity_powers, uint64_t coeff_modulus, uint64_t inv_n, uint64_t inv_n_w, uint64_t n)
 INTT Calls the Inverse Number Theoretic Transform More...
 
bool INTTCompleted ()
 INTTCompleted Called after the completion of the INTT operation More...
 
void set_worksize_INTT_int (uint64_t n)
 set_worksize_INTT_int Internal implementation. Sets the work size of the INTT operation More...
 
void INTT_int (uint64_t *coeff_poly, const uint64_t *inv_root_of_unity_powers, const uint64_t *precon_inv_root_of_unity_powers, uint64_t coeff_modulus, uint64_t inv_n, uint64_t inv_n_w, uint64_t n)
 INTT Calls the Inverse Number Theoretic Transform More...
 
bool INTTCompleted_int ()
 INTTCompleted_int Called after the completion of the INTT operation. Internal implementation. More...
 
void set_worksize_NTT (uint64_t ws)
 set_worksize_NTT Sets the work size for NTT More...
 
void NTT (uint64_t *coeff_poly, const uint64_t *root_of_unity_powers, const uint64_t *precon_root_of_unity_powers, uint64_t coeff_modulus, uint64_t n)
 NTT Calls the Number Theorectic Transform More...
 
bool NTTCompleted ()
 NTTCompleted Called after completion of the Number Theoretic Transform More...
 
void set_worksize_NTT_int (uint64_t n)
 set_worksize_NTT_int Sets the work size for NTT. Internal implementation. More...
 
void NTT_int (uint64_t *coeff_poly, const uint64_t *root_of_unity_powers, const uint64_t *precon_root_of_unity_powers, uint64_t coeff_modulus, uint64_t n)
 NTT_int Calls the Number Theorectic Transform. Internal implementation. More...
 
bool NTTCompleted_int ()
 NTTCompleted_int Called after completion of the Number Theoretic Transform. Internal implementation. More...
 

Variables

__extension__ typedef unsigned
__int128 
fpga_uint128_t
 

Enumeration Type Documentation

enum DEV_TYPE Lists the available device mode: CPU, emulation mode, FPGA

Enumerator
NONE 
EMU 
FPGA 

Function Documentation

void intel::hexl::fpga::acquire_FPGA_resources ( )

acquire_FPGA_resources Called at the beginning of the workload to acquire the usage of an FPGA

void intel::hexl::fpga::attach_fpga_pooling ( )

attach_fpga_pooling Attach a device to this thread

void intel::hexl::fpga::detach_fpga_pooling ( )

detach_fpga_pooling Detach a device from this thread

void intel::hexl::fpga::DyadicMultiply ( uint64_t *  results,
const uint64_t *  operand1,
const uint64_t *  operand2,
uint64_t  n,
const uint64_t *  moduli,
uint64_t  n_moduli 
)

function DyadicMultiply Implements the multiplication of two ciphertexts

Parameters
[out]resultsstores the result of the multiplication
[in]operand1vector of polynomial coefficients
[in]operand2vector of polynomial coefficients
[in]npolynomial size
[in]modulivector of modulus
[in]n_modulinumber of modulus in the vector of modulus
void intel::hexl::fpga::DyadicMultiply_int ( uint64_t *  results,
const uint64_t *  operand1,
const uint64_t *  operand2,
uint64_t  n,
const uint64_t *  moduli,
uint64_t  n_moduli 
)

DyadicMultiply_int Internal implementation of the DyadicMultiply function call

Parameters
[out]resultsstores the output of the multiplication
[in]operand1vector of polynomial coefficients
[in]operand2vector of polynomial coefficients
[in]npolynomial size
[in]modulivector of coefficient modulus
[in]n_modulinumber of modulus in the vector of modulus
bool intel::hexl::fpga::DyadicMultiplyCompleted ( )

DyadicMultiplyCompleted Executed after the multiplication to wrap up the operation

bool intel::hexl::fpga::DyadicMultiplyCompleted_int ( )

DyadicMultiplyCompleted_int Internal implementation of the DyadicMultiplyCompleted function. Called after completion of the multiplication operation

void intel::hexl::fpga::INTT ( uint64_t *  coeff_poly,
const uint64_t *  inv_root_of_unity_powers,
const uint64_t *  precon_inv_root_of_unity_powers,
uint64_t  coeff_modulus,
uint64_t  inv_n,
uint64_t  inv_n_w,
uint64_t  n 
)

INTT Calls the Inverse Number Theoretic Transform

Parameters
[out]coef_polyvector of polynomial coefficients
[in]coef_polyvector of polynomial coefficients
[in]inv_root_of_unity_powersvector of twiddle factors
[in]precon_inv_root_of_unity_powersvector of twiddle factors for the constant
[in]coeff_moduluscoefficient modulus
[in]inv_nnormalization factor
[in]inv_n_wnormalization factor for the constant
[in]npolynomial size
void intel::hexl::fpga::INTT_int ( uint64_t *  coeff_poly,
const uint64_t *  inv_root_of_unity_powers,
const uint64_t *  precon_inv_root_of_unity_powers,
uint64_t  coeff_modulus,
uint64_t  inv_n,
uint64_t  inv_n_w,
uint64_t  n 
)

INTT Calls the Inverse Number Theoretic Transform

Parameters
[out]coef_polyvector of polynomial coefficients
[in]coef_polyvector of polynomial coefficients
[in]inv_root_of_unity_powersvector of twiddle factors
[in]precon_inv_root_of_unity_powersvector of twiddle factors for the constant
[in]coeff_moduluscoefficient modulus
[in]inv_nnormalization factor
[in]inv_n_wnormalization factor for the constant
[in]npolynomial size
bool intel::hexl::fpga::INTTCompleted ( )

INTTCompleted Called after the completion of the INTT operation

bool intel::hexl::fpga::INTTCompleted_int ( )

INTTCompleted_int Called after the completion of the INTT operation. Internal implementation.

void intel::hexl::fpga::NTT ( uint64_t *  coeff_poly,
const uint64_t *  root_of_unity_powers,
const uint64_t *  precon_root_of_unity_powers,
uint64_t  coeff_modulus,
uint64_t  n 
)

NTT Calls the Number Theorectic Transform

Parameters
[in]coeff_polyvector of polynomial coefficients
[out]coeff_polyvector of polynomial coefficients
[in]root_of_unity_powersvector of twiddle factors
[in]precon_root_of_unity_powervector of twiddle factors for the constant
[in]coeff_modulusstores the coefficient modulus
[in]nstores the polynomial size
void intel::hexl::fpga::NTT_int ( uint64_t *  coeff_poly,
const uint64_t *  root_of_unity_powers,
const uint64_t *  precon_root_of_unity_powers,
uint64_t  coeff_modulus,
uint64_t  n 
)

NTT_int Calls the Number Theorectic Transform. Internal implementation.

Parameters
[in]coeff_polyvector of polynomial coefficients
[out]coeff_polyvector of polynomial coefficients
[in]root_of_unity_powersvector of twiddle factors
[in]precon_root_of_unity_powervector of twiddle factors for the constant
[in]coeff_modulusstores the coefficient modulus
[in]nstores the polynomial size
bool intel::hexl::fpga::NTTCompleted ( )

NTTCompleted Called after completion of the Number Theoretic Transform

bool intel::hexl::fpga::NTTCompleted_int ( )

NTTCompleted_int Called after completion of the Number Theoretic Transform. Internal implementation.

void intel::hexl::fpga::release_FPGA_resources ( )

release_FPGA_resources Called at the end of the workload to release the FPGA

void intel::hexl::fpga::set_worksize_DyadicMultiply ( uint64_t  ws)

function set_worksize_DyadicMultiply

Parameters
[in]wswork size
void intel::hexl::fpga::set_worksize_DyadicMultiply_int ( uint64_t  n)

set_worksize_DyadicMultiply_int Sets the worksize for the multiplication

Parameters
[in]nwork size
void intel::hexl::fpga::set_worksize_INTT ( uint64_t  ws)

set_worksize_INTT Sets the work size of the INTT operation

void intel::hexl::fpga::set_worksize_INTT_int ( uint64_t  n)

set_worksize_INTT_int Internal implementation. Sets the work size of the INTT operation

void intel::hexl::fpga::set_worksize_NTT ( uint64_t  ws)

set_worksize_NTT Sets the work size for NTT

Parameters
[in]wsstores the worksize of the NTT
void intel::hexl::fpga::set_worksize_NTT_int ( uint64_t  n)

set_worksize_NTT_int Sets the work size for NTT. Internal implementation.

Parameters
[in]wsstores the worksize of the NTT

Variable Documentation

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