diff options
Diffstat (limited to 'lib/Crypt/Checksum.pm')
-rw-r--r-- | lib/Crypt/Checksum.pm | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/lib/Crypt/Checksum.pm b/lib/Crypt/Checksum.pm new file mode 100644 index 00000000..23d23519 --- /dev/null +++ b/lib/Crypt/Checksum.pm @@ -0,0 +1,197 @@ +package Crypt::Checksum; + +use strict; +use warnings; +our $VERSION = '0.048'; + +require Exporter; our @ISA = qw(Exporter); ### use Exporter 'import'; +our %EXPORT_TAGS = ( all => [qw/ + adler32_data adler32_data_hex adler32_data_int adler32_file adler32_file_hex adler32_file_int + 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; +use Crypt::Checksum::Adler32; +use Crypt::Checksum::CRC32; + +sub adler32_data { Crypt::Checksum::Adler32->new->add(@_)->digest } +sub adler32_data_hex { Crypt::Checksum::Adler32->new->add(@_)->hexdigest } +sub adler32_data_int { unpack("N", Crypt::Checksum::Adler32->new->add(@_)->digest) } +sub adler32_file { Crypt::Checksum::Adler32->new->addfile(@_)->digest } +sub adler32_file_hex { Crypt::Checksum::Adler32->new->addfile(@_)->hexdigest } +sub adler32_file_int { unpack("N", Crypt::Checksum::Adler32->new->addfile(@_)->digest) } +sub crc32_data { Crypt::Checksum::CRC32->new->add(@_)->digest } +sub crc32_data_hex { Crypt::Checksum::CRC32->new->add(@_)->hexdigest } +sub crc32_data_int { unpack("N", Crypt::Checksum::CRC32->new->add(@_)->digest) } +sub crc32_file { Crypt::Checksum::CRC32->new->addfile(@_)->digest } +sub crc32_file_hex { Crypt::Checksum::CRC32->new->addfile(@_)->hexdigest } +sub crc32_file_int { unpack("N", Crypt::Checksum::CRC32->new->addfile(@_)->digest) } + +1; + +=pod + +=head1 NAME + +Crypt::Checksum - functional interface to CRC32 and Adler32 checksums + +=head1 SYNOPSIS + + use Crypt::Checksum ':all'; + + # calculate Adler32 checksum from string/buffer + $checksum_raw = adler32_data($data); + $checksum_hex = adler32_data_hex($data); + + # calculate Adler32 checksum from file + $checksum_raw = adler32_file('filename.dat'); + $checksum_hex = adler32_file_hex('filename.dat'); + + # calculate Adler32 checksum from filehandle + $checksum_raw = adler32_file(*FILEHANDLE); + $checksum_hex = adler32_file_hex(*FILEHANDLE); + + # calculate CRC32 checksum from string/buffer + $checksum_raw = crc32_data($data); + $checksum_hex = crc32_data_hex($data); + + # calculate CRC32 checksum from file + $checksum_raw = crc32_file('filename.dat'); + $checksum_hex = crc32_file_hex('filename.dat'); + + # calculate CRC32 checksum from filehandle + $checksum_raw = crc32_file(*FILEHANDLE); + $checksum_hex = crc32_file_hex(*FILEHANDLE); + +=head1 DESCRIPTION + +Calculating CRC32 and Adler32 checksums (functional interface); + +I<Since: CryptX-0.032> + +=head1 EXPORT + +Nothing is exported by default. + +You can export selected functions: + + use Crypt::Checksum qw( adler32_data adler32_data_hex adler32_file adler32_file_hex + crc32_data crc32_data_hex crc32_file crc32_file_hex ); + +Or all of them at once: + + use Crypt::Checksum ':all'; + +=head1 FUNCTIONS + +=head2 adler32_data + +Returns checksum as raw octects. + + $checksum_raw = adler32_data('data string'); + #or + $checksum_raw = adler32_data('any data', 'more data', 'even more data'); + +=head2 adler32_data_hex + +Returns checksum as a hexadecimal string. + + $checksum_hex = adler32_data_hex('data string'); + #or + $checksum_hex = adler32_data_hex('any data', 'more data', 'even more data'); + +=head2 adler32_data_int + +Returns checksum as unsingned 32bit integer. + + $checksum_hex = adler32_data_int('data string'); + #or + $checksum_hex = adler32_data_int('any data', 'more data', 'even more data'); + +=head2 adler32_file + +Returns checksum as raw octects. + + $checksum_raw = adler32_file('filename.dat'); + #or + $checksum_raw = adler32_file(*FILEHANDLE); + +=head2 adler32_file_hex + +Returns checksum as a hexadecimal string. + + $checksum_hex = adler32_file_hex('filename.dat'); + #or + $checksum_hex = adler32_file_hex(*FILEHANDLE); + +=head2 adler32_file_int + +Returns checksum as unsingned 32bit integer. + + $checksum_hex = adler32_file_int('data string'); + #or + $checksum_hex = adler32_file_int('any data', 'more data', 'even more data'); + +=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 unsingned 32bit integer. + + $checksum_hex = crc32_data_int('data string'); + #or + $checksum_hex = 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 unsingned 32bit integer. + + $checksum_hex = crc32_file_int('data string'); + #or + $checksum_hex = crc32_file_int('any data', 'more data', 'even more data'); + +=head1 SEE ALSO + +=over + +=item * L<CryptX|CryptX>, L<Crypt::Checksum::Adler32>, L<Crypt::Checksum::CRC32> + +=item * L<https://en.wikipedia.org/wiki/Adler-32> + +=item * L<https://en.wikipedia.org/wiki/Cyclic_redundancy_check> + +=back + +=cut
\ No newline at end of file |