The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl

# Copyright (C) 2003 Julius C. Duque

use diagnostics;
use strict;
use warnings;
use Digest::SHA2;

my $string1 = "This is a string.";
my $string2 = "This is another string.";
my $string3 = "This is a string.This is another string.";
my $string4 = "abc";

my $testdigest = "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f";

my $sha2obj = new Digest::SHA2 512;
print "hash size = ", $sha2obj->hashsize, " bits\n";
print "number of rounds = ", $sha2obj->rounds, "\n";

$sha2obj->add($string1);
my $digest = $sha2obj->hexdigest();
print "1. Hash string1 only\n";
print "$digest\n\n";

$sha2obj->reset();
$sha2obj->add($string1, $string2);
my $digest2 = $sha2obj->hexdigest();
print "2. Hash string1 and then hash string2\n";
print "$digest2\n\n";

$sha2obj->reset();
$sha2obj->add($string3);
print "3. Hash the two concatenated strings\n";
my $digest3 = $sha2obj->hexdigest();
print "$digest3\n\n";

$sha2obj->reset();
$sha2obj->add($string4);
print "4. Hash test string\n";
my $digest4 = $sha2obj->hexdigest();
print "SHA2 hash OK\n\n" if ($digest4 eq $testdigest);

$sha2obj->reset();
$sha2obj->add($string1);
$sha2obj->add($string2);
print "5. Hash the two concatenated strings again\n";
my $digest5 = $sha2obj->hexdigest();
print "$digest5\n\n";