1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
|
#!/usr/bin/perl
use strict;
BEGIN {
$| = 1;
$^W = 1;
}
use Test::More;
use Math::BigInt try => 'GMP, Pari';
BEGIN {
if ( not $INC{'Math/BigInt/GMP.pm'} and not $INC{'Math/BigInt/Pari.pm'} ) {
plan( skip_all => 'Test is excessively slow without GMP or Pari' );
} else {
plan( tests => 18 );
}
}
use Crypt::DSA;
use Crypt::DSA::Util qw( mod_exp );
my $dsa = Crypt::DSA->new;
my $two = Math::BigInt->new(2);
for my $bits (qw( 512 768 1024 )) {
my $key = $dsa->keygen( Size => $bits );
ok($key, "Key generated of size $bits bits");
ok($key->size, "Key is $bits bits");
ok(($key->p < ($two ** $bits)) && ($key->p > ($two ** ($bits-1))), "p of appropriate size ($bits bits)");
ok(($key->q < ($two ** 160)) && ($key->q > ($two ** 159)), "q of appropriate size ($bits bits)");
ok(0 == ($key->p - 1) % $key->q, "Consistency check 1 ($bits bits)");
ok($key->pub_key == mod_exp($key->g, $key->priv_key, $key->p), "Consistency check 2 ($bits bits)");
}
|