pub struct IntegerElGamal { /* private fields */ }Expand description
Multiplicatively homomorphic ElGamal over a safe prime group where the generator is 4.
As an example we compute the product between 4 and 6 using ElGamal’s homomorphic property.
let mut rng = GeneralRng::new(OsRng);
let el_gamal = IntegerElGamal::setup(&Default::default());
let (public_key, secret_key) = el_gamal.generate_keys(&mut rng);
let ciphertext_1 = public_key.encrypt(&UnsignedInteger::from(4), &mut rng);
let ciphertext_2 = public_key.encrypt(&UnsignedInteger::from(6), &mut rng);
println!("[4] * [6] = [{}]", secret_key.decrypt(&(&ciphertext_1 * &ciphertext_2)));
// Prints: "[4] * [6] = [24]".Trait Implementations§
Source§impl AsymmetricCryptosystem for IntegerElGamal
impl AsymmetricCryptosystem for IntegerElGamal
Source§fn setup(security_param: &BitsOfSecurity) -> Self
fn setup(security_param: &BitsOfSecurity) -> Self
Uses previously randomly generated safe primes as the modulus for pre-set modulus sizes.
Source§fn generate_keys<R: SecureRng>(
&self,
rng: &mut GeneralRng<R>,
) -> (IntegerElGamalPK, IntegerElGamalSK)
fn generate_keys<R: SecureRng>( &self, rng: &mut GeneralRng<R>, ) -> (IntegerElGamalPK, IntegerElGamalSK)
Generates a fresh ElGamal keypair.
let el_gamal = IntegerElGamal::setup(&Default::default());
let (public_key, secret_key) = el_gamal.generate_keys(&mut rng);Source§type PublicKey = IntegerElGamalPK
type PublicKey = IntegerElGamalPK
The public key, used for encrypting plaintexts.
Source§type SecretKey = IntegerElGamalSK
type SecretKey = IntegerElGamalSK
The secret key, used for decrypting ciphertexts.
Source§impl Clone for IntegerElGamal
impl Clone for IntegerElGamal
Source§fn clone(&self) -> IntegerElGamal
fn clone(&self) -> IntegerElGamal
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for IntegerElGamal
impl RefUnwindSafe for IntegerElGamal
impl Send for IntegerElGamal
impl !Sync for IntegerElGamal
impl Unpin for IntegerElGamal
impl UnwindSafe for IntegerElGamal
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
Mutably borrows from an owned value. Read more
Source§impl<T> CheckedAs for T
impl<T> CheckedAs for T
Source§fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
fn checked_as<Dst>(self) -> Option<Dst>where
T: CheckedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
impl<Src, Dst> CheckedCastFrom<Src> for Dstwhere
Src: CheckedCast<Dst>,
Source§fn checked_cast_from(src: Src) -> Option<Dst>
fn checked_cast_from(src: Src) -> Option<Dst>
Casts the value.
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> OverflowingAs for T
impl<T> OverflowingAs for T
Source§fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
fn overflowing_as<Dst>(self) -> (Dst, bool)where
T: OverflowingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
impl<Src, Dst> OverflowingCastFrom<Src> for Dstwhere
Src: OverflowingCast<Dst>,
Source§fn overflowing_cast_from(src: Src) -> (Dst, bool)
fn overflowing_cast_from(src: Src) -> (Dst, bool)
Casts the value.
Source§impl<T> SaturatingAs for T
impl<T> SaturatingAs for T
Source§fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
fn saturating_as<Dst>(self) -> Dstwhere
T: SaturatingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
impl<Src, Dst> SaturatingCastFrom<Src> for Dstwhere
Src: SaturatingCast<Dst>,
Source§fn saturating_cast_from(src: Src) -> Dst
fn saturating_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> UnwrappedAs for T
impl<T> UnwrappedAs for T
Source§fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
fn unwrapped_as<Dst>(self) -> Dstwhere
T: UnwrappedCast<Dst>,
Casts the value.
Source§impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
impl<Src, Dst> UnwrappedCastFrom<Src> for Dstwhere
Src: UnwrappedCast<Dst>,
Source§fn unwrapped_cast_from(src: Src) -> Dst
fn unwrapped_cast_from(src: Src) -> Dst
Casts the value.
Source§impl<T> WrappingAs for T
impl<T> WrappingAs for T
Source§fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
fn wrapping_as<Dst>(self) -> Dstwhere
T: WrappingCast<Dst>,
Casts the value.
Source§impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
impl<Src, Dst> WrappingCastFrom<Src> for Dstwhere
Src: WrappingCast<Dst>,
Source§fn wrapping_cast_from(src: Src) -> Dst
fn wrapping_cast_from(src: Src) -> Dst
Casts the value.