Bitcoin-Crypto

 view release on metacpan or  search on metacpan

lib/Bitcoin/Crypto/Secret.pm  view on Meta::CPAN

package Bitcoin::Crypto::Secret;
$Bitcoin::Crypto::Secret::VERSION = '4.005';
use v5.14;
use warnings;

use Scalar::Util qw(refaddr);

use namespace::autoclean;

use overload
	q{""} => "as_string",
	fallback => 1;

my %secrets;

my $store_secret = sub {
	my ($obj, $secret) = @_;

	$secrets{$obj} = $secret;
	return;
};

my $retrieve_secret = sub {
	my ($obj) = @_;

	return undef unless exists $secrets{$obj};
	return $secrets{$obj};
};

my $delete_secret = sub {
	my ($obj) = @_;

	delete $secrets{$obj};
	return;
};

sub new
{
	my ($class, $secret) = @_;

	my $str = '[REDACTED]';
	my $self = bless \$str, $class;
	$store_secret->(refaddr $self, $secret);
	return $self;
}

sub unmask_to
{
	my ($self, $sub_ref) = @_;

	return $sub_ref->($retrieve_secret->(refaddr $self));
}

sub DESTROY
{
	my ($self) = @_;

	$delete_secret->(refaddr $self);
}

sub as_string
{
	return ${$_[0]};
}

1;

__END__



( run in 0.890 second using v1.01-cache-2.11-cpan-39bf76dae61 )