33 lines
		
	
	
		
			665 B
		
	
	
	
		
			Perl
		
	
	
	
	
	
			
		
		
	
	
			33 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";
 | 
						|
}
 |