Bitcoin-Secp256k1
view release on metacpan or search on metacpan
t/author-leaks.t view on Meta::CPAN
BEGIN {
unless ($ENV{AUTHOR_TESTING}) {
print qq{1..0 # SKIP these tests are for testing by the author\n};
exit
}
}
use Test2::V0;
use Bitcoin::Secp256k1;
use Digest::SHA qw(sha256);
use constant HAS_TEST_MEMORYGROWTH => eval { require Test::MemoryGrowth; 1 };
plan skip_all => 'This test requires Test::MemoryGrowth module'
unless HAS_TEST_MEMORYGROWTH;
################################################################################
# This tests whether Bitcoin::Secp256k1 leaks memory
################################################################################
my $private_key = "\x12" x 32;
my $message = 'a quick brown fox jumped over a lazy dog';
Test::MemoryGrowth::no_growth {
my $secp = Bitcoin::Secp256k1->new;
my $compressed_public_key = $secp->create_public_key($private_key);
my $public_key = $secp->compress_public_key($compressed_public_key, !!0);
my $result = eval {
$secp->combine_public_keys($public_key, "\x02" . "\xff" x 32);
1;
};
die 'valid pub?' if $result;
my $signature = $secp->sign_message($private_key, $message);
die 'invalid sig?' unless $secp->verify_message($public_key, $signature, $message);
my $schnorr_signature = $secp->sign_message_schnorr($private_key, $message);
my $xonly_pubkey = $secp->xonly_public_key($public_key);
die 'invalid sig?' unless $secp->verify_message_schnorr($xonly_pubkey, $schnorr_signature, $message);
# Test recoverable signatures
my $recoverable_signature = $secp->sign_message_recoverable($private_key, $message);
die 'invalid recoverable sig?'
unless defined $recoverable_signature->{signature} && defined $recoverable_signature->{recovery_id};
my $digest = sha256(sha256($message));
my $recovered_pubkey = $secp->recover_public_key_digest($recoverable_signature, $digest);
die 'recovery failed?' unless $recovered_pubkey eq $compressed_public_key;
die 'invalid recoverable verification?'
unless $secp->verify_message_recoverable($compressed_public_key, $recoverable_signature, $message);
}
calls => 1000, 'construction/destruction of Bitcoin::Secp256k1 does not leak';
done_testing;
( run in 1.588 second using v1.01-cache-2.11-cpan-302cb4679cc )