# vi:fdm=marker fdl=0 syntax=perl: use strict; use Test; if( defined $ENV{SKIP_ALL_BUT} ) { unless( $0 =~ m/\Q$ENV{SKIP_ALL_BUT}\E/ ) { plan tests => 1; skip(1); exit 0; } } use Crypt::PBC; my $curve = new Crypt::PBC('params_d.txt'); my $G1_a = $curve->init_G1; my $G1_b = $curve->init_G1; my $G1_c = $curve->init_G1; my $G1_d = $curve->init_G1; my $Zr_a = $curve->init_Zr; my $Zr_b = $curve->init_Zr; my $Zr_c = $curve->init_Zr; my $epochs = 5; plan tests => $epochs * 3; for ( 1 .. $epochs ) { # just looking for segfaults $G1_a->random; $G1_b->random; $G1_c->random; $G1_d->random; $Zr_a->random; $Zr_b->random; $Zr_c->random; my $mpz_a = $Zr_a->as_bigint; my $mpz_b = $Zr_b->as_bigint; my $mpz_c = $Zr_c->as_bigint; $G1_a->random->pow_zn( $G1_b, $Zr_a ); my $c_1 = $G1_a->clone; $G1_a->random->pow2_zn( $G1_b, $Zr_a, $G1_c, $Zr_b, $G1_d, $Zr_c ); my $c_2 = $G1_a->clone; $G1_a->random->pow3_zn( $G1_b, $Zr_a, $G1_c, $Zr_b, $G1_d, $Zr_c ); my $c_3 = $G1_a->clone; $G1_a->random->pow_bigint( $G1_b, $mpz_a ); ok( $G1_a->is_eq( $c_1 ) ); $G1_a->random->pow2_bigint( $G1_b, $mpz_a, $G1_c, $mpz_b, $G1_d, $mpz_c ); ok( $G1_a->is_eq( $c_2 ) ); $G1_a->random->pow3_bigint( $G1_b, $mpz_a, $G1_c, $mpz_b, $G1_d, $mpz_c ); ok( $G1_a->is_eq( $c_3 ) ); }