summaryrefslogtreecommitdiffstats
path: root/lib/Digest/HMAC_MD5.pm
diff options
context:
space:
mode:
authorTobi Oetiker <tobi@oetiker.ch>2008-03-18 09:10:40 +0100
committerTobi Oetiker <tobi@oetiker.ch>2008-03-18 09:10:40 +0100
commita002bbdae7018d7c23f857780074ef00e3e6f31e (patch)
tree977aceaed2d4bb1a73b47695a4d1653567d74e2f /lib/Digest/HMAC_MD5.pm
parentefe9d8dafd6a8bc5845eae3b4dbc172ad68aa187 (diff)
downloadsmokeping-a002bbdae7018d7c23f857780074ef00e3e6f31e.tar.gz
smokeping-a002bbdae7018d7c23f857780074ef00e3e6f31e.tar.xz
switch to HMAC digest to avert extension attack
Diffstat (limited to 'lib/Digest/HMAC_MD5.pm')
-rw-r--r--lib/Digest/HMAC_MD5.pm71
1 files changed, 71 insertions, 0 deletions
diff --git a/lib/Digest/HMAC_MD5.pm b/lib/Digest/HMAC_MD5.pm
new file mode 100644
index 0000000..6efa0a1
--- /dev/null
+++ b/lib/Digest/HMAC_MD5.pm
@@ -0,0 +1,71 @@
+package Digest::HMAC_MD5;
+$VERSION="1.01";
+
+use strict;
+use Digest::MD5 qw(md5);
+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::MD5", 64);
+}
+
+# Functional interface
+require Exporter;
+*import = \&Exporter::import;
+use vars qw(@EXPORT_OK);
+@EXPORT_OK=qw(hmac_md5 hmac_md5_hex);
+
+sub hmac_md5
+{
+ hmac($_[0], $_[1], \&md5, 64);
+}
+
+sub hmac_md5_hex
+{
+ unpack("H*", &hmac_md5)
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Digest::HMAC_MD5 - Keyed-Hashing for Message Authentication
+
+=head1 SYNOPSIS
+
+ # Functional style
+ use Digest::HMAC_MD5 qw(hmac_md5 hmac_md5_hex);
+ $digest = hmac_md5($data, $key);
+ print hmac_md5_hex($data, $key);
+
+ # OO style
+ use Digest::HMAC_MD5;
+ $hmac = Digest::HMAC_MD5->new($key);
+
+ $hmac->add($data);
+ $hmac->addfile(*FILE);
+
+ $digest = $hmac->digest;
+ $digest = $hmac->hexdigest;
+ $digest = $hmac->b64digest;
+
+=head1 DESCRIPTION
+
+This module provide HMAC-MD5 hashing.
+
+=head1 SEE ALSO
+
+L<Digest::HMAC>, L<Digest::MD5>, L<Digest::HMAC_SHA1>
+
+=head1 AUTHOR
+
+Gisle Aas <gisle@aas.no>
+
+=cut