X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FVerify.pm;fp=perl%2FVerify.pm;h=2d89495f03734b8f99eb89847c2ba3d931695d31;hb=148f4d43135748ba5aff985c50720b370ca1e336;hp=0000000000000000000000000000000000000000;hpb=d0dd6927b76507d8c2b1c6d32d6fdd34515e4a82;p=spider.git diff --git a/perl/Verify.pm b/perl/Verify.pm new file mode 100644 index 00000000..2d89495f --- /dev/null +++ b/perl/Verify.pm @@ -0,0 +1,61 @@ +#!/usr/bin/perl +# +# This module impliments the verification routines +# +# Copyright (c) 2002 Dirk Koopman G1TLH +# +# $Id$ +# + +package Verify; + +use DXChannel; +use DXUtil; +use DXDebug; +use Time::HiRes qw(gettimeofday); +use Digest::SHA1 qw(sha1_base64); + +use strict; + +use vars qw($VERSION $BRANCH); +$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); +$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0; +$main::build += $VERSION; +$main::branch += $BRANCH; + +sub new +{ + my $class = shift; + my $self = bless {}, ref($class) || $class; + $self->{seed} = shift if @_; + return $self; +} + +sub challenge +{ + my $self = shift; + my @t = gettimeofday(); + my $r = unpack("xxNxx", pack("d", rand)); + @t = map {$_ ^ $r} @t; + dbg("challenge r: $r seed: $t[0] $t[1]" ) if isdbg('verify'); + $r = unpack("xxNxx", pack("d", rand)); + @t = map {$_ ^ $r} @t; + dbg("challenge r: $r seed: $t[0] $t[1]" ) if isdbg('verify'); + return $self->{seed} = sha1_base64(@t, gettimeofday, rand, rand, rand, @_); +} + +sub response +{ + my $self = shift; + return sha1_base64($self->{seed}, @_); +} + +sub verify +{ + my $self = shift; + my $answer = shift; + my $p = sha1_base64($self->{seed}, @_); + return $p eq $answer; +} + +1;