2d89495f03734b8f99eb89847c2ba3d931695d31
[spider.git] / perl / Verify.pm
1 #!/usr/bin/perl
2 #
3 # This module impliments the verification routines
4 #
5 # Copyright (c) 2002 Dirk Koopman G1TLH
6 #
7 # $Id$
8
9
10 package Verify;
11
12 use DXChannel;
13 use DXUtil;
14 use DXDebug;
15 use Time::HiRes qw(gettimeofday);
16 use Digest::SHA1 qw(sha1_base64);
17
18 use strict;
19
20 use vars qw($VERSION $BRANCH);
21 $VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ );
22 $BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ ) || 0;
23 $main::build += $VERSION;
24 $main::branch += $BRANCH;
25
26 sub new
27 {
28         my $class = shift;
29         my $self = bless {}, ref($class) || $class; 
30         $self->{seed} = shift if @_;
31         return $self;
32 }
33
34 sub challenge
35 {
36         my $self = shift;
37         my @t = gettimeofday();
38         my $r = unpack("xxNxx", pack("d", rand));
39         @t = map {$_ ^ $r} @t;
40         dbg("challenge r: $r seed: $t[0] $t[1]" ) if isdbg('verify');
41         $r = unpack("xxNxx", pack("d", rand));
42         @t = map {$_ ^ $r} @t;
43         dbg("challenge r: $r seed: $t[0] $t[1]" ) if isdbg('verify');
44         return $self->{seed} = sha1_base64(@t, gettimeofday, rand, rand, rand, @_);
45 }
46
47 sub response
48 {
49         my $self = shift;
50         return sha1_base64($self->{seed}, @_);
51 }
52
53 sub verify
54 {
55         my $self = shift;
56         my $answer = shift;
57         my $p = sha1_base64($self->{seed}, @_);
58         return $p eq $answer;
59 }
60
61 1;