-
-
13 May 2022 20:30:43 UTC
- Distribution: Bitcoin-Crypto
- Module version: 1.006
- Source (raw)
- Browse (raw)
- Changes
- How to Contribute
- Repository
- Issues
- Testers (202 / 0 / 0)
- Kwalitee
Bus factor: 1- % Coverage
- License: perl_5
- Perl: v5.10.0
- Activity
24 month- Tools
- Download (59.96KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
NAME
Bitcoin::Crypto::Key::ExtPrivate - Bitcoin extended private keys
SYNOPSIS
use Bitcoin::Crypto::Key::ExtPrivate; # generate mnemonic words first my $mnemonic = Bitcoin::Crypto::Key::ExtPrivate->generate_mnemonic; print "Your mnemonic is: $mnemonic"; # create ExtPrivateKey from mnemonic (without password) my $key = Bitcoin::Crypto::Key::ExtPrivate->from_mnemonic($mnemonic); my $ser_key = $key->to_serialized_base58; print "Your exported master key is: $ser_key"; # derive child private key my $path = "m/0'"; my $child_key = $key->derive_key($path); my $ser_child_key = $child_key->to_serialized_base58; print "Your exported $path child key is: $ser_child_key"; # create basic keypair my $basic_private = $child_key->get_basic_key; my $basic_public = $child_key->get_public_key->get_basic_key;
DESCRIPTION
This class allows you to create an extended private key instance.
You can use an extended private key to:
generate extended public keys
derive extended keys using a path
restore keys from mnemonic codes, seeds and base58 format
see Bitcoin::Crypto::Network if you want to work with other networks than Bitcoin Mainnet.
METHODS
generate_mnemonic
$mnemonic = $class->generate_mnemonic($len = 128, $lang = "en")
Generates a new mnemonic code using Bytes::Random::Secure. Default entropy is 128 bits. With
$len
this can be changed to up to 256 bits with 32 bit step.Other languages than english require additional modules for Bitcoin::BIP39.
Returns newly generated BIP39 mnemonic string. Dies when
$len
is invalid (under 128, above 256 or not divisible by 32).In some environments a problem may be encountered that causes the secure random bytes generator to block the program execution (See "BLOCKING ENTROPY SOURCE" in Bytes::Random::Secure). In this case you can use mnemonic_from_entropy and pass in entropy generated by Bytes::Random::Secure in non-blocking mode (via the OO interface).
mnemonic_from_entropy
$mnemonic = $class->mnemonic_from_entropy($bytes, $lang = "en")
Generates a new mnemonic code from custom entropy given in
$bytes
(a bytestring). This entropy should be of the same bit size as in "generate_mnemonic". Returns newly generated BIP39 mnemonic string.This can be useful to avoid relying on the underlying implementation of Bitcoin::BIP39.
Another use would be implementing one's own entropy source that can be truly random, not just cryptographically-secure. A popular example would be capturing user's mouse movements.
Be aware that the method you use to generate a mnemonic will be a very important factor in your key's security. If possible, use real sources of randomness (not pseudo-random) or a cryptographically secure pseduo-random number generator like the one used by Bytes::Random::Secure.
from_mnemonic
$key_object = $class->from_mnemonic($mnemonic, $password = "", $lang = undef)
Creates a new key from given mnemonic and password.
Note that technically any password is correct and there's no way to tell if it was mistaken.
If you need to validate if
$mnemonic
is a valid mnemonic you should specify$lang
, e.g. "en".If no
$lang
is given then any string passed as$mnemonic
will produce a valid key.Returns a new instance of this class.
Important note about unicode: this function only accepts UTF8-decoded strings (both
$mnemonic
and$password
), but can't detect whether it got it or not. This will only become a problem if you use non-ascii mnemonic and/or password. If there's a possibility of non-ascii, always use utf8 and set binmodes to get decoded (wide) characters to avoid problems recovering your wallet.from_seed
$key_object = $class->from_seed($seed)
Creates and returns a new key from seed, which can be any data of any length.
$seed
is expected to be a byte string.from_hex_seed
$key_object = $class->from_hex_seed($seed)
Same as
from_seed
, but$seed
is treated as hex string.to_serialized
$serialized = $object->to_serialized()
Returns the key serialized in format specified in BIP32 as byte string.
Note: different prefixes defined in BIP49 and BIP84 are not yet supported.
to_serialized_base58
$serialized_base58 = $object->to_serialized_base58()
Behaves the same as
to_serialized
, but performs Base58Check encoding on the resulting byte string.from_serialized
$key_object = $class->from_serialized($serialized, $network = undef)
Tries to unserialize byte string
$serialized
with format specified in BIP32.Dies on errors. If multiple networks match serialized data specify
$network
manually (id of the network) to avoid exception.Note: different prefixes defined in BIP49 and BIP84 are not yet supported.
from_serialized_base58
$key_object = $class->from_serialized_base58($base58, $network = undef)
Same as
from_serialized
, but performs Base58Check decoding on$base58
argument.set_network
$key_object = $object->set_network($val)
Change key's network state to
$val
. It can be either network name present in Bitcoin::Crypto::Network package or an instance of this class.Returns current key instance.
get_public_key
$public_key_object = $object->get_public_key()
Returns instance of Bitcoin::Crypto::Key::ExtPublic generated from the private key.
get_basic_key
$basic_key_object = $object->get_basic_key()
Returns the key in basic format: Bitcoin::Crypto::Key::Private
derive_key
$derived_key_object = $object->derive_key($path)
Performs extended key derivation as specified in BIP32 on the current key with
$path
. Dies on error.See BIP32 document for details on derivation paths and methods.
Returns a new extended key instance - result of a derivation.
derive_key_bip44
$derived_key_object = $object->derive_key_bip44(%data)
A helper that constructs a Bitcoin::Crypto::BIP44 path from
%data
and calls "derive_key" with it. Refer to "PROPERTIES" in Bitcoin::Crypto::BIP44 to see what you can include in%data
.Note: coin_type parameter will be ignored, and the current network configuration set in the extended key will be used.
get_fingerprint
$fingerprint = $object->get_fingerprint($len = 4)
Returns a fingerprint of the extended key of
$len
length (byte string)EXCEPTIONS
This module throws an instance of Bitcoin::Crypto::Exception if it encounters an error. It can produce the following error types from the Bitcoin::Crypto::Exception namespace:
MnemonicGenerate - mnemonic couldn't be generated correctly
MnemonicCheck - mnemonic didn't pass the validity check
KeyDerive - key couldn't be derived correctly
KeyCreate - key couldn't be created correctly
NetworkConfig - incomplete or corrupted network configuration
SEE ALSO
Module Install Instructions
To install Bitcoin::Crypto, copy and paste the appropriate command in to your terminal.
cpanm Bitcoin::Crypto
perl -MCPAN -e shell install Bitcoin::Crypto
For more information on module installation, please visit the detailed CPAN module installation guide.