Crate iop_keyvault[][src]

This library provides a high-level API to be used in Morpheus as a key-vault. It wraps multiple cryptographic libraries to make it easier on the integrator. For more information on this crate and potential usage, see the IOP developer site.

Modules

ed25519

SLIP-0010 compatible Ed25519 cryptography that allows child key derivation. There are alternative Ed25519-based implementations in other projects that are incompatible with SLIP-0010, so make sure this is the right derivation method for your use-case.

encrypt

A thin integration of Argon2i and XChaCha20Poly1305 algorithms from the orion crate to encrypt/decrypt in-memory blobs with a password.

multicipher

A type-erased version of AsymmetricCrypto and KeyDerivationCrypto. Serialized versions of crypto concepts, like KeyId, PublicKey, PrivateKey, Signature, ExtendedPrivateKey and ExtendedPublicKey can be all deserialized into their MultiCipher versions. This allows multiple cryptographic algorithms to co-exist in a software, which is needed during migration of a single software to a new cryptography, or which is the status quo in larger software ecosystems.

secp256k1

SLIP-0010 and BIP-0032 compatible Secp256k1 cryptography that allows child key derivation.

Structs

Bip32

Entry point to generate extended private keys in a hierarchical deterministic wallet starting from a seed based on the BIP-0032 standard (and the SLIP-0010 for crypto suites other than Secp256k1).

Bip32Node

In BIP-0032 each extended private key has the same operations, independently from the actual path. This struct represents such an extended private key in a given subtree.

Bip32PublicNode

In BIP-0032 a neutered extended private key is an extended public key. This struct represents such an extended public key in a given subtree. It is able to do normal (public) derivation, signature verification, creating and validating key identifiers

Bip39

Tool for generating, validating and parsing BIP39 phrases in different supported languages.

Bip39Phrase

A thin wrapper on top of a BIP39 phrase with a known language

Bip43Path

Maybe an overly-zealous attempt to encode BIP-0043 in source code.

Bip43Purpose

A representation of a given purpose as a BIP-0032 subtree based on BIP-0043

Bip44

Entry point to generate a hierarchical deterministic wallet using the BIP-0044 standard. It is a more structured way to use the same seed for multiple coins, each with multiple accounts, each accounts with a new key for each transaction request. The standard is built on BIP-0043 using the purpose code 44. And BIP-0043 itself uses BIP-0032 to derive all nodes from a single master extended private key.

Bip44Account

Represents a given account of a given coin in the BIP32 tree.

Bip44AccountPath

Valid operations for a bip44 account.

Bip44Coin

Represents a given coin in the BIP32 tree.

Bip44CoinPath

Valid operations for a bip44 coin.

Bip44Key

Represents a key with a given index used on the chain for storing balance or authenticating actions.

Bip44KeyPath

Valid operations for a bip44 key.

Bip44Path

Entry point to generate a BIP-0044 compliant key hierarchy.

Bip44PublicAccount

Represents a given account of a given coin in the BIP32 tree.

Bip44PublicKey

Represents a public key with a given index used on the chain for verifying signatures or validating key identifiers.

Bip44PublicSubAccount

A sub-account of a given account on a given coin that is either used for external keys (receiving addresses) or internal keys (change addresses). Some implementations do not distinguish these and just always use receiving addresses.

Bip44SubAccount

A sub-account of a given account on a given coin that is either used for external keys (receiving addresses) or internal keys (change addresses). Some implementations do not distinguish these and just always use receiving addresses.

Bip44SubAccountPath

Valid operations for a bip44 sub-account.

Networks

A registry of all networks implemented in this crate.

Path

An absolute BIP32 derivation path that starts from the master keypair. This is useful to create a hierarchical deterministic tree of keypairs for any cryptography that supports child key derivation.

Seed

The seed used for BIP32 derivations. A seed cannot be turned back into a phrase, because there is salted hashing involed in creating it from the BIP39 mnemonic phrase.

Enums

Bip39ErrorKind
Bip39Language

The language determines which words will be used in a mnemonic phrase, but also indirectly determines the binary value of each word when a Mnemonic is turned into a Seed.

Chain

Enumeration used for distinguishing external keys (receiving addresses) from internal keys (change addresses). This distinction might help in accounting.

ChildIndex

An item in the BIP-0032 derivation path. A combination of a 31-bit unsigned integer and a flag, which derivation method (normal or hardened) to use.

Constants

ADDR_PREFIX_SIZE

It might sound a bit pedantic, but some Network trait methods return fixed length byte array static borrows instead of single bytes.

BIP32_VERSION_PREFIX_SIZE

Extended public and private keys use version bytes to help finding out how these keys are used on the blockchain and which blockchains they are used on

BIP43_PURPOSE_MERCURY

Unicode code point for planet mercury

Traits

AsymmetricCrypto

An implementation of this trait defines a family of types that fit together perfectly to form a cryptography using asymmetric keypairs.

ExtendedPrivateKey

Extended private key not only contains a private key, but also a chain code that is some additional entropy that is used to derive child keys. Some cryptographic suites implement both normal (public) and hardened (private) derivation, some, like Ed25519 is missing normal derivation and just err when called.

ExtendedPublicKey

Extended public key is a neutered extended private key that contains the public key that belongs to the private key in that, but it also contains the chain code so it can be used in normal (public) derivation. Some cryptographic suites do not have normal derivation and those are free to implement extended public keys containing only the public key.

KeyDerivationCrypto

An implementation of this trait defines a family of types that fit together to extend AsymmetricCrypto with the ability to have a hierarchical deterministic wallet, so a tree of private and public keys all derived from a single master secret.

Mac

The Mac trait defines methods for a Message Authentication algorithm.

Network

Strategy that can be implemented for different clones of the Bitcoin network. It is a trait rather than an enumeration to leave it open for extensions outside this crate. A few example implementations can be found under the network submodules.

PrivateKey

A private key (also called secret key or sk in some literature) is the part of an asymmetric keypair which is never shared with anyone. It is used to sign a message sent to any recipient or to decrypt a message that was sent encrypted from any recipients.

PublicKey

A public key (also called shared key or pk in some literature) is that part of an asymmetric keypair which can be used to verify the authenticity of the sender of a message or to encrypt a message that can only be decrypted by a single recipient. In both cases this other party owns the PrivateKey part of the keypair and never shares it with anyone else.

Subtree

The operations required to support SLIP-0010

Type Definitions

HmacSha512

The hashing algorithm used for deriving child keys in SLIP-0010

Result

Result<T, Error>