Acrux
view release on metacpan or search on metacpan
lib/Acrux/Digest.pm view on Meta::CPAN
Returns result digest (as is)
=head2 hexdigest
my $digest = $provider->hexdigest;
Returns sesult digest as hex string
=head2 b64digest, base64digest
my $digest = $provider->b64digest;
Returns sesult digest as b64 string
=head2 reset
$provider->reset;
Reset data (set to "")
=head1 HISTORY
See C<Changes> file
=head1 TO DO
See C<TODO> file
=head1 SEE ALSO
L<Digest>
=head1 AUTHOR
Serż Minus (Sergey Lepenkov) L<https://www.serzik.com> E<lt>abalama@cpan.orgE<gt>
=head1 COPYRIGHT
Copyright (C) 1998-2026 D&D Corporation
=head1 LICENSE
This program is distributed under the terms of the Artistic License Version 2.0
See the C<LICENSE> file or L<https://opensource.org/license/artistic-2-0> for details
=cut
use constant {
BUFFER_SIZE => 4*1024, # 4kB
};
use Carp;
use IO::File;
use MIME::Base64;
sub new {
my $class = shift;
return bless {
data => '',
}, $class;
}
sub data {
my $self = shift;
if (scalar(@_) >= 1) {
$self->{data} = shift;
return $self;
}
return $self->{data};
}
sub add {
my $self = shift;
$self->{data} .= join('', @_);
return $self;
}
sub addfile {
my $self = shift;
my $fh = shift;
return $self unless $fh;
if (!ref($fh) && ref(\$fh) ne "GLOB") {
$fh = IO::File->new($fh, "r");
return $self unless $fh;
}
$fh->binmode() or croak(sprintf("Can't switch to binmode: %s", $!));
my $buf;
while ($fh->read($buf, BUFFER_SIZE)) {
$self->add($buf);
}
$fh->close() or croak(sprintf("Can't close file: %s", $!));
return $self;
}
sub reset {
my $self = shift;
$self->{data} = "";
return $self;
}
sub hexdigest {
my $self = shift;
return unpack("H*", $self->digest(@_));
}
sub base64digest {
my $self = shift;
return encode_base64($self->digest(@_), "");
}
sub b64digest { goto &base64digest }
sub digest { croak 'Method "digest" not implemented by subclass' };
1;
__END__
( run in 1.695 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )