The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;

use Test::More;
use Math::Prime::Util qw/is_prime verify_prime
                         random_maurer_prime_with_cert
                         random_shawe_taylor_prime_with_cert
                         random_proven_prime_with_cert
                        /;

use Math::BigInt try=>"GMP,Pari";

my $do_st = 1;
$do_st = 0 unless eval { require Digest::SHA;
                         my $version = $Digest::SHA::VERSION;
                         $version =~ s/[^\d.]//g;
                         $version >= 4.00; };

plan tests => 3*2;

{
  my($n,$cert) = random_maurer_prime_with_cert(80);
  ok( is_prime($n), "Random Maurer prime returns a prime" );
  ok( verify_prime($cert), "   with a valid certificate" );
}

SKIP: {
  skip "random Shawe-Taylor prime generation requires Digest::SHA",2 unless $do_st;
  my($n,$cert) = random_shawe_taylor_prime_with_cert(80);
  ok( is_prime($n), "Random Shawe-Taylor prime returns a prime" );
  ok( verify_prime($cert), "   with a valid certificate" );
}

{
  my($n,$cert) = random_proven_prime_with_cert(80);
  ok( is_prime($n), "Random proven prime returns a prime" );
  ok( verify_prime($cert), "   with a valid certificate" );
}