pub struct SecretKey<C> where
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 as SecretValue>::Secret: Clone,
<C as SecretValue>::Secret: Zeroize,
GenericArray<u8, <C as Curve>::FieldSize>: From<<C as SecretValue>::Secret>,
impl<C> SecretKey<C> where
C: Curve + SecretValue,
<C as SecretValue>::Secret: Clone,
<C as SecretValue>::Secret: Zeroize,
GenericArray<u8, <C as Curve>::FieldSize>: From<<C as SecretValue>::Secret>,
pub fn random(rng: impl CryptoRng + RngCore) -> SecretKey<C> where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
GenericArray<u8, <C as Curve>::FieldSize>: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
GenericArray<u8, <C as Curve>::FieldSize>: for<'a> From<&'a <<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: PrimeField,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: Zeroize,
<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar as PrimeField>::Repr == GenericArray<u8, <C as Curve>::FieldSize>,
pub fn random(rng: impl CryptoRng + RngCore) -> SecretKey<C> where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
GenericArray<u8, <C as Curve>::FieldSize>: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
GenericArray<u8, <C as Curve>::FieldSize>: for<'a> From<&'a <<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: PrimeField,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: Zeroize,
<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar as PrimeField>::Repr == GenericArray<u8, <C as Curve>::FieldSize>,
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>>,
GenericArray<u8, <C as Curve>::FieldSize>: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
GenericArray<u8, <C as Curve>::FieldSize>: for<'a> From<&'a <<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: PrimeField,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: Zeroize,
<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar as PrimeField>::Repr == GenericArray<u8, <C as Curve>::FieldSize>,
pub fn secret_scalar(&self) -> &NonZeroScalar<C> where
C: ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
GenericArray<u8, <C as Curve>::FieldSize>: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
GenericArray<u8, <C as Curve>::FieldSize>: for<'a> From<&'a <<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: PrimeField,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: Zeroize,
<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar as PrimeField>::Repr == GenericArray<u8, <C as Curve>::FieldSize>,
pub fn public_key(&self) -> PublicKey<C> where
C: Curve + ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
GenericArray<u8, <C as Curve>::FieldSize>: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
GenericArray<u8, <C as Curve>::FieldSize>: for<'a> From<&'a <<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: PrimeField,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: Zeroize,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Copy,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Clone,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Debug,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Default,
<C as ProjectiveArithmetic>::ProjectivePoint: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr>,
<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar as PrimeField>::Repr == GenericArray<u8, <C as Curve>::FieldSize>,
pub fn public_key(&self) -> PublicKey<C> where
C: Curve + ProjectiveArithmetic + SecretValue<Secret = NonZeroScalar<C>>,
GenericArray<u8, <C as Curve>::FieldSize>: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
GenericArray<u8, <C as Curve>::FieldSize>: for<'a> From<&'a <<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar>,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: PrimeField,
<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar: Zeroize,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Copy,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Clone,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Debug,
<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr: Default,
<C as ProjectiveArithmetic>::ProjectivePoint: From<<<C as ProjectiveArithmetic>::ProjectivePoint as Curve>::AffineRepr>,
<<<C as ProjectiveArithmetic>::ProjectivePoint as Group>::Scalar as PrimeField>::Repr == GenericArray<u8, <C as Curve>::FieldSize>,
Get the PublicKey
which corresponds to this secret key
Trait Implementations
impl<C> Clone for SecretKey<C> where
C: Clone + Curve + SecretValue,
<C as SecretValue>::Secret: Clone,
impl<C> Clone for SecretKey<C> where
C: Clone + Curve + SecretValue,
<C as SecretValue>::Secret: Clone,
impl<C> From<SecretKey<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic,
FieldBytes<C>: From<Scalar<C>> + for<'r> From<&'r Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + ConstantTimeEq + FromDigest<C> + Invert<Output = Scalar<C>> + SignPrimitive<C> + Zeroize,
SignatureSize<C>: ArrayLength<u8>,
impl<C> From<SecretKey<C>> for SigningKey<C> where
C: Curve + ProjectiveArithmetic,
FieldBytes<C>: From<Scalar<C>> + for<'r> From<&'r Scalar<C>>,
Scalar<C>: PrimeField<Repr = FieldBytes<C>> + ConstantTimeEq + FromDigest<C> + Invert<Output = Scalar<C>> + SignPrimitive<C> + Zeroize,
SignatureSize<C>: ArrayLength<u8>,
impl<'_, C> TryFrom<&'_ [u8]> for SecretKey<C> where
C: Curve + SecretValue,
<C as SecretValue>::Secret: Clone,
<C as SecretValue>::Secret: Zeroize,
GenericArray<u8, <C as Curve>::FieldSize>: From<<C as SecretValue>::Secret>,
impl<'_, C> TryFrom<&'_ [u8]> for SecretKey<C> where
C: Curve + SecretValue,
<C as SecretValue>::Secret: Clone,
<C as SecretValue>::Secret: Zeroize,
GenericArray<u8, <C as Curve>::FieldSize>: From<<C as SecretValue>::Secret>,
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.