NAME
Rhash - Perl extension for LibRHash Hash library
SYNOPSIS
use Rhash;my $msg = "a message text";print "MD5 = " . Rhash->new(Rhash::MD5)->update($msg)->hash() . "\n";# more complex example - calculate two hash functions simultaniouslymy $r = Rhash->new(Rhash::MD5 | Rhash::SHA1);$r->update("a message text")->update(" another message");print "MD5 = ". $r->hash(Rhash::MD5) . "\n";print "SHA1 = ". $r->hash(Rhash::SHA1) . "\n";
DESCRIPTION
Rhash module is an object-oriented interface to the LibRHash library, which allows one to simultaniously calculate several hash functions for a file or a text message.
SUPPORTED ALGORITHMS
The module supports the following hashing algorithms: CRC32, MD4, MD5, SHA1, SHA256, SHA512, AICH, ED2K, Tiger, DC++ TTH, BitTorrent BTIH, GOST R 34.11-94, RIPEMD-160, HAS-160, EDON-R 256/512, Whirlpool and Snefru-128/256.
CONSTRUCTOR
Creates and returns new Rhash object.
my $r = Rhash->new($hash_id);my $p = new Rhash($hash_id); # alternative way to call the constructor
The $hash_id parameter can be union (via bitwise OR) of any of the following bit-flags:
Rhash::CRC32,Rhash::MD4,Rhash::MD5,Rhash::SHA1,Rhash::TIGER,Rhash::TTH,Rhash::BTIH,Rhash::ED2K,Rhash::AICH,Rhash::WHIRLPOOL,Rhash::RIPEMD160,Rhash::GOST,Rhash::GOST_CRYPTOPRO,Rhash::HAS160,Rhash::SNEFRU128,Rhash::SNEFRU256,Rhash::SHA224,Rhash::SHA256,Rhash::SHA384,Rhash::SHA512,Rhash::EDONR256,Rhash::EDONR512
Also the Rhash::ALL bit mask is the union of all listed bit-flags. So the object created via Rhash->new(Rhash::ALL) calculates all supported hash functions for the same data.
COMPUTING HASHES
- $rhash->update( $msg )
-
Calculates hashes of the
$msgstring. The method can be called repeatedly with chunks of the message to be hashed. It returns the$rhashobject itself allowing the following construct:$rhash = Rhash->new(Rhash::MD5)->update( $chunk1 )->update( $chunk2 );
- $rhash->update_file( $file_path, $start, $size )
- $rhash->update_fd( $fd, $start, $size )
-
Calculate a hash of the file (or its part) specified by
$file_pathor a file descriptor$fd. The update_fd method doesn't close the$fd, leaving the file position after the hashed block. The optional$startand$sizespecify the block of the file to hash. No error is reported if the$sizeis grater than the number of the unread bytes left in the file.Returns the number of characters actually read, 0 at end of file, or undef if there was an error (in the latter case $! is also set).
use Rhash;my $r = new Rhash(Rhash::SHA1);open(my $fd, "<", "input.txt") or die "cannot open < input.txt: $!";while ((my $n = $r->update_fd($fd, undef, 1024) != 0) {print "$n bytes hashed. The SHA1 hash is " . $r->final()->hash() . "\n";$r->reset();}defined($n) or die "read error for input.txt: $!";close($fd);
- $rhash->final()
-
Finishes calculation for all data buffered by updating methods and stops hash calculation. The function is called automatically by any of the
$rhash->hash*() methods if the final() call was skipped.
- $rhash->reset()
-
Resets the
$rhashobject to the initial state.
- $rhash->hashed_length()
-
Returns the total length of the hashed message.
- $rhash->hash_id()
-
Returns the hash mask, the
$rhashobject was constructed with.
FORMATING HASH VALUE
Computed hash can be formated as a hexadecimal string (in the forward or reverse byte order), a base32/base64-encoded string or as raw binary data.
- $rhash->hash( $hash_id )
-
Returns the hash string in the default format, which can be hexadecimal or base32. Actually the method is equvalent of
(Rhash::is_base32($hash_id) ? $rhash->hash_base32($hash_id) :$rhash->hash_hex($hash_id))If the optional
$hash_idparameter is omited or zero, then the method returns the hash for the algorithm contained in$rhashwith the lowest identifier.
- $rhash->hash_hex( $hash_id )
-
Returns a specified hash in the hexadecimal format.
- $rhash->hash_rhex( $hash_id )
-
Returns a hexadecimal string of the hash in reversed bytes order. Some programs prefer to output GOST hash in this format.
- $rhash->hash_base32( $hash_id )
-
Returns a specified hash in the base32 format.
- $rhash->hash_base64( $hash_id )
-
Returns a specified hash in the base64 format.
- $rhash->magnet_link( $filename, $hash_mask )
-
Returns the magnet link containing the computed hashes, filesize, and, optionaly,
$filename. The$filename(if specified) is URL-encoded, by converting special characters into the %<hexadecimal-code> form. The optional parameter$hash_maskcan limit which hash values to put into the link.
STATIC INFORMATION METHODS
- Rhash::count()
-
Returns the number of supported hash algorithms
- Rhash::is_base32($hash_id)
-
Returns nonzero if default output format is Base32 for the hash function specified by
$hash_id. Retruns zero if default format is hexadecimal.
- Rhash::get_digest_size($hash_id)
-
Returns the size in bytes of raw binary hash of the specified hash algorithm.
- Rhash::get_hash_length($hash_id)
-
Returns the length of a hash string in default output format for the specified hash algorithm.
- Rhash::get_name($hash_id)
-
Returns the name of the specified hash algorithm.
ALTERNATIVE WAY TO COMPUTE HASH
- Rhash::msg($hash_id, $message)
-
Computes and returns a single hash (in its default format) of the
$messageby the selected hash algorithm.use Rhash;print "SHA1( 'abc' ) = " . Rhash::msg(Rhash::SHA1, "abc");
LICENSE
Permission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dealin the Software without restriction, including without limitation the rightsto use, copy, modify, merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whom the Software isfurnished to do so.The Software is distributed in the hope that it will be useful, but WITHOUTANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESSFOR A PARTICULAR PURPOSE. Use this program at your own risk!