pub struct FheUint<Id: FheUintId> { /* private fields */ }Expand description
A Generic FHE unsigned integer
This struct is generic over some Id, as its the Id that controls how many bit they represent.
You will need to use one of this type specialization (e.g., FheUint8, FheUint12, FheUint16).
Its the type that overloads the operators (+, -, *),
since the FheUint type is not Copy the operators are also overloaded
to work with references.
Implementations§
Source§impl<Id: FheUintId> FheUint<Id>
impl<Id: FheUintId> FheUint<Id>
Sourcepub fn generate_oblivious_pseudo_random(seed: impl OprfSeed) -> Self
pub fn generate_oblivious_pseudo_random(seed: impl OprfSeed) -> Self
Generates an encrypted unsigned integer taken uniformly in its full range using the given seed. The encrypted value is oblivious to the server. It can be useful to make server random generation deterministic.
use tfhe::prelude::FheDecrypt;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, Seed};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
// DANGER: Using a deterministic seed is insecure and only done here to show API usage.
// The proper way of generating a seed depends on your application.
let ct_res = FheUint8::generate_oblivious_pseudo_random(Seed(0));
let dec_result: u16 = ct_res.decrypt(&client_key);Sourcepub fn get_generate_oblivious_pseudo_random_size_on_gpu() -> u64
pub fn get_generate_oblivious_pseudo_random_size_on_gpu() -> u64
Returns the amount of memory required to execute generate_oblivious_pseudo_random
use tfhe::core_crypto::gpu::check_valid_cuda_malloc_assert_oom;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, GpuIndex};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
let random_bits_count = 3;
let size = FheUint8::get_generate_oblivious_pseudo_random_size_on_gpu();
check_valid_cuda_malloc_assert_oom(size, GpuIndex::new(0));Sourcepub fn generate_oblivious_pseudo_random_and_re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>(
seed: impl OprfSeed,
re_randomization_mode: RRD,
prf_re_randomization_context: &PrfReRandomizationContext,
) -> Result<Self>
pub fn generate_oblivious_pseudo_random_and_re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>( seed: impl OprfSeed, re_randomization_mode: RRD, prf_re_randomization_context: &PrfReRandomizationContext, ) -> Result<Self>
Re-randomizing variant of Self::generate_oblivious_pseudo_random.
Sourcepub fn generate_oblivious_pseudo_random_bounded(
seed: impl OprfSeed,
random_bits_count: u64,
) -> Self
pub fn generate_oblivious_pseudo_random_bounded( seed: impl OprfSeed, random_bits_count: u64, ) -> Self
Generates an encrypted unsigned integer
taken uniformly in [0, 2^random_bits_count[ using the given seed.
The encrypted value is oblivious to the server.
It can be useful to make server random generation deterministic.
WARNING: If the requested random_bits_count is 0, then the returned ciphertext is a
trivial encryption of 0.
use tfhe::prelude::FheDecrypt;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, Seed};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
let random_bits_count = 3;
// DANGER: Using a deterministic seed is insecure and only done here to show API usage.
// The proper way of generating a seed depends on your application.
let ct_res = FheUint8::generate_oblivious_pseudo_random_bounded(Seed(0), random_bits_count);
let dec_result: u16 = ct_res.decrypt(&client_key);
assert!(dec_result < (1 << random_bits_count));Sourcepub fn generate_oblivious_pseudo_random_bounded_and_re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>(
seed: impl OprfSeed,
random_bits_count: u64,
re_randomization_mode: RRD,
prf_re_randomization_context: &PrfReRandomizationContext,
) -> Result<Self>
pub fn generate_oblivious_pseudo_random_bounded_and_re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>( seed: impl OprfSeed, random_bits_count: u64, re_randomization_mode: RRD, prf_re_randomization_context: &PrfReRandomizationContext, ) -> Result<Self>
Re-randomizing variant of Self::generate_oblivious_pseudo_random_bounded.
WARNING: If the requested random_bits_count is 0, then the returned ciphertext is a
trivial encryption of 0.
Sourcepub fn generate_oblivious_pseudo_random_custom_range(
seed: impl OprfSeed,
range: &RangeForRandom,
max_distance: Option<f64>,
) -> Self
pub fn generate_oblivious_pseudo_random_custom_range( seed: impl OprfSeed, range: &RangeForRandom, max_distance: Option<f64>, ) -> Self
Generates an encrypted unsigned integer
taken almost uniformly in the given range using the given seed.
Currently the range can only be in the form [0, excluded_upper_bound[
with any excluded_upper_bound in [1, 2^64[.
The encrypted value is oblivious to the server. It can be useful to make server random generation deterministic.
This function guarantees the the norm-1 distance
(defined as ∆(P,Q) := 1/2 Sum[ω∈Ω] |P(ω) − Q(ω)|)
between the actual distribution and the target uniform distribution
will be below the max_distance argument (which must be in ]0, 1[).
The higher the distance, the more dissimilar the actual distribution is
from the target uniform distribution.
The default value for max_distance is 2^-128 if None is provided.
Higher values allow better performance but must be considered carefully in the context of their target application as it may have serious unintended consequences.
If the range is a power of 2, the distribution is uniform (for any max_distance) and
the cost is smaller.
use std::num::NonZeroU64;
use tfhe::prelude::FheDecrypt;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, RangeForRandom, Seed};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
let excluded_upper_bound = NonZeroU64::new(3).unwrap();
let range = RangeForRandom::new_from_excluded_upper_bound(excluded_upper_bound);
// DANGER: Using a deterministic seed is insecure and only done here to show API usage.
// The proper way of generating a seed depends on your application.
let ct_res = FheUint8::generate_oblivious_pseudo_random_custom_range(Seed(0), &range, None);
let dec_result: u16 = ct_res.decrypt(&client_key);
assert!(dec_result < excluded_upper_bound.get() as u16);Sourcepub fn get_generate_oblivious_pseudo_random_bounded_size_on_gpu() -> u64
pub fn get_generate_oblivious_pseudo_random_bounded_size_on_gpu() -> u64
Returns the amount of memory required to execute generate_oblivious_pseudo_random_bounded
use tfhe::core_crypto::gpu::check_valid_cuda_malloc_assert_oom;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, GpuIndex};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
let random_bits_count = 3;
let size = FheUint8::get_generate_oblivious_pseudo_random_bounded_size_on_gpu();
check_valid_cuda_malloc_assert_oom(size, GpuIndex::new(0));Sourcepub fn generate_oblivious_pseudo_random_custom_range_and_re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>(
seed: impl OprfSeed,
range: &RangeForRandom,
max_distance: Option<f64>,
re_randomization_mode: RRD,
prf_re_randomization_context: &PrfReRandomizationContext,
) -> Result<Self>
pub fn generate_oblivious_pseudo_random_custom_range_and_re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>( seed: impl OprfSeed, range: &RangeForRandom, max_distance: Option<f64>, re_randomization_mode: RRD, prf_re_randomization_context: &PrfReRandomizationContext, ) -> Result<Self>
Re-randomizing variant of Self::generate_oblivious_pseudo_random_custom_range.
Source§impl<Id> FheUint<Id>where
Id: FheUintId,
impl<Id> FheUint<Id>where
Id: FheUintId,
pub fn into_raw_parts( self, ) -> (RadixCiphertext, Id, Tag, ReRandomizationMetadata)
pub fn from_raw_parts( ciphertext: RadixCiphertext, id: Id, tag: Tag, re_randomization_metadata: ReRandomizationMetadata, ) -> Self
pub fn num_bits() -> usize
Sourcepub fn current_device(&self) -> Device
pub fn current_device(&self) -> Device
Returns the device where the ciphertext is currently on
Sourcepub fn move_to_device(&mut self, device: Device)
pub fn move_to_device(&mut self, device: Device)
Moves (in-place) the ciphertext to the desired device.
Does nothing if the ciphertext is already in the desired device
Sourcepub fn move_to_current_device(&mut self)
pub fn move_to_current_device(&mut self)
Moves (in-place) the ciphertext to the device of the current thread-local server key
Does nothing if the ciphertext is already in the desired device or if no server key is set
Sourcepub fn gpu_indexes(&self) -> &[GpuIndex]
pub fn gpu_indexes(&self) -> &[GpuIndex]
Returns the indexes of the GPUs where the ciphertext lives
If the ciphertext is on another deive (e.g CPU) then the returned slice is empty
Sourcepub fn is_even(&self) -> FheBool
pub fn is_even(&self) -> FheBool
Returns a FheBool that encrypts true if the value is even
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(32u16, &client_key);
let result = a.is_even();
let decrypted = result.decrypt(&client_key);
assert!(decrypted);Sourcepub fn is_odd(&self) -> FheBool
pub fn is_odd(&self) -> FheBool
Returns a FheBool that encrypts true if the value is odd
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(4393u16, &client_key);
let result = a.is_odd();
let decrypted = result.decrypt(&client_key);
assert!(decrypted);Sourcepub fn try_decrypt_trivial<Clear>(
&self,
) -> Result<Clear, NotTrivialCiphertextError>
pub fn try_decrypt_trivial<Clear>( &self, ) -> Result<Clear, NotTrivialCiphertextError>
Tries to decrypt a trivial ciphertext
Trivial ciphertexts are ciphertexts which are not encrypted meaning they can be decrypted by any key, or even without a key.
For debugging it can be useful to use trivial ciphertext to speed up execution, and use Self::try_decrypt_trivial to decrypt temporary values and debug.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
// This is not a trivial ciphertext as we use a client key to encrypt.
let non_trivial = FheUint16::encrypt(1u16, &client_key);
// This is a trivial ciphertext
let trivial = FheUint16::encrypt_trivial(2u16);
// We can trivial decrypt
let result: Result<u16, _> = trivial.try_decrypt_trivial();
assert_eq!(result, Ok(2));
// We cannot trivial decrypt
let result: Result<u16, _> = non_trivial.try_decrypt_trivial();
assert!(result.is_err());Sourcepub fn is_trivial(&self) -> bool
pub fn is_trivial(&self) -> bool
Returns true if the ciphertext is a trivial encryption
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let non_trivial = FheUint16::encrypt(1u16, &client_key);
assert!(!non_trivial.is_trivial());
let trivial = FheUint16::encrypt_trivial(2u16);
assert!(trivial.is_trivial());Sourcepub fn sum<'a, C>(collection: C) -> Selfwhere
C: AsRef<[&'a Self]>,
pub fn sum<'a, C>(collection: C) -> Selfwhere
C: AsRef<[&'a Self]>,
Sums multiple ciphertexts together.
This is much more efficient than manually calling the + operator, thus
using sum should always be preferred.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let c = FheUint16::encrypt(3u16, &client_key);
let result = FheUint16::sum([&a, &b, &c]);
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 + 2 + 3);
// Or
let result = [&a, &b, &c].into_iter().sum::<FheUint16>();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 + 2 + 3);Sourcepub fn contains(cts: &[Self], value: &Self) -> FheBool
pub fn contains(cts: &[Self], value: &Self) -> FheBool
Returns an encrypted true if value is found in cts.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let c = FheUint16::encrypt(3u16, &client_key);
let value = FheUint16::encrypt(2u16, &client_key);
let result = FheUint16::contains(&[a, b, c], &value);
let decrypted = result.decrypt(&client_key);
assert!(decrypted);Sourcepub fn leading_zeros(&self) -> FheUint32
pub fn leading_zeros(&self) -> FheUint32
Returns the number of leading zeros in the binary representation of self.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0b00111111_11111111u16, &client_key);
let result = a.leading_zeros();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 2);Sourcepub fn leading_ones(&self) -> FheUint32
pub fn leading_ones(&self) -> FheUint32
Returns the number of leading ones in the binary representation of self.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0b11000000_00000000u16, &client_key);
let result = a.leading_ones();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 2);Sourcepub fn trailing_zeros(&self) -> FheUint32
pub fn trailing_zeros(&self) -> FheUint32
Returns the number of trailing zeros in the binary representation of self.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0b0000000_0101000u16, &client_key);
let result = a.trailing_zeros();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 3);Sourcepub fn trailing_ones(&self) -> FheUint32
pub fn trailing_ones(&self) -> FheUint32
Returns the number of trailing ones in the binary representation of self.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0b0000000_0110111u16, &client_key);
let result = a.trailing_ones();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 3);Sourcepub fn count_ones(&self) -> FheUint32
pub fn count_ones(&self) -> FheUint32
Returns the number of ones in the binary representation of self.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let clear_a = 0b0000000_0110111u16;
let a = FheUint16::encrypt(clear_a, &client_key);
let result = a.count_ones();
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, clear_a.count_ones());Sourcepub fn count_zeros(&self) -> FheUint32
pub fn count_zeros(&self) -> FheUint32
Returns the number of zeros in the binary representation of self.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let clear_a = 0b0000000_0110111u16;
let a = FheUint16::encrypt(clear_a, &client_key);
let result = a.count_zeros();
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, clear_a.count_zeros());Sourcepub fn ilog2(&self) -> FheUint32
pub fn ilog2(&self) -> FheUint32
Returns the base 2 logarithm of the number, rounded down.
Result has no meaning if self encrypts 0. See Self::checked_ilog2
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(2u16, &client_key);
let result = a.ilog2();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 1);Sourcepub fn checked_ilog2(&self) -> (FheUint32, FheBool)
pub fn checked_ilog2(&self) -> (FheUint32, FheBool)
Returns the base 2 logarithm of the number, rounded down.
Also returns a boolean flag that is true if the result is valid (i.e self was > 0)
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0u16, &client_key);
let (result, is_ok) = a.checked_ilog2();
let is_ok = is_ok.decrypt(&client_key);
assert!(!is_ok);
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 63); // result is meaninglessSourcepub fn match_value<Clear, OutId>(
&self,
matches: &MatchValues<Clear>,
) -> Result<(FheUint<OutId>, FheBool)>
pub fn match_value<Clear, OutId>( &self, matches: &MatchValues<Clear>, ) -> Result<(FheUint<OutId>, FheBool)>
match an input value to an output value
- Input values are not required to span all possible values that
selfcould hold. And the output type can be different.
Returns a FheBool that encrypts true if the input self
matched one of the possible inputs
§Example
use tfhe::prelude::*;
use tfhe::{
generate_keys, set_server_key, ConfigBuilder, FheUint16, FheUint8, MatchValues,
};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(17u16, &client_key);
let match_values = MatchValues::new(vec![
(0u16, 3u16),
(1u16, 3u16),
(2u16, 3u16),
(17u16, 25u16),
])
.unwrap();
let (result, matched): (FheUint8, _) = a.match_value(&match_values)
.unwrap(); // All possible output values fit in a u8
let matched = matched.decrypt(&client_key);
assert!(matched);
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 25u16)Sourcepub fn get_match_value_size_on_gpu<Clear>(
&self,
matches: &MatchValues<Clear>,
) -> Result<u64>
pub fn get_match_value_size_on_gpu<Clear>( &self, matches: &MatchValues<Clear>, ) -> Result<u64>
Returns the estimated memory usage (in bytes) required on the GPU to perform
the match_value operation.
This is useful to check if the operation fits in the GPU memory before attempting execution.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16, MatchValues};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
let a = FheUint16::encrypt(17u16, &client_key);
let match_values = MatchValues::new(vec![(0u16, 3u16), (17u16, 25u16)]).unwrap();
#[cfg(feature = "gpu")]
{
let size_bytes = a.get_match_value_size_on_gpu(&match_values).unwrap();
println!("Memory required on GPU: {} bytes", size_bytes);
assert!(size_bytes > 0);
}Sourcepub fn match_value_or<Clear, OutId>(
&self,
matches: &MatchValues<Clear>,
or_value: Clear,
) -> Result<FheUint<OutId>>
pub fn match_value_or<Clear, OutId>( &self, matches: &MatchValues<Clear>, or_value: Clear, ) -> Result<FheUint<OutId>>
match an input value to an output value
- Input values are not required to span all possible values that
selfcould hold. And the output type can be different.
If none of the input matched the self then, self will encrypt the
value given to or_value
§Example
use tfhe::prelude::*;
use tfhe::{
generate_keys, set_server_key, ConfigBuilder, FheUint16, FheUint8, MatchValues,
};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(17u16, &client_key);
let match_values = MatchValues::new(vec![
(0u16, 3u16), // map 0 to 3
(1u16, 234u16),
(2u16, 123u16),
])
.unwrap();
let result: FheUint8 = a.match_value_or(&match_values, 25u16)
.unwrap(); // All possible output values fit on a u8
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, 25u16)Sourcepub fn get_match_value_or_size_on_gpu<Clear>(
&self,
matches: &MatchValues<Clear>,
or_value: Clear,
) -> Result<u64>
pub fn get_match_value_or_size_on_gpu<Clear>( &self, matches: &MatchValues<Clear>, or_value: Clear, ) -> Result<u64>
Returns the estimated memory usage (in bytes) required on the GPU to perform
the match_value_or operation.
This is useful to check if the operation fits in the GPU memory before attempting execution.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16, MatchValues};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
set_server_key(server_key);
let a = FheUint16::encrypt(17u16, &client_key);
let match_values = MatchValues::new(vec![(0u16, 3u16), (17u16, 25u16)]).unwrap();
#[cfg(feature = "gpu")]
{
let size_bytes = a
.get_match_value_or_size_on_gpu(&match_values, 55u16)
.unwrap();
println!("Memory required on GPU: {} bytes", size_bytes);
assert!(size_bytes > 0);
}Sourcepub fn reverse_bits(&self) -> Self
pub fn reverse_bits(&self) -> Self
Reverse the bit of the unsigned integer
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let msg = 0b10110100_u8;
let a = FheUint8::encrypt(msg, &client_key);
let result: FheUint8 = a.reverse_bits();
let decrypted: u8 = result.decrypt(&client_key);
assert_eq!(decrypted, msg.reverse_bits());Sourcepub fn if_then_else<Clear>(
condition: &FheBool,
true_value: Clear,
false_value: Clear,
) -> Self
pub fn if_then_else<Clear>( condition: &FheBool, true_value: Clear, false_value: Clear, ) -> Self
Creates a FheUint that encrypts either of two values depending on an encrypted condition
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint32};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let cond = FheBool::encrypt(true, &client_key);
let result = FheUint32::if_then_else(&cond, u32::MAX, u32::MIN);
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, u32::MAX);
let result = FheUint32::if_then_else(&!cond, u32::MAX, u32::MIN);
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, u32::MIN);Sourcepub fn select<Clear>(
condition: &FheBool,
true_value: Clear,
false_value: Clear,
) -> Self
pub fn select<Clear>( condition: &FheBool, true_value: Clear, false_value: Clear, ) -> Self
Same as Self::if_then_else but with a different name
Sourcepub fn cmux<Clear>(
condition: &FheBool,
true_value: Clear,
false_value: Clear,
) -> Self
pub fn cmux<Clear>( condition: &FheBool, true_value: Clear, false_value: Clear, ) -> Self
Same as Self::if_then_else but with a different name
pub fn re_randomization_metadata(&self) -> &ReRandomizationMetadata
pub fn re_randomization_metadata_mut(&mut self) -> &mut ReRandomizationMetadata
Trait Implementations§
Source§impl<Id, B> Add<B> for &FheUint<Id>
impl<Id, B> Add<B> for &FheUint<Id>
Source§fn add(self, rhs: B) -> Self::Output
fn add(self, rhs: B) -> Self::Output
Adds two FheUint
The operation is modular, i.e on overflow it wraps around.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(23u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a + &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 23u16 + 3u16);Source§impl<Id, I> AddAssign<I> for FheUint<Id>
impl<Id, I> AddAssign<I> for FheUint<Id>
Source§fn add_assign(&mut self, rhs: I)
fn add_assign(&mut self, rhs: I)
Performs the += operation on FheUint
The operation is modular, i.e on overflow it wraps around.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
a += &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_add(37849u16));Source§impl AddSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint2Id>> for u8
fn get_add_size_on_gpu(&self, rhs: &FheUint2) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint4Id>> for u8
fn get_add_size_on_gpu(&self, rhs: &FheUint4) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint6Id>> for u8
fn get_add_size_on_gpu(&self, rhs: &FheUint6) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint8Id>> for u8
fn get_add_size_on_gpu(&self, rhs: &FheUint8) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint10Id>> for u16
fn get_add_size_on_gpu(&self, rhs: &FheUint10) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint12Id>> for u16
fn get_add_size_on_gpu(&self, rhs: &FheUint12) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint14Id>> for u16
fn get_add_size_on_gpu(&self, rhs: &FheUint14) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint16Id>> for u16
fn get_add_size_on_gpu(&self, rhs: &FheUint16) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint24Id>> for u32
impl AddSizeOnGpu<&FheUint<FheUint24Id>> for u32
fn get_add_size_on_gpu(&self, rhs: &FheUint24) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl AddSizeOnGpu<&FheUint<FheUint32Id>> for u32
fn get_add_size_on_gpu(&self, rhs: &FheUint32) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint40Id>> for u64
impl AddSizeOnGpu<&FheUint<FheUint40Id>> for u64
fn get_add_size_on_gpu(&self, rhs: &FheUint40) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint48Id>> for u64
impl AddSizeOnGpu<&FheUint<FheUint48Id>> for u64
fn get_add_size_on_gpu(&self, rhs: &FheUint48) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint56Id>> for u64
impl AddSizeOnGpu<&FheUint<FheUint56Id>> for u64
fn get_add_size_on_gpu(&self, rhs: &FheUint56) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl AddSizeOnGpu<&FheUint<FheUint64Id>> for u64
fn get_add_size_on_gpu(&self, rhs: &FheUint64) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint72Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint72Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint72) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint80Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint80Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint80) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint88Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint88Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint88) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint96Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint96Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint96) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint104Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint104Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint104) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint112Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint112Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint112) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint120Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint120Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint120) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint128Id>> for u128
fn get_add_size_on_gpu(&self, rhs: &FheUint128) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint136Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint136Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint136) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint144Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint144Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint144) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint152Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint152Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint152) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint160Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint160) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint168Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint168Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint168) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint176Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint176Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint176) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint184Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint184Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint184) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint192Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint192Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint192) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint200Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint200Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint200) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint208Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint208Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint208) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint216Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint216Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint216) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint224Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint224Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint224) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint232Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint232Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint232) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint240Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint240Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint240) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint248Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint248Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint248) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint256Id>> for U256
fn get_add_size_on_gpu(&self, rhs: &FheUint256) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl AddSizeOnGpu<&FheUint<FheUint512Id>> for U512
fn get_add_size_on_gpu(&self, rhs: &FheUint512) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
impl AddSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
fn get_add_size_on_gpu(&self, rhs: &FheUint1024) -> u64
Source§impl AddSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl AddSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
fn get_add_size_on_gpu(&self, rhs: &FheUint2048) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint2Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint2Id>> for u8
fn get_add_size_on_gpu(&self, rhs: FheUint2) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint4Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint4Id>> for u8
fn get_add_size_on_gpu(&self, rhs: FheUint4) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint6Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint6Id>> for u8
fn get_add_size_on_gpu(&self, rhs: FheUint6) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint8Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint8Id>> for u8
fn get_add_size_on_gpu(&self, rhs: FheUint8) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint10Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint10Id>> for u16
fn get_add_size_on_gpu(&self, rhs: FheUint10) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint12Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint12Id>> for u16
fn get_add_size_on_gpu(&self, rhs: FheUint12) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint14Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint14Id>> for u16
fn get_add_size_on_gpu(&self, rhs: FheUint14) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint16Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint16Id>> for u16
fn get_add_size_on_gpu(&self, rhs: FheUint16) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint24Id>> for u32
impl AddSizeOnGpu<FheUint<FheUint24Id>> for u32
fn get_add_size_on_gpu(&self, rhs: FheUint24) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint32Id>> for u32
impl AddSizeOnGpu<FheUint<FheUint32Id>> for u32
fn get_add_size_on_gpu(&self, rhs: FheUint32) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint40Id>> for u64
impl AddSizeOnGpu<FheUint<FheUint40Id>> for u64
fn get_add_size_on_gpu(&self, rhs: FheUint40) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint48Id>> for u64
impl AddSizeOnGpu<FheUint<FheUint48Id>> for u64
fn get_add_size_on_gpu(&self, rhs: FheUint48) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint56Id>> for u64
impl AddSizeOnGpu<FheUint<FheUint56Id>> for u64
fn get_add_size_on_gpu(&self, rhs: FheUint56) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint64Id>> for u64
impl AddSizeOnGpu<FheUint<FheUint64Id>> for u64
fn get_add_size_on_gpu(&self, rhs: FheUint64) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint72Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint72Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint72) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint80Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint80Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint80) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint88Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint88Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint88) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint96Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint96Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint96) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint104Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint104Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint104) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint112Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint112Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint112) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint120Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint120Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint120) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint128Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint128Id>> for u128
fn get_add_size_on_gpu(&self, rhs: FheUint128) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint136Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint136Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint136) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint144Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint144Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint144) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint152Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint152Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint152) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint160Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint160Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint160) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint168Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint168Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint168) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint176Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint176Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint176) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint184Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint184Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint184) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint192Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint192Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint192) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint200Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint200Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint200) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint208Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint208Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint208) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint216Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint216Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint216) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint224Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint224Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint224) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint232Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint232Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint232) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint240Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint240Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint240) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint248Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint248Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint248) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint256Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint256Id>> for U256
fn get_add_size_on_gpu(&self, rhs: FheUint256) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint512Id>> for U512
impl AddSizeOnGpu<FheUint<FheUint512Id>> for U512
fn get_add_size_on_gpu(&self, rhs: FheUint512) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl AddSizeOnGpu<FheUint<FheUint1024Id>> for U1024
fn get_add_size_on_gpu(&self, rhs: FheUint1024) -> u64
Source§impl AddSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl AddSizeOnGpu<FheUint<FheUint2048Id>> for U2048
fn get_add_size_on_gpu(&self, rhs: FheUint2048) -> u64
Source§impl<Id, I> AddSizeOnGpu<I> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, I> AddSizeOnGpu<I> for FheUint<Id>
gpu only.fn get_add_size_on_gpu(&self, rhs: I) -> u64
Source§impl<Id, B> BitAnd<B> for &FheUint<Id>
impl<Id, B> BitAnd<B> for &FheUint<Id>
Source§fn bitand(self, rhs: B) -> Self::Output
fn bitand(self, rhs: B) -> Self::Output
Performs a bitwise ‘and’ between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
let result = &a & &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16 & 37849u16);Source§impl<Id, I> BitAndAssign<I> for FheUint<Id>
impl<Id, I> BitAndAssign<I> for FheUint<Id>
Source§fn bitand_assign(&mut self, rhs: I)
fn bitand_assign(&mut self, rhs: I)
Performs the &= operation on FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
a &= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 3u16 & 37849u16);Source§impl BitAndSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint2Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: &FheUint2) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint4Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: &FheUint4) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint6Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: &FheUint6) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint8Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: &FheUint8) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint10Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: &FheUint10) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint12Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: &FheUint12) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint14Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: &FheUint14) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint16Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: &FheUint16) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint24Id>> for u32
impl BitAndSizeOnGpu<&FheUint<FheUint24Id>> for u32
fn get_bitand_size_on_gpu(&self, rhs: &FheUint24) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl BitAndSizeOnGpu<&FheUint<FheUint32Id>> for u32
fn get_bitand_size_on_gpu(&self, rhs: &FheUint32) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint40Id>> for u64
impl BitAndSizeOnGpu<&FheUint<FheUint40Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint40) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint48Id>> for u64
impl BitAndSizeOnGpu<&FheUint<FheUint48Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint48) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint56Id>> for u64
impl BitAndSizeOnGpu<&FheUint<FheUint56Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint56) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl BitAndSizeOnGpu<&FheUint<FheUint64Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint64) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint72Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint72Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint72) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint80Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint80Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint80) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint88Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint88Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint88) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint96Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint96Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint96) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint104Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint104Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint104) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint112Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint112Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint112) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint120Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint120Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint120) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint128Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: &FheUint128) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint136Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint136Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint136) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint144Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint144Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint144) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint152Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint152Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint152) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint160Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint160) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint168Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint168Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint168) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint176Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint176Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint176) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint184Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint184Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint184) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint192Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint192Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint192) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint200Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint200Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint200) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint208Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint208Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint208) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint216Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint216Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint216) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint224Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint224Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint224) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint232Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint232Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint232) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint240Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint240Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint240) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint248Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint248Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint248) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint256Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: &FheUint256) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl BitAndSizeOnGpu<&FheUint<FheUint512Id>> for U512
fn get_bitand_size_on_gpu(&self, rhs: &FheUint512) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
impl BitAndSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
fn get_bitand_size_on_gpu(&self, rhs: &FheUint1024) -> u64
Source§impl BitAndSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl BitAndSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
fn get_bitand_size_on_gpu(&self, rhs: &FheUint2048) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint2Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint2Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: FheUint2) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint4Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint4Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: FheUint4) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint6Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint6Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: FheUint6) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint8Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint8Id>> for u8
fn get_bitand_size_on_gpu(&self, rhs: FheUint8) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint10Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint10Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: FheUint10) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint12Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint12Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: FheUint12) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint14Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint14Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: FheUint14) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint16Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint16Id>> for u16
fn get_bitand_size_on_gpu(&self, rhs: FheUint16) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint24Id>> for u32
impl BitAndSizeOnGpu<FheUint<FheUint24Id>> for u32
fn get_bitand_size_on_gpu(&self, rhs: FheUint24) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint32Id>> for u32
impl BitAndSizeOnGpu<FheUint<FheUint32Id>> for u32
fn get_bitand_size_on_gpu(&self, rhs: FheUint32) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint40Id>> for u64
impl BitAndSizeOnGpu<FheUint<FheUint40Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint40) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint48Id>> for u64
impl BitAndSizeOnGpu<FheUint<FheUint48Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint48) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint56Id>> for u64
impl BitAndSizeOnGpu<FheUint<FheUint56Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint56) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint64Id>> for u64
impl BitAndSizeOnGpu<FheUint<FheUint64Id>> for u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint64) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint72Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint72Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint72) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint80Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint80Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint80) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint88Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint88Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint88) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint96Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint96Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint96) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint104Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint104Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint104) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint112Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint112Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint112) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint120Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint120Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint120) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint128Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint128Id>> for u128
fn get_bitand_size_on_gpu(&self, rhs: FheUint128) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint136Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint136Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint136) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint144Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint144Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint144) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint152Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint152Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint152) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint160Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint160Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint160) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint168Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint168Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint168) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint176Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint176Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint176) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint184Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint184Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint184) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint192Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint192Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint192) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint200Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint200Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint200) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint208Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint208Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint208) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint216Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint216Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint216) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint224Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint224Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint224) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint232Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint232Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint232) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint240Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint240Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint240) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint248Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint248Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint248) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint256Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint256Id>> for U256
fn get_bitand_size_on_gpu(&self, rhs: FheUint256) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint512Id>> for U512
impl BitAndSizeOnGpu<FheUint<FheUint512Id>> for U512
fn get_bitand_size_on_gpu(&self, rhs: FheUint512) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl BitAndSizeOnGpu<FheUint<FheUint1024Id>> for U1024
fn get_bitand_size_on_gpu(&self, rhs: FheUint1024) -> u64
Source§impl BitAndSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl BitAndSizeOnGpu<FheUint<FheUint2048Id>> for U2048
fn get_bitand_size_on_gpu(&self, rhs: FheUint2048) -> u64
Source§impl<Id, I> BitAndSizeOnGpu<I> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, I> BitAndSizeOnGpu<I> for FheUint<Id>
gpu only.fn get_bitand_size_on_gpu(&self, rhs: I) -> u64
Source§impl<Id> BitNotSizeOnGpu for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> BitNotSizeOnGpu for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_bitnot_size_on_gpu(&self) -> u64
Source§impl<Id, B> BitOr<B> for &FheUint<Id>
impl<Id, B> BitOr<B> for &FheUint<Id>
Source§fn bitor(self, rhs: B) -> Self::Output
fn bitor(self, rhs: B) -> Self::Output
Performs a bitwise ‘or’ between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
let result = &a | &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16 | 37849u16);Source§impl<Id, I> BitOrAssign<I> for FheUint<Id>
impl<Id, I> BitOrAssign<I> for FheUint<Id>
Source§fn bitor_assign(&mut self, rhs: I)
fn bitor_assign(&mut self, rhs: I)
Performs the &= operation on FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
a |= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 3u16 | 37849u16);Source§impl BitOrSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint2Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: &FheUint2) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint4Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: &FheUint4) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint6Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: &FheUint6) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint8Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: &FheUint8) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint10Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: &FheUint10) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint12Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: &FheUint12) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint14Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: &FheUint14) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint16Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: &FheUint16) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint24Id>> for u32
impl BitOrSizeOnGpu<&FheUint<FheUint24Id>> for u32
fn get_bitor_size_on_gpu(&self, rhs: &FheUint24) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl BitOrSizeOnGpu<&FheUint<FheUint32Id>> for u32
fn get_bitor_size_on_gpu(&self, rhs: &FheUint32) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint40Id>> for u64
impl BitOrSizeOnGpu<&FheUint<FheUint40Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint40) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint48Id>> for u64
impl BitOrSizeOnGpu<&FheUint<FheUint48Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint48) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint56Id>> for u64
impl BitOrSizeOnGpu<&FheUint<FheUint56Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint56) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl BitOrSizeOnGpu<&FheUint<FheUint64Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint64) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint72Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint72Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint72) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint80Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint80Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint80) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint88Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint88Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint88) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint96Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint96Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint96) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint104Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint104Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint104) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint112Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint112Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint112) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint120Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint120Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint120) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint128Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: &FheUint128) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint136Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint136Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint136) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint144Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint144Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint144) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint152Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint152Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint152) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint160Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint160) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint168Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint168Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint168) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint176Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint176Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint176) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint184Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint184Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint184) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint192Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint192Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint192) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint200Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint200Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint200) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint208Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint208Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint208) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint216Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint216Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint216) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint224Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint224Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint224) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint232Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint232Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint232) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint240Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint240Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint240) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint248Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint248Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint248) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint256Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: &FheUint256) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl BitOrSizeOnGpu<&FheUint<FheUint512Id>> for U512
fn get_bitor_size_on_gpu(&self, rhs: &FheUint512) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
impl BitOrSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
fn get_bitor_size_on_gpu(&self, rhs: &FheUint1024) -> u64
Source§impl BitOrSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl BitOrSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
fn get_bitor_size_on_gpu(&self, rhs: &FheUint2048) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint2Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint2Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: FheUint2) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint4Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint4Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: FheUint4) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint6Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint6Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: FheUint6) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint8Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint8Id>> for u8
fn get_bitor_size_on_gpu(&self, rhs: FheUint8) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint10Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint10Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: FheUint10) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint12Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint12Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: FheUint12) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint14Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint14Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: FheUint14) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint16Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint16Id>> for u16
fn get_bitor_size_on_gpu(&self, rhs: FheUint16) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint24Id>> for u32
impl BitOrSizeOnGpu<FheUint<FheUint24Id>> for u32
fn get_bitor_size_on_gpu(&self, rhs: FheUint24) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint32Id>> for u32
impl BitOrSizeOnGpu<FheUint<FheUint32Id>> for u32
fn get_bitor_size_on_gpu(&self, rhs: FheUint32) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint40Id>> for u64
impl BitOrSizeOnGpu<FheUint<FheUint40Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint40) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint48Id>> for u64
impl BitOrSizeOnGpu<FheUint<FheUint48Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint48) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint56Id>> for u64
impl BitOrSizeOnGpu<FheUint<FheUint56Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint56) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint64Id>> for u64
impl BitOrSizeOnGpu<FheUint<FheUint64Id>> for u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint64) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint72Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint72Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint72) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint80Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint80Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint80) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint88Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint88Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint88) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint96Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint96Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint96) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint104Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint104Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint104) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint112Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint112Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint112) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint120Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint120Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint120) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint128Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint128Id>> for u128
fn get_bitor_size_on_gpu(&self, rhs: FheUint128) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint136Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint136Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint136) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint144Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint144Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint144) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint152Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint152Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint152) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint160Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint160Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint160) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint168Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint168Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint168) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint176Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint176Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint176) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint184Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint184Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint184) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint192Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint192Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint192) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint200Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint200Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint200) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint208Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint208Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint208) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint216Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint216Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint216) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint224Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint224Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint224) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint232Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint232Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint232) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint240Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint240Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint240) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint248Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint248Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint248) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint256Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint256Id>> for U256
fn get_bitor_size_on_gpu(&self, rhs: FheUint256) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint512Id>> for U512
impl BitOrSizeOnGpu<FheUint<FheUint512Id>> for U512
fn get_bitor_size_on_gpu(&self, rhs: FheUint512) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl BitOrSizeOnGpu<FheUint<FheUint1024Id>> for U1024
fn get_bitor_size_on_gpu(&self, rhs: FheUint1024) -> u64
Source§impl BitOrSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl BitOrSizeOnGpu<FheUint<FheUint2048Id>> for U2048
fn get_bitor_size_on_gpu(&self, rhs: FheUint2048) -> u64
Source§impl<Id, I> BitOrSizeOnGpu<I> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, I> BitOrSizeOnGpu<I> for FheUint<Id>
gpu only.fn get_bitor_size_on_gpu(&self, rhs: I) -> u64
Source§impl<Id, Clear> BitSlice<Clear> for &FheUint<Id>
impl<Id, Clear> BitSlice<Clear> for &FheUint<Id>
Source§fn bitslice<R>(self, range: R) -> Result<Self::Output, InvalidRangeError>where
R: RangeBounds<Clear>,
fn bitslice<R>(self, range: R) -> Result<Self::Output, InvalidRangeError>where
R: RangeBounds<Clear>,
Extract a slice of bits from a FheUint.
This function is more efficient if the range starts on a block boundary.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let msg: u16 = 225;
let a = FheUint16::encrypt(msg, &client_key);
let start_bit = 3;
let end_bit = 6;
let result = (&a).bitslice(start_bit..end_bit).unwrap();
let decrypted_slice: u16 = result.decrypt(&client_key);
assert_eq!((msg % (1 << end_bit)) >> start_bit, decrypted_slice);type Output = FheUint<Id>
Source§impl<Id, Clear> BitSlice<Clear> for FheUint<Id>
impl<Id, Clear> BitSlice<Clear> for FheUint<Id>
Source§fn bitslice<R>(self, range: R) -> Result<Self::Output, InvalidRangeError>where
R: RangeBounds<Clear>,
fn bitslice<R>(self, range: R) -> Result<Self::Output, InvalidRangeError>where
R: RangeBounds<Clear>,
Extract a slice of bits from a FheUint.
This function is more efficient if the range starts on a block boundary.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let msg: u16 = 225;
let a = FheUint16::encrypt(msg, &client_key);
let start_bit = 3;
let end_bit = 6;
let result = a.bitslice(start_bit..end_bit).unwrap();
let decrypted_slice: u16 = result.decrypt(&client_key);
assert_eq!((msg % (1 << end_bit)) >> start_bit, decrypted_slice);type Output = FheUint<Id>
Source§impl<Id, B> BitXor<B> for &FheUint<Id>
impl<Id, B> BitXor<B> for &FheUint<Id>
Source§fn bitxor(self, rhs: B) -> Self::Output
fn bitxor(self, rhs: B) -> Self::Output
Performs a bitwise ‘xor’ between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
let result = &a ^ &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16 ^ 37849u16);Source§impl<Id, I> BitXorAssign<I> for FheUint<Id>
impl<Id, I> BitXorAssign<I> for FheUint<Id>
Source§fn bitxor_assign(&mut self, rhs: I)
fn bitxor_assign(&mut self, rhs: I)
Performs the ^= operation on FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
a ^= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 3u16 ^ 37849u16);Source§impl BitXorSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint2Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint2) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint4Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint4) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint6Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint6) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint8Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint8) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint10Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint10) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint12Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint12) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint14Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint14) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint16Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint16) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint24Id>> for u32
impl BitXorSizeOnGpu<&FheUint<FheUint24Id>> for u32
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint24) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl BitXorSizeOnGpu<&FheUint<FheUint32Id>> for u32
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint32) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint40Id>> for u64
impl BitXorSizeOnGpu<&FheUint<FheUint40Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint40) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint48Id>> for u64
impl BitXorSizeOnGpu<&FheUint<FheUint48Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint48) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint56Id>> for u64
impl BitXorSizeOnGpu<&FheUint<FheUint56Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint56) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl BitXorSizeOnGpu<&FheUint<FheUint64Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint64) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint72Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint72Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint72) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint80Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint80Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint80) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint88Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint88Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint88) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint96Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint96Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint96) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint104Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint104Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint104) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint112Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint112Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint112) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint120Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint120Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint120) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint128Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint128) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint136Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint136Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint136) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint144Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint144Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint144) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint152Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint152Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint152) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint160Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint160) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint168Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint168Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint168) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint176Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint176Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint176) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint184Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint184Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint184) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint192Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint192Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint192) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint200Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint200Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint200) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint208Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint208Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint208) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint216Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint216Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint216) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint224Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint224Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint224) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint232Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint232Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint232) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint240Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint240Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint240) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint248Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint248Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint248) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint256Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint256) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl BitXorSizeOnGpu<&FheUint<FheUint512Id>> for U512
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint512) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
impl BitXorSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint1024) -> u64
Source§impl BitXorSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl BitXorSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint2048) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint2Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint2Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: FheUint2) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint4Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint4Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: FheUint4) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint6Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint6Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: FheUint6) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint8Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint8Id>> for u8
fn get_bitxor_size_on_gpu(&self, rhs: FheUint8) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint10Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint10Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: FheUint10) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint12Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint12Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: FheUint12) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint14Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint14Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: FheUint14) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint16Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint16Id>> for u16
fn get_bitxor_size_on_gpu(&self, rhs: FheUint16) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint24Id>> for u32
impl BitXorSizeOnGpu<FheUint<FheUint24Id>> for u32
fn get_bitxor_size_on_gpu(&self, rhs: FheUint24) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint32Id>> for u32
impl BitXorSizeOnGpu<FheUint<FheUint32Id>> for u32
fn get_bitxor_size_on_gpu(&self, rhs: FheUint32) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint40Id>> for u64
impl BitXorSizeOnGpu<FheUint<FheUint40Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint40) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint48Id>> for u64
impl BitXorSizeOnGpu<FheUint<FheUint48Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint48) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint56Id>> for u64
impl BitXorSizeOnGpu<FheUint<FheUint56Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint56) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint64Id>> for u64
impl BitXorSizeOnGpu<FheUint<FheUint64Id>> for u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint64) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint72Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint72Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint72) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint80Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint80Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint80) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint88Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint88Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint88) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint96Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint96Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint96) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint104Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint104Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint104) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint112Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint112Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint112) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint120Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint120Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint120) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint128Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint128Id>> for u128
fn get_bitxor_size_on_gpu(&self, rhs: FheUint128) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint136Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint136Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint136) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint144Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint144Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint144) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint152Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint152Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint152) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint160Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint160Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint160) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint168Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint168Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint168) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint176Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint176Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint176) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint184Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint184Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint184) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint192Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint192Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint192) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint200Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint200Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint200) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint208Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint208Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint208) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint216Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint216Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint216) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint224Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint224Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint224) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint232Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint232Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint232) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint240Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint240Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint240) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint248Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint248Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint248) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint256Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint256Id>> for U256
fn get_bitxor_size_on_gpu(&self, rhs: FheUint256) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint512Id>> for U512
impl BitXorSizeOnGpu<FheUint<FheUint512Id>> for U512
fn get_bitxor_size_on_gpu(&self, rhs: FheUint512) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl BitXorSizeOnGpu<FheUint<FheUint1024Id>> for U1024
fn get_bitxor_size_on_gpu(&self, rhs: FheUint1024) -> u64
Source§impl BitXorSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl BitXorSizeOnGpu<FheUint<FheUint2048Id>> for U2048
fn get_bitxor_size_on_gpu(&self, rhs: FheUint2048) -> u64
Source§impl<Id, I> BitXorSizeOnGpu<I> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, I> BitXorSizeOnGpu<I> for FheUint<Id>
gpu only.fn get_bitxor_size_on_gpu(&self, rhs: I) -> u64
Source§impl<Id> CastFrom<FheBool> for FheUint<Id>where
Id: FheUintId,
impl<Id> CastFrom<FheBool> for FheUint<Id>where
Id: FheUintId,
Source§fn cast_from(input: FheBool) -> Self
fn cast_from(input: FheBool) -> Self
Cast a boolean ciphertext to an unsigned ciphertext
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheUint16::cast_from(a);
let decrypted: u16 = b.decrypt(&client_key);
assert_eq!(decrypted, u16::from(true));Source§impl<FromId, IntoId> CastFrom<FheInt<FromId>> for FheUint<IntoId>
impl<FromId, IntoId> CastFrom<FheInt<FromId>> for FheUint<IntoId>
Source§fn cast_from(input: FheInt<FromId>) -> Self
fn cast_from(input: FheInt<FromId>) -> Self
Cast a FheInt to an FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt32, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheInt32::encrypt(i32::MIN, &client_key);
let b = FheUint16::cast_from(a);
let decrypted: u16 = b.decrypt(&client_key);
assert_eq!(decrypted, i32::MIN as u16);Source§impl<FromId, IntoId> CastFrom<FheUint<FromId>> for FheInt<IntoId>
impl<FromId, IntoId> CastFrom<FheUint<FromId>> for FheInt<IntoId>
Source§fn cast_from(input: FheUint<FromId>) -> Self
fn cast_from(input: FheUint<FromId>) -> Self
Cast a FheUint to a FheInt
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint32};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint32::encrypt(u32::MAX, &client_key);
let b = FheInt16::cast_from(a);
let decrypted: i16 = b.decrypt(&client_key);
assert_eq!(decrypted, u32::MAX as i16);Source§impl<FromId, IntoId> CastFrom<FheUint<FromId>> for FheUint<IntoId>
impl<FromId, IntoId> CastFrom<FheUint<FromId>> for FheUint<IntoId>
Source§fn cast_from(input: FheUint<FromId>) -> Self
fn cast_from(input: FheUint<FromId>) -> Self
Cast FheUint to another FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16, FheUint32};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint32::encrypt(u32::MAX, &client_key);
let b = FheUint16::cast_from(a);
let decrypted: u16 = b.decrypt(&client_key);
assert_eq!(decrypted, u32::MAX as u16);Source§impl<Id: FheUintId> CudaCompressible for FheUint<Id>
impl<Id: FheUintId> CudaCompressible for FheUint<Id>
fn compress_into( self, messages: &mut Vec<CudaRadixCiphertext>, streams: &CudaStreams, ) -> Option<DataKind>
Source§impl<Id: FheUintId> CudaExpandable for FheUint<Id>
impl<Id: FheUintId> CudaExpandable for FheUint<Id>
fn from_expanded_blocks( blocks: CudaRadixCiphertext, kind: DataKind, ) -> Result<Self>
Source§impl<'de, Id> Deserialize<'de> for FheUint<Id>where
Id: Deserialize<'de> + FheUintId,
impl<'de, Id> Deserialize<'de> for FheUint<Id>where
Id: Deserialize<'de> + FheUintId,
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl<Id, B> Div<B> for &FheUint<Id>
impl<Id, B> Div<B> for &FheUint<Id>
Source§fn div(self, rhs: B) -> Self::Output
fn div(self, rhs: B) -> Self::Output
Divides two FheUint and returns the quotient
§Note
If you need both the quotient and remainder, then prefer to use
FheUint::div_rem, instead of using / and % separately.
When the divisor is 0, the returned quotient will be the max value (i.e. all bits set to 1).
This behaviour should not be relied on.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a / &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 37849u16 / 3u16);Source§impl<Id, I> DivAssign<I> for FheUint<Id>
impl<Id, I> DivAssign<I> for FheUint<Id>
Source§fn div_assign(&mut self, rhs: I)
fn div_assign(&mut self, rhs: I)
Performs the /= operation on FheUint
§Note
If you need both the quotient and remainder, then prefer to use
FheUint::div_rem, instead of using / and % separately.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a /= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 37849u16 / 3u16);Source§impl<Id> DivRem for &FheUint<Id>where
Id: FheUintId,
impl<Id> DivRem for &FheUint<Id>where
Id: FheUintId,
Source§fn div_rem(self, rhs: Self) -> Self::Output
fn div_rem(self, rhs: Self) -> Self::Output
Computes the quotient and remainder between two FheUint
If you need both the quotient and remainder, then div_rem is better
than computing them separately using / and %.
§Notes
When the divisor is 0, the returned quotient will be the max value (i.e. all bits set to 1), the remainder will be the value of the numerator.
This behaviour should not be relied on.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(23u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let (quotient, remainder) = (&a).div_rem(&b);
let quotient: u16 = quotient.decrypt(&client_key);
assert_eq!(quotient, 23u16 / 3u16);
let remainder: u16 = remainder.decrypt(&client_key);
assert_eq!(remainder, 23u16 % 3u16);type Output = (FheUint<Id>, FheUint<Id>)
Source§impl<Id> DivRemSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> DivRemSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_div_rem_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id> DivSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> DivSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_div_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id: FheUintId> Expandable for FheUint<Id>
impl<Id: FheUintId> Expandable for FheUint<Id>
fn from_expanded_blocks(blocks: Vec<Ciphertext>, kind: DataKind) -> Result<Self>
Source§impl<Id, ClearType> FheDecrypt<ClearType> for FheUint<Id>
impl<Id, ClearType> FheDecrypt<ClearType> for FheUint<Id>
Source§fn decrypt(&self, key: &ClientKey) -> ClearType
fn decrypt(&self, key: &ClientKey) -> ClearType
Decrypts a FheUint to an unsigned type.
The unsigned type has to be explicit.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(7288u16, &client_key);
// u16 is explicit
let decrypted: u16 = a.decrypt(&client_key);
assert_eq!(decrypted, 7288u16);
// u32 is explicit
let decrypted: u32 = a.decrypt(&client_key);
assert_eq!(decrypted, 7288u32);Source§impl<Id> FheEq<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> FheEq<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn eq(&self, rhs: &Self) -> FheBool
fn eq(&self, rhs: &Self) -> FheBool
Test for equality between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.eq(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 == 2u16);Source§fn ne(&self, rhs: &Self) -> FheBool
fn ne(&self, rhs: &Self) -> FheBool
Test for difference between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.ne(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 != 2u16);Source§impl<Id, Clear> FheEq<Clear> for FheUint<Id>
impl<Id, Clear> FheEq<Clear> for FheUint<Id>
Source§fn eq(&self, rhs: Clear) -> FheBool
fn eq(&self, rhs: Clear) -> FheBool
Test for equality between a FheUint and a clear
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.eq(b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 == 2u16);Source§fn ne(&self, rhs: Clear) -> FheBool
fn ne(&self, rhs: Clear) -> FheBool
Test for difference between a FheUint and a clear
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.ne(b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 != 2u16);Source§impl<Id> FheEqSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> FheEqSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_eq_size_on_gpu(&self, rhs: &Self) -> u64
fn get_ne_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Clear> FheEqSizeOnGpu<Clear> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, Clear> FheEqSizeOnGpu<Clear> for FheUint<Id>
gpu only.fn get_eq_size_on_gpu(&self, _rhs: Clear) -> u64
fn get_ne_size_on_gpu(&self, _rhs: Clear) -> u64
Source§impl<Id> FheIntegerType for FheUint<Id>where
Id: FheUintId,
impl<Id> FheIntegerType for FheUint<Id>where
Id: FheUintId,
type Id = Id
fn on_cpu(&self) -> MaybeCloned<'_, <Self::Id as IntegerId>::InnerCpu>
fn into_cpu(self) -> <Self::Id as IntegerId>::InnerCpu
fn from_cpu( inner: <Self::Id as IntegerId>::InnerCpu, tag: Tag, re_randomization_metadata: ReRandomizationMetadata, ) -> Self
fn on_gpu( &self, streams: &CudaStreams, ) -> MaybeCloned<'_, <Self::Id as IntegerId>::InnerGpu>
fn into_gpu(self, streams: &CudaStreams) -> <Self::Id as IntegerId>::InnerGpu
fn from_gpu( inner: <Self::Id as IntegerId>::InnerGpu, tag: Tag, re_randomization_metadata: ReRandomizationMetadata, ) -> Self
Source§impl<Id> FheKeyswitch<FheUint<Id>> for KeySwitchingKeywhere
Id: FheUintId,
impl<Id> FheKeyswitch<FheUint<Id>> for KeySwitchingKeywhere
Id: FheUintId,
Source§impl<Id> FheMax<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> FheMax<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn max(&self, rhs: &Self) -> Self::Output
fn max(&self, rhs: &Self) -> Self::Output
Returns the max between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.max(&b);
let decrypted_max: u16 = result.decrypt(&client_key);
assert_eq!(decrypted_max, 2u16);type Output = FheUint<Id>
Source§impl<Id, Clear> FheMax<Clear> for FheUint<Id>
impl<Id, Clear> FheMax<Clear> for FheUint<Id>
Source§fn max(&self, rhs: Clear) -> Self::Output
fn max(&self, rhs: Clear) -> Self::Output
Returns the max between FheUint and a clear value
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.max(b);
let decrypted_max: u16 = result.decrypt(&client_key);
assert_eq!(decrypted_max, 2u16);type Output = FheUint<Id>
Source§impl<Id> FheMaxSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> FheMaxSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_max_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Clear> FheMaxSizeOnGpu<Clear> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, Clear> FheMaxSizeOnGpu<Clear> for FheUint<Id>
gpu only.fn get_max_size_on_gpu(&self, _rhs: Clear) -> u64
Source§impl<Id> FheMin<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> FheMin<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn min(&self, rhs: &Self) -> Self::Output
fn min(&self, rhs: &Self) -> Self::Output
Returns the min between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.min(&b);
let decrypted_min: u16 = result.decrypt(&client_key);
assert_eq!(decrypted_min, 1u16);type Output = FheUint<Id>
Source§impl<Id, Clear> FheMin<Clear> for FheUint<Id>
impl<Id, Clear> FheMin<Clear> for FheUint<Id>
Source§fn min(&self, rhs: Clear) -> Self::Output
fn min(&self, rhs: Clear) -> Self::Output
Returns the min between FheUint and a clear value
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.min(b);
let decrypted_min: u16 = result.decrypt(&client_key);
assert_eq!(decrypted_min, 1u16);type Output = FheUint<Id>
Source§impl<Id> FheMinSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> FheMinSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_min_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Clear> FheMinSizeOnGpu<Clear> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, Clear> FheMinSizeOnGpu<Clear> for FheUint<Id>
gpu only.fn get_min_size_on_gpu(&self, _rhs: Clear) -> u64
Source§impl<Id> FheOrd<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> FheOrd<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn lt(&self, rhs: &Self) -> FheBool
fn lt(&self, rhs: &Self) -> FheBool
Test for less than between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.lt(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 < 2u16);Source§fn le(&self, rhs: &Self) -> FheBool
fn le(&self, rhs: &Self) -> FheBool
Test for less than or equal between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.le(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 <= 2u16);Source§fn gt(&self, rhs: &Self) -> FheBool
fn gt(&self, rhs: &Self) -> FheBool
Test for greater than between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.gt(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 > 2u16);Source§fn ge(&self, rhs: &Self) -> FheBool
fn ge(&self, rhs: &Self) -> FheBool
Test for greater than or equal between two FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = FheUint16::encrypt(2u16, &client_key);
let result = a.gt(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 > 2u16);Source§impl<Id, Clear> FheOrd<Clear> for FheUint<Id>
impl<Id, Clear> FheOrd<Clear> for FheUint<Id>
Source§fn lt(&self, rhs: Clear) -> FheBool
fn lt(&self, rhs: Clear) -> FheBool
Test for less than between a FheUint and a clear value
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.lt(b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 < 2u16);Source§fn le(&self, rhs: Clear) -> FheBool
fn le(&self, rhs: Clear) -> FheBool
Test for less than or equal between a FheUint and a clear value
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.le(b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 <= 2u16);Source§fn gt(&self, rhs: Clear) -> FheBool
fn gt(&self, rhs: Clear) -> FheBool
Test for greater than between a FheUint and a clear value
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.gt(b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 > 2u16);Source§fn ge(&self, rhs: Clear) -> FheBool
fn ge(&self, rhs: Clear) -> FheBool
Test for greater than or equal between a FheUint and a clear value
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(1u16, &client_key);
let b = 2u16;
let result = a.ge(b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, 1u16 >= 2u16);Source§impl<Id> FheOrdSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> FheOrdSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_gt_size_on_gpu(&self, rhs: &Self) -> u64
fn get_ge_size_on_gpu(&self, rhs: &Self) -> u64
fn get_lt_size_on_gpu(&self, rhs: &Self) -> u64
fn get_le_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Clear> FheOrdSizeOnGpu<Clear> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, Clear> FheOrdSizeOnGpu<Clear> for FheUint<Id>
gpu only.fn get_gt_size_on_gpu(&self, _rhs: Clear) -> u64
fn get_ge_size_on_gpu(&self, _rhs: Clear) -> u64
fn get_lt_size_on_gpu(&self, _rhs: Clear) -> u64
fn get_le_size_on_gpu(&self, _rhs: Clear) -> u64
Source§impl<Id, Clear> FheSliceDotProduct<FheBool, Clear> for FheUint<Id>where
Clear: UnsignedNumeric + DecomposableInto<u64> + CastInto<usize> + CastFrom<u128> + Mul<Clear, Output = Clear> + AddAssign<Clear> + OverflowingAdd<Clear, Output = Clear>,
Id: FheUintId,
impl<Id, Clear> FheSliceDotProduct<FheBool, Clear> for FheUint<Id>where
Clear: UnsignedNumeric + DecomposableInto<u64> + CastInto<usize> + CastFrom<u128> + Mul<Clear, Output = Clear> + AddAssign<Clear> + OverflowingAdd<Clear, Output = Clear>,
Id: FheUintId,
Source§fn dot_product(bools: &[FheBool], clears: &[Clear]) -> Self
fn dot_product(bools: &[FheBool], clears: &[Clear]) -> Self
Performs a dot product between a slice of encrypted booleans and a slice of clear unsigned integers.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint8};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = [true, false, true]
.into_iter()
.map(|b| FheBool::encrypt(b, &client_key))
.collect::<Vec<_>>();
let b = [2u8, 3u8, 4u8];
let result = FheUint8::dot_product(&a, &b);
let decrypted: u8 = result.decrypt(&client_key);
assert_eq!(decrypted, 6u8);Source§impl<Id, T> FheTrivialEncrypt<T> for FheUint<Id>
impl<Id, T> FheTrivialEncrypt<T> for FheUint<Id>
Source§fn encrypt_trivial(value: T) -> Self
fn encrypt_trivial(value: T) -> Self
Creates a trivially encrypted FheUint
A trivial encryption is not an encryption, the value can be retrieved by anyone as if it were a clear value.
Thus no client or public key is needed to create a trivial encryption, this can be useful to initialize some values.
As soon as a trivial encryption is used in an operation that involves non trivial encryption, the result will be non trivial (secure).
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt_trivial(7288u16);
let decrypted: u16 = a.decrypt(&client_key);
assert_eq!(decrypted, 7288u16);Source§impl<Id, T> FheTryEncrypt<T, ClientKey> for FheUint<Id>
impl<Id, T> FheTryEncrypt<T, ClientKey> for FheUint<Id>
Source§impl<Id, T> FheTryEncrypt<T, CompressedPublicKey> for FheUint<Id>
impl<Id, T> FheTryEncrypt<T, CompressedPublicKey> for FheUint<Id>
type Error = Error
fn try_encrypt(value: T, key: &CompressedPublicKey) -> Result<Self, Self::Error>
Source§impl<Id, T> FheTryEncrypt<T, PublicKey> for FheUint<Id>
impl<Id, T> FheTryEncrypt<T, PublicKey> for FheUint<Id>
Source§impl<Id, T> FheTryTrivialEncrypt<T> for FheUint<Id>
impl<Id, T> FheTryTrivialEncrypt<T> for FheUint<Id>
Source§impl<Id> Flip<&FheUint<Id>, &FheUint<Id>> for FheBool
impl<Id> Flip<&FheUint<Id>, &FheUint<Id>> for FheBool
Source§fn flip(
&self,
lhs: &FheUint<Id>,
rhs: &FheUint<Id>,
) -> (Self::Output, Self::Output)
fn flip( &self, lhs: &FheUint<Id>, rhs: &FheUint<Id>, ) -> (Self::Output, Self::Output)
Flips the two inputs based on the value of self.
- flip(true, a, b) returns (b, a)
- flip(false, a, b) returns (a, b)
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint32};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = u32::MIN;
let b = FheUint32::encrypt(u32::MAX, &client_key);
let cond = FheBool::encrypt(true, &client_key);
let (ra, rb) = cond.flip(a, &b);
let da: u32 = ra.decrypt(&client_key);
let db: u32 = rb.decrypt(&client_key);
assert_eq!((da, db), (u32::MAX, u32::MIN));type Output = FheUint<Id>
Source§impl FusedMulScalarDiv<&FheUint<FheUint2Id>, u8> for &FheUint2
impl FusedMulScalarDiv<&FheUint<FheUint2Id>, u8> for &FheUint2
Source§impl FusedMulScalarDiv<&FheUint<FheUint2Id>, u8> for FheUint2
impl FusedMulScalarDiv<&FheUint<FheUint2Id>, u8> for FheUint2
Source§impl FusedMulScalarDiv<&FheUint<FheUint4Id>, u8> for &FheUint4
impl FusedMulScalarDiv<&FheUint<FheUint4Id>, u8> for &FheUint4
Source§impl FusedMulScalarDiv<&FheUint<FheUint4Id>, u8> for FheUint4
impl FusedMulScalarDiv<&FheUint<FheUint4Id>, u8> for FheUint4
Source§impl FusedMulScalarDiv<&FheUint<FheUint6Id>, u8> for &FheUint6
impl FusedMulScalarDiv<&FheUint<FheUint6Id>, u8> for &FheUint6
Source§impl FusedMulScalarDiv<&FheUint<FheUint6Id>, u8> for FheUint6
impl FusedMulScalarDiv<&FheUint<FheUint6Id>, u8> for FheUint6
Source§impl FusedMulScalarDiv<&FheUint<FheUint8Id>, u8> for &FheUint8
impl FusedMulScalarDiv<&FheUint<FheUint8Id>, u8> for &FheUint8
Source§impl FusedMulScalarDiv<&FheUint<FheUint8Id>, u8> for FheUint8
impl FusedMulScalarDiv<&FheUint<FheUint8Id>, u8> for FheUint8
Source§impl FusedMulScalarDiv<&FheUint<FheUint10Id>, u16> for &FheUint10
impl FusedMulScalarDiv<&FheUint<FheUint10Id>, u16> for &FheUint10
Source§impl FusedMulScalarDiv<&FheUint<FheUint10Id>, u16> for FheUint10
impl FusedMulScalarDiv<&FheUint<FheUint10Id>, u16> for FheUint10
Source§impl FusedMulScalarDiv<&FheUint<FheUint12Id>, u16> for &FheUint12
impl FusedMulScalarDiv<&FheUint<FheUint12Id>, u16> for &FheUint12
Source§impl FusedMulScalarDiv<&FheUint<FheUint12Id>, u16> for FheUint12
impl FusedMulScalarDiv<&FheUint<FheUint12Id>, u16> for FheUint12
Source§impl FusedMulScalarDiv<&FheUint<FheUint14Id>, u16> for &FheUint14
impl FusedMulScalarDiv<&FheUint<FheUint14Id>, u16> for &FheUint14
Source§impl FusedMulScalarDiv<&FheUint<FheUint14Id>, u16> for FheUint14
impl FusedMulScalarDiv<&FheUint<FheUint14Id>, u16> for FheUint14
Source§impl FusedMulScalarDiv<&FheUint<FheUint16Id>, u16> for &FheUint16
impl FusedMulScalarDiv<&FheUint<FheUint16Id>, u16> for &FheUint16
Source§impl FusedMulScalarDiv<&FheUint<FheUint16Id>, u16> for FheUint16
impl FusedMulScalarDiv<&FheUint<FheUint16Id>, u16> for FheUint16
Source§impl FusedMulScalarDiv<&FheUint<FheUint24Id>, u32> for &FheUint24
impl FusedMulScalarDiv<&FheUint<FheUint24Id>, u32> for &FheUint24
Source§impl FusedMulScalarDiv<&FheUint<FheUint24Id>, u32> for FheUint24
impl FusedMulScalarDiv<&FheUint<FheUint24Id>, u32> for FheUint24
Source§impl FusedMulScalarDiv<&FheUint<FheUint32Id>, u32> for &FheUint32
impl FusedMulScalarDiv<&FheUint<FheUint32Id>, u32> for &FheUint32
Source§impl FusedMulScalarDiv<&FheUint<FheUint32Id>, u32> for FheUint32
impl FusedMulScalarDiv<&FheUint<FheUint32Id>, u32> for FheUint32
Source§impl FusedMulScalarDiv<&FheUint<FheUint40Id>, u64> for &FheUint40
impl FusedMulScalarDiv<&FheUint<FheUint40Id>, u64> for &FheUint40
Source§impl FusedMulScalarDiv<&FheUint<FheUint40Id>, u64> for FheUint40
impl FusedMulScalarDiv<&FheUint<FheUint40Id>, u64> for FheUint40
Source§impl FusedMulScalarDiv<&FheUint<FheUint48Id>, u64> for &FheUint48
impl FusedMulScalarDiv<&FheUint<FheUint48Id>, u64> for &FheUint48
Source§impl FusedMulScalarDiv<&FheUint<FheUint48Id>, u64> for FheUint48
impl FusedMulScalarDiv<&FheUint<FheUint48Id>, u64> for FheUint48
Source§impl FusedMulScalarDiv<&FheUint<FheUint56Id>, u64> for &FheUint56
impl FusedMulScalarDiv<&FheUint<FheUint56Id>, u64> for &FheUint56
Source§impl FusedMulScalarDiv<&FheUint<FheUint56Id>, u64> for FheUint56
impl FusedMulScalarDiv<&FheUint<FheUint56Id>, u64> for FheUint56
Source§impl FusedMulScalarDiv<&FheUint<FheUint64Id>, u64> for &FheUint64
impl FusedMulScalarDiv<&FheUint<FheUint64Id>, u64> for &FheUint64
Source§impl FusedMulScalarDiv<&FheUint<FheUint64Id>, u64> for FheUint64
impl FusedMulScalarDiv<&FheUint<FheUint64Id>, u64> for FheUint64
Source§impl FusedMulScalarDiv<&FheUint<FheUint72Id>, u128> for &FheUint72
impl FusedMulScalarDiv<&FheUint<FheUint72Id>, u128> for &FheUint72
Source§impl FusedMulScalarDiv<&FheUint<FheUint72Id>, u128> for FheUint72
impl FusedMulScalarDiv<&FheUint<FheUint72Id>, u128> for FheUint72
Source§impl FusedMulScalarDiv<&FheUint<FheUint80Id>, u128> for &FheUint80
impl FusedMulScalarDiv<&FheUint<FheUint80Id>, u128> for &FheUint80
Source§impl FusedMulScalarDiv<&FheUint<FheUint80Id>, u128> for FheUint80
impl FusedMulScalarDiv<&FheUint<FheUint80Id>, u128> for FheUint80
Source§impl FusedMulScalarDiv<&FheUint<FheUint88Id>, u128> for &FheUint88
impl FusedMulScalarDiv<&FheUint<FheUint88Id>, u128> for &FheUint88
Source§impl FusedMulScalarDiv<&FheUint<FheUint88Id>, u128> for FheUint88
impl FusedMulScalarDiv<&FheUint<FheUint88Id>, u128> for FheUint88
Source§impl FusedMulScalarDiv<&FheUint<FheUint96Id>, u128> for &FheUint96
impl FusedMulScalarDiv<&FheUint<FheUint96Id>, u128> for &FheUint96
Source§impl FusedMulScalarDiv<&FheUint<FheUint96Id>, u128> for FheUint96
impl FusedMulScalarDiv<&FheUint<FheUint96Id>, u128> for FheUint96
Source§impl FusedMulScalarDiv<&FheUint<FheUint104Id>, u128> for &FheUint104
impl FusedMulScalarDiv<&FheUint<FheUint104Id>, u128> for &FheUint104
type Output = FheUint<FheUint104Id>
fn fused_mul_scalar_div( self, mul: &FheUint104, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint104Id>, u128> for FheUint104
impl FusedMulScalarDiv<&FheUint<FheUint104Id>, u128> for FheUint104
type Output = FheUint<FheUint104Id>
fn fused_mul_scalar_div( self, mul: &FheUint104, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint112Id>, u128> for &FheUint112
impl FusedMulScalarDiv<&FheUint<FheUint112Id>, u128> for &FheUint112
type Output = FheUint<FheUint112Id>
fn fused_mul_scalar_div( self, mul: &FheUint112, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint112Id>, u128> for FheUint112
impl FusedMulScalarDiv<&FheUint<FheUint112Id>, u128> for FheUint112
type Output = FheUint<FheUint112Id>
fn fused_mul_scalar_div( self, mul: &FheUint112, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint120Id>, u128> for &FheUint120
impl FusedMulScalarDiv<&FheUint<FheUint120Id>, u128> for &FheUint120
type Output = FheUint<FheUint120Id>
fn fused_mul_scalar_div( self, mul: &FheUint120, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint120Id>, u128> for FheUint120
impl FusedMulScalarDiv<&FheUint<FheUint120Id>, u128> for FheUint120
type Output = FheUint<FheUint120Id>
fn fused_mul_scalar_div( self, mul: &FheUint120, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint128Id>, u128> for &FheUint128
impl FusedMulScalarDiv<&FheUint<FheUint128Id>, u128> for &FheUint128
type Output = FheUint<FheUint128Id>
fn fused_mul_scalar_div( self, mul: &FheUint128, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint128Id>, u128> for FheUint128
impl FusedMulScalarDiv<&FheUint<FheUint128Id>, u128> for FheUint128
type Output = FheUint<FheUint128Id>
fn fused_mul_scalar_div( self, mul: &FheUint128, div_scalar: u128, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for &FheUint136
impl FusedMulScalarDiv<&FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for &FheUint136
type Output = FheUint<FheUint136Id>
fn fused_mul_scalar_div( self, mul: &FheUint136, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for FheUint136
impl FusedMulScalarDiv<&FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for FheUint136
type Output = FheUint<FheUint136Id>
fn fused_mul_scalar_div( self, mul: &FheUint136, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for &FheUint144
impl FusedMulScalarDiv<&FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for &FheUint144
type Output = FheUint<FheUint144Id>
fn fused_mul_scalar_div( self, mul: &FheUint144, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for FheUint144
impl FusedMulScalarDiv<&FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for FheUint144
type Output = FheUint<FheUint144Id>
fn fused_mul_scalar_div( self, mul: &FheUint144, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for &FheUint152
impl FusedMulScalarDiv<&FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for &FheUint152
type Output = FheUint<FheUint152Id>
fn fused_mul_scalar_div( self, mul: &FheUint152, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for FheUint152
impl FusedMulScalarDiv<&FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for FheUint152
type Output = FheUint<FheUint152Id>
fn fused_mul_scalar_div( self, mul: &FheUint152, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for &FheUint160
impl FusedMulScalarDiv<&FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for &FheUint160
type Output = FheUint<FheUint160Id>
fn fused_mul_scalar_div( self, mul: &FheUint160, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for FheUint160
impl FusedMulScalarDiv<&FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for FheUint160
type Output = FheUint<FheUint160Id>
fn fused_mul_scalar_div( self, mul: &FheUint160, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for &FheUint168
impl FusedMulScalarDiv<&FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for &FheUint168
type Output = FheUint<FheUint168Id>
fn fused_mul_scalar_div( self, mul: &FheUint168, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for FheUint168
impl FusedMulScalarDiv<&FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for FheUint168
type Output = FheUint<FheUint168Id>
fn fused_mul_scalar_div( self, mul: &FheUint168, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for &FheUint176
impl FusedMulScalarDiv<&FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for &FheUint176
type Output = FheUint<FheUint176Id>
fn fused_mul_scalar_div( self, mul: &FheUint176, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for FheUint176
impl FusedMulScalarDiv<&FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for FheUint176
type Output = FheUint<FheUint176Id>
fn fused_mul_scalar_div( self, mul: &FheUint176, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for &FheUint184
impl FusedMulScalarDiv<&FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for &FheUint184
type Output = FheUint<FheUint184Id>
fn fused_mul_scalar_div( self, mul: &FheUint184, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for FheUint184
impl FusedMulScalarDiv<&FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for FheUint184
type Output = FheUint<FheUint184Id>
fn fused_mul_scalar_div( self, mul: &FheUint184, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for &FheUint192
impl FusedMulScalarDiv<&FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for &FheUint192
type Output = FheUint<FheUint192Id>
fn fused_mul_scalar_div( self, mul: &FheUint192, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for FheUint192
impl FusedMulScalarDiv<&FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for FheUint192
type Output = FheUint<FheUint192Id>
fn fused_mul_scalar_div( self, mul: &FheUint192, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for &FheUint200
impl FusedMulScalarDiv<&FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for &FheUint200
type Output = FheUint<FheUint200Id>
fn fused_mul_scalar_div( self, mul: &FheUint200, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for FheUint200
impl FusedMulScalarDiv<&FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for FheUint200
type Output = FheUint<FheUint200Id>
fn fused_mul_scalar_div( self, mul: &FheUint200, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for &FheUint208
impl FusedMulScalarDiv<&FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for &FheUint208
type Output = FheUint<FheUint208Id>
fn fused_mul_scalar_div( self, mul: &FheUint208, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for FheUint208
impl FusedMulScalarDiv<&FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for FheUint208
type Output = FheUint<FheUint208Id>
fn fused_mul_scalar_div( self, mul: &FheUint208, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for &FheUint216
impl FusedMulScalarDiv<&FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for &FheUint216
type Output = FheUint<FheUint216Id>
fn fused_mul_scalar_div( self, mul: &FheUint216, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for FheUint216
impl FusedMulScalarDiv<&FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for FheUint216
type Output = FheUint<FheUint216Id>
fn fused_mul_scalar_div( self, mul: &FheUint216, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for &FheUint224
impl FusedMulScalarDiv<&FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for &FheUint224
type Output = FheUint<FheUint224Id>
fn fused_mul_scalar_div( self, mul: &FheUint224, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for FheUint224
impl FusedMulScalarDiv<&FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for FheUint224
type Output = FheUint<FheUint224Id>
fn fused_mul_scalar_div( self, mul: &FheUint224, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for &FheUint232
impl FusedMulScalarDiv<&FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for &FheUint232
type Output = FheUint<FheUint232Id>
fn fused_mul_scalar_div( self, mul: &FheUint232, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for FheUint232
impl FusedMulScalarDiv<&FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for FheUint232
type Output = FheUint<FheUint232Id>
fn fused_mul_scalar_div( self, mul: &FheUint232, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for &FheUint240
impl FusedMulScalarDiv<&FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for &FheUint240
type Output = FheUint<FheUint240Id>
fn fused_mul_scalar_div( self, mul: &FheUint240, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for FheUint240
impl FusedMulScalarDiv<&FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for FheUint240
type Output = FheUint<FheUint240Id>
fn fused_mul_scalar_div( self, mul: &FheUint240, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for &FheUint248
impl FusedMulScalarDiv<&FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for &FheUint248
type Output = FheUint<FheUint248Id>
fn fused_mul_scalar_div( self, mul: &FheUint248, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for FheUint248
impl FusedMulScalarDiv<&FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for FheUint248
type Output = FheUint<FheUint248Id>
fn fused_mul_scalar_div( self, mul: &FheUint248, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for &FheUint256
impl FusedMulScalarDiv<&FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for &FheUint256
type Output = FheUint<FheUint256Id>
fn fused_mul_scalar_div( self, mul: &FheUint256, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for FheUint256
impl FusedMulScalarDiv<&FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for FheUint256
type Output = FheUint<FheUint256Id>
fn fused_mul_scalar_div( self, mul: &FheUint256, div_scalar: U256, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for &FheUint512
impl FusedMulScalarDiv<&FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for &FheUint512
type Output = FheUint<FheUint512Id>
fn fused_mul_scalar_div( self, mul: &FheUint512, div_scalar: U512, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for FheUint512
impl FusedMulScalarDiv<&FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for FheUint512
type Output = FheUint<FheUint512Id>
fn fused_mul_scalar_div( self, mul: &FheUint512, div_scalar: U512, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for &FheUint1024
impl FusedMulScalarDiv<&FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for &FheUint1024
type Output = FheUint<FheUint1024Id>
fn fused_mul_scalar_div( self, mul: &FheUint1024, div_scalar: U1024, ) -> Self::Output
Source§impl FusedMulScalarDiv<&FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for FheUint1024
impl FusedMulScalarDiv<&FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for FheUint1024
type Output = FheUint<FheUint1024Id>
fn fused_mul_scalar_div( self, mul: &FheUint1024, div_scalar: U1024, ) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint2Id>, u8> for FheUint2
impl FusedMulScalarDiv<FheUint<FheUint2Id>, u8> for FheUint2
Source§impl FusedMulScalarDiv<FheUint<FheUint2Id>, u8> for &FheUint2
impl FusedMulScalarDiv<FheUint<FheUint2Id>, u8> for &FheUint2
Source§impl FusedMulScalarDiv<FheUint<FheUint4Id>, u8> for FheUint4
impl FusedMulScalarDiv<FheUint<FheUint4Id>, u8> for FheUint4
Source§impl FusedMulScalarDiv<FheUint<FheUint4Id>, u8> for &FheUint4
impl FusedMulScalarDiv<FheUint<FheUint4Id>, u8> for &FheUint4
Source§impl FusedMulScalarDiv<FheUint<FheUint6Id>, u8> for FheUint6
impl FusedMulScalarDiv<FheUint<FheUint6Id>, u8> for FheUint6
Source§impl FusedMulScalarDiv<FheUint<FheUint6Id>, u8> for &FheUint6
impl FusedMulScalarDiv<FheUint<FheUint6Id>, u8> for &FheUint6
Source§impl FusedMulScalarDiv<FheUint<FheUint8Id>, u8> for FheUint8
impl FusedMulScalarDiv<FheUint<FheUint8Id>, u8> for FheUint8
Source§impl FusedMulScalarDiv<FheUint<FheUint8Id>, u8> for &FheUint8
impl FusedMulScalarDiv<FheUint<FheUint8Id>, u8> for &FheUint8
Source§impl FusedMulScalarDiv<FheUint<FheUint10Id>, u16> for FheUint10
impl FusedMulScalarDiv<FheUint<FheUint10Id>, u16> for FheUint10
Source§impl FusedMulScalarDiv<FheUint<FheUint10Id>, u16> for &FheUint10
impl FusedMulScalarDiv<FheUint<FheUint10Id>, u16> for &FheUint10
Source§impl FusedMulScalarDiv<FheUint<FheUint12Id>, u16> for FheUint12
impl FusedMulScalarDiv<FheUint<FheUint12Id>, u16> for FheUint12
Source§impl FusedMulScalarDiv<FheUint<FheUint12Id>, u16> for &FheUint12
impl FusedMulScalarDiv<FheUint<FheUint12Id>, u16> for &FheUint12
Source§impl FusedMulScalarDiv<FheUint<FheUint14Id>, u16> for FheUint14
impl FusedMulScalarDiv<FheUint<FheUint14Id>, u16> for FheUint14
Source§impl FusedMulScalarDiv<FheUint<FheUint14Id>, u16> for &FheUint14
impl FusedMulScalarDiv<FheUint<FheUint14Id>, u16> for &FheUint14
Source§impl FusedMulScalarDiv<FheUint<FheUint16Id>, u16> for FheUint16
impl FusedMulScalarDiv<FheUint<FheUint16Id>, u16> for FheUint16
Source§impl FusedMulScalarDiv<FheUint<FheUint16Id>, u16> for &FheUint16
impl FusedMulScalarDiv<FheUint<FheUint16Id>, u16> for &FheUint16
Source§impl FusedMulScalarDiv<FheUint<FheUint24Id>, u32> for FheUint24
impl FusedMulScalarDiv<FheUint<FheUint24Id>, u32> for FheUint24
Source§impl FusedMulScalarDiv<FheUint<FheUint24Id>, u32> for &FheUint24
impl FusedMulScalarDiv<FheUint<FheUint24Id>, u32> for &FheUint24
Source§impl FusedMulScalarDiv<FheUint<FheUint32Id>, u32> for FheUint32
impl FusedMulScalarDiv<FheUint<FheUint32Id>, u32> for FheUint32
Source§impl FusedMulScalarDiv<FheUint<FheUint32Id>, u32> for &FheUint32
impl FusedMulScalarDiv<FheUint<FheUint32Id>, u32> for &FheUint32
Source§impl FusedMulScalarDiv<FheUint<FheUint40Id>, u64> for FheUint40
impl FusedMulScalarDiv<FheUint<FheUint40Id>, u64> for FheUint40
Source§impl FusedMulScalarDiv<FheUint<FheUint40Id>, u64> for &FheUint40
impl FusedMulScalarDiv<FheUint<FheUint40Id>, u64> for &FheUint40
Source§impl FusedMulScalarDiv<FheUint<FheUint48Id>, u64> for FheUint48
impl FusedMulScalarDiv<FheUint<FheUint48Id>, u64> for FheUint48
Source§impl FusedMulScalarDiv<FheUint<FheUint48Id>, u64> for &FheUint48
impl FusedMulScalarDiv<FheUint<FheUint48Id>, u64> for &FheUint48
Source§impl FusedMulScalarDiv<FheUint<FheUint56Id>, u64> for FheUint56
impl FusedMulScalarDiv<FheUint<FheUint56Id>, u64> for FheUint56
Source§impl FusedMulScalarDiv<FheUint<FheUint56Id>, u64> for &FheUint56
impl FusedMulScalarDiv<FheUint<FheUint56Id>, u64> for &FheUint56
Source§impl FusedMulScalarDiv<FheUint<FheUint64Id>, u64> for FheUint64
impl FusedMulScalarDiv<FheUint<FheUint64Id>, u64> for FheUint64
Source§impl FusedMulScalarDiv<FheUint<FheUint64Id>, u64> for &FheUint64
impl FusedMulScalarDiv<FheUint<FheUint64Id>, u64> for &FheUint64
Source§impl FusedMulScalarDiv<FheUint<FheUint72Id>, u128> for FheUint72
impl FusedMulScalarDiv<FheUint<FheUint72Id>, u128> for FheUint72
Source§impl FusedMulScalarDiv<FheUint<FheUint72Id>, u128> for &FheUint72
impl FusedMulScalarDiv<FheUint<FheUint72Id>, u128> for &FheUint72
Source§impl FusedMulScalarDiv<FheUint<FheUint80Id>, u128> for FheUint80
impl FusedMulScalarDiv<FheUint<FheUint80Id>, u128> for FheUint80
Source§impl FusedMulScalarDiv<FheUint<FheUint80Id>, u128> for &FheUint80
impl FusedMulScalarDiv<FheUint<FheUint80Id>, u128> for &FheUint80
Source§impl FusedMulScalarDiv<FheUint<FheUint88Id>, u128> for FheUint88
impl FusedMulScalarDiv<FheUint<FheUint88Id>, u128> for FheUint88
Source§impl FusedMulScalarDiv<FheUint<FheUint88Id>, u128> for &FheUint88
impl FusedMulScalarDiv<FheUint<FheUint88Id>, u128> for &FheUint88
Source§impl FusedMulScalarDiv<FheUint<FheUint96Id>, u128> for FheUint96
impl FusedMulScalarDiv<FheUint<FheUint96Id>, u128> for FheUint96
Source§impl FusedMulScalarDiv<FheUint<FheUint96Id>, u128> for &FheUint96
impl FusedMulScalarDiv<FheUint<FheUint96Id>, u128> for &FheUint96
Source§impl FusedMulScalarDiv<FheUint<FheUint104Id>, u128> for FheUint104
impl FusedMulScalarDiv<FheUint<FheUint104Id>, u128> for FheUint104
type Output = FheUint<FheUint104Id>
fn fused_mul_scalar_div(self, mul: FheUint104, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint104Id>, u128> for &FheUint104
impl FusedMulScalarDiv<FheUint<FheUint104Id>, u128> for &FheUint104
type Output = FheUint<FheUint104Id>
fn fused_mul_scalar_div(self, mul: FheUint104, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint112Id>, u128> for FheUint112
impl FusedMulScalarDiv<FheUint<FheUint112Id>, u128> for FheUint112
type Output = FheUint<FheUint112Id>
fn fused_mul_scalar_div(self, mul: FheUint112, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint112Id>, u128> for &FheUint112
impl FusedMulScalarDiv<FheUint<FheUint112Id>, u128> for &FheUint112
type Output = FheUint<FheUint112Id>
fn fused_mul_scalar_div(self, mul: FheUint112, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint120Id>, u128> for FheUint120
impl FusedMulScalarDiv<FheUint<FheUint120Id>, u128> for FheUint120
type Output = FheUint<FheUint120Id>
fn fused_mul_scalar_div(self, mul: FheUint120, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint120Id>, u128> for &FheUint120
impl FusedMulScalarDiv<FheUint<FheUint120Id>, u128> for &FheUint120
type Output = FheUint<FheUint120Id>
fn fused_mul_scalar_div(self, mul: FheUint120, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint128Id>, u128> for FheUint128
impl FusedMulScalarDiv<FheUint<FheUint128Id>, u128> for FheUint128
type Output = FheUint<FheUint128Id>
fn fused_mul_scalar_div(self, mul: FheUint128, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint128Id>, u128> for &FheUint128
impl FusedMulScalarDiv<FheUint<FheUint128Id>, u128> for &FheUint128
type Output = FheUint<FheUint128Id>
fn fused_mul_scalar_div(self, mul: FheUint128, div_scalar: u128) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for FheUint136
impl FusedMulScalarDiv<FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for FheUint136
type Output = FheUint<FheUint136Id>
fn fused_mul_scalar_div(self, mul: FheUint136, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for &FheUint136
impl FusedMulScalarDiv<FheUint<FheUint136Id>, StaticUnsignedBigInt<4>> for &FheUint136
type Output = FheUint<FheUint136Id>
fn fused_mul_scalar_div(self, mul: FheUint136, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for FheUint144
impl FusedMulScalarDiv<FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for FheUint144
type Output = FheUint<FheUint144Id>
fn fused_mul_scalar_div(self, mul: FheUint144, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for &FheUint144
impl FusedMulScalarDiv<FheUint<FheUint144Id>, StaticUnsignedBigInt<4>> for &FheUint144
type Output = FheUint<FheUint144Id>
fn fused_mul_scalar_div(self, mul: FheUint144, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for FheUint152
impl FusedMulScalarDiv<FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for FheUint152
type Output = FheUint<FheUint152Id>
fn fused_mul_scalar_div(self, mul: FheUint152, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for &FheUint152
impl FusedMulScalarDiv<FheUint<FheUint152Id>, StaticUnsignedBigInt<4>> for &FheUint152
type Output = FheUint<FheUint152Id>
fn fused_mul_scalar_div(self, mul: FheUint152, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for FheUint160
impl FusedMulScalarDiv<FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for FheUint160
type Output = FheUint<FheUint160Id>
fn fused_mul_scalar_div(self, mul: FheUint160, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for &FheUint160
impl FusedMulScalarDiv<FheUint<FheUint160Id>, StaticUnsignedBigInt<4>> for &FheUint160
type Output = FheUint<FheUint160Id>
fn fused_mul_scalar_div(self, mul: FheUint160, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for FheUint168
impl FusedMulScalarDiv<FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for FheUint168
type Output = FheUint<FheUint168Id>
fn fused_mul_scalar_div(self, mul: FheUint168, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for &FheUint168
impl FusedMulScalarDiv<FheUint<FheUint168Id>, StaticUnsignedBigInt<4>> for &FheUint168
type Output = FheUint<FheUint168Id>
fn fused_mul_scalar_div(self, mul: FheUint168, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for FheUint176
impl FusedMulScalarDiv<FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for FheUint176
type Output = FheUint<FheUint176Id>
fn fused_mul_scalar_div(self, mul: FheUint176, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for &FheUint176
impl FusedMulScalarDiv<FheUint<FheUint176Id>, StaticUnsignedBigInt<4>> for &FheUint176
type Output = FheUint<FheUint176Id>
fn fused_mul_scalar_div(self, mul: FheUint176, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for FheUint184
impl FusedMulScalarDiv<FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for FheUint184
type Output = FheUint<FheUint184Id>
fn fused_mul_scalar_div(self, mul: FheUint184, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for &FheUint184
impl FusedMulScalarDiv<FheUint<FheUint184Id>, StaticUnsignedBigInt<4>> for &FheUint184
type Output = FheUint<FheUint184Id>
fn fused_mul_scalar_div(self, mul: FheUint184, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for FheUint192
impl FusedMulScalarDiv<FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for FheUint192
type Output = FheUint<FheUint192Id>
fn fused_mul_scalar_div(self, mul: FheUint192, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for &FheUint192
impl FusedMulScalarDiv<FheUint<FheUint192Id>, StaticUnsignedBigInt<4>> for &FheUint192
type Output = FheUint<FheUint192Id>
fn fused_mul_scalar_div(self, mul: FheUint192, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for FheUint200
impl FusedMulScalarDiv<FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for FheUint200
type Output = FheUint<FheUint200Id>
fn fused_mul_scalar_div(self, mul: FheUint200, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for &FheUint200
impl FusedMulScalarDiv<FheUint<FheUint200Id>, StaticUnsignedBigInt<4>> for &FheUint200
type Output = FheUint<FheUint200Id>
fn fused_mul_scalar_div(self, mul: FheUint200, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for FheUint208
impl FusedMulScalarDiv<FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for FheUint208
type Output = FheUint<FheUint208Id>
fn fused_mul_scalar_div(self, mul: FheUint208, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for &FheUint208
impl FusedMulScalarDiv<FheUint<FheUint208Id>, StaticUnsignedBigInt<4>> for &FheUint208
type Output = FheUint<FheUint208Id>
fn fused_mul_scalar_div(self, mul: FheUint208, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for FheUint216
impl FusedMulScalarDiv<FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for FheUint216
type Output = FheUint<FheUint216Id>
fn fused_mul_scalar_div(self, mul: FheUint216, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for &FheUint216
impl FusedMulScalarDiv<FheUint<FheUint216Id>, StaticUnsignedBigInt<4>> for &FheUint216
type Output = FheUint<FheUint216Id>
fn fused_mul_scalar_div(self, mul: FheUint216, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for FheUint224
impl FusedMulScalarDiv<FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for FheUint224
type Output = FheUint<FheUint224Id>
fn fused_mul_scalar_div(self, mul: FheUint224, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for &FheUint224
impl FusedMulScalarDiv<FheUint<FheUint224Id>, StaticUnsignedBigInt<4>> for &FheUint224
type Output = FheUint<FheUint224Id>
fn fused_mul_scalar_div(self, mul: FheUint224, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for FheUint232
impl FusedMulScalarDiv<FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for FheUint232
type Output = FheUint<FheUint232Id>
fn fused_mul_scalar_div(self, mul: FheUint232, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for &FheUint232
impl FusedMulScalarDiv<FheUint<FheUint232Id>, StaticUnsignedBigInt<4>> for &FheUint232
type Output = FheUint<FheUint232Id>
fn fused_mul_scalar_div(self, mul: FheUint232, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for FheUint240
impl FusedMulScalarDiv<FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for FheUint240
type Output = FheUint<FheUint240Id>
fn fused_mul_scalar_div(self, mul: FheUint240, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for &FheUint240
impl FusedMulScalarDiv<FheUint<FheUint240Id>, StaticUnsignedBigInt<4>> for &FheUint240
type Output = FheUint<FheUint240Id>
fn fused_mul_scalar_div(self, mul: FheUint240, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for FheUint248
impl FusedMulScalarDiv<FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for FheUint248
type Output = FheUint<FheUint248Id>
fn fused_mul_scalar_div(self, mul: FheUint248, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for &FheUint248
impl FusedMulScalarDiv<FheUint<FheUint248Id>, StaticUnsignedBigInt<4>> for &FheUint248
type Output = FheUint<FheUint248Id>
fn fused_mul_scalar_div(self, mul: FheUint248, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for FheUint256
impl FusedMulScalarDiv<FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for FheUint256
type Output = FheUint<FheUint256Id>
fn fused_mul_scalar_div(self, mul: FheUint256, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for &FheUint256
impl FusedMulScalarDiv<FheUint<FheUint256Id>, StaticUnsignedBigInt<4>> for &FheUint256
type Output = FheUint<FheUint256Id>
fn fused_mul_scalar_div(self, mul: FheUint256, div_scalar: U256) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for FheUint512
impl FusedMulScalarDiv<FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for FheUint512
type Output = FheUint<FheUint512Id>
fn fused_mul_scalar_div(self, mul: FheUint512, div_scalar: U512) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for &FheUint512
impl FusedMulScalarDiv<FheUint<FheUint512Id>, StaticUnsignedBigInt<8>> for &FheUint512
type Output = FheUint<FheUint512Id>
fn fused_mul_scalar_div(self, mul: FheUint512, div_scalar: U512) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for FheUint1024
impl FusedMulScalarDiv<FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for FheUint1024
type Output = FheUint<FheUint1024Id>
fn fused_mul_scalar_div( self, mul: FheUint1024, div_scalar: U1024, ) -> Self::Output
Source§impl FusedMulScalarDiv<FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for &FheUint1024
impl FusedMulScalarDiv<FheUint<FheUint1024Id>, StaticUnsignedBigInt<16>> for &FheUint1024
type Output = FheUint<FheUint1024Id>
fn fused_mul_scalar_div( self, mul: FheUint1024, div_scalar: U1024, ) -> Self::Output
Source§impl<Id: FheUintId> HlCompressible for FheUint<Id>
impl<Id: FheUintId> HlCompressible for FheUint<Id>
Source§fn compress_into(self, messages: &mut Vec<(ToBeCompressed, DataKind)>)
fn compress_into(self, messages: &mut Vec<(ToBeCompressed, DataKind)>)
fn get_re_randomization_metadata(&self) -> ReRandomizationMetadata
Source§impl<Id: FheUintId> HlExpandable for FheUint<Id>
impl<Id: FheUintId> HlExpandable for FheUint<Id>
fn set_re_randomization_metadata(&mut self, meta: ReRandomizationMetadata)
Source§impl<Id> IfThenElse<FheUint<Id>> for FheBoolwhere
Id: FheUintId,
impl<Id> IfThenElse<FheUint<Id>> for FheBoolwhere
Id: FheUintId,
Source§fn if_then_else(
&self,
ct_then: &FheUint<Id>,
ct_else: &FheUint<Id>,
) -> FheUint<Id>
fn if_then_else( &self, ct_then: &FheUint<Id>, ct_else: &FheUint<Id>, ) -> FheUint<Id>
Conditional selection.
The output value returned depends on the value of self.
- if
selfis true, the output will have the value ofct_then - if
selfis false, the output will have the value ofct_else
fn select( &self, ct_when_true: &Ciphertext, ct_when_false: &Ciphertext, ) -> Ciphertext
fn cmux(&self, ct_then: &Ciphertext, ct_else: &Ciphertext) -> Ciphertext
Source§impl<Id> IfThenElseSizeOnGpu<FheUint<Id>> for FheBoolwhere
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> IfThenElseSizeOnGpu<FheUint<Id>> for FheBoolwhere
Id: FheUintId,
gpu only.fn get_if_then_else_size_on_gpu( &self, ct_then: &FheUint<Id>, ct_else: &FheUint<Id>, ) -> u64
fn get_select_size_on_gpu( &self, ct_when_true: &Ciphertext, ct_when_false: &Ciphertext, ) -> u64
fn get_cmux_size_on_gpu( &self, ct_then: &Ciphertext, ct_else: &Ciphertext, ) -> u64
Source§impl<Id> IfThenZero<FheUint<Id>> for FheBoolwhere
Id: FheUintId,
impl<Id> IfThenZero<FheUint<Id>> for FheBoolwhere
Id: FheUintId,
Source§fn if_then_zero(&self, ct_then: &FheUint<Id>) -> FheUint<Id>
fn if_then_zero(&self, ct_then: &FheUint<Id>) -> FheUint<Id>
Conditional selection.
The output value returned depends on the value of self.
- if
selfis true, the output will have the value ofct_then - if
selfis false, the output will be an encryption of 0
Source§impl<Id, B> Mul<B> for &FheUint<Id>
impl<Id, B> Mul<B> for &FheUint<Id>
Source§fn mul(self, rhs: B) -> Self::Output
fn mul(self, rhs: B) -> Self::Output
Multiplies two FheUint
The operation is modular, i.e on overflow it wraps around.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
let result = &a * &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_mul(37849u16));Source§impl<Id, I> MulAssign<I> for FheUint<Id>
impl<Id, I> MulAssign<I> for FheUint<Id>
Source§fn mul_assign(&mut self, rhs: I)
fn mul_assign(&mut self, rhs: I)
Performs the *= operation on FheUint
The operation is modular, i.e on overflow it wraps around.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
a *= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_mul(37849u16));Source§impl<Id> MulSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> MulSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_mul_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id> Neg for FheUint<Id>where
Id: FheUintId,
impl<Id> Neg for FheUint<Id>where
Id: FheUintId,
Source§fn neg(self) -> Self::Output
fn neg(self) -> Self::Output
Computes the negation of a FheUint.
Since FheUint are unsigned integers meaning the value they can represent is always positive, negating a FheUint will yield a positive number.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let result = -a;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_neg());Source§impl<Id> Neg for &FheUint<Id>where
Id: FheUintId,
impl<Id> Neg for &FheUint<Id>where
Id: FheUintId,
Source§fn neg(self) -> Self::Output
fn neg(self) -> Self::Output
Computes the negation of a FheUint.
Since FheUint are unsigned integers meaning the value they can represent is always positive, negating a FheUint will yield a positive number.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let result = -&a;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_neg());Source§impl<Id> NegSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> NegSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_neg_size_on_gpu(&self) -> u64
Source§impl<Id> Not for FheUint<Id>where
Id: FheUintId,
impl<Id> Not for FheUint<Id>where
Id: FheUintId,
Source§fn not(self) -> Self::Output
fn not(self) -> Self::Output
Performs a bitwise ‘not’
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let result = !a;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, !3u16);Source§impl<Id> Not for &FheUint<Id>where
Id: FheUintId,
impl<Id> Not for &FheUint<Id>where
Id: FheUintId,
Source§fn not(self) -> Self::Output
fn not(self) -> Self::Output
Performs a bitwise ‘not’
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let result = !&a;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, !3u16);Source§impl<Id> OverflowingAdd<&FheUint<Id>> for &FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingAdd<&FheUint<Id>> for &FheUint<Id>where
Id: FheUintId,
Source§fn overflowing_add(self, other: Self) -> (Self::Output, FheBool)
fn overflowing_add(self, other: Self) -> (Self::Output, FheBool)
Adds two FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(u16::MAX, &client_key);
let b = FheUint16::encrypt(1u16, &client_key);
let (result, overflowed) = (&a).overflowing_add(&b);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, u16::MAX.wrapping_add(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
u16::MAX.overflowing_add(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id> OverflowingAdd<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingAdd<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn overflowing_add(self, other: &Self) -> (Self::Output, FheBool)
fn overflowing_add(self, other: &Self) -> (Self::Output, FheBool)
Adds two FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(u16::MAX, &client_key);
let b = FheUint16::encrypt(1u16, &client_key);
let (result, overflowed) = a.overflowing_add(&b);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, u16::MAX.wrapping_add(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
u16::MAX.overflowing_add(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id, Clear> OverflowingAdd<Clear> for &FheUint<Id>
impl<Id, Clear> OverflowingAdd<Clear> for &FheUint<Id>
Source§fn overflowing_add(self, other: Clear) -> (Self::Output, FheBool)
fn overflowing_add(self, other: Clear) -> (Self::Output, FheBool)
Adds a FheUint with a Clear and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(u16::MAX, &client_key);
let (result, overflowed) = (&a).overflowing_add(1u16);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, u16::MAX.wrapping_add(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
u16::MAX.overflowing_add(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id, Clear> OverflowingAdd<Clear> for FheUint<Id>
impl<Id, Clear> OverflowingAdd<Clear> for FheUint<Id>
Source§fn overflowing_add(self, other: Clear) -> (Self::Output, FheBool)
fn overflowing_add(self, other: Clear) -> (Self::Output, FheBool)
Adds a FheUint with a Clear and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(u16::MAX, &client_key);
let (result, overflowed) = a.overflowing_add(1u16);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, u16::MAX.wrapping_add(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
u16::MAX.overflowing_add(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id> OverflowingMul<&FheUint<Id>> for &FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingMul<&FheUint<Id>> for &FheUint<Id>where
Id: FheUintId,
Source§fn overflowing_mul(self, other: Self) -> (Self::Output, FheBool)
fn overflowing_mul(self, other: Self) -> (Self::Output, FheBool)
Multiplies two FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3434u16, &client_key);
let b = FheUint16::encrypt(54u16, &client_key);
let (result, overflowed) = (&a).overflowing_mul(&b);
let (expected_result, expected_overflowed) = 3434u16.overflowing_mul(54u16);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, expected_result);
assert_eq!(overflowed.decrypt(&client_key), expected_overflowed);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id> OverflowingMul<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingMul<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn overflowing_mul(self, other: &Self) -> (Self::Output, FheBool)
fn overflowing_mul(self, other: &Self) -> (Self::Output, FheBool)
Multiplies two FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3434u16, &client_key);
let b = FheUint16::encrypt(54u16, &client_key);
let (result, overflowed) = a.overflowing_mul(&b);
let (expected_result, expected_overflowed) = 3434u16.overflowing_mul(54u16);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, expected_result);
assert_eq!(overflowed.decrypt(&client_key), expected_overflowed);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id> OverflowingNeg for &FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingNeg for &FheUint<Id>where
Id: FheUintId,
Source§impl<Id> OverflowingNeg for FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingNeg for FheUint<Id>where
Id: FheUintId,
Source§impl<Id> OverflowingSub<&FheUint<Id>> for &FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingSub<&FheUint<Id>> for &FheUint<Id>where
Id: FheUintId,
Source§fn overflowing_sub(self, other: Self) -> (Self::Output, FheBool)
fn overflowing_sub(self, other: Self) -> (Self::Output, FheBool)
Subtracts two FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0u16, &client_key);
let b = FheUint16::encrypt(1u16, &client_key);
let (result, overflowed) = (&a).overflowing_sub(&b);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 0u16.wrapping_sub(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
0u16.overflowing_sub(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id> OverflowingSub<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<Id> OverflowingSub<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn overflowing_sub(self, other: &Self) -> (Self::Output, FheBool)
fn overflowing_sub(self, other: &Self) -> (Self::Output, FheBool)
Subtracts two FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0u16, &client_key);
let b = FheUint16::encrypt(1u16, &client_key);
let (result, overflowed) = a.overflowing_sub(&b);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 0u16.wrapping_sub(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
0u16.overflowing_sub(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id, Clear> OverflowingSub<Clear> for &FheUint<Id>where
Id: FheUintId,
Clear: UnsignedNumeric + DecomposableInto<u8> + Not<Output = Clear> + CastInto<u64>,
impl<Id, Clear> OverflowingSub<Clear> for &FheUint<Id>where
Id: FheUintId,
Clear: UnsignedNumeric + DecomposableInto<u8> + Not<Output = Clear> + CastInto<u64>,
Source§fn overflowing_sub(self, other: Clear) -> (Self::Output, FheBool)
fn overflowing_sub(self, other: Clear) -> (Self::Output, FheBool)
Subtracts a FheUint with a Clear and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0u16, &client_key);
let (result, overflowed) = (&a).overflowing_sub(1u16);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 0u16.wrapping_sub(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
0u16.overflowing_sub(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id, Clear> OverflowingSub<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: UnsignedNumeric + DecomposableInto<u8> + Not<Output = Clear> + CastInto<u64>,
impl<Id, Clear> OverflowingSub<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: UnsignedNumeric + DecomposableInto<u8> + Not<Output = Clear> + CastInto<u64>,
Source§fn overflowing_sub(self, other: Clear) -> (Self::Output, FheBool)
fn overflowing_sub(self, other: Clear) -> (Self::Output, FheBool)
Subtracts a FheUint with a Clear and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(0u16, &client_key);
let (result, overflowed) = a.overflowing_sub(1u16);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 0u16.wrapping_sub(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
0u16.overflowing_sub(1u16).1
);
assert!(overflowed.decrypt(&client_key));type Output = FheUint<Id>
Source§impl<Id: FheUintId> ParameterSetConformant for FheUint<Id>
impl<Id: FheUintId> ParameterSetConformant for FheUint<Id>
type ParameterSet = FheUintConformanceParams<Id>
fn is_conformant(&self, params: &FheUintConformanceParams<Id>) -> bool
Source§impl<Id> ReRandomize for FheUint<Id>where
Id: FheUintId,
impl<Id> ReRandomize for FheUint<Id>where
Id: FheUintId,
Source§fn re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>(
&mut self,
re_randomization_mode: RRD,
seed: ReRandomizationSeed,
) -> Result<()>
fn re_randomize<'a, RRD: Into<ReRandomizationMode<'a>>>( &mut self, re_randomization_mode: RRD, seed: ReRandomizationSeed, ) -> Result<()>
Source§impl<Id, B> Rem<B> for &FheUint<Id>
impl<Id, B> Rem<B> for &FheUint<Id>
Source§fn rem(self, rhs: B) -> Self::Output
fn rem(self, rhs: B) -> Self::Output
Divides two FheUint and returns the remainder
§Note
If you need both the quotient and remainder, then prefer to use
FheUint::div_rem, instead of using / and % separately.
When the divisor is 0, the returned remainder will have the value of the numerator.
This behaviour should not be relied on.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a % &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 37849u16 % 3u16);Source§impl<Id, I> RemAssign<I> for FheUint<Id>
impl<Id, I> RemAssign<I> for FheUint<Id>
Source§fn rem_assign(&mut self, rhs: I)
fn rem_assign(&mut self, rhs: I)
Performs the %= operation on FheUint
§Note
If you need both the quotient and remainder, then prefer to use
FheUint::div_rem, instead of using / and % separately.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a %= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 37849u16 % 3u16);Source§impl<Id> RemSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> RemSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_rem_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id> RerandSizeOnGpu for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> RerandSizeOnGpu for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_rerand_size_on_gpu<'a>( &self, re_randomization_mode: impl Into<ReRandomizationMode<'a>>, ) -> Result<u64>
Source§impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheInt<Id>
Source§impl<Id, Id2> RotateLeft<&FheUint<Id2>> for &FheInt<Id>
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for &FheInt<Id>
Source§fn rotate_left(self, rhs: &FheUint<Id2>) -> Self::Output
fn rotate_left(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise left rotation of a FheInt by a FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = (&a).rotate_left(&b);
let result: i16 = result.decrypt(&client_key);
assert_eq!(result, 7849i16.rotate_left(3));type Output = FheInt<Id>
Source§impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheUint<Id>
Source§impl<Id, Id2> RotateLeft<&FheUint<Id2>> for &FheUint<Id>
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for &FheUint<Id>
Source§fn rotate_left(self, rhs: &FheUint<Id2>) -> Self::Output
fn rotate_left(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise left rotation of a FheUint by another FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = (&a).rotate_left(&b);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 37849u16.rotate_left(3));type Output = FheUint<Id>
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheInt<Id>
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheInt<Id>
impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheInt<Id>
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheUint<Id>
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheUint<Id>
impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheUint<Id>
Source§impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheInt<Id>
Source§fn rotate_left_assign(&mut self, rhs: &FheUint<Id2>)
fn rotate_left_assign(&mut self, rhs: &FheUint<Id2>)
Performs a left bit rotation and assign operation on FheInt
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a.rotate_left_assign(&b);
let result: i16 = a.decrypt(&client_key);
assert_eq!(result, 7849i16.rotate_left(3));Source§impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheUint<Id>
Source§fn rotate_left_assign(&mut self, rhs: &FheUint<Id2>)
fn rotate_left_assign(&mut self, rhs: &FheUint<Id2>)
Performs a left bit rotation and assign operation on FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a.rotate_left_assign(&b);
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 37849u16.rotate_left(3));Source§impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheInt<Id>
fn rotate_left_assign(&mut self, rhs: FheUint<Id2>)
Source§impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheUint<Id>
fn rotate_left_assign(&mut self, rhs: FheUint<Id2>)
Source§impl<Id, Id2> RotateLeftSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
Available on crate feature gpu only.
impl<Id, Id2> RotateLeftSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
gpu only.fn get_rotate_left_size_on_gpu(&self, rhs: &FheUint<Id2>) -> u64
Source§impl<Id> RotateLeftSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> RotateLeftSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_rotate_left_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheInt<Id>
Source§impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheInt<Id>
impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheInt<Id>
Source§fn rotate_right(self, rhs: &FheUint<Id2>) -> Self::Output
fn rotate_right(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise right rotation of a FheInt by a FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = (&a).rotate_right(&b);
let result: i16 = result.decrypt(&client_key);
assert_eq!(result, 7849i16.rotate_right(3));type Output = FheInt<Id>
Source§impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheUint<Id>
Source§impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheUint<Id>
impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheUint<Id>
Source§fn rotate_right(self, rhs: &FheUint<Id2>) -> Self::Output
fn rotate_right(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise right rotation of a FheUint by another FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = (&a).rotate_right(&b);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 37849u16.rotate_right(3));type Output = FheUint<Id>
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateRight<FheUint<Id2>> for FheInt<Id>
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheInt<Id>
impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheInt<Id>
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateRight<FheUint<Id2>> for FheUint<Id>
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheUint<Id>
impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheUint<Id>
Source§impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheInt<Id>
Source§fn rotate_right_assign(&mut self, rhs: &FheUint<Id2>)
fn rotate_right_assign(&mut self, rhs: &FheUint<Id2>)
Performs a right bit rotation and assign operation on FheInt
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a.rotate_right_assign(&b);
let result: i16 = a.decrypt(&client_key);
assert_eq!(result, 7849i16.rotate_right(3));Source§impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheUint<Id>
Source§fn rotate_right_assign(&mut self, rhs: &FheUint<Id2>)
fn rotate_right_assign(&mut self, rhs: &FheUint<Id2>)
Performs a right bit rotation and assign operation on FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a.rotate_right_assign(&b);
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 37849u16.rotate_right(3));Source§impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheInt<Id>
fn rotate_right_assign(&mut self, rhs: FheUint<Id2>)
Source§impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheUint<Id>
fn rotate_right_assign(&mut self, rhs: FheUint<Id2>)
Source§impl<Id, Id2> RotateRightSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
Available on crate feature gpu only.
impl<Id, Id2> RotateRightSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
gpu only.fn get_rotate_right_size_on_gpu(&self, rhs: &FheUint<Id2>) -> u64
Source§impl<Id> RotateRightSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> RotateRightSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_rotate_right_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Scalar> ScalarIfThenElse<&FheUint<Id>, Scalar> for FheBool
impl<Id, Scalar> ScalarIfThenElse<&FheUint<Id>, Scalar> for FheBool
Source§fn scalar_if_then_else(
&self,
then_value: &FheUint<Id>,
else_value: Scalar,
) -> Self::Output
fn scalar_if_then_else( &self, then_value: &FheUint<Id>, else_value: Scalar, ) -> Self::Output
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint32};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint32::encrypt(u32::MAX, &client_key);
let b = 1u32;
let cond = FheBool::encrypt(true, &client_key);
let result = cond.scalar_if_then_else(&a, b);
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, u32::MAX);
let result = (!cond).scalar_if_then_else(&a, b);
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, 1);type Output = FheUint<Id>
fn scalar_select(&self, value_true: Lhs, value_false: Rhs) -> Self::Output
fn scalar_cmux(&self, value_true: Lhs, value_false: Rhs) -> Self::Output
Source§impl<Id, Scalar> ScalarIfThenElse<Scalar, &FheUint<Id>> for FheBool
impl<Id, Scalar> ScalarIfThenElse<Scalar, &FheUint<Id>> for FheBool
Source§fn scalar_if_then_else(
&self,
then_value: Scalar,
else_value: &FheUint<Id>,
) -> Self::Output
fn scalar_if_then_else( &self, then_value: Scalar, else_value: &FheUint<Id>, ) -> Self::Output
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheUint32};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = u32::MIN;
let b = FheUint32::encrypt(u32::MAX, &client_key);
let cond = FheBool::encrypt(true, &client_key);
let result = cond.scalar_if_then_else(a, &b);
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, u32::MIN);
let result = (!cond).scalar_if_then_else(a, &b);
let decrypted: u32 = result.decrypt(&client_key);
assert_eq!(decrypted, u32::MAX);type Output = FheUint<Id>
fn scalar_select(&self, value_true: Lhs, value_false: Rhs) -> Self::Output
fn scalar_cmux(&self, value_true: Lhs, value_false: Rhs) -> Self::Output
Source§impl<Id, Id2> Shl<&FheUint<Id2>> for &FheInt<Id>
impl<Id, Id2> Shl<&FheUint<Id2>> for &FheInt<Id>
Source§fn shl(self, rhs: &FheUint<Id2>) -> Self::Output
fn shl(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise left shift of a FheInt by a FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a << &b;
let result: i16 = result.decrypt(&client_key);
assert_eq!(result, 7849i16 << 3u16);Source§impl<Id, Id2> Shl<&FheUint<Id2>> for &FheUint<Id>
impl<Id, Id2> Shl<&FheUint<Id2>> for &FheUint<Id>
Source§fn shl(self, rhs: &FheUint<Id2>) -> Self::Output
fn shl(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise left shift of a FheUint by another FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a << &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 37849u16 << 3u16);Source§impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheInt<Id>
Source§fn shl_assign(&mut self, rhs: &FheUint<Id2>)
fn shl_assign(&mut self, rhs: &FheUint<Id2>)
Performs the <<= operation on FheInt
§Overshift
If the shift amount is greater than or equal to the number of bits of the type,
the result is 0.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a <<= &b;
let result: i16 = a.decrypt(&client_key);
assert_eq!(result, 7849i16 << 3u16);Source§impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheUint<Id>
Source§fn shl_assign(&mut self, rhs: &FheUint<Id2>)
fn shl_assign(&mut self, rhs: &FheUint<Id2>)
Performs the <<= operation on FheUint
§Overshift
If the shift amount is greater than or equal to the number of bits of the type,
the result is 0.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a <<= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 37849u16 << 3u16);Source§impl<Id, Id2> ShlAssign<FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> ShlAssign<FheUint<Id2>> for FheInt<Id>
Source§fn shl_assign(&mut self, rhs: FheUint<Id2>)
fn shl_assign(&mut self, rhs: FheUint<Id2>)
<<= operation. Read moreSource§impl<Id, Id2> ShlAssign<FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> ShlAssign<FheUint<Id2>> for FheUint<Id>
Source§fn shl_assign(&mut self, rhs: FheUint<Id2>)
fn shl_assign(&mut self, rhs: FheUint<Id2>)
<<= operation. Read moreSource§impl<Id, Id2> ShlSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
Available on crate feature gpu only.
impl<Id, Id2> ShlSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
gpu only.fn get_left_shift_size_on_gpu(&self, rhs: &FheUint<Id2>) -> u64
Source§impl<Id> ShlSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> ShlSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_left_shift_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id, Id2> Shr<&FheUint<Id2>> for &FheInt<Id>
impl<Id, Id2> Shr<&FheUint<Id2>> for &FheInt<Id>
Source§fn shr(self, rhs: &FheUint<Id2>) -> Self::Output
fn shr(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise right shift of a FheInt by a FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a >> &b;
let result: i16 = result.decrypt(&client_key);
assert_eq!(result, 7849i16 >> 3u16);Source§impl<Id, Id2> Shr<&FheUint<Id2>> for &FheUint<Id>
impl<Id, Id2> Shr<&FheUint<Id2>> for &FheUint<Id>
Source§fn shr(self, rhs: &FheUint<Id2>) -> Self::Output
fn shr(self, rhs: &FheUint<Id2>) -> Self::Output
Performs a bitwise right shift of a FheUint by another FheUint
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
let result = &a >> &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 37849u16 >> 3u16);Source§impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheInt<Id>
Source§fn shr_assign(&mut self, rhs: &FheUint<Id2>)
fn shr_assign(&mut self, rhs: &FheUint<Id2>)
Performs the >>= operation on FheInt
§Overshift
If the shift amount is greater than or equal to the number of bits of the type,
the result is 0 for non-negative inputs, and -1 for negative inputs
(sign-extension).
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheInt16, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheInt16::encrypt(7849i16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a >>= &b;
let result: i16 = a.decrypt(&client_key);
assert_eq!(result, 7849i16 >> 3u16);Source§impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheUint<Id>
Source§fn shr_assign(&mut self, rhs: &FheUint<Id2>)
fn shr_assign(&mut self, rhs: &FheUint<Id2>)
Performs the >>= operation on FheUint
§Overshift
If the shift amount is greater than or equal to the number of bits of the type,
the result is 0.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(37849u16, &client_key);
let b = FheUint16::encrypt(3u16, &client_key);
a >>= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 37849u16 >> 3u16);Source§impl<Id, Id2> ShrAssign<FheUint<Id2>> for FheInt<Id>
impl<Id, Id2> ShrAssign<FheUint<Id2>> for FheInt<Id>
Source§fn shr_assign(&mut self, rhs: FheUint<Id2>)
fn shr_assign(&mut self, rhs: FheUint<Id2>)
>>= operation. Read moreSource§impl<Id, Id2> ShrAssign<FheUint<Id2>> for FheUint<Id>
impl<Id, Id2> ShrAssign<FheUint<Id2>> for FheUint<Id>
Source§fn shr_assign(&mut self, rhs: FheUint<Id2>)
fn shr_assign(&mut self, rhs: FheUint<Id2>)
>>= operation. Read moreSource§impl<Id, Id2> ShrSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
Available on crate feature gpu only.
impl<Id, Id2> ShrSizeOnGpu<&FheUint<Id2>> for FheInt<Id>
gpu only.fn get_right_shift_size_on_gpu(&self, rhs: &FheUint<Id2>) -> u64
Source§impl<Id> ShrSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> ShrSizeOnGpu<&FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_right_shift_size_on_gpu(&self, rhs: &Self) -> u64
Source§impl<Id> SizeOnGpu for FheUint<Id>where
Id: FheUintId,
Available on crate feature gpu only.
impl<Id> SizeOnGpu for FheUint<Id>where
Id: FheUintId,
gpu only.fn get_size_on_gpu(&self) -> u64
Source§impl<Id: FheUintId> SquashNoise for FheUint<Id>
impl<Id: FheUintId> SquashNoise for FheUint<Id>
type Output = SquashedNoiseFheUint
fn squash_noise(&self) -> Result<Self::Output>
Source§impl<Id, B> Sub<B> for &FheUint<Id>
impl<Id, B> Sub<B> for &FheUint<Id>
Source§fn sub(self, rhs: B) -> Self::Output
fn sub(self, rhs: B) -> Self::Output
Subtracts two FheUint
The operation is modular, i.e on overflow it wraps around.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
let result = &a - &b;
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_sub(37849u16));Source§impl<Id, I> SubAssign<I> for FheUint<Id>
impl<Id, I> SubAssign<I> for FheUint<Id>
Source§fn sub_assign(&mut self, rhs: I)
fn sub_assign(&mut self, rhs: I)
Performs the -= operation on FheUint
The operation is modular, i.e on overflow it wraps around.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheUint16::encrypt(3u16, &client_key);
let b = FheUint16::encrypt(37849u16, &client_key);
a -= &b;
let result: u16 = a.decrypt(&client_key);
assert_eq!(result, 3u16.wrapping_sub(37849u16));Source§impl SubSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint2Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: &FheUint2) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint4Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: &FheUint4) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint6Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: &FheUint6) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint8Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: &FheUint8) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint10Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: &FheUint10) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint12Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: &FheUint12) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint14Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: &FheUint14) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint16Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: &FheUint16) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint24Id>> for u32
impl SubSizeOnGpu<&FheUint<FheUint24Id>> for u32
fn get_sub_size_on_gpu(&self, rhs: &FheUint24) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl SubSizeOnGpu<&FheUint<FheUint32Id>> for u32
fn get_sub_size_on_gpu(&self, rhs: &FheUint32) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint40Id>> for u64
impl SubSizeOnGpu<&FheUint<FheUint40Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint40) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint48Id>> for u64
impl SubSizeOnGpu<&FheUint<FheUint48Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint48) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint56Id>> for u64
impl SubSizeOnGpu<&FheUint<FheUint56Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint56) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl SubSizeOnGpu<&FheUint<FheUint64Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint64) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint72Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint72Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint72) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint80Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint80Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint80) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint88Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint88Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint88) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint96Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint96Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint96) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint104Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint104Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint104) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint112Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint112Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint112) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint120Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint120Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint120) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint128Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: &FheUint128) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint136Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint136Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint136) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint144Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint144Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint144) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint152Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint152Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint152) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint160Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint160) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint168Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint168Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint168) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint176Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint176Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint176) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint184Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint184Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint184) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint192Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint192Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint192) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint200Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint200Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint200) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint208Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint208Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint208) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint216Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint216Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint216) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint224Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint224Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint224) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint232Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint232Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint232) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint240Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint240Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint240) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint248Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint248Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint248) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint256Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: &FheUint256) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl SubSizeOnGpu<&FheUint<FheUint512Id>> for U512
fn get_sub_size_on_gpu(&self, rhs: &FheUint512) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
impl SubSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
fn get_sub_size_on_gpu(&self, rhs: &FheUint1024) -> u64
Source§impl SubSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl SubSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
fn get_sub_size_on_gpu(&self, rhs: &FheUint2048) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint2Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint2Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: FheUint2) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint4Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint4Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: FheUint4) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint6Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint6Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: FheUint6) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint8Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint8Id>> for u8
fn get_sub_size_on_gpu(&self, rhs: FheUint8) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint10Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint10Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: FheUint10) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint12Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint12Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: FheUint12) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint14Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint14Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: FheUint14) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint16Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint16Id>> for u16
fn get_sub_size_on_gpu(&self, rhs: FheUint16) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint24Id>> for u32
impl SubSizeOnGpu<FheUint<FheUint24Id>> for u32
fn get_sub_size_on_gpu(&self, rhs: FheUint24) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint32Id>> for u32
impl SubSizeOnGpu<FheUint<FheUint32Id>> for u32
fn get_sub_size_on_gpu(&self, rhs: FheUint32) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint40Id>> for u64
impl SubSizeOnGpu<FheUint<FheUint40Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: FheUint40) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint48Id>> for u64
impl SubSizeOnGpu<FheUint<FheUint48Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: FheUint48) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint56Id>> for u64
impl SubSizeOnGpu<FheUint<FheUint56Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: FheUint56) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint64Id>> for u64
impl SubSizeOnGpu<FheUint<FheUint64Id>> for u64
fn get_sub_size_on_gpu(&self, rhs: FheUint64) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint72Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint72Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint72) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint80Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint80Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint80) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint88Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint88Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint88) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint96Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint96Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint96) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint104Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint104Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint104) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint112Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint112Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint112) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint120Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint120Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint120) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint128Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint128Id>> for u128
fn get_sub_size_on_gpu(&self, rhs: FheUint128) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint136Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint136Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint136) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint144Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint144Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint144) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint152Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint152Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint152) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint160Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint160Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint160) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint168Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint168Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint168) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint176Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint176Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint176) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint184Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint184Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint184) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint192Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint192Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint192) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint200Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint200Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint200) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint208Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint208Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint208) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint216Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint216Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint216) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint224Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint224Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint224) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint232Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint232Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint232) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint240Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint240Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint240) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint248Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint248Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint248) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint256Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint256Id>> for U256
fn get_sub_size_on_gpu(&self, rhs: FheUint256) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint512Id>> for U512
impl SubSizeOnGpu<FheUint<FheUint512Id>> for U512
fn get_sub_size_on_gpu(&self, rhs: FheUint512) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl SubSizeOnGpu<FheUint<FheUint1024Id>> for U1024
fn get_sub_size_on_gpu(&self, rhs: FheUint1024) -> u64
Source§impl SubSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl SubSizeOnGpu<FheUint<FheUint2048Id>> for U2048
fn get_sub_size_on_gpu(&self, rhs: FheUint2048) -> u64
Source§impl<Id, I> SubSizeOnGpu<I> for FheUint<Id>
Available on crate feature gpu only.
impl<Id, I> SubSizeOnGpu<I> for FheUint<Id>
gpu only.fn get_sub_size_on_gpu(&self, rhs: I) -> u64
Source§impl<Id> Sum for FheUint<Id>where
Id: FheUintId,
impl<Id> Sum for FheUint<Id>where
Id: FheUintId,
Source§fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
fn sum<I: Iterator<Item = Self>>(iter: I) -> Self
Sums multiple ciphertexts together.
This is much more efficient than manually calling the + operator, thus
using sum should always be preferred.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let clears = [1, 2, 3, 4, 5];
let encrypted = clears
.iter()
.copied()
.map(|x| FheUint16::encrypt(x, &client_key))
.collect::<Vec<_>>();
// Iter and sum consuming (moving out) from the original Vec
let result = encrypted.into_iter().sum::<FheUint16>();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, clears.into_iter().sum::<u16>());Source§impl<'a, Id> Sum<&'a FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
impl<'a, Id> Sum<&'a FheUint<Id>> for FheUint<Id>where
Id: FheUintId,
Source§fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
fn sum<I: Iterator<Item = &'a Self>>(iter: I) -> Self
Sums multiple ciphertexts together.
This is much more efficient than manually calling the + operator, thus
using sum should always be preferred.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let clears = [1, 2, 3, 4, 5];
let encrypted = clears
.iter()
.copied()
.map(|x| FheUint16::encrypt(x, &client_key))
.collect::<Vec<_>>();
// Iter and sum on references
let result = encrypted.iter().sum::<FheUint16>();
let decrypted: u16 = result.decrypt(&client_key);
assert_eq!(decrypted, clears.into_iter().sum::<u16>());Source§impl<Id> TryFrom<BaseRadixCiphertext<Ciphertext>> for FheUint<Id>where
Id: FheUintId,
impl<Id> TryFrom<BaseRadixCiphertext<Ciphertext>> for FheUint<Id>where
Id: FheUintId,
Source§impl<Id: FheUintId> Unversionize for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
impl<Id: FheUintId> Unversionize for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
Source§fn unversionize(
versioned: Self::VersionedOwned,
) -> Result<Self, UnversionizeError>
fn unversionize( versioned: Self::VersionedOwned, ) -> Result<Self, UnversionizeError>
Source§impl<Id: FheUintId> UnversionizeVec for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
impl<Id: FheUintId> UnversionizeVec for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
fn unversionize_vec( versioned: Self::VersionedVec, ) -> Result<Vec<Self>, UnversionizeError>
Source§impl<Id> Version for FheUint<Id>where
RadixCiphertext: VersionizeOwned + Unversionize + Versionize,
Id: VersionizeOwned + Unversionize + Versionize + FheUintId,
Tag: VersionizeOwned + Unversionize + Versionize,
ReRandomizationMetadata: VersionizeOwned + Unversionize + Versionize,
impl<Id> Version for FheUint<Id>where
RadixCiphertext: VersionizeOwned + Unversionize + Versionize,
Id: VersionizeOwned + Unversionize + Versionize + FheUintId,
Tag: VersionizeOwned + Unversionize + Versionize,
ReRandomizationMetadata: VersionizeOwned + Unversionize + Versionize,
Source§impl<Id: FheUintId> Versionize for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
impl<Id: FheUintId> Versionize for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
Source§type Versioned<'vers> = <FheUintVersions<Id> as VersionsDispatch<FheUint<Id>>>::Ref<'vers>
where
Id: 'vers
type Versioned<'vers> = <FheUintVersions<Id> as VersionsDispatch<FheUint<Id>>>::Ref<'vers> where Id: 'vers
Source§fn versionize(&self) -> Self::Versioned<'_>
fn versionize(&self) -> Self::Versioned<'_>
Source§impl<Id: FheUintId> VersionizeOwned for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
impl<Id: FheUintId> VersionizeOwned for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
type VersionedOwned = <FheUintVersions<Id> as VersionsDispatch<FheUint<Id>>>::Owned
Source§fn versionize_owned(self) -> Self::VersionedOwned
fn versionize_owned(self) -> Self::VersionedOwned
Source§impl<Id: FheUintId> VersionizeSlice for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
impl<Id: FheUintId> VersionizeSlice for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
type VersionedSlice<'vers> = Vec<<FheUint<Id> as Versionize>::Versioned<'vers>> where Id: 'vers
fn versionize_slice(slice: &[Self]) -> Self::VersionedSlice<'_>
Source§impl<Id: FheUintId> VersionizeVec for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
impl<Id: FheUintId> VersionizeVec for FheUint<Id>where
FheUintVersions<Id>: VersionsDispatch<Self>,
type VersionedVec = Vec<<FheUint<Id> as VersionizeOwned>::VersionedOwned>
fn versionize_vec(vec: Vec<Self>) -> Self::VersionedVec
Source§impl<Id: FheUintId> VersionsDispatch<FheUint<Id>> for FheUintVersions<Id>
impl<Id: FheUintId> VersionsDispatch<FheUint<Id>> for FheUintVersions<Id>
Auto Trait Implementations§
impl<Id> !RefUnwindSafe for FheUint<Id>
impl<Id> !UnwindSafe for FheUint<Id>
impl<Id> Freeze for FheUint<Id>where
Id: Freeze,
impl<Id> Send for FheUint<Id>where
Id: Send,
impl<Id> Sync for FheUint<Id>where
Id: Sync,
impl<Id> Unpin for FheUint<Id>where
Id: Unpin,
impl<Id> UnsafeUnpin for FheUint<Id>where
Id: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<Clear, Key, T> FheEncrypt<Clear, Key> for Twhere
T: FheTryEncrypt<Clear, Key>,
impl<Clear, Key, T> FheEncrypt<Clear, Key> for Twhere
T: FheTryEncrypt<Clear, Key>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreimpl<T, Rhs> NumAssignOps<Rhs> for T
impl<T, Rhs, Output> NumOps<Rhs, Output> for T
Source§impl<Id, Clear> OverflowingAdd<&FheUint<Id>> for Clear
impl<Id, Clear> OverflowingAdd<&FheUint<Id>> for Clear
Source§fn overflowing_add(
self,
other: &FheUint<Id>,
) -> (<Clear as OverflowingAdd<&FheUint<Id>>>::Output, FheBool)
fn overflowing_add( self, other: &FheUint<Id>, ) -> (<Clear as OverflowingAdd<&FheUint<Id>>>::Output, FheBool)
Adds a Clear with a FheUint and returns a boolean indicating overflow.
- The operation is modular, i.e on overflow the result wraps around.
- On overflow the FheBool is true, otherwise false
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheUint16::encrypt(u16::MAX, &client_key);
// Due to conflicts with u16::overflowing_add method
// we have to use this syntax to help the compiler
let (result, overflowed) = OverflowingAdd::overflowing_add(1u16, &a);
let result: u16 = result.decrypt(&client_key);
assert_eq!(result, u16::MAX.wrapping_add(1u16));
assert_eq!(
overflowed.decrypt(&client_key),
u16::MAX.overflowing_add(1u16).1
);
assert!(overflowed.decrypt(&client_key));