pub struct EncryptionKey(/* private fields */);
Expand description
An ElGamal encryption key (also called a public key in other implementations). To create a new encryption key, see DecryptionKey.
Implementations§
Source§impl EncryptionKey
impl EncryptionKey
Sourcepub fn exp_encrypt<R: RngCore + CryptoRng>(
&self,
m: Scalar,
rng: &mut R,
) -> Ciphertext
pub fn exp_encrypt<R: RngCore + CryptoRng>( &self, m: Scalar, rng: &mut R, ) -> Ciphertext
Encrypt mG
with a randomly-generated blinding factor, where G
is the group generator.
This is computationally intensive to decrypt to the original scalar, and not relevant to
the majority of users. This function takes advantage of a fast implementation for multiple
multiplications in curve25519-dalek
.
§Example
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, GENERATOR_TABLE, Scalar};
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let m = Scalar::from(5u32);
let encrypted = enc_key.exp_encrypt(m, &mut rng);
Sourcepub fn exp_encrypt_with(&self, m: Scalar, r: Scalar) -> Ciphertext
pub fn exp_encrypt_with(&self, m: Scalar, r: Scalar) -> Ciphertext
Encrypt mG
with the blinding factor r
, where G
is the group generator.
This is computationally intensive to decrypt to the original scalar, and not relevant to
the majority of users. This function takes advantage of a fast implementation for multiple
multiplications in curve25519-dalek
.
§Example
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, GENERATOR_TABLE, Scalar};
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let m = Scalar::from(5u32);
let r = Scalar::from(10u32);
let encrypted = enc_key.exp_encrypt_with(m, r);
Sourcepub fn encrypt<R: RngCore + CryptoRng>(
&self,
m: RistrettoPoint,
rng: &mut R,
) -> Ciphertext
pub fn encrypt<R: RngCore + CryptoRng>( &self, m: RistrettoPoint, rng: &mut R, ) -> Ciphertext
Encrypt the curve point m
with a randomly-generated blinding factor.
§Example
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, GENERATOR_TABLE, Scalar};
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let m = &Scalar::from(5u32) * &GENERATOR_TABLE;
let encrypted = enc_key.encrypt(m, &mut rng);
Sourcepub fn encrypt_with(&self, m: RistrettoPoint, r: Scalar) -> Ciphertext
pub fn encrypt_with(&self, m: RistrettoPoint, r: Scalar) -> Ciphertext
Encrypt the curve point m
with the blinding factor r
.
§Example
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, GENERATOR_TABLE, Scalar};
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let m = &Scalar::from(5u32) * &GENERATOR_TABLE;
let r = Scalar::from(10u32);
let encrypted = enc_key.encrypt_with(m, r);
Sourcepub fn rerandomise<R: RngCore + CryptoRng>(
&self,
ct: Ciphertext,
rng: &mut R,
) -> Ciphertext
pub fn rerandomise<R: RngCore + CryptoRng>( &self, ct: Ciphertext, rng: &mut R, ) -> Ciphertext
Re-randomise the ciphertext ct
with a randomly-generated blinding factor.
This will generate a new encryption of the same curve point.
§Example
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, GENERATOR_TABLE, Scalar};
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let m = &Scalar::from(5u32) * &GENERATOR_TABLE;
let ct1 = enc_key.encrypt(m, &mut rng);
let ct2 = enc_key.rerandomise(ct1, &mut rng);
assert_eq!(dec_key.decrypt(ct1), dec_key.decrypt(ct2));
Sourcepub fn rerandomise_with(&self, ct: Ciphertext, r: Scalar) -> Ciphertext
pub fn rerandomise_with(&self, ct: Ciphertext, r: Scalar) -> Ciphertext
Re-randomise the ciphertext ct
with the provided blinding factor.
This will generate a new encryption of the same curve point.
§Example
use rand::rngs::StdRng;
use rand::SeedableRng;
use rust_elgamal::{DecryptionKey, GENERATOR_TABLE, Scalar};
let mut rng = StdRng::from_entropy();
let dec_key = DecryptionKey::new(&mut rng);
let enc_key = dec_key.encryption_key();
let m = &Scalar::from(5u32) * &GENERATOR_TABLE;
let ct1 = enc_key.encrypt(m, &mut rng);
let r = Scalar::from(10u32);
let ct2 = enc_key.rerandomise_with(ct1, r);
assert_eq!(dec_key.decrypt(ct1), dec_key.decrypt(ct2));
Trait Implementations§
Source§impl AsRef<RistrettoPoint> for EncryptionKey
impl AsRef<RistrettoPoint> for EncryptionKey
Source§fn as_ref(&self) -> &RistrettoPoint
fn as_ref(&self) -> &RistrettoPoint
Source§impl Clone for EncryptionKey
impl Clone for EncryptionKey
Source§fn clone(&self) -> EncryptionKey
fn clone(&self) -> EncryptionKey
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more