NAME
Bitcoin::Crypto::Key::Public - Bitcoin public keys
SYNOPSIS
use Bitcoin::Crypto::Key::Public;
$pub = Bitcoin::Crypto::Key::Public->from_serialized([hex => $asn_hex]);
# verify signature of custom message
# (it has to be byte string, see perlpacktut)
$pub->verify_message('Hello world', $sig);
# getting address from public key (p2wpkh)
my $address = $pub->get_segwit_address();
DESCRIPTION
This class allows you to create a public key instance.
You can use a public key to:
verify messages
create addresses: legacy (p2pkh), compatibility (p2sh(p2wpkh)) and segwit (p2wpkh).
METHODS
new
Constructor is reserved for internal and advanced use only. Use "from_serialized" instead.
from_serialized
$key_object = $class->from_serialized($serialized)
This creates a new key from string data. Argument $serialized
is a formatable bytestring which must represent a public key in ASN X9.62 format.
Returns a new key object instance.
to_serialized
$serialized = $key_object->to_serialized()
This returns a public key in ASN X9.62 format. The result is a bytestring which can be further formated with to_format
utility.
The result will vary depending on compression state: see "set_compressed"
from_bytes
Deprecated. Use $class->from_serialized($data)
instead.
to_bytes
Deprecated. Use $key->to_serialized()
instead.
from_hex
Deprecated. Use $class->from_serialized([hex => $data])
instead.
to_hex
Deprecated. Use to_format [hex => $key->to_serialized()]
instead.
get_hash
$bytestr = $object->get_hash()
Returns hash160 of the serialized public key.
key_hash
Deprecated. Use $key->get_hash()
instead.
set_compressed
$key_object = $object->set_compressed($val)
Change key's compression state to $val
(boolean). This will change the address. If $val
is omitted it is set to 1
.
Returns current key instance.
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.
verify_message
$signature_valid = $object->verify_message($message, $signature)
Verifies $signature
against digest of $message
(digesting it with double sha256) using public key.
Returns boolean.
Character encoding note: $message
should be encoded in the proper encoding before passing it to this method. Passing Unicode string will cause the function to fail. You can encode like this (for UTF-8):
use Encode qw(encode);
$message = encode('UTF-8', $message);
get_legacy_address
$address_string = $object->get_legacy_address()
Returns string containing Base58Check encoded public key hash (p2pkh
address).
If the public key was obtained through BIP44 derivation scheme, this method will check whether the purpose was 44
and raise an exception otherwise. If you wish to generate this address anyway, call "clear_purpose".
get_compat_address
$address_string = $object->get_compat_address()
Returns string containing Base58Check encoded script hash containing a witness program for compatibility purposes (p2sh(p2wpkh)
address)
If the public key was obtained through BIP44 derivation scheme, this method will check whether the purpose was 49
and raise an exception otherwise. If you wish to generate this address anyway, call "clear_purpose".
get_segwit_address
$address_string = $object->get_segwit_address()
Returns string containing Bech32 encoded witness program (p2wpkh
address)
If the public key was obtained through BIP44 derivation scheme, this method will check whether the purpose was 84
and raise an exception otherwise. If you wish to generate this address anyway, call "clear_purpose".
get_address
$address_string = $object->get_address()
Returns a string containing the address. Tries to guess which address type is most fitting:
If the key has a BIP44 purpose set, generates type of address which matches the purpose
If the key doesn't have a purpose but the network supports segwit, returns a segwit address (same as
get_segwit_address
)If the network doesn't support segwit, returns legacy address
NOTE: The rules this function uses to choose the address type will change when more up-to-date address types are implemented (like taproot). Use other address functions if this is not what you want.
clear_purpose
$object->clear_purpose;
Clears the BIP44 purpose of this key instance, removing safety checks on address generation.
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:
KeyCreate - key couldn't be created correctly
Verify - couldn't verify the message correctly
NetworkConfig - incomplete or corrupted network configuration
AddressGenerate - address could not be generated (see BIP44 constraint notes)