pub struct FheBool { /* private fields */ }
integer
only.Expand description
The FHE boolean data type.
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let config = ConfigBuilder::default().build();
let (client_key, server_key) = generate_keys(config);
let ttrue = FheBool::encrypt(true, &client_key);
let ffalse = FheBool::encrypt(false, &client_key);
// Do not forget to set the server key before doing any computation
set_server_key(server_key);
let fhe_result = ttrue & ffalse;
let clear_result = fhe_result.decrypt(&client_key);
assert_eq!(clear_result, false);
Implementations§
source§impl FheBool
impl FheBool
pub fn current_device(&self) -> Device
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 try_decrypt_trivial(&self) -> Result<bool, NotTrivialCiphertextError>
pub fn try_decrypt_trivial(&self) -> Result<bool, 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, FheBool};
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 = FheBool::encrypt(false, &client_key);
// This is a trivial ciphertext
let trivial = FheBool::encrypt_trivial(true);
// We can trivial decrypt
let result: Result<bool, _> = trivial.try_decrypt_trivial();
assert_eq!(result, Ok(true));
// We cannot trivial decrypt
let result: Result<bool, _> = non_trivial.try_decrypt_trivial();
matches!(result, 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, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let non_trivial = FheBool::encrypt(false, &client_key);
assert!(!non_trivial.is_trivial());
let trivial = FheBool::encrypt_trivial(true);
assert!(trivial.is_trivial());
Trait Implementations§
source§impl BitAnd<&FheBool> for bool
impl BitAnd<&FheBool> for bool
source§fn bitand(self, rhs: &FheBool) -> Self::Output
fn bitand(self, rhs: &FheBool) -> Self::Output
Performs a bitwise ‘and’ between a bool and a FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = false & &a;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, false & true);
source§impl<B> BitAnd<B> for &FheBool
impl<B> BitAnd<B> for &FheBool
source§fn bitand(self, rhs: B) -> Self::Output
fn bitand(self, rhs: B) -> Self::Output
Performs a bitwise ‘and’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(true, &client_key);
let result = &a & &b;
let result = result.decrypt(&client_key);
assert_eq!(result, true & true);
source§impl<B> BitAnd<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> BitAnd<B> for FheBoolwhere
B: Borrow<Self>,
source§fn bitand(self, rhs: B) -> Self::Output
fn bitand(self, rhs: B) -> Self::Output
Performs a bitwise ‘and’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(true, &client_key);
let result = a & &b;
let result = result.decrypt(&client_key);
assert_eq!(result, true & true);
source§impl BitAnd<FheBool> for bool
impl BitAnd<FheBool> for bool
source§fn bitand(self, rhs: FheBool) -> Self::Output
fn bitand(self, rhs: FheBool) -> Self::Output
Performs a bitwise ‘and’ between a bool and a FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = false & a;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, false & true);
source§impl BitAnd<bool> for &FheBool
impl BitAnd<bool> for &FheBool
source§fn bitand(self, rhs: bool) -> Self::Output
fn bitand(self, rhs: bool) -> Self::Output
Performs a bitwise ‘and’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = &a & false;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true & false);
source§impl BitAnd<bool> for FheBool
impl BitAnd<bool> for FheBool
source§fn bitand(self, rhs: bool) -> Self::Output
fn bitand(self, rhs: bool) -> Self::Output
Performs a bitwise ‘and’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a & false;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true & false);
source§impl<B> BitAndAssign<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> BitAndAssign<B> for FheBoolwhere
B: Borrow<Self>,
source§fn bitand_assign(&mut self, rhs: B)
fn bitand_assign(&mut self, rhs: B)
Performs a bitwise ‘and’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheBool::encrypt(true, &client_key);
let b = true;
a &= b;
let result = a.decrypt(&client_key);
assert_eq!(result, true & true);
source§impl BitAndAssign<bool> for FheBool
impl BitAndAssign<bool> for FheBool
source§fn bitand_assign(&mut self, rhs: bool)
fn bitand_assign(&mut self, rhs: bool)
Performs a bitwise ‘and’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheBool::encrypt(true, &client_key);
a &= false;
let result = a.decrypt(&client_key);
assert_eq!(result, true & false);
source§impl BitOr<&FheBool> for bool
impl BitOr<&FheBool> for bool
source§fn bitor(self, rhs: &FheBool) -> Self::Output
fn bitor(self, rhs: &FheBool) -> Self::Output
Performs a bitwise ‘or’ between a bool and a FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = false | &a;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, false | true);
source§impl<B> BitOr<B> for &FheBool
impl<B> BitOr<B> for &FheBool
source§fn bitor(self, rhs: B) -> Self::Output
fn bitor(self, rhs: B) -> Self::Output
Performs a bitwise ‘or’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(false, &client_key);
let result = &a | &b;
let result = result.decrypt(&client_key);
assert_eq!(result, true | false);
source§impl<B> BitOr<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> BitOr<B> for FheBoolwhere
B: Borrow<Self>,
source§fn bitor(self, rhs: B) -> Self::Output
fn bitor(self, rhs: B) -> Self::Output
Performs a bitwise ‘or’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(false, &client_key);
let result = a | &b;
let result = result.decrypt(&client_key);
assert_eq!(result, true | false);
source§impl BitOr<FheBool> for bool
impl BitOr<FheBool> for bool
source§fn bitor(self, rhs: FheBool) -> Self::Output
fn bitor(self, rhs: FheBool) -> Self::Output
Performs a bitwise ‘or’ between a bool and a FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = false | a;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, false | true);
source§impl BitOr<bool> for &FheBool
impl BitOr<bool> for &FheBool
source§fn bitor(self, rhs: bool) -> Self::Output
fn bitor(self, rhs: bool) -> Self::Output
Performs a bitwise ‘or’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a | false;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true | false);
source§impl BitOr<bool> for FheBool
impl BitOr<bool> for FheBool
source§fn bitor(self, rhs: bool) -> Self::Output
fn bitor(self, rhs: bool) -> Self::Output
Performs a bitwise ‘or’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a | false;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true | false);
source§impl<B> BitOrAssign<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> BitOrAssign<B> for FheBoolwhere
B: Borrow<Self>,
source§fn bitor_assign(&mut self, rhs: B)
fn bitor_assign(&mut self, rhs: B)
Performs a bitwise ‘or’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(true, &client_key);
a |= &b;
let result = a.decrypt(&client_key);
assert_eq!(result, true | true);
source§impl BitOrAssign<bool> for FheBool
impl BitOrAssign<bool> for FheBool
source§fn bitor_assign(&mut self, rhs: bool)
fn bitor_assign(&mut self, rhs: bool)
Performs a bitwise ‘or’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheBool::encrypt(true, &client_key);
a |= false;
let result = a.decrypt(&client_key);
assert_eq!(result, true | false);
source§impl BitXor<&FheBool> for bool
impl BitXor<&FheBool> for bool
source§fn bitxor(self, rhs: &FheBool) -> Self::Output
fn bitxor(self, rhs: &FheBool) -> Self::Output
Performs a bitwise ‘xor’ between a bool and a FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = false ^ &a;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, false ^ true);
source§impl<B> BitXor<B> for &FheBool
impl<B> BitXor<B> for &FheBool
source§fn bitxor(self, rhs: B) -> Self::Output
fn bitxor(self, rhs: B) -> Self::Output
Performs a bitwise ‘xor’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(true, &client_key);
let result = &a ^ &b;
let result = result.decrypt(&client_key);
assert_eq!(result, true ^ true);
source§impl<B> BitXor<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> BitXor<B> for FheBoolwhere
B: Borrow<Self>,
source§fn bitxor(self, rhs: B) -> Self::Output
fn bitxor(self, rhs: B) -> Self::Output
Performs a bitwise ‘xor’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(true, &client_key);
let result = a ^ &b;
let result = result.decrypt(&client_key);
assert_eq!(result, true ^ true);
source§impl BitXor<FheBool> for bool
impl BitXor<FheBool> for bool
source§fn bitxor(self, rhs: FheBool) -> Self::Output
fn bitxor(self, rhs: FheBool) -> Self::Output
Performs a bitwise ‘xor’ between a bool and a FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = false ^ a;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, false ^ true);
source§impl BitXor<bool> for &FheBool
impl BitXor<bool> for &FheBool
source§fn bitxor(self, rhs: bool) -> Self::Output
fn bitxor(self, rhs: bool) -> Self::Output
Performs a bitwise ‘xor’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a ^ false;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true ^ false);
source§impl BitXor<bool> for FheBool
impl BitXor<bool> for FheBool
source§fn bitxor(self, rhs: bool) -> Self::Output
fn bitxor(self, rhs: bool) -> Self::Output
Performs a bitwise ‘xor’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a ^ false;
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true ^ false);
source§impl<B> BitXorAssign<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> BitXorAssign<B> for FheBoolwhere
B: Borrow<Self>,
source§fn bitxor_assign(&mut self, rhs: B)
fn bitxor_assign(&mut self, rhs: B)
Performs a bitwise ‘xor’ between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(true, &client_key);
a ^= &b;
let result = a.decrypt(&client_key);
assert_eq!(result, true ^ true);
source§impl BitXorAssign<bool> for FheBool
impl BitXorAssign<bool> for FheBool
source§fn bitxor_assign(&mut self, rhs: bool)
fn bitxor_assign(&mut self, rhs: bool)
Performs a bitwise ‘xor’ between FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let mut a = FheBool::encrypt(true, &client_key);
a ^= false;
let result = a.decrypt(&client_key);
assert_eq!(result, true ^ false);
source§impl<Id> CastFrom<FheBool> for FheInt<Id>where
Id: FheIntId,
impl<Id> CastFrom<FheBool> for FheInt<Id>where
Id: FheIntId,
source§fn cast_from(input: FheBool) -> Self
fn cast_from(input: FheBool) -> Self
Cast a FheBool to a FheInt
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool, FheInt16};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheInt16::cast_from(a);
let decrypted: i16 = b.decrypt(&client_key);
assert_eq!(decrypted, i16::from(true));
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<'de> Deserialize<'de> for FheBool
impl<'de> Deserialize<'de> for FheBool
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 FheDecrypt<bool> for FheBool
impl FheDecrypt<bool> for FheBool
source§impl<B> FheEq<B> for FheBoolwhere
B: Borrow<Self>,
impl<B> FheEq<B> for FheBoolwhere
B: Borrow<Self>,
source§fn eq(&self, other: B) -> Self
fn eq(&self, other: B) -> Self
Test for equality between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(false, &client_key);
let result = a.eq(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true == false);
source§fn ne(&self, other: B) -> Self
fn ne(&self, other: B) -> Self
Test for difference between two FheBool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let b = FheBool::encrypt(false, &client_key);
let result = a.ne(&b);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true != false);
source§impl FheEq<bool> for FheBool
impl FheEq<bool> for FheBool
source§fn eq(&self, other: bool) -> FheBool
fn eq(&self, other: bool) -> FheBool
Test for equality between a FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a.eq(false);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true == false);
source§fn ne(&self, other: bool) -> FheBool
fn ne(&self, other: bool) -> FheBool
Test for equality between a FheBool and a bool
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = a.ne(false);
let decrypted = result.decrypt(&client_key);
assert_eq!(decrypted, true != false);
source§impl FheKeyswitch<FheBool> for KeySwitchingKey
impl FheKeyswitch<FheBool> for KeySwitchingKey
source§impl FheTrivialEncrypt<bool> for FheBool
impl FheTrivialEncrypt<bool> for FheBool
source§fn encrypt_trivial(value: bool) -> Self
fn encrypt_trivial(value: bool) -> Self
Creates a trivial encryption of a bool.
§Warning
Trivial encryptions are not real encryptions, as a trivially encrypted ciphertext can be decrypted by any key (in fact, no key is actually needed).
Trivial encryptions become real encrypted data once used in an operation that involves a real ciphertext
§Example
use tfhe::prelude::*;
use tfhe::{generate_keys, set_server_key, ConfigBuilder, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt_trivial(true);
let decrypted: bool = a.decrypt(&client_key);
assert_eq!(decrypted, true);
source§impl FheTryEncrypt<bool, CompactPublicKey> for FheBool
impl FheTryEncrypt<bool, CompactPublicKey> for FheBool
type Error = Error
fn try_encrypt(value: bool, key: &CompactPublicKey) -> Result<Self, Self::Error>
source§impl FheTryEncrypt<bool, CompressedPublicKey> for FheBool
impl FheTryEncrypt<bool, CompressedPublicKey> for FheBool
type Error = Error
fn try_encrypt( value: bool, key: &CompressedPublicKey ) -> Result<Self, Self::Error>
source§impl FheTryTrivialEncrypt<bool> for FheBool
impl FheTryTrivialEncrypt<bool> for FheBool
source§impl<Id: FheIntId> IfThenElse<FheInt<Id>> for FheBool
impl<Id: FheIntId> IfThenElse<FheInt<Id>> for FheBool
source§fn if_then_else(&self, ct_then: &FheInt<Id>, ct_else: &FheInt<Id>) -> FheInt<Id>
fn if_then_else(&self, ct_then: &FheInt<Id>, ct_else: &FheInt<Id>) -> FheInt<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 cmux(&self, ct_then: &Ciphertext, ct_else: &Ciphertext) -> Ciphertext
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 cmux(&self, ct_then: &Ciphertext, ct_else: &Ciphertext) -> Ciphertext
source§impl Not for &FheBool
impl Not for &FheBool
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, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = !&a;
let result = result.decrypt(&client_key);
assert_eq!(result, false);
source§impl Not for FheBool
impl Not for FheBool
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, FheBool};
let (client_key, server_key) = generate_keys(ConfigBuilder::default());
set_server_key(server_key);
let a = FheBool::encrypt(true, &client_key);
let result = !a;
let result = result.decrypt(&client_key);
assert_eq!(result, false);