32 lines
665 B
Perl
32 lines
665 B
Perl
#!/usr/bin/env perl
|
|
#
|
|
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
|
|
|
|
unshift(@INC,$dir);
|
|
require "hmac_sha1.pl";
|
|
|
|
(!@ARV[0] && -f @ARGV[$#ARGV]) || die "usage: $0 [-verify] file";
|
|
|
|
$verify=shift if (@ARGV[0] eq "-verify");
|
|
|
|
sysopen(FD,@ARGV[0],0) || die "$!";
|
|
binmode(FD);
|
|
|
|
my $ctx = HMAC->Init("etaonrishdlcupfm");
|
|
|
|
while (read(FD,$blob,4*1024)) { $ctx->Update($blob); }
|
|
|
|
close(FD);
|
|
|
|
my $signature = unpack("H*",$ctx->Final());
|
|
|
|
print "HMAC-SHA1(@ARGV[0])= $signature\n";
|
|
|
|
if ($verify) {
|
|
open(FD,"<@ARGV[0].sha1") || die "$!";
|
|
$line = <FD>;
|
|
close(FD);
|
|
exit(0) if ($line =~ /HMAC\-SHA1\([^\)]*\)=\s*([0-9a-f]+)/i &&
|
|
$1 eq $signature);
|
|
die "signature mismatch";
|
|
}
|