|
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.
|
Classes | |
| struct | moduli_info_t |
| Struct moduli_info_t. More... | |
| struct | KeySwitch_modulus_t |
| Struct KeySwitch_moduli_t. More... | |
| struct | KeySwitch_invn_t |
| Struct KeySwitch_invn_t. More... | |
| struct | __attribute__ |
| Struct DyadmultKeys1_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... | |
| struct | Object_KeySwitch |
| struct Object_KeySwitch Stores the parameters for the keyswitch 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... | |
| struct | FPGAObject_KeySwitch |
| Struct FPGAObject_KeySwitch Stores the keyswitch blob of objects to be transfered to the FPGA. More... | |
| struct | KeySwitchMemKeys |
| class | Device |
| Class Device. More... | |
| class | DevicePool |
| Class DevicePool. More... | |
| class | MultiplyFactor |
| class | StackTrace |
| Class StackTrace Allows the investigation of the traces dump Dumps the traces. More... | |
Enumerations | |
| enum | KeySwitch_Kernels { KEYSWITCH_LOAD, KEYSWITCH_STORE, KEYSWITCH_NUM_KERNELS } |
| enum | kernel_t { NONE, kernel_t::DYADIC_MULTIPLY, kernel_t::NTT, kernel_t::INTT, kernel_t::KEYSWITCH, kernel_t::DYADIC_MULTIPLY_KEYSWITCH } |
| enum | DEV_TYPE { NONE = 0, NONE, EMU, FPGA } |
| enum DEV_TYPE Lists the available device mode: 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_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_KeySwitch_int (uint64_t ws) |
| Function set_worksize_KeySwitch_int Reserves software resources for the KeySwitch. More... | |
| void | KeySwitch_int (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_int Executes KeySwitch operation. More... | |
| bool | KeySwitchCompleted_int () |
| Function KeySwitchCompleted_int Executed after KeySwitch to sync up the outstanding KeySwitch tasks. 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... | |
| bool | IsPowerOfTwo (uint64_t num) |
| uint64_t | MSB (uint64_t modulus) |
| uint64_t | Log2 (uint64_t x) |
| uint64_t | MaximumValue (uint64_t bits) |
| uint128_t | MultiplyUInt64 (uint64_t x, uint64_t y) |
| void | MultiplyUInt64 (uint64_t x, uint64_t y, uint64_t *prod_hi, uint64_t *prod_lo) |
| template<int BitShift> | |
| uint64_t | MultiplyUInt64Hi (uint64_t x, uint64_t y) |
| uint64_t | DivideUInt128UInt64Lo (uint64_t x1, uint64_t x0, uint64_t y) |
| template<int BitShift> | |
| uint64_t | MultiplyUIntModLazy (uint64_t x, uint64_t y_operand, uint64_t y_barrett_factor, uint64_t modulus) |
| template<int BitShift> | |
| uint64_t | MultiplyUIntModLazy (uint64_t x, uint64_t y, uint64_t modulus) |
| unsigned char | AddUInt64 (uint64_t operand1, uint64_t operand2, uint64_t *result) |
| bool | IsPrime (uint64_t n) |
| std::vector< uint64_t > | GeneratePrimes (size_t num_primes, size_t bit_size, size_t ntt_size=1) |
| uint64_t | BarrettReduce64 (uint64_t input, uint64_t modulus, uint64_t q_barr) |
| template<int InputModFactor> | |
| uint64_t | ReduceMod (uint64_t x, uint64_t modulus, const uint64_t *twice_modulus=nullptr, const uint64_t *four_times_modulus=nullptr) |
| uint64_t | BarrettReduce128 (uint64_t input_hi, uint64_t input_lo, uint64_t modulus) |
| uint64_t | ReverseBitsUInt (uint64_t x, uint64_t bits) |
| uint64_t | InverseUIntMod (uint64_t a, uint64_t modulus) |
| uint64_t | MultiplyUIntMod (uint64_t x, uint64_t y, uint64_t modulus) |
| uint64_t | MultiplyMod (uint64_t x, uint64_t y, uint64_t y_precon, uint64_t modulus) |
| uint64_t | AddUIntMod (uint64_t x, uint64_t y, uint64_t modulus) |
| uint64_t | SubUIntMod (uint64_t x, uint64_t y, uint64_t modulus) |
| uint64_t | PowMod (uint64_t base, uint64_t exp, uint64_t modulus) |
| bool | IsPrimitiveRoot (uint64_t root, uint64_t degree, uint64_t modulus) |
| uint64_t | GeneratePrimitiveRoot (uint64_t degree, uint64_t modulus) |
| uint64_t | MinimalPrimitiveRoot (uint64_t degree, uint64_t modulus) |
| void | 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 | fpga_uint128_t |
| __extension__ typedef unsigned __int128 | uint128_t |
|
strong |
| void intel::hexl::fpga::acquire_FPGA_resources | ( | ) |
acquire_FPGA_resources Called at the beginning of the workload to acquire the usage of an FPGA
|
inline |
| uint64_t intel::hexl::fpga::AddUIntMod | ( | uint64_t | x, |
| uint64_t | y, | ||
| uint64_t | modulus | ||
| ) |
| void intel::hexl::fpga::attach_fpga_pooling | ( | ) |
attach_fpga_pooling Attach a device to this thread
|
inline |
| uint64_t intel::hexl::fpga::BarrettReduce64 | ( | uint64_t | input, |
| uint64_t | modulus, | ||
| uint64_t | q_barr | ||
| ) |
| 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 | ||
| ) |
| void intel::hexl::fpga::detach_fpga_pooling | ( | ) |
detach_fpga_pooling Detach a device from this thread
|
inline |
| 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
| [out] | results | stores the result of the multiplication |
| [in] | operand1 | vector of polynomial coefficients |
| [in] | operand2 | vector of polynomial coefficients |
| [in] | n | polynomial size |
| [in] | moduli | vector of modulus |
| [in] | n_moduli | number 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
| [out] | results | stores the output of the multiplication |
| [in] | operand1 | vector of polynomial coefficients |
| [in] | operand2 | vector of polynomial coefficients |
| [in] | n | polynomial size |
| [in] | moduli | vector of coefficient modulus |
| [in] | n_moduli | number 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
| 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::GeneratePrimitiveRoot | ( | uint64_t | degree, |
| uint64_t | modulus | ||
| ) |
| 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
| [out] | coef_poly | vector of polynomial coefficients |
| [in] | coef_poly | vector of polynomial coefficients |
| [in] | inv_root_of_unity_powers | vector of twiddle factors |
| [in] | precon_inv_root_of_unity_powers | vector of twiddle factors for the constant |
| [in] | coeff_modulus | coefficient modulus |
| [in] | inv_n | normalization factor |
| [in] | inv_n_w | normalization factor for the constant |
| [in] | n | polynomial 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
| [out] | coef_poly | vector of polynomial coefficients |
| [in] | coef_poly | vector of polynomial coefficients |
| [in] | inv_root_of_unity_powers | vector of twiddle factors |
| [in] | precon_inv_root_of_unity_powers | vector of twiddle factors for the constant |
| [in] | coeff_modulus | coefficient modulus |
| [in] | inv_n | normalization factor |
| [in] | inv_n_w | normalization factor for the constant |
| [in] | n | polynomial 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.
| uint64_t intel::hexl::fpga::InverseUIntMod | ( | uint64_t | a, |
| uint64_t | modulus | ||
| ) |
|
inline |
| bool intel::hexl::fpga::IsPrime | ( | uint64_t | n | ) |
| bool intel::hexl::fpga::IsPrimitiveRoot | ( | uint64_t | root, |
| uint64_t | degree, | ||
| uint64_t | modulus | ||
| ) |
| void intel::hexl::fpga::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.
| [out] | results | stores the keyswitch results |
| [in] | t_target_iter_ptr | stores the input ciphertext data |
| [in] | n | stores polynomial size |
| [in] | decomp_modulus_size | stores modulus size |
| [in] | key_modulus_size | stores key modulus size |
| [in] | rns_modulus_size | stores the rns modulus size |
| [in] | key_component_size | stores the key component size |
| [in] | moduli | stores the moduli |
| [in] | k_switch_keys | stores the keys for keyswitch operation |
| [in] | modswitch_factors | stores the factors for modular switch |
| [in] | twiddle_factors | stores the twiddle factors |
| void intel::hexl::fpga::KeySwitch_int | ( | 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_int Executes KeySwitch operation.
| [out] | results | stores the keyswitch results |
| [in] | t_target_iter_ptr | stores the input ciphertext data |
| [in] | n | stores polynomial size |
| [in] | decomp_modulus_size | stores modulus size |
| [in] | key_modulus_size | stores key modulus size |
| [in] | rns_modulus_size | stores the rns modulus size |
| [in] | key_component_size | stores the key component size |
| [in] | moduli | stores the moduli |
| [in] | k_switch_keys | stores the keys for keyswitch operation |
| [in] | modswitch_factors | stores the factors for modular switch |
| [in] | twiddle_factors | stores the twiddle factors |
| bool intel::hexl::fpga::KeySwitchCompleted | ( | ) |
Function KeySwitchCompleted Executed after KeySwitch to sync up the outstanding KeySwitch tasks.
| bool intel::hexl::fpga::KeySwitchCompleted_int | ( | ) |
Function KeySwitchCompleted_int Executed after KeySwitch to sync up the outstanding KeySwitch tasks.
|
inline |
|
inline |
| uint64_t intel::hexl::fpga::MinimalPrimitiveRoot | ( | uint64_t | degree, |
| uint64_t | modulus | ||
| ) |
|
inline |
| uint64_t intel::hexl::fpga::MultiplyMod | ( | uint64_t | x, |
| uint64_t | y, | ||
| uint64_t | y_precon, | ||
| uint64_t | modulus | ||
| ) |
|
inline |
|
inline |
|
inline |
| uint64_t intel::hexl::fpga::MultiplyUIntMod | ( | uint64_t | x, |
| uint64_t | y, | ||
| uint64_t | modulus | ||
| ) |
|
inline |
|
inline |
| 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
| [in] | coeff_poly | vector of polynomial coefficients |
| [out] | coeff_poly | vector of polynomial coefficients |
| [in] | root_of_unity_powers | vector of twiddle factors |
| [in] | precon_root_of_unity_power | vector of twiddle factors for the constant |
| [in] | coeff_modulus | stores the coefficient modulus |
| [in] | n | stores 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.
| [in] | coeff_poly | vector of polynomial coefficients |
| [out] | coeff_poly | vector of polynomial coefficients |
| [in] | root_of_unity_powers | vector of twiddle factors |
| [in] | precon_root_of_unity_power | vector of twiddle factors for the constant |
| [in] | coeff_modulus | stores the coefficient modulus |
| [in] | n | stores 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.
| uint64_t intel::hexl::fpga::PowMod | ( | uint64_t | base, |
| uint64_t | exp, | ||
| uint64_t | modulus | ||
| ) |
| 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 |
||
| ) |
| void intel::hexl::fpga::release_FPGA_resources | ( | ) |
release_FPGA_resources Called at the end of the workload to release the FPGA
| uint64_t intel::hexl::fpga::ReverseBitsUInt | ( | uint64_t | x, |
| uint64_t | bits | ||
| ) |
| void intel::hexl::fpga::set_worksize_DyadicMultiply | ( | uint64_t | ws | ) |
function set_worksize_DyadicMultiply
| [in] | ws | work size |
| void intel::hexl::fpga::set_worksize_DyadicMultiply_int | ( | uint64_t | n | ) |
set_worksize_DyadicMultiply_int Sets the worksize for the multiplication
| [in] | n | work 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_KeySwitch | ( | uint64_t | ws | ) |
Function set_worksize_KeySwitch Reserves software resources for the KeySwitch.
| ws | integer storing the worksize |
| void intel::hexl::fpga::set_worksize_KeySwitch_int | ( | uint64_t | ws | ) |
Function set_worksize_KeySwitch_int Reserves software resources for the KeySwitch.
| ws | integer storing the worksize |
| void intel::hexl::fpga::set_worksize_NTT | ( | uint64_t | ws | ) |
set_worksize_NTT Sets the work size for NTT
| [in] | ws | stores 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.
| [in] | ws | stores the worksize of the NTT |
| uint64_t intel::hexl::fpga::SubUIntMod | ( | uint64_t | x, |
| uint64_t | y, | ||
| uint64_t | modulus | ||
| ) |
| __extension__ typedef unsigned __int128 intel::hexl::fpga::fpga_uint128_t |
| __extension__ typedef unsigned __int128 intel::hexl::fpga::uint128_t |
1.8.5