NAME
Bitcoin::Crypto::Key::Public - Bitcoin public keys
SYNOPSIS
use Bitcoin::Crypto::Key::Public;
$pub = Bitcoin::Crypto::Key::Public->from_hex($asn_hex);
# verify signature (it has to be byte string, see perlpacktut)
$pub->verify_message(pack("a*", "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
from_bytes
$key_object = $class->from_bytes($data)
Use this method to create a PublicKey instance from a byte string. Data $data
must represent a public key in ASN X9.62 format.
Returns class instance.
new
$key_object = $class->new($data)
This works exactly the same as from_bytes
to_bytes
$bytestring = $object->to_bytes()
Does the opposite of from_bytes
on a target object
from_hex
$key_object = $class->from_hex($hex)
Use this method to create a public key instance from a hexadecimal number. Packs the number and runs it through from_bytes
.
Returns class instance.
to_hex
$hex_string = $object->to_hex()
Does the opposite of from_hex on a target object
set_compressed
$key_object = $object->set_compressed($val)
Change key's compression state to $val
(1
/0
). 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, $algo = "sha256")
Verifies $signature
against digest of $message
(with $algo
digest algorithm) using public key.
$algo
must be available in Digest package.
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)
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)
get_segwit_address
$address_string = $object->get_segwit_address()
Returns string containing Bech32 encoded witness program (p2wpkh address)
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