pub struct SecretKey<G: Group>(/* private fields */);
Expand description

Secret key for ElGamal encryption and related protocols. This is a thin wrapper around the Group scalar.

Implementations§

source§

impl<G: Group> SecretKey<G>

source

pub fn decrypt_to_element(&self, encrypted: Ciphertext<G>) -> G::Element

Decrypts the provided ciphertext and returns the produced group element.

As the ciphertext does not include a MAC or another way to assert integrity, this operation cannot fail. If the ciphertext is not produced properly (e.g., it targets another receiver), the returned group element will be garbage.

source

pub fn decrypt( &self, encrypted: Ciphertext<G>, lookup_table: &DiscreteLogTable<G> ) -> Option<u64>

Decrypts the provided ciphertext and returns the original encrypted value.

lookup_table is used to find encrypted values based on the original decrypted group element. That is, it must contain all valid plaintext values. If the value is not in the table, this method will return None.

source§

impl<G: Group> SecretKey<G>

source

pub fn generate<R: CryptoRng + RngCore>(rng: &mut R) -> Self

Generates a random secret key.

source

pub fn from_bytes(bytes: &[u8]) -> Option<Self>

Deserializes a secret key from bytes. If bytes do not represent a valid scalar, returns None.

source

pub fn expose_scalar(&self) -> &G::Scalar

Exposes the scalar equivalent to this key.

Trait Implementations§

source§

impl<G: Group> Add for SecretKey<G>

§

type Output = SecretKey<G>

The resulting type after applying the + operator.
source§

fn add(self, rhs: Self) -> Self

Performs the + operation. Read more
source§

impl<G: Group> AddAssign for SecretKey<G>

source§

fn add_assign(&mut self, rhs: Self)

Performs the += operation. Read more
source§

impl<G: Group> Clone for SecretKey<G>

source§

fn clone(&self) -> Self

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<G: Group> Debug for SecretKey<G>

source§

fn fmt(&self, formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de, G: Group> Deserialize<'de> for SecretKey<G>

source§

fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl<G: Group> Drop for SecretKey<G>

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl<G: Group> From<&SecretKey<G>> for PublicKey<G>

source§

fn from(secret_key: &SecretKey<G>) -> Self

Converts to this type from the input type.
source§

impl<G: Group> From<SecretKey<G>> for Keypair<G>

source§

fn from(secret: SecretKey<G>) -> Self

Converts to this type from the input type.
source§

impl<G: Group> Mul<&<G as ScalarOps>::Scalar> for &SecretKey<G>

§

type Output = SecretKey<G>

The resulting type after applying the * operator.
source§

fn mul(self, k: &G::Scalar) -> SecretKey<G>

Performs the * operation. Read more
source§

impl<G: Group> Mul<&<G as ScalarOps>::Scalar> for SecretKey<G>

§

type Output = SecretKey<G>

The resulting type after applying the * operator.
source§

fn mul(self, k: &G::Scalar) -> Self

Performs the * operation. Read more
source§

impl<G: Group> Serialize for SecretKey<G>

source§

fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl<G: Group> Sub for SecretKey<G>

§

type Output = SecretKey<G>

The resulting type after applying the - operator.
source§

fn sub(self, rhs: Self) -> Self

Performs the - operation. Read more
source§

impl<G: Group> SubAssign for SecretKey<G>

source§

fn sub_assign(&mut self, rhs: Self)

Performs the -= operation. Read more
source§

impl<G: Group> Zeroize for SecretKey<G>

source§

fn zeroize(&mut self)

Zero out this object from memory using Rust intrinsics which ensure the zeroization operation is not “optimized away” by the compiler.

Auto Trait Implementations§

§

impl<G> Freeze for SecretKey<G>
where <G as ScalarOps>::Scalar: Freeze,

§

impl<G> RefUnwindSafe for SecretKey<G>

§

impl<G> Send for SecretKey<G>
where <G as ScalarOps>::Scalar: Send,

§

impl<G> Sync for SecretKey<G>
where <G as ScalarOps>::Scalar: Sync,

§

impl<G> Unpin for SecretKey<G>
where <G as ScalarOps>::Scalar: Unpin,

§

impl<G> UnwindSafe for SecretKey<G>
where <G as ScalarOps>::Scalar: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

§

impl<T, Rhs, Output> GroupOps<Rhs, Output> for T
where T: Add<Rhs, Output = Output> + Sub<Rhs, Output = Output> + AddAssign<Rhs> + SubAssign<Rhs>,