Archive-BagIt
view release on metacpan or search on metacpan
lib/Archive/BagIt/Role/OpenSSL/Sync.pm view on Meta::CPAN
package Archive::BagIt::Role::OpenSSL::Sync;
use strict;
use warnings FATAL => 'all';
use Moo;
use namespace::autoclean;
use Net::SSLeay ();
our $VERSION = '0.101'; # VERSION
# ABSTRACT: handles synchronous digest calculation using openssl
sub BEGIN {
Net::SSLeay::OpenSSL_add_all_digests();
}
has 'name' => (
required => 1,
is => 'ro',
);
has '_digest' => (
is => 'ro',
lazy => 1,
builder => '_init_digest',
init_arg => undef,
);
sub _init_digest {
my ($self) = @_;
my $md = Net::SSLeay::EVP_get_digestbyname($self->name);
my $digest = Net::SSLeay::EVP_MD_CTX_create();
Net::SSLeay::EVP_DigestInit($digest, $md);
return $digest;
}
sub calc_digest {
my ($self, $fh, $blksize)=@_;
my $buffer;
while (read($fh, $buffer, $blksize)) {
Net::SSLeay::EVP_DigestUpdate($self->_digest(), $buffer);
}
my $result = Net::SSLeay::EVP_DigestFinal($self->_digest);
Net::SSLeay::EVP_MD_CTX_destroy($self->_digest);
delete $self->{_digest};
return unpack('H*', $result);
}
no Moo;
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Archive::BagIt::Role::OpenSSL::Sync - handles synchronous digest calculation using openssl
=head1 VERSION
version 0.101
=head1 AVAILABILITY
The latest version of this module is available from the Comprehensive Perl
( run in 0.832 second using v1.01-cache-2.11-cpan-98e64b0badf )