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
Namespaces | Functions
intel::hexl Namespace Reference

Namespaces

 fpga
 

Functions

void acquire_FPGA_resources ()
 Function acquire_FPGA_resources Called without any parameter, reserves the FPGA hardware resources. More...
 
void release_FPGA_resources ()
 Function release_FPGA_resources Called without any parameter, releases the FPGA hardware resources once we are done. More...
 
void set_worksize_DyadicMultiply (uint64_t ws)
 Function set_worksize_DyadicMultiply Reserves software resources for the multiplication. 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 Executes ciphertext ciphertext multiplication. More...
 
bool DyadicMultiplyCompleted ()
 Function DyadicMultiplyCompleted Executed after ciphertext ciphertext multiplication to wrap up the task. More...
 
void set_worksize_KeySwitch (uint64_t ws)
 Function set_worksize_KeySwitch Reserves software resources for the KeySwitch. More...
 
void KeySwitch (uint64_t *result, const uint64_t *t_target_iter_ptr, uint64_t n, uint64_t decomp_modulus_size, uint64_t key_modulus_size, uint64_t rns_modulus_size, uint64_t key_component_count, const uint64_t *moduli, const uint64_t **k_switch_keys, const uint64_t *modswitch_factors, const uint64_t *twiddle_factors=nullptr)
 Function KeySwitch Executes KeySwitch operation. More...
 
bool KeySwitchCompleted ()
 Function KeySwitchCompleted Executed after KeySwitch to sync up the outstanding KeySwitch tasks. More...
 
void _set_worksize_NTT (uint64_t ws)
 Function _set_worksize_NTT [[deprecated]] Reserves software resources for the Number Theoretic Transform. More...
 
void _NTT (uint64_t *operand, const uint64_t *root_of_unity_powers, const uint64_t *precon_root_of_unity_powers, uint64_t coeff_modulus, uint64_t n)
 Function _NTT [[deprecated]] Executes in place the Number Theoretic Transform. More...
 
bool _NTTCompleted ()
 Function _NTTCompleted [[deprecated]] Executed after the NTT to wrap up the computation No parameters. More...
 
void _set_worksize_INTT (uint64_t ws)
 Function _set_worksize_INTT [[deprecated]] Reserves software resources for the inverse Number Theoretic Transform. More...
 
void _INTT (uint64_t *operand, 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)
 Function _INTT [[deprecated]] Executes in place the inverse Number Theoretic Transform. More...
 
bool _INTTCompleted ()
 Function _INTTCompleted [[deprecated]] Executed after the INTT to wrap up the computation No parameters. More...
 

Function Documentation

void intel::hexl::_INTT ( uint64_t *  operand,
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 
)

Function _INTT [[deprecated]] Executes in place the inverse Number Theoretic Transform.

Parameters
[in]operandinput ciphertext. This is also the output result since the transform is in place.
[out]operandoutput ciphertext. This is also the input result since the transform is in place.
[in]inv_root_of_unity_powersvector of twiddle factors
[in]precon_inv_root_of_unity_powersvector of precomputed inverse twiddle factors
[in]coeff_modulusstores the modulus
[in]inv_nstores the normalization factor for the inverse transform. Inverse of the polynomial size ( 1/n)
[in]inv_n_wstores the normalization factor for the constant.
[in]nstores the size of the Number Theoretic Transform
bool intel::hexl::_INTTCompleted ( )

Function _INTTCompleted [[deprecated]] Executed after the INTT to wrap up the computation No parameters.

void intel::hexl::_NTT ( uint64_t *  operand,
const uint64_t *  root_of_unity_powers,
const uint64_t *  precon_root_of_unity_powers,
uint64_t  coeff_modulus,
uint64_t  n 
)

Function _NTT [[deprecated]] Executes in place the Number Theoretic Transform.

Parameters
[in]operandinput ciphertext. This is also the output result since the transform is in place.
[out]operandoutput ciphertext. This is also the input result since the transform is in place.
[in]root_of_unity_powersvector of twiddle factors
[in]precon_root_of_unity_powersvector of precomputed inverse twiddle factors
[in]coeff_modulusstores the modulus
[in]nstores the size of the Number Theoretic Transform
bool intel::hexl::_NTTCompleted ( )

Function _NTTCompleted [[deprecated]] Executed after the NTT to wrap up the computation No parameters.

void intel::hexl::_set_worksize_INTT ( uint64_t  ws)

Function _set_worksize_INTT [[deprecated]] Reserves software resources for the inverse Number Theoretic Transform.

Parameters
wsinteger storing the worksize
void intel::hexl::_set_worksize_NTT ( uint64_t  ws)

Function _set_worksize_NTT [[deprecated]] Reserves software resources for the Number Theoretic Transform.

Parameters
wsinteger storing the worksize
void intel::hexl::acquire_FPGA_resources ( )

Function acquire_FPGA_resources Called without any parameter, reserves the FPGA hardware resources.

void intel::hexl::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 Executes ciphertext ciphertext multiplication.

Parameters
[out]resultsstores the multiplication results
[in]operand1stores the input ciphertext 1
[in]operand2stores the input ciphertext 2
[in]nstores polynomial size
[in]modulistores modulus size
[in]n_modulistores the number of moduli
bool intel::hexl::DyadicMultiplyCompleted ( )

Function DyadicMultiplyCompleted Executed after ciphertext ciphertext multiplication to wrap up the task.

void intel::hexl::KeySwitch ( uint64_t *  result,
const uint64_t *  t_target_iter_ptr,
uint64_t  n,
uint64_t  decomp_modulus_size,
uint64_t  key_modulus_size,
uint64_t  rns_modulus_size,
uint64_t  key_component_count,
const uint64_t *  moduli,
const uint64_t **  k_switch_keys,
const uint64_t *  modswitch_factors,
const uint64_t *  twiddle_factors = nullptr 
)

Function KeySwitch Executes KeySwitch operation.

Parameters
[out]resultsstores the keyswitch results
[in]t_target_iter_ptrstores the input ciphertext data
[in]nstores polynomial size
[in]decomp_modulus_sizestores modulus size
[in]key_modulus_sizestores key modulus size
[in]rns_modulus_sizestores the rns modulus size
[in]key_component_sizestores the key component size
[in]modulistores the moduli
[in]k_switch_keysstores the keys for keyswitch operation
[in]modswitch_factorsstores the factors for modular switch
[in]twiddle_factorsstores the twiddle factors
bool intel::hexl::KeySwitchCompleted ( )

Function KeySwitchCompleted Executed after KeySwitch to sync up the outstanding KeySwitch tasks.

void intel::hexl::release_FPGA_resources ( )

Function release_FPGA_resources Called without any parameter, releases the FPGA hardware resources once we are done.

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

Function set_worksize_DyadicMultiply Reserves software resources for the multiplication.

Parameters
wsinteger storing the worksize
void intel::hexl::set_worksize_KeySwitch ( uint64_t  ws)

Function set_worksize_KeySwitch Reserves software resources for the KeySwitch.

Parameters
wsinteger storing the worksize