|
Packit |
19ef86 |
# Before `make install' is performed this script should be runnable with
|
|
Packit |
19ef86 |
# `make test'. After `make install' it should work as `perl test.pl'
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
#########################
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
# change 'tests => 1' to 'tests => last_test_to_print';
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
use Test;
|
|
Packit |
19ef86 |
BEGIN { plan tests => 67 };
|
|
Packit |
19ef86 |
use Crypt::OpenSSL::Bignum;
|
|
Packit |
19ef86 |
use Crypt::OpenSSL::Bignum::CTX;
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
#########################
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
# Insert your test code below, the Test module is use()ed here so read
|
|
Packit |
19ef86 |
# its man page ( perldoc Test ) for help writing this test script.
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
use strict;
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
sub _new_bn
|
|
Packit |
19ef86 |
{
|
|
Packit |
19ef86 |
return Crypt::OpenSSL::Bignum->new_from_word( shift );
|
|
Packit |
19ef86 |
}
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $bn;
|
|
Packit |
19ef86 |
my $decimal_string = "2342234235235235235";
|
|
Packit |
19ef86 |
$bn = Crypt::OpenSSL::Bignum->new_from_decimal( $decimal_string );
|
|
Packit |
19ef86 |
ok( $bn );
|
|
Packit |
19ef86 |
ok( $bn->to_decimal() eq $decimal_string );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $hex_string = "7f";
|
|
Packit |
19ef86 |
$bn = Crypt::OpenSSL::Bignum->new_from_hex( $hex_string );
|
|
Packit |
19ef86 |
ok( $bn );
|
|
Packit |
19ef86 |
ok( $bn->to_hex() eq uc( $hex_string ) );
|
|
Packit |
19ef86 |
ok( $bn->to_decimal() eq '127' );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $bin_string = pack( "C*", 2, 0 );
|
|
Packit |
19ef86 |
$bn = Crypt::OpenSSL::Bignum->new_from_bin( $bin_string );
|
|
Packit |
19ef86 |
ok( $bn );
|
|
Packit |
19ef86 |
ok( $bn->to_bin() eq $bin_string );
|
|
Packit |
19ef86 |
ok( $bn->to_decimal() eq '512' );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $bn23 = _new_bn( 23 );
|
|
Packit |
19ef86 |
my $bn25 = _new_bn( 25 );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( $bn23->cmp($ bn25 ) == -1 );
|
|
Packit |
19ef86 |
ok( $bn25->cmp( $bn23 ) == 1 );
|
|
Packit |
19ef86 |
ok( $bn23->cmp( $bn23 ) == 0 );
|
|
Packit |
19ef86 |
ok( $bn23->equals( $bn23 ) );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $bn_copy = $bn->copy();
|
|
Packit |
19ef86 |
ok( $bn_copy ne $bn );
|
|
Packit |
19ef86 |
ok( $bn->equals( $bn_copy ) );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $ptr = $bn->pointer_copy();
|
|
Packit |
19ef86 |
ok( ! ref $ptr );
|
|
Packit |
19ef86 |
ok( $bn + 0 != $ptr );
|
|
Packit |
19ef86 |
my $from_ptr = Crypt::OpenSSL::Bignum->bless_pointer( $ptr );
|
|
Packit |
19ef86 |
ok( $bn->equals( $from_ptr ) );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $zero = Crypt::OpenSSL::Bignum->zero();
|
|
Packit |
19ef86 |
my $one = Crypt::OpenSSL::Bignum->one();
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( $one->is_one() );
|
|
Packit |
19ef86 |
ok( !$zero->is_one() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( $zero->is_zero() );
|
|
Packit |
19ef86 |
ok( !$one->is_zero() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( !$zero->is_odd() );
|
|
Packit |
19ef86 |
ok( $one->is_odd() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $word = 0xffffeeee;
|
|
Packit |
19ef86 |
ok( _new_bn($word)->get_word() == $word );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
# test creation from object rather than class string.
|
|
Packit |
19ef86 |
my $bn2 = $bn->new_from_bin( $bin_string );
|
|
Packit |
19ef86 |
ok( $bn2 );
|
|
Packit |
19ef86 |
ok( $bn2->to_bin() eq $bn->to_bin() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( '48' eq $bn23->add( $bn25 )->to_decimal() );
|
|
Packit |
19ef86 |
$bn = _new_bn( 18 );
|
|
Packit |
19ef86 |
$bn->add( $one, $bn );
|
|
Packit |
19ef86 |
ok( 19 == $bn->get_word() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( '-2' eq $bn23->sub( $bn25 )->to_decimal() );
|
|
Packit |
19ef86 |
$bn = _new_bn( 18 );
|
|
Packit |
19ef86 |
$bn->sub( $one, $bn );
|
|
Packit |
19ef86 |
ok( 17 == $bn->get_word() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $ctx = Crypt::OpenSSL::Bignum::CTX->new();
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( $ctx );
|
|
Packit |
19ef86 |
ok( 575 == $bn23->mul( $bn25, $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 575 == $bn23->mul( $bn25, $ctx, $bn )->get_word() );
|
|
Packit |
19ef86 |
ok( 575 == $bn->get_word() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( 2 == $bn25->mod( $bn23, $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 2 == $bn25->mod( $bn23, $ctx, $bn )->get_word() );
|
|
Packit |
19ef86 |
ok( 2 == $bn->get_word() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $bn6 = _new_bn( 6 );
|
|
Packit |
19ef86 |
my $bn3 = _new_bn( 3 );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my( $quotient, $remainder ) = $bn25->div( $bn23, $ctx );
|
|
Packit |
19ef86 |
ok( $quotient->is_one );
|
|
Packit |
19ef86 |
ok( 2 == $remainder->get_word() );
|
|
Packit |
19ef86 |
my( $quotient2, $remainder2 ) =
|
|
Packit |
19ef86 |
$bn25->div( $bn6, $ctx, $quotient, $remainder );
|
|
Packit |
19ef86 |
ok( $quotient2 == $quotient );
|
|
Packit |
19ef86 |
ok( $remainder2 == $remainder );
|
|
Packit |
19ef86 |
ok( 4 == $quotient->get_word() );
|
|
Packit |
19ef86 |
ok( $remainder->is_one );
|
|
Packit |
19ef86 |
my( $quotient3, $remainder3 ) =
|
|
Packit |
19ef86 |
$bn25->div( $bn6, $ctx, $quotient );
|
|
Packit |
19ef86 |
ok( $quotient3 == $quotient );
|
|
Packit |
19ef86 |
ok( 4 == $quotient->get_word() );
|
|
Packit |
19ef86 |
ok( $remainder3->is_one() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok( 6 == _new_bn( 18 )->gcd( _new_bn( 42 ), $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 5 == $bn23->mod_mul( $bn25, $bn6, $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 729 == $bn3->exp( $bn6, $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 4 == $bn3->mod_exp( $bn6, $bn25, $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 36 == $bn6->sqr( $ctx )->get_word() );
|
|
Packit |
19ef86 |
ok( 12 == $bn23->mod_inverse( $bn25, $ctx )->get_word() );
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
ok(Crypt::OpenSSL::Bignum->new()->get_word == 0);
|
|
Packit |
19ef86 |
ok(Crypt::OpenSSL::Bignum->rand(32, 0, 0));
|
|
Packit |
19ef86 |
ok(Crypt::OpenSSL::Bignum->pseudo_rand(32, 0, 0));
|
|
Packit |
19ef86 |
my $range = Crypt::OpenSSL::Bignum->new_from_decimal('1000');
|
|
Packit |
19ef86 |
ok(Crypt::OpenSSL::Bignum->rand_range($range));
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $d1010 = Crypt::OpenSSL::Bignum->new_from_decimal('1020');
|
|
Packit |
19ef86 |
my $w1010 = Crypt::OpenSSL::Bignum->new_from_word(1020);
|
|
Packit |
19ef86 |
ok($w1010->equals($d1010));
|
|
Packit |
19ef86 |
ok($d1010->num_bits() == 10);
|
|
Packit |
19ef86 |
ok($d1010->num_bytes() == 2);
|
|
Packit |
19ef86 |
ok($d1010->rshift(2)->get_word == 1020/4);
|
|
Packit |
19ef86 |
ok($d1010->lshift(2)->get_word == 1020*4);
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $n1 = Crypt::OpenSSL::Bignum->new_from_decimal('-250');
|
|
Packit |
19ef86 |
my $n2 = Crypt::OpenSSL::Bignum->new_from_decimal('250');
|
|
Packit |
19ef86 |
ok($n1->cmp($n2) == -1);
|
|
Packit |
19ef86 |
ok($n1->ucmp($n2) == 0);
|
|
Packit |
19ef86 |
|
|
Packit |
19ef86 |
my $one = Crypt::OpenSSL::Bignum->one;
|
|
Packit |
19ef86 |
my $zero = Crypt::OpenSSL::Bignum->zero;
|
|
Packit |
19ef86 |
ok($one->to_decimal eq "1");
|
|
Packit |
19ef86 |
ok($zero->to_decimal eq "0");
|
|
Packit |
19ef86 |
$one->swap($zero);
|
|
Packit |
19ef86 |
ok($one->to_decimal eq "0");
|
|
Packit |
19ef86 |
ok($zero->to_decimal eq "1");
|