Struct schnorrkel::derive::ExtendedKey[][src]

pub struct ExtendedKey<K> {
    pub key: K,
    pub chaincode: ChainCode,
}

A convenience wraper that combines derivable key and a chain code.

Fields

key: K

Appropriate key type

chaincode: ChainCode

We cannot assume the original public key is secret and additional inputs might have low entropy, like i in BIP32. As in BIP32, chain codes fill this gap by being a high entropy secret shared between public and private key holders. These are produced by key derivations and can be incorporated into subsequence key derivations.

Implementations

impl<K: Derivation> ExtendedKey<K>[src]

pub fn derived_key<T>(&self, t: T) -> ExtendedKey<K> where
    T: SigningTranscript
[src]

Derive key with subkey identified by a byte array presented as a hash, and a chain code.

pub fn derived_key_simple<B: AsRef<[u8]>>(&self, i: B) -> ExtendedKey<K>[src]

Derive key with subkey identified by a byte array and a chain code in the extended key.

impl ExtendedKey<SecretKey>[src]

pub fn hard_derive_mini_secret_key<B: AsRef<[u8]>>(
    &self,
    i: B,
    mode: ExpansionMode
) -> ExtendedKey<SecretKey>
[src]

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

impl<K: Clone> Clone for ExtendedKey<K>[src]

impl<K: Copy> Copy for ExtendedKey<K>[src]

impl<K: Debug> Debug for ExtendedKey<K>[src]

impl<K: Eq> Eq for ExtendedKey<K>[src]

impl<K: Hash> Hash for ExtendedKey<K>[src]

impl<K: PartialEq> PartialEq<ExtendedKey<K>> for ExtendedKey<K>[src]

impl<K> StructuralEq for ExtendedKey<K>[src]

impl<K> StructuralPartialEq for ExtendedKey<K>[src]

Auto Trait Implementations

impl<K> RefUnwindSafe for ExtendedKey<K> where
    K: RefUnwindSafe

impl<K> Send for ExtendedKey<K> where
    K: Send

impl<K> Sync for ExtendedKey<K> where
    K: Sync

impl<K> Unpin for ExtendedKey<K> where
    K: Unpin

impl<K> UnwindSafe for ExtendedKey<K> where
    K: UnwindSafe

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T[src]

type Output = T

Should always be Self

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 
[src]