|
|
| |
Rhash(3) |
User Contributed Perl Documentation |
Rhash(3) |
Crypt::Rhash - Compute message digests and magnet links
use Crypt::Rhash;
my $msg = "a message text";
print "MD5 = " . Crypt::Rhash::msg(RHASH_MD5, $msg) . "\n";
or
use Crypt::Rhash;
my $filepath = "/tmp/file.txt";
# Calculate two hash functions simultaneously
my $r = Crypt::Rhash->new(RHASH_SHA1, RHASH_SHA512);
$res = $r->update_file($filepath);
defined($res) or die "failed to read $filepath: $!";
print "SHA1 = " . $r->hash(RHASH_SHA1) . "\n";
print "SHA512 = " . $r->hash(RHASH_SHA512) . "\n";
Crypt::Rhash module is an object-oriented interface to LibRHash library,
allowing simultaneous calculation of several hash functions for a file or a
text message.
Calculated message digest can be obtained in hexadecimal, BASE32,
BASE64, raw binary format or as a magnet link.
The module supports the following hash functions: CRC32, CRC32C, MD4, MD5, SHA1,
SHA256, SHA512, SHA3, AICH, ED2K, Tiger, DC++ TTH, GOST R 34.11-94, GOST R
34.11-2012, BitTorrent BTIH, RIPEMD-160, HAS-160, BLAKE2s/BLAKE2b, EDON-R
256/512, Whirlpool and Snefru-128/256.
Creates and returns new Crypt::Rhash object.
my $r = Crypt::Rhash->new($hash_id1, $hash_id2, ...);
my $p = new Crypt::Rhash($hash_id1, ...); # alternative way to call the constructor
Constructor accepts the following constants as arguments:
RHASH_CRC32,
RHASH_CRC32C,
RHASH_MD4,
RHASH_MD5,
RHASH_SHA1,
RHASH_TIGER,
RHASH_TTH,
RHASH_BTIH,
RHASH_ED2K,
RHASH_AICH,
RHASH_WHIRLPOOL,
RHASH_RIPEMD160,
RHASH_GOST94,
RHASH_GOST94_CRYPTOPRO,
RHASH_GOST12_256,
RHASH_GOST12_512
RHASH_HAS160,
RHASH_SHA224,
RHASH_SHA256,
RHASH_SHA384,
RHASH_SHA512,
RHASH_SHA3_224,
RHASH_SHA3_256,
RHASH_SHA3_384,
RHASH_SHA3_512,
RHASH_EDONR256,
RHASH_EDONR512,
RHASH_SNEFRU128,
RHASH_SNEFRU256,
RHASH_BLAKE2S,
RHASH_BLAKE2B,
RHASH_ALL
The RHASH_ALL bit mask is bitwise union of all listed above
bit-flags. An object created as Crypt::Rhash->new(RHASH_ALL) calculates
all supported hash functions for the same data.
- $rhash->update( $msg )
- Calculates message digests of the $msg string. The
method can be called repeatedly with chunks of the message to be hashed.
It returns the $rhash object itself allowing the
following construction:
$rhash = Crypt::Rhash->new(RHASH_MD5)->update( $chunk1 )->update( $chunk2 );
- $rhash->update_file( $file_path, $start, $size )
- $rhash->update_fd( $fd, $start, $size )
- Calculate a message digest of the file (or its part) specified by
$file_path or a file descriptor
$fd. The update_fd method doesn't close the
$fd, leaving the file position after the hashed
block. The optional $start and
$size specify the block of the file to process. If
$start is undefined, then the file is read from
the start. If $size is undefined, then the file is
read till the end. No error is reported if the
$size is greater than the number of the unread
bytes left in the file.
Returns the number of characters actually read, 0 at the end
of file, or undef if there was an error (in the latter case $! is also
set).
use Crypt::Rhash;
my $r = new Crypt::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 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
message digest calculation. The function is called automatically by any of
the $rhash->hash*() methods if the
final() call was skipped.
- $rhash->reset()
- Resets the $rhash object to the initial
state.
- $rhash->hashed_length()
- Returns the total length of the hashed message.
- $rhash->hash_id()
- Returns the hash mask, the $rhash object was
constructed with.
Computed message digest can be formatted 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 message digest in the default format, which can be hexadecimal
or base32. Actually the method is equivalent of
(Crypt::Rhash::is_base32($hash_id) ? $rhash->hash_base32($hash_id) :
$rhash->hash_hex($hash_id))
If the optional $hash_id parameter is
omitted or zero, then the method returns the message digest for the
algorithm contained in $rhash with the lowest
identifier.
- $rhash->hash_hex( $hash_id )
- Returns the specified message digest in the hexadecimal format.
use Crypt::Rhash;
my $msg = "abc";
print "MD5 = " . Crypt::Rhash->new(RHASH_MD5)->update($msg)->hash_hex() . "\n";
- $rhash->hash_rhex( $hash_id )
- Returns the specified message digest in the hexadecimal format with
reversed order of bytes. Some programs prefer to output the GOST R
34.11-94 message digest in this format.
- $rhash->hash_base32( $hash_id )
- Returns the specified message digest in the base32 format.
- $rhash->hash_base64( $hash_id )
- Returns the specified message digest in the base64 format.
- $rhash->magnet_link( $filename, $hash_mask )
- Returns the magnet link containing the computed message digests, filesize,
and, optionaly, $filename. The
$filename (if specified) is URL-encoded, by
converting special characters into the %<hexadecimal-code> form. The
optional parameter $hash_mask can limit which
message digests to put into the link.
- Crypt::Rhash::count()
- Returns the number of supported hash functions
- Crypt::Rhash::is_base32($hash_id)
- Returns nonzero if default output format is Base32 for the hash function
specified by $hash_id. Returns zero if default
format is hexadecimal.
- Crypt::Rhash::get_digest_size($hash_id)
- Returns the size in bytes of raw binary message digest of the specified
hash function.
- Crypt::Rhash::get_hash_length($hash_id)
- Returns the length of a message digest in default output format for the
specified hash function.
- Crypt::Rhash::get_name($hash_id)
- Returns the name of the specified hash function.
- Crypt::Rhash::msg($hash_id, $message)
- Computes and returns a single message digest (in its default format) of
the $message by the selected hash function.
use Crypt::Rhash;
print "SHA1( 'abc' ) = " . Crypt::Rhash::msg(RHASH_SHA1, "abc") . "\n";
BSD Zero Clause License
Copyright (c) 2011, Aleksey Kravchenko
Permission to use, copy, modify, and/or distribute this software
for any purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR
DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc. |