Struct schnorrkel::keys::MiniSecretKey
source · pub struct MiniSecretKey(/* private fields */);Expand description
An EdDSA-like “secret” key seed.
These are seeds from which we produce a real SecretKey, which
EdDSA itself calls an extended secret key by hashing. We require
homomorphic properties unavailable from these seeds, so we renamed
these and reserve SecretKey for what EdDSA calls an extended
secret key.
Implementations§
source§impl MiniSecretKey
impl MiniSecretKey
sourcepub const UNIFORM_MODE: ExpansionMode = ExpansionMode::Uniform
pub const UNIFORM_MODE: ExpansionMode = ExpansionMode::Uniform
Avoids importing ExpansionMode
sourcepub const ED25519_MODE: ExpansionMode = ExpansionMode::Ed25519
pub const ED25519_MODE: ExpansionMode = ExpansionMode::Ed25519
Avoids importing ExpansionMode
sourcepub fn expand(&self, mode: ExpansionMode) -> SecretKey
pub fn expand(&self, mode: ExpansionMode) -> SecretKey
Derive the SecretKey corresponding to this MiniSecretKey.
We caution that mode must always be chosen consistently.
We slightly prefer ExpansionMode::Uniform here, but both
remain secure under almost all situations. There exists
deployed code using ExpansionMode::Ed25519, so you might
require that for compatability.
use rand::{Rng, rngs::OsRng};
use schnorrkel::{MiniSecretKey, SecretKey, ExpansionMode};
let mini_secret_key: MiniSecretKey = MiniSecretKey::generate_with(OsRng);
let secret_key: SecretKey = mini_secret_key.expand(ExpansionMode::Uniform);sourcepub fn expand_to_keypair(&self, mode: ExpansionMode) -> Keypair
pub fn expand_to_keypair(&self, mode: ExpansionMode) -> Keypair
Derive the Keypair corresponding to this MiniSecretKey.
sourcepub fn expand_to_public(&self, mode: ExpansionMode) -> PublicKey
pub fn expand_to_public(&self, mode: ExpansionMode) -> PublicKey
Derive the PublicKey corresponding to this MiniSecretKey.
sourcepub fn from_bytes(bytes: &[u8]) -> SignatureResult<MiniSecretKey>
pub fn from_bytes(bytes: &[u8]) -> SignatureResult<MiniSecretKey>
Construct a MiniSecretKey from a slice of bytes.
§Example
use schnorrkel::{MiniSecretKey, MINI_SECRET_KEY_LENGTH};
let secret_key_bytes: [u8; MINI_SECRET_KEY_LENGTH] = [
157, 097, 177, 157, 239, 253, 090, 096,
186, 132, 074, 244, 146, 236, 044, 196,
068, 073, 197, 105, 123, 050, 105, 025,
112, 059, 172, 003, 028, 174, 127, 096, ];
let secret_key: MiniSecretKey = MiniSecretKey::from_bytes(&secret_key_bytes).unwrap();§Returns
A Result whose okay value is an EdDSA MiniSecretKey or whose error value
is an SignatureError wrapping the internal error that occurred.
sourcepub fn generate_with<R>(csprng: R) -> MiniSecretKey
pub fn generate_with<R>(csprng: R) -> MiniSecretKey
sourcepub fn generate() -> MiniSecretKey
pub fn generate() -> MiniSecretKey
Generate a MiniSecretKey from rand’s thread_rng.
§Example
use schnorrkel::{PublicKey, MiniSecretKey, Signature};
let secret_key: MiniSecretKey = MiniSecretKey::generate();Afterwards, you can generate the corresponding public key.
let public_key: PublicKey = secret_key.expand_to_public(ExpansionMode::Ed25519);source§impl MiniSecretKey
impl MiniSecretKey
sourcepub fn hard_derive_mini_secret_key<B: AsRef<[u8]>>(
&self,
cc: Option<ChainCode>,
i: B,
mode: ExpansionMode,
) -> (MiniSecretKey, ChainCode)
pub fn hard_derive_mini_secret_key<B: AsRef<[u8]>>( &self, cc: Option<ChainCode>, i: B, mode: ExpansionMode, ) -> (MiniSecretKey, ChainCode)
Vaguely BIP32-like “hard” derivation of a MiniSecretKey from a SecretKey
We do not envision any “good reasons” why these “hard”
derivations should ever be used after the soft Derivation
trait. We similarly do not believe hard derivations
make any sense for ChainCodes or ExtendedKeys types.
Yet, some existing BIP32 workflows might do these things,
due to BIP32’s de facto standardization and poor design.
In consequence, we provide this method to do “hard” derivations
in a way that should work with all BIP32 workflows and any
permissible mutations of SecretKey. This means only that
we hash the SecretKey’s scalar, but not its nonce because
the secret key remains valid if the nonce is changed.
Trait Implementations§
source§impl Clone for MiniSecretKey
impl Clone for MiniSecretKey
source§fn clone(&self) -> MiniSecretKey
fn clone(&self) -> MiniSecretKey
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moresource§impl ConstantTimeEq for MiniSecretKey
impl ConstantTimeEq for MiniSecretKey
source§impl Debug for MiniSecretKey
impl Debug for MiniSecretKey
source§impl PartialEq for MiniSecretKey
impl PartialEq for MiniSecretKey
source§impl Zeroize for MiniSecretKey
impl Zeroize for MiniSecretKey
impl Eq for MiniSecretKey
Auto Trait Implementations§
impl Freeze for MiniSecretKey
impl RefUnwindSafe for MiniSecretKey
impl Send for MiniSecretKey
impl Sync for MiniSecretKey
impl Unpin for MiniSecretKey
impl UnwindSafe for MiniSecretKey
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)