pub struct MiniSecretKey(_);
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

Avoids importing ExpansionMode

Avoids importing ExpansionMode

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);

Derive the Keypair corresponding to this MiniSecretKey.

Derive the PublicKey corresponding to this MiniSecretKey.

Convert this secret key to a byte array.

View this secret key as a byte array.

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.

Generate a MiniSecretKey from a csprng.

Example
use rand::{Rng, rngs::OsRng};
use schnorrkel::{PublicKey, MiniSecretKey, Signature};

let secret_key: MiniSecretKey = MiniSecretKey::generate_with(OsRng);
Input

A CSPRNG with a fill_bytes() method, e.g. rand_chacha::ChaChaRng

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);

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 stnadardization 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 becuase the secret key remains valid if the nonce is changed.

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Determine if two items are equal. Read more

Formats the value using the given formatter. Read more

Deserialize this value from the given Serde deserializer. Read more

Executes the destructor for this type. Read more

This method tests for self and other values to be equal, and is used by ==. Read more

This method tests for !=.

Serialize this value into the given Serde serializer. Read more

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

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

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

Should always be Self

The resulting type after obtaining ownership.

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

🔬 This is a nightly-only experimental API. (toowned_clone_into)

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

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.