summaryrefslogtreecommitdiff
path: root/lib/Crypt/Checksum/CRC32.pm
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Crypt/Checksum/CRC32.pm')
-rw-r--r--lib/Crypt/Checksum/CRC32.pm129
1 files changed, 100 insertions, 29 deletions
diff --git a/lib/Crypt/Checksum/CRC32.pm b/lib/Crypt/Checksum/CRC32.pm
index fc7f56a3..690ba6a7 100644
--- a/lib/Crypt/Checksum/CRC32.pm
+++ b/lib/Crypt/Checksum/CRC32.pm
@@ -2,36 +2,20 @@ package Crypt::Checksum::CRC32;
use strict;
use warnings;
-our $VERSION = '0.056';
+our $VERSION = '0.059';
+
+use base qw(Crypt::Checksum Exporter);
+our %EXPORT_TAGS = ( all => [qw( crc32_data crc32_data_hex crc32_data_int crc32_file crc32_file_hex crc32_file_int )] );
+our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
+our @EXPORT = qw();
use Carp;
$Carp::Internal{(__PACKAGE__)}++;
use CryptX;
-sub addfile {
- my ($self, $file) = @_;
-
- my $handle;
- if (ref(\$file) eq 'SCALAR') { #filename
- open($handle, "<", $file) || croak "FATAL: cannot open '$file': $!";
- binmode($handle);
- }
- else { #handle
- $handle = $file
- }
- croak "FATAL: invalid handle" unless defined $handle;
-
- my $n;
- my $buf = "";
- while (($n = read($handle, $buf, 32*1024))) {
- $self->add($buf)
- }
- croak "FATAL: read failed: $!" unless defined $n;
-
- return $self;
-}
-
-sub CLONE_SKIP { 1 } # prevent cloning
+sub crc32_file { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->addfile(@_)->digest }
+sub crc32_file_hex { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->addfile(@_)->hexdigest }
+sub crc32_file_int { local $SIG{__DIE__} = \&CryptX::_croak; Crypt::Checksum::CRC32->new->addfile(@_)->intdigest }
1;
@@ -43,20 +27,101 @@ Crypt::Checksum::CRC32 - Compute CRC32 checksum
=head1 SYNOPSIS
+ ### Functional interface:
+ use Crypt::Checksum::CRC32 ':all';
+
+ # calculate CRC32 checksum from string/buffer
+ $checksum_raw = crc32_data($data);
+ $checksum_hex = crc32_data_hex($data);
+ $checksum_int = crc32_data_int($data);
+ # calculate CRC32 checksum from file
+ $checksum_raw = crc32_file('filename.dat');
+ $checksum_hex = crc32_file_hex('filename.dat');
+ $checksum_int = crc32_file_int('filename.dat');
+ # calculate CRC32 checksum from filehandle
+ $checksum_raw = crc32_file(*FILEHANDLE);
+ $checksum_hex = crc32_file_hex(*FILEHANDLE);
+ $checksum_int = crc32_file_int(*FILEHANDLE);
+
+ ### OO interface:
use Crypt::Checksum::CRC32;
$d = Crypt::Checksum::CRC32->new;
$d->add('any data');
+ $d->add('another data');
$d->addfile('filename.dat');
$d->addfile(*FILEHANDLE);
- $checksum_raw = $d->digest; # raw bytes
+ $checksum_raw = $d->digest; # raw 4 bytes
$checksum_hex = $d->hexdigest; # hexadecimal form
+ $checksum_int = $d->intdigest; # 32bit unsigned integer
=head1 DESCRIPTION
-Calculating CRC32 checksums (OO interface);
+Calculating CRC32 checksums.
+
+I<Updated: v0.057>
+
+=head1 EXPORT
+
+Nothing is exported by default.
+
+You can export selected functions:
+
+ use Crypt::Checksum::CRC32 qw(crc32_data crc32_data_hex crc32_data_int crc32_file crc32_file_hex crc32_file_int);
-I<Since: CryptX-0.032>
+Or all of them at once:
+
+ use Crypt::Checksum::CRC32 ':all';
+
+=head1 FUNCTIONS
+
+=head2 crc32_data
+
+Returns checksum as raw octects.
+
+ $checksum_raw = crc32_data('data string');
+ #or
+ $checksum_raw = crc32_data('any data', 'more data', 'even more data');
+
+=head2 crc32_data_hex
+
+Returns checksum as a hexadecimal string.
+
+ $checksum_hex = crc32_data_hex('data string');
+ #or
+ $checksum_hex = crc32_data_hex('any data', 'more data', 'even more data');
+
+=head2 crc32_data_int
+
+Returns checksum as unsigned 32bit integer.
+
+ $checksum_int = crc32_data_int('data string');
+ #or
+ $checksum_int = crc32_data_int('any data', 'more data', 'even more data');
+
+=head2 crc32_file
+
+Returns checksum as raw octects.
+
+ $checksum_raw = crc32_file('filename.dat');
+ #or
+ $checksum_raw = crc32_file(*FILEHANDLE);
+
+=head2 crc32_file_hex
+
+Returns checksum as a hexadecimal string.
+
+ $checksum_hex = crc32_file_hex('filename.dat');
+ #or
+ $checksum_hex = crc32_file_hex(*FILEHANDLE);
+
+=head2 crc32_file_int
+
+Returns checksum as unsigned 32bit integer.
+
+ $checksum_int = crc32_file_int('filename.dat');
+ #or
+ $checksum_int = crc32_file_int(*FILEHANDLE);
=head1 METHODS
@@ -110,11 +175,17 @@ Returns the checksum encoded as a hexadecimal string.
$result_hex = $d->hexdigest();
+=head2 intdigest
+
+Returns the checksum encoded as unsigned 32bit integer.
+
+ $result_int = $d->intdigest();
+
=head1 SEE ALSO
=over
-=item * L<CryptX|CryptX>, L<Crypt::Checksum>
+=item * L<CryptX|CryptX>
=item * L<https://en.wikipedia.org/wiki/Cyclic_redundancy_check>