Struct PrivateKey
pub struct PrivateKey { /* private fields */ }
dep_orion
only.Expand description
A type to represent the PrivateKey
that X25519 uses.
This type holds a scalar and is used internally as such. The scalar held is decoded (a.k.a “clamped”) as mandated in the RFC.
§Errors:
An error will be returned if:
slice
is not 32 bytes.
§Panics:
A panic will occur if:
- Failure to generate random bytes securely.
§Security:
-
Avoid using
unprotected_as_bytes()
whenever possible, as it breaks all protections that the type implements. -
The trait
PartialEq<&'_ [u8]>
is implemented for this type so that users are not tempted to callunprotected_as_bytes
to compare this sensitive value to a byte slice. The trait is implemented in such a way that the comparison happens in constant time. Thus, users should preferSecretType == &[u8]
overSecretType.unprotected_as_bytes() == &[u8]
.
Examples are shown below. The examples apply to any type that implements PartialEq<&'_ [u8]>
.
use orion::hazardous::ecc::x25519::PrivateKey;
// Initialize a secret key with random bytes.
let secret_key = PrivateKey::generate();
// Secure, constant-time comparison with a byte slice
assert_ne!(secret_key, &[0; 32][..]);
// Secure, constant-time comparison with another SecretKey
assert_ne!(secret_key, PrivateKey::generate());
Implementations§
§impl PrivateKey
impl PrivateKey
pub fn from_slice(slice: &[u8]) -> Result<PrivateKey, UnknownCryptoError> ⓘ
pub fn from_slice(slice: &[u8]) -> Result<PrivateKey, UnknownCryptoError> ⓘ
Construct from a given byte slice.
pub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Return true
if this object does not hold any data, false
otherwise.
NOTE: This method should always return false
, since there shouldn’t be a way
to create an empty instance of this object.
pub fn unprotected_as_bytes(&self) -> &[u8] ⓘ
pub fn unprotected_as_bytes(&self) -> &[u8] ⓘ
Return the object as byte slice. Warning: Should not be used unless strictly needed. This breaks protections that the type implements.
pub fn generate() -> PrivateKey
pub fn generate() -> PrivateKey
Randomly generate using a CSPRNG. Not available in no_std
context.
Trait Implementations§
§impl Debug for PrivateKey
impl Debug for PrivateKey
§impl From<[u8; 32]> for PrivateKey
impl From<[u8; 32]> for PrivateKey
§fn from(bytes: [u8; 32]) -> PrivateKey
fn from(bytes: [u8; 32]) -> PrivateKey
§impl PartialEq<&[u8]> for PrivateKey
impl PartialEq<&[u8]> for PrivateKey
§impl PartialEq for PrivateKey
impl PartialEq for PrivateKey
§impl TryFrom<&PrivateKey> for PublicKey
impl TryFrom<&PrivateKey> for PublicKey
§type Error = UnknownCryptoError
type Error = UnknownCryptoError
§fn try_from(
private_key: &PrivateKey,
) -> Result<PublicKey, <PublicKey as TryFrom<&PrivateKey>>::Error> ⓘ
fn try_from( private_key: &PrivateKey, ) -> Result<PublicKey, <PublicKey as TryFrom<&PrivateKey>>::Error> ⓘ
impl StructuralPartialEq for PrivateKey
Auto Trait Implementations§
impl Freeze for PrivateKey
impl RefUnwindSafe for PrivateKey
impl Send for PrivateKey
impl Sync for PrivateKey
impl Unpin for PrivateKey
impl UnwindSafe for PrivateKey
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
Source§impl<T> ByteSized for T
impl<T> ByteSized for T
Source§const BYTE_ALIGN: usize = _
const BYTE_ALIGN: usize = _
Source§fn byte_align(&self) -> usize
fn byte_align(&self) -> usize
Source§fn ptr_size_ratio(&self) -> [usize; 2]
fn ptr_size_ratio(&self) -> [usize; 2]
Source§impl<T, R> Chain<R> for Twhere
T: ?Sized,
impl<T, R> Chain<R> for Twhere
T: ?Sized,
Source§impl<T> ExtAny for T
impl<T> ExtAny for T
Source§fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
fn type_hash_with<H: Hasher>(&self, hasher: H) -> u64
TypeId
of Self
using a custom hasher.Source§fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
fn as_any_mut(&mut self) -> &mut dyn Anywhere
Self: Sized,
Source§impl<T> ExtMem for Twhere
T: ?Sized,
impl<T> ExtMem for Twhere
T: ?Sized,
Source§const NEEDS_DROP: bool = _
const NEEDS_DROP: bool = _
Source§fn mem_align_of<T>() -> usize
fn mem_align_of<T>() -> usize
Source§fn mem_align_of_val(&self) -> usize
fn mem_align_of_val(&self) -> usize
Source§fn mem_size_of<T>() -> usize
fn mem_size_of<T>() -> usize
Source§fn mem_size_of_val(&self) -> usize
fn mem_size_of_val(&self) -> usize
Source§fn mem_needs_drop(&self) -> bool
fn mem_needs_drop(&self) -> bool
true
if dropping values of this type matters. Read moreSource§fn mem_forget(self)where
Self: Sized,
fn mem_forget(self)where
Self: Sized,
self
without running its destructor. Read moreSource§fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
fn mem_replace(&mut self, other: Self) -> Selfwhere
Self: Sized,
Source§unsafe fn mem_zeroed<T>() -> T
unsafe fn mem_zeroed<T>() -> T
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe fn mem_transmute_copy<Src, Dst>(src: &Src) -> Dst
unsafe_layout
only.T
represented by the all-zero byte-pattern. Read moreSource§fn mem_as_bytes(&self) -> &[u8] ⓘ
fn mem_as_bytes(&self) -> &[u8] ⓘ
unsafe_slice
only.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
Source§impl<T> Hook for T
impl<T> Hook for T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more