pub struct FheUint<Id: FheUintId> { /* private fields */ }
integer
only.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: Seed) -> Self
pub fn generate_oblivious_pseudo_random(seed: Seed) -> 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);
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
Available on crate feature gpu
only.
pub fn get_generate_oblivious_pseudo_random_size_on_gpu() -> u64
gpu
only.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::prelude::FheDecrypt;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, GpuIndex, Seed};
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_bounded(
seed: Seed,
random_bits_count: u64,
) -> Self
pub fn generate_oblivious_pseudo_random_bounded( seed: Seed, random_bits_count: u64, ) -> Self
Generates an encrypted num_block
blocks unsigned integer
taken uniformly in [0, 2^random_bits_count[
using the given seed.
The encryted 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);
let random_bits_count = 3;
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 get_generate_oblivious_pseudo_random_bounded_size_on_gpu() -> u64
Available on crate feature gpu
only.
pub fn get_generate_oblivious_pseudo_random_bounded_size_on_gpu() -> u64
gpu
only.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::prelude::FheDecrypt;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheUint8, GpuIndex, Seed};
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));
Source§impl<Id> FheUint<Id>where
Id: FheUintId,
impl<Id> FheUint<Id>where
Id: FheUintId,
pub fn into_raw_parts(self) -> (RadixCiphertext, Id, Tag)
pub fn from_raw_parts(ciphertext: RadixCiphertext, id: Id, tag: Tag) -> 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]
Available on crate feature gpu
only.
pub fn gpu_indexes(&self) -> &[GpuIndex]
gpu
only.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 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, FheBool, 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, FheBool, 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 meaningless
Sourcepub 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
self
could 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 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
self
could 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 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
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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> AddAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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<FheUint1024Id>> for U1024
impl AddSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint1024) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint1024) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint10Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint10) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint10) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl AddSizeOnGpu<&FheUint<FheUint128Id>> for u128
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint128) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint128) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint12Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint12) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint12) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint14Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint14) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint14) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint160Id>> for U256
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint160) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint160) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl AddSizeOnGpu<&FheUint<FheUint16Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint16) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint16) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl AddSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint2048) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint2048) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl AddSizeOnGpu<&FheUint<FheUint256Id>> for U256
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint256) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint256) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint2Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint2) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint2) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl AddSizeOnGpu<&FheUint<FheUint32Id>> for u32
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint32) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint32) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint4Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint4) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint4) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl AddSizeOnGpu<&FheUint<FheUint512Id>> for U512
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint512) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint512) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl AddSizeOnGpu<&FheUint<FheUint64Id>> for u64
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint64) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint64) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint6Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint6) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint6) -> u64
gpu
only.Source§impl AddSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl AddSizeOnGpu<&FheUint<FheUint8Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: &FheUint8) -> u64
fn get_add_size_on_gpu(&self, rhs: &FheUint8) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl AddSizeOnGpu<FheUint<FheUint1024Id>> for U1024
Source§fn get_add_size_on_gpu(&self, rhs: FheUint1024) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint1024) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint10Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint10Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: FheUint10) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint10) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint128Id>> for u128
impl AddSizeOnGpu<FheUint<FheUint128Id>> for u128
Source§fn get_add_size_on_gpu(&self, rhs: FheUint128) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint128) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint12Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint12Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: FheUint12) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint12) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint14Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint14Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: FheUint14) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint14) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint160Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint160Id>> for U256
Source§fn get_add_size_on_gpu(&self, rhs: FheUint160) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint160) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint16Id>> for u16
impl AddSizeOnGpu<FheUint<FheUint16Id>> for u16
Source§fn get_add_size_on_gpu(&self, rhs: FheUint16) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint16) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl AddSizeOnGpu<FheUint<FheUint2048Id>> for U2048
Source§fn get_add_size_on_gpu(&self, rhs: FheUint2048) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint2048) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint256Id>> for U256
impl AddSizeOnGpu<FheUint<FheUint256Id>> for U256
Source§fn get_add_size_on_gpu(&self, rhs: FheUint256) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint256) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint2Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint2Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: FheUint2) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint2) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint32Id>> for u32
impl AddSizeOnGpu<FheUint<FheUint32Id>> for u32
Source§fn get_add_size_on_gpu(&self, rhs: FheUint32) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint32) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint4Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint4Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: FheUint4) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint4) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint512Id>> for U512
impl AddSizeOnGpu<FheUint<FheUint512Id>> for U512
Source§fn get_add_size_on_gpu(&self, rhs: FheUint512) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint512) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint64Id>> for u64
impl AddSizeOnGpu<FheUint<FheUint64Id>> for u64
Source§fn get_add_size_on_gpu(&self, rhs: FheUint64) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint64) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint6Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint6Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: FheUint6) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint6) -> u64
gpu
only.Source§impl AddSizeOnGpu<FheUint<FheUint8Id>> for u8
impl AddSizeOnGpu<FheUint<FheUint8Id>> for u8
Source§fn get_add_size_on_gpu(&self, rhs: FheUint8) -> u64
fn get_add_size_on_gpu(&self, rhs: FheUint8) -> u64
gpu
only.Source§impl<Id, I> AddSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
Available on crate feature gpu
only.
impl<Id, I> AddSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> BitAndAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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<FheUint1024Id>> for U1024
impl BitAndSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint1024) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint1024) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint10Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint10) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint10) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl BitAndSizeOnGpu<&FheUint<FheUint128Id>> for u128
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint128) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint128) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint12Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint12) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint12) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint14Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint14) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint14) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint160Id>> for U256
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint160) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint160) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl BitAndSizeOnGpu<&FheUint<FheUint16Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint16) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint16) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl BitAndSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint2048) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint2048) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl BitAndSizeOnGpu<&FheUint<FheUint256Id>> for U256
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint256) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint256) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint2Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint2) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint2) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl BitAndSizeOnGpu<&FheUint<FheUint32Id>> for u32
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint32) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint32) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint4Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint4) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint4) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl BitAndSizeOnGpu<&FheUint<FheUint512Id>> for U512
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint512) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint512) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl BitAndSizeOnGpu<&FheUint<FheUint64Id>> for u64
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint64) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint64) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint6Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint6) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint6) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl BitAndSizeOnGpu<&FheUint<FheUint8Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: &FheUint8) -> u64
fn get_bitand_size_on_gpu(&self, rhs: &FheUint8) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl BitAndSizeOnGpu<FheUint<FheUint1024Id>> for U1024
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint1024) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint1024) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint10Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint10Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint10) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint10) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint128Id>> for u128
impl BitAndSizeOnGpu<FheUint<FheUint128Id>> for u128
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint128) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint128) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint12Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint12Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint12) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint12) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint14Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint14Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint14) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint14) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint160Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint160Id>> for U256
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint160) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint160) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint16Id>> for u16
impl BitAndSizeOnGpu<FheUint<FheUint16Id>> for u16
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint16) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint16) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl BitAndSizeOnGpu<FheUint<FheUint2048Id>> for U2048
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint2048) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint2048) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint256Id>> for U256
impl BitAndSizeOnGpu<FheUint<FheUint256Id>> for U256
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint256) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint256) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint2Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint2Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint2) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint2) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint32Id>> for u32
impl BitAndSizeOnGpu<FheUint<FheUint32Id>> for u32
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint32) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint32) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint4Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint4Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint4) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint4) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint512Id>> for U512
impl BitAndSizeOnGpu<FheUint<FheUint512Id>> for U512
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint512) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint512) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint64Id>> for u64
impl BitAndSizeOnGpu<FheUint<FheUint64Id>> for u64
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint64) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint64) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint6Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint6Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint6) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint6) -> u64
gpu
only.Source§impl BitAndSizeOnGpu<FheUint<FheUint8Id>> for u8
impl BitAndSizeOnGpu<FheUint<FheUint8Id>> for u8
Source§fn get_bitand_size_on_gpu(&self, rhs: FheUint8) -> u64
fn get_bitand_size_on_gpu(&self, rhs: FheUint8) -> u64
gpu
only.Source§impl<Id, I> BitAndSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
Available on crate feature gpu
only.
impl<Id, I> BitAndSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> BitOrAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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<FheUint1024Id>> for U1024
impl BitOrSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint1024) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint1024) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint10Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint10) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint10) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl BitOrSizeOnGpu<&FheUint<FheUint128Id>> for u128
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint128) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint128) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint12Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint12) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint12) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint14Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint14) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint14) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint160Id>> for U256
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint160) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint160) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl BitOrSizeOnGpu<&FheUint<FheUint16Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint16) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint16) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl BitOrSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint2048) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint2048) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl BitOrSizeOnGpu<&FheUint<FheUint256Id>> for U256
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint256) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint256) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint2Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint2) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint2) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl BitOrSizeOnGpu<&FheUint<FheUint32Id>> for u32
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint32) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint32) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint4Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint4) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint4) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl BitOrSizeOnGpu<&FheUint<FheUint512Id>> for U512
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint512) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint512) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl BitOrSizeOnGpu<&FheUint<FheUint64Id>> for u64
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint64) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint64) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint6Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint6) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint6) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl BitOrSizeOnGpu<&FheUint<FheUint8Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: &FheUint8) -> u64
fn get_bitor_size_on_gpu(&self, rhs: &FheUint8) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl BitOrSizeOnGpu<FheUint<FheUint1024Id>> for U1024
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint1024) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint1024) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint10Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint10Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint10) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint10) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint128Id>> for u128
impl BitOrSizeOnGpu<FheUint<FheUint128Id>> for u128
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint128) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint128) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint12Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint12Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint12) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint12) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint14Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint14Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint14) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint14) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint160Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint160Id>> for U256
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint160) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint160) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint16Id>> for u16
impl BitOrSizeOnGpu<FheUint<FheUint16Id>> for u16
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint16) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint16) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl BitOrSizeOnGpu<FheUint<FheUint2048Id>> for U2048
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint2048) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint2048) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint256Id>> for U256
impl BitOrSizeOnGpu<FheUint<FheUint256Id>> for U256
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint256) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint256) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint2Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint2Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint2) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint2) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint32Id>> for u32
impl BitOrSizeOnGpu<FheUint<FheUint32Id>> for u32
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint32) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint32) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint4Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint4Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint4) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint4) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint512Id>> for U512
impl BitOrSizeOnGpu<FheUint<FheUint512Id>> for U512
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint512) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint512) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint64Id>> for u64
impl BitOrSizeOnGpu<FheUint<FheUint64Id>> for u64
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint64) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint64) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint6Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint6Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint6) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint6) -> u64
gpu
only.Source§impl BitOrSizeOnGpu<FheUint<FheUint8Id>> for u8
impl BitOrSizeOnGpu<FheUint<FheUint8Id>> for u8
Source§fn get_bitor_size_on_gpu(&self, rhs: FheUint8) -> u64
fn get_bitor_size_on_gpu(&self, rhs: FheUint8) -> u64
gpu
only.Source§impl<Id, I> BitOrSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
Available on crate feature gpu
only.
impl<Id, I> BitOrSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> BitXorAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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<FheUint1024Id>> for U1024
impl BitXorSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint1024) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint1024) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint10Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint10) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint10) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl BitXorSizeOnGpu<&FheUint<FheUint128Id>> for u128
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint128) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint128) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint12Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint12) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint12) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint14Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint14) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint14) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint160Id>> for U256
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint160) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint160) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl BitXorSizeOnGpu<&FheUint<FheUint16Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint16) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint16) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl BitXorSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint2048) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint2048) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl BitXorSizeOnGpu<&FheUint<FheUint256Id>> for U256
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint256) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint256) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint2Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint2) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint2) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl BitXorSizeOnGpu<&FheUint<FheUint32Id>> for u32
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint32) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint32) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint4Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint4) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint4) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl BitXorSizeOnGpu<&FheUint<FheUint512Id>> for U512
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint512) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint512) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl BitXorSizeOnGpu<&FheUint<FheUint64Id>> for u64
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint64) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint64) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint6Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint6) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint6) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl BitXorSizeOnGpu<&FheUint<FheUint8Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: &FheUint8) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: &FheUint8) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl BitXorSizeOnGpu<FheUint<FheUint1024Id>> for U1024
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint1024) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint1024) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint10Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint10Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint10) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint10) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint128Id>> for u128
impl BitXorSizeOnGpu<FheUint<FheUint128Id>> for u128
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint128) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint128) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint12Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint12Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint12) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint12) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint14Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint14Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint14) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint14) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint160Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint160Id>> for U256
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint160) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint160) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint16Id>> for u16
impl BitXorSizeOnGpu<FheUint<FheUint16Id>> for u16
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint16) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint16) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl BitXorSizeOnGpu<FheUint<FheUint2048Id>> for U2048
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint2048) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint2048) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint256Id>> for U256
impl BitXorSizeOnGpu<FheUint<FheUint256Id>> for U256
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint256) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint256) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint2Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint2Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint2) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint2) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint32Id>> for u32
impl BitXorSizeOnGpu<FheUint<FheUint32Id>> for u32
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint32) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint32) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint4Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint4Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint4) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint4) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint512Id>> for U512
impl BitXorSizeOnGpu<FheUint<FheUint512Id>> for U512
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint512) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint512) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint64Id>> for u64
impl BitXorSizeOnGpu<FheUint<FheUint64Id>> for u64
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint64) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint64) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint6Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint6Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint6) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint6) -> u64
gpu
only.Source§impl BitXorSizeOnGpu<FheUint<FheUint8Id>> for u8
impl BitXorSizeOnGpu<FheUint<FheUint8Id>> for u8
Source§fn get_bitxor_size_on_gpu(&self, rhs: FheUint8) -> u64
fn get_bitxor_size_on_gpu(&self, rhs: FheUint8) -> u64
gpu
only.Source§impl<Id, I> BitXorSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
Available on crate feature gpu
only.
impl<Id, I> BitXorSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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>where
FromId: FheIntId,
IntoId: FheUintId,
impl<FromId, IntoId> CastFrom<FheInt<FromId>> for FheUint<IntoId>where
FromId: FheIntId,
IntoId: FheUintId,
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>where
FromId: FheUintId,
IntoId: FheIntId,
impl<FromId, IntoId> CastFrom<FheUint<FromId>> for FheInt<IntoId>where
FromId: FheUintId,
IntoId: FheIntId,
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>where
FromId: FheUintId,
IntoId: FheUintId,
impl<FromId, IntoId> CastFrom<FheUint<FromId>> for FheUint<IntoId>where
FromId: FheUintId,
IntoId: FheUintId,
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>
Available on crate feature gpu
only.
impl<Id: FheUintId> CudaCompressible for FheUint<Id>
gpu
only.fn compress_into( self, messages: &mut Vec<CudaRadixCiphertext>, streams: &CudaStreams, ) -> DataKind
Source§impl<Id: FheUintId> CudaExpandable for FheUint<Id>
Available on crate feature gpu
only.
impl<Id: FheUintId> CudaExpandable for FheUint<Id>
gpu
only.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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> DivAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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>where
Clear: DecomposableInto<u64>,
Id: FheUintId,
impl<Id, Clear> FheEq<Clear> for FheUint<Id>where
Clear: DecomposableInto<u64>,
Id: FheUintId,
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>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
Available on crate feature gpu
only.
impl<Id, Clear> FheEqSizeOnGpu<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
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> 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>where
Clear: DecomposableInto<u64>,
Id: FheUintId,
impl<Id, Clear> FheMax<Clear> for FheUint<Id>where
Clear: DecomposableInto<u64>,
Id: FheUintId,
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>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
Available on crate feature gpu
only.
impl<Id, Clear> FheMaxSizeOnGpu<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
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>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
impl<Id, Clear> FheMin<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
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>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
Available on crate feature gpu
only.
impl<Id, Clear> FheMinSizeOnGpu<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
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>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
impl<Id, Clear> FheOrd<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
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>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
Available on crate feature gpu
only.
impl<Id, Clear> FheOrdSizeOnGpu<Clear> for FheUint<Id>where
Id: FheUintId,
Clear: DecomposableInto<u64>,
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: FheUintId> HlCompressible for FheUint<Id>
impl<Id: FheUintId> HlCompressible for FheUint<Id>
fn compress_into(self, messages: &mut Vec<(ToBeCompressed, DataKind)>)
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
self
is true, the output will have the value ofct_then
- if
self
is 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, 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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> MulAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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, 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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> RemAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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, Id2> RotateLeft<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateLeft<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateLeftAssign<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
fn rotate_left_assign(&mut self, rhs: FheUint<Id2>)
Source§impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateLeftAssign<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
fn rotate_left_assign(&mut self, rhs: FheUint<Id2>)
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> RotateLeftSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Available on crate feature gpu
only.
impl<Id, Id2> RotateLeftSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
gpu
only.fn get_rotate_left_size_on_gpu(&self, rhs: &FheUint<Id2>) -> u64
Source§impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<&FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateRight<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateRight<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateRightAssign<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
fn rotate_right_assign(&mut self, rhs: FheUint<Id2>)
Source§impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> RotateRightAssign<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
fn rotate_right_assign(&mut self, rhs: FheUint<Id2>)
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, Id2> RotateRightSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Available on crate feature gpu
only.
impl<Id, Id2> RotateRightSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
gpu
only.fn get_rotate_right_size_on_gpu(&self, rhs: &FheUint<Id2>) -> 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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> Shl<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> Shl<&FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§fn shl_assign(&mut self, rhs: &FheUint<Id2>)
fn shl_assign(&mut self, rhs: &FheUint<Id2>)
Performs the <<=
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 <<= &b;
let result: i16 = a.decrypt(&client_key);
assert_eq!(result, 7849i16 << 3u16);
Source§impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> ShlAssign<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§fn shl_assign(&mut self, rhs: &FheUint<Id2>)
fn shl_assign(&mut self, rhs: &FheUint<Id2>)
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(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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> ShlAssign<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> ShlAssign<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§fn shl_assign(&mut self, rhs: FheUint<Id2>)
fn shl_assign(&mut self, rhs: FheUint<Id2>)
<<=
operation. Read moreSource§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> ShlSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Available on crate feature gpu
only.
impl<Id, Id2> ShlSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
gpu
only.fn get_left_shift_size_on_gpu(&self, rhs: &FheUint<Id2>) -> u64
Source§impl<Id, Id2> Shr<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> Shr<&FheUint<Id2>> for &FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> Shr<&FheUint<Id2>> for &FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Source§fn shr_assign(&mut self, rhs: &FheUint<Id2>)
fn shr_assign(&mut self, rhs: &FheUint<Id2>)
Performs the >>=
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 >>= &b;
let result: i16 = a.decrypt(&client_key);
assert_eq!(result, 7849i16 >> 3u16);
Source§impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> ShrAssign<&FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§fn shr_assign(&mut self, rhs: &FheUint<Id2>)
fn shr_assign(&mut self, rhs: &FheUint<Id2>)
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(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>where
Id: FheIntId,
Id2: FheUintId,
impl<Id, Id2> ShrAssign<FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
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>where
Id: FheUintId,
Id2: FheUintId,
impl<Id, Id2> ShrAssign<FheUint<Id2>> for FheUint<Id>where
Id: FheUintId,
Id2: FheUintId,
Source§fn shr_assign(&mut self, rhs: FheUint<Id2>)
fn shr_assign(&mut self, rhs: FheUint<Id2>)
>>=
operation. Read moreSource§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, Id2> ShrSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
Available on crate feature gpu
only.
impl<Id, Id2> ShrSizeOnGpu<&FheUint<Id2>> for FheInt<Id>where
Id: FheIntId,
Id2: FheUintId,
gpu
only.fn get_right_shift_size_on_gpu(&self, rhs: &FheUint<Id2>) -> 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>where
Id: FheUintId,
I: Borrow<Self>,
impl<Id, I> SubAssign<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
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<FheUint1024Id>> for U1024
impl SubSizeOnGpu<&FheUint<FheUint1024Id>> for U1024
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint1024) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint1024) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint10Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint10Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint10) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint10) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint128Id>> for u128
impl SubSizeOnGpu<&FheUint<FheUint128Id>> for u128
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint128) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint128) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint12Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint12Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint12) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint12) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint14Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint14Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint14) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint14) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint160Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint160Id>> for U256
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint160) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint160) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint16Id>> for u16
impl SubSizeOnGpu<&FheUint<FheUint16Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint16) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint16) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
impl SubSizeOnGpu<&FheUint<FheUint2048Id>> for U2048
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint2048) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint2048) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint256Id>> for U256
impl SubSizeOnGpu<&FheUint<FheUint256Id>> for U256
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint256) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint256) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint2Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint2Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint2) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint2) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint32Id>> for u32
impl SubSizeOnGpu<&FheUint<FheUint32Id>> for u32
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint32) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint32) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint4Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint4Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint4) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint4) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint512Id>> for U512
impl SubSizeOnGpu<&FheUint<FheUint512Id>> for U512
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint512) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint512) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint64Id>> for u64
impl SubSizeOnGpu<&FheUint<FheUint64Id>> for u64
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint64) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint64) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint6Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint6Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint6) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint6) -> u64
gpu
only.Source§impl SubSizeOnGpu<&FheUint<FheUint8Id>> for u8
impl SubSizeOnGpu<&FheUint<FheUint8Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: &FheUint8) -> u64
fn get_sub_size_on_gpu(&self, rhs: &FheUint8) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint1024Id>> for U1024
impl SubSizeOnGpu<FheUint<FheUint1024Id>> for U1024
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint1024) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint1024) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint10Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint10Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint10) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint10) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint128Id>> for u128
impl SubSizeOnGpu<FheUint<FheUint128Id>> for u128
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint128) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint128) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint12Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint12Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint12) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint12) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint14Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint14Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint14) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint14) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint160Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint160Id>> for U256
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint160) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint160) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint16Id>> for u16
impl SubSizeOnGpu<FheUint<FheUint16Id>> for u16
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint16) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint16) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint2048Id>> for U2048
impl SubSizeOnGpu<FheUint<FheUint2048Id>> for U2048
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint2048) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint2048) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint256Id>> for U256
impl SubSizeOnGpu<FheUint<FheUint256Id>> for U256
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint256) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint256) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint2Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint2Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint2) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint2) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint32Id>> for u32
impl SubSizeOnGpu<FheUint<FheUint32Id>> for u32
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint32) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint32) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint4Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint4Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint4) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint4) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint512Id>> for U512
impl SubSizeOnGpu<FheUint<FheUint512Id>> for U512
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint512) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint512) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint64Id>> for u64
impl SubSizeOnGpu<FheUint<FheUint64Id>> for u64
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint64) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint64) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint6Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint6Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint6) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint6) -> u64
gpu
only.Source§impl SubSizeOnGpu<FheUint<FheUint8Id>> for u8
impl SubSizeOnGpu<FheUint<FheUint8Id>> for u8
Source§fn get_sub_size_on_gpu(&self, rhs: FheUint8) -> u64
fn get_sub_size_on_gpu(&self, rhs: FheUint8) -> u64
gpu
only.Source§impl<Id, I> SubSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
Available on crate feature gpu
only.
impl<Id, I> SubSizeOnGpu<I> for FheUint<Id>where
Id: FheUintId,
I: Borrow<Self>,
gpu
only.fn get_sub_size_on_gpu(&self, rhs: I) -> u64
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> 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<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,
impl<Id> Version for FheUint<Id>where
RadixCiphertext: VersionizeOwned + Unversionize + Versionize,
Id: VersionizeOwned + Unversionize + Versionize + FheUintId,
Tag: 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>
impl<Id: FheUintId> HlExpandable for FheUint<Id>
Auto Trait Implementations§
impl<Id> Freeze for FheUint<Id>where
Id: Freeze,
impl<Id> RefUnwindSafe for FheUint<Id>where
Id: RefUnwindSafe,
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> UnwindSafe for FheUint<Id>where
Id: UnwindSafe,
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,
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 moreSource§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)
Available on crate feature integer
only.
fn overflowing_add( self, other: &FheUint<Id>, ) -> (<Clear as OverflowingAdd<&FheUint<Id>>>::Output, FheBool)
integer
only.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));