Struct elliptic_curve::secret_key::SecretKey
source ·
[−]pub struct SecretKey<C: Curve + SecretValue> { /* private fields */ }
Expand description
Elliptic curve secret keys.
This type wraps a secret scalar value, helping to prevent accidental
exposure and securely erasing the value from memory when dropped
(when the zeroize
feature of this crate is enabled).
Parsing PKCS#8 Keys
PKCS#8 is a commonly used format for encoding secret keys (especially ones generated by OpenSSL).
Keys in PKCS#8 format are either binary (ASN.1 BER/DER), or PEM encoded (ASCII) and begin with the following:
-----BEGIN PRIVATE KEY-----
To decode an elliptic curve private key from PKCS#8, enable the pkcs8
feature of this crate (or the pkcs8
feature of a specific RustCrypto
elliptic curve crate) and use the
[elliptic_curve::pkcs8::FromPrivateKey
][FromPrivateKey
]
trait to parse it.
When the pem
feature of this crate (or a specific RustCrypto elliptic
curve crate) is enabled, a [FromStr
] impl is also available.
Implementations
impl<C> SecretKey<C> where
C: Curve + SecretValue,
C::Secret: Clone + Zeroize,
FieldBytes<C>: From<C::Secret>,
impl<C> SecretKey<C> where
C: Curve + SecretValue,
C::Secret: Clone + Zeroize,
FieldBytes<C>: From<C::Secret>,
pub fn random(rng: impl CryptoRng + RngCore) -> Self where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
FieldBytes<C>: From<Scalar<C>> + for<'a> From<&'a Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + Zeroize,
pub fn random(rng: impl CryptoRng + RngCore) -> Self where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
FieldBytes<C>: From<Scalar<C>> + for<'a> From<&'a Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + Zeroize,
Generate a random SecretKey
Create a new secret key from a serialized scalar value
Deserialize raw private scalar as a big endian integer
Expose the byte serialization of the value this SecretKey
wraps
pub fn secret_scalar(&self) -> &NonZeroScalar<C> where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
FieldBytes<C>: From<Scalar<C>> + for<'a> From<&'a Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + Zeroize,
pub fn secret_scalar(&self) -> &NonZeroScalar<C> where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
FieldBytes<C>: From<Scalar<C>> + for<'a> From<&'a Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + Zeroize,
pub fn public_key(&self) -> PublicKey<C> where
C: Curve + ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
FieldBytes<C>: From<Scalar<C>> + for<'a> From<&'a Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + Zeroize,
AffinePoint<C>: Copy + Clone + Debug + Default,
ProjectivePoint<C>: From<AffinePoint<C>>,
pub fn public_key(&self) -> PublicKey<C> where
C: Curve + ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
FieldBytes<C>: From<Scalar<C>> + for<'a> From<&'a Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + Zeroize,
AffinePoint<C>: Copy + Clone + Debug + Default,
ProjectivePoint<C>: From<AffinePoint<C>>,
Get the PublicKey
which corresponds to this secret key
Trait Implementations
Auto Trait Implementations
impl<C> RefUnwindSafe for SecretKey<C> where
<C as SecretValue>::Secret: RefUnwindSafe,
impl<C> Send for SecretKey<C> where
<C as SecretValue>::Secret: Send,
impl<C> Sync for SecretKey<C> where
<C as SecretValue>::Secret: Sync,
impl<C> Unpin for SecretKey<C> where
<C as SecretValue>::Secret: Unpin,
impl<C> UnwindSafe for SecretKey<C> where
<C as SecretValue>::Secret: UnwindSafe,
Blanket Implementations
Mutably borrows from an owned value. Read more
Causes self
to use its Binary
implementation when Debug
-formatted.
Causes self
to use its Display
implementation when
Debug
-formatted. Read more
Causes self
to use its LowerExp
implementation when
Debug
-formatted. Read more
Causes self
to use its LowerHex
implementation when
Debug
-formatted. Read more
Causes self
to use its Octal
implementation when Debug
-formatted.
Causes self
to use its Pointer
implementation when
Debug
-formatted. Read more
Causes self
to use its UpperExp
implementation when
Debug
-formatted. Read more
Causes self
to use its UpperHex
implementation when
Debug
-formatted. Read more
fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: AsRef<T>,
T: 'a,
R: 'a,
fn pipe_as_ref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: AsRef<T>,
T: 'a,
R: 'a,
Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more
fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: Borrow<T>,
T: 'a,
R: 'a,
fn pipe_borrow<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R where
Self: Borrow<T>,
T: 'a,
R: 'a,
Pipes a trait borrow into a function that cannot normally be called in suffix position. Read more
fn pipe_deref<'a, R>(&'a self, func: impl FnOnce(&'a Self::Target) -> R) -> R where
Self: Deref,
R: 'a,
fn pipe_deref<'a, R>(&'a self, func: impl FnOnce(&'a Self::Target) -> R) -> R where
Self: Deref,
R: 'a,
Pipes a dereference into a function that cannot normally be called in suffix position. Read more
Pipes a reference into a function that cannot ordinarily be called in suffix position. Read more
Provides immutable access to the reference for inspection.
Calls tap_ref
in debug builds, and does nothing in release builds.
Provides mutable access to the reference for modification.
Calls tap_ref_mut
in debug builds, and does nothing in release builds.
Provides immutable access to the borrow for inspection. Read more
Calls tap_borrow
in debug builds, and does nothing in release builds.
fn tap_borrow_mut<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
fn tap_borrow_mut<F, R>(self, func: F) -> Self where
Self: BorrowMut<T>,
F: FnOnce(&mut T) -> R,
Provides mutable access to the borrow for modification.
Immutably dereferences self
for inspection.
fn tap_deref_dbg<F, R>(self, func: F) -> Self where
Self: Deref,
F: FnOnce(&Self::Target) -> R,
fn tap_deref_dbg<F, R>(self, func: F) -> Self where
Self: Deref,
F: FnOnce(&Self::Target) -> R,
Calls tap_deref
in debug builds, and does nothing in release builds.
fn tap_deref_mut<F, R>(self, func: F) -> Self where
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
fn tap_deref_mut<F, R>(self, func: F) -> Self where
Self: DerefMut,
F: FnOnce(&mut Self::Target) -> R,
Mutably dereferences self
for modification.