diff options
author | Tobi Oetiker <tobi@oetiker.ch> | 2008-03-18 09:10:40 +0100 |
---|---|---|
committer | Tobi Oetiker <tobi@oetiker.ch> | 2008-03-18 09:10:40 +0100 |
commit | a002bbdae7018d7c23f857780074ef00e3e6f31e (patch) | |
tree | 977aceaed2d4bb1a73b47695a4d1653567d74e2f /lib/Digest/HMAC_SHA1.pm | |
parent | efe9d8dafd6a8bc5845eae3b4dbc172ad68aa187 (diff) | |
download | smokeping-a002bbdae7018d7c23f857780074ef00e3e6f31e.tar.gz smokeping-a002bbdae7018d7c23f857780074ef00e3e6f31e.tar.xz |
switch to HMAC digest to avert extension attack
Diffstat (limited to 'lib/Digest/HMAC_SHA1.pm')
-rw-r--r-- | lib/Digest/HMAC_SHA1.pm | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/Digest/HMAC_SHA1.pm b/lib/Digest/HMAC_SHA1.pm new file mode 100644 index 0000000..fadfb40 --- /dev/null +++ b/lib/Digest/HMAC_SHA1.pm @@ -0,0 +1,71 @@ +package Digest::HMAC_SHA1; +$VERSION="1.01"; + +use strict; +use Digest::SHA1 qw(sha1); +use Digest::HMAC qw(hmac); + +# OO interface +use vars qw(@ISA); +@ISA=qw(Digest::HMAC); +sub new +{ + my $class = shift; + $class->SUPER::new($_[0], "Digest::SHA1", 64); +} + +# Functional interface +require Exporter; +*import = \&Exporter::import; +use vars qw(@EXPORT_OK); +@EXPORT_OK=qw(hmac_sha1 hmac_sha1_hex); + +sub hmac_sha1 +{ + hmac($_[0], $_[1], \&sha1, 64); +} + +sub hmac_sha1_hex +{ + unpack("H*", &hmac_sha1) +} + +1; + +__END__ + +=head1 NAME + +Digest::HMAC_SHA1 - Keyed-Hashing for Message Authentication + +=head1 SYNOPSIS + + # Functional style + use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex); + $digest = hmac_sha1($data, $key); + print hmac_sha1_hex($data, $key); + + # OO style + use Digest::HMAC_SHA1; + $hmac = Digest::HMAC_SHA1->new($key); + + $hmac->add($data); + $hmac->addfile(*FILE); + + $digest = $hmac->digest; + $digest = $hmac->hexdigest; + $digest = $hmac->b64digest; + +=head1 DESCRIPTION + +This module provide HMAC-SHA-1 hashing. + +=head1 SEE ALSO + +L<Digest::HMAC>, L<Digest::SHA1>, L<Digest::HMAC_MD5> + +=head1 AUTHOR + +Gisle Aas <gisle@aas.no> + +=cut |