@@ -7,28 +7,30 @@ $INC{'Crypt/OpenSSL/Bignum.pm'}
77 ? plan( tests => 64 )
88 : plan( skip_all => " Crypt::OpenSSL::Bignum required for bignum tests" );
99
10+ my @PARAM_NAMES = qw( n e d p q dmp1 dmq1 iqmp) ;
11+
1012sub check_datum {
11- my ( $p_expected , $p_actual ) = @_ ;
12- ok(
13- defined ($p_expected )
14- ? $p_actual && $p_expected -> equals($p_actual )
15- : !defined ($p_actual )
16- );
13+ my ( $p_expected , $p_actual , $name ) = @_ ;
14+ if ( defined ($p_expected ) ) {
15+ ok( $p_actual && $p_expected -> equals($p_actual ), $name );
16+ }
17+ else {
18+ is( $p_actual , undef , $name );
19+ }
1720}
1821
1922sub check_key_parameters # runs 8 tests
2023{
21- my ( $p_rsa , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp ) = @_ ;
24+ my ( $p_rsa , $label , $ n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp ) = @_ ;
2225 my ( $rn , $re , $rd , $rp , $rq , $rdmp1 , $rdmq1 , $riqmp ) = $p_rsa -> get_key_parameters();
2326
24- check_datum( $n , $rn );
25- check_datum( $e , $re );
26- check_datum( $d , $rd );
27- check_datum( $p , $rp );
28- check_datum( $q , $rq );
29- check_datum( $dmp1 , $rdmp1 );
30- check_datum( $dmq1 , $rdmq1 );
31- check_datum( $iqmp , $riqmp );
27+ my @expected = ( $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
28+ my @actual = ( $rn , $re , $rd , $rp , $rq , $rdmp1 , $rdmq1 , $riqmp );
29+
30+ for my $i ( 0 .. 7 ) {
31+ check_datum( $expected [$i ], $actual [$i ],
32+ " $label : $PARAM_NAMES [$i ] matches expected" );
33+ }
3234}
3335
3436{
@@ -44,50 +46,50 @@ sub check_key_parameters # runs 8 tests
4446 my $iqmp = $q -> mod_inverse( $p , $ctx );
4547
4648 my $rsa = Crypt::OpenSSL::RSA-> new_key_from_parameters( $n , $e , $d , $p , $q );
47- ok($rsa );
49+ ok( $rsa , " new_key_from_parameters(n,e,d,p,q) returns an object " );
4850
4951 $rsa -> use_no_padding();
5052
5153 my $plaintext = pack ( ' C*' , 100, 100, 100, 12 );
5254 my $ciphertext = Crypt::OpenSSL::Bignum-> new_from_bin($plaintext )-> mod_exp( $e , $n , $ctx )-> to_bin();
53- check_key_parameters( $rsa , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
55+ check_key_parameters( $rsa , " full key " , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
5456
55- ok ( $rsa -> encrypt($plaintext ) eq $ciphertext );
56- ok ( $rsa -> decrypt($ciphertext ) eq $plaintext );
57+ is ( $rsa -> encrypt($plaintext ), $ciphertext , " encrypt produces expected ciphertext " );
58+ is ( $rsa -> decrypt($ciphertext ), $plaintext , " decrypt recovers original plaintext " );
5759
5860 my $rsa_pub = Crypt::OpenSSL::RSA-> new_public_key( $rsa -> get_public_key_string() );
5961
6062 $rsa_pub -> use_no_padding();
61- ok ( $rsa -> private_encrypt($ciphertext ) eq $plaintext );
62- ok ( $rsa_pub -> public_decrypt($plaintext ) eq $ciphertext );
63+ is ( $rsa -> private_encrypt($ciphertext ), $plaintext , " private_encrypt produces expected plaintext " );
64+ is ( $rsa_pub -> public_decrypt($plaintext ), $ciphertext , " public_decrypt produces expected ciphertext " );
6365
6466 my @pub_parameters = $rsa_pub -> get_key_parameters();
65- ok ( scalar (@pub_parameters ) == 8 );
67+ is ( scalar (@pub_parameters ), 8, " public key returns 8 parameters " );
6668
67- check_key_parameters( $rsa_pub , $n , $e );
69+ check_key_parameters( $rsa_pub , " public key " , $n , $e );
6870
6971 $rsa = Crypt::OpenSSL::RSA-> new_key_from_parameters( $n , $e , $d , $p );
70- check_key_parameters( $rsa , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
72+ check_key_parameters( $rsa , " from (n,e,d,p) " , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
7173
7274 $rsa = Crypt::OpenSSL::RSA-> new_key_from_parameters( $n , $e , $d , undef , $q );
73- check_key_parameters( $rsa , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
75+ check_key_parameters( $rsa , " from (n,e,d,undef,q) " , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
7476
7577 $rsa = Crypt::OpenSSL::RSA-> new_key_from_parameters( $n , $e );
76- check_key_parameters( $rsa , $n , $e );
78+ check_key_parameters( $rsa , " from (n,e) " , $n , $e );
7779
7880 $rsa = Crypt::OpenSSL::RSA-> new_key_from_parameters( $n , $e , $d );
79- check_key_parameters( $rsa , $n , $e , $d );
81+ check_key_parameters( $rsa , " from (n,e,d) " , $n , $e , $d );
8082
8183 $rsa = Crypt::OpenSSL::RSA-> new_key_from_parameters( $n , $e , undef , $p );
82- check_key_parameters( $rsa , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
84+ check_key_parameters( $rsa , " from (n,e,undef,p) " , $n , $e , $d , $p , $q , $dmp1 , $dmq1 , $iqmp );
8385
8486 eval {
8587 Crypt::OpenSSL::RSA-> new_key_from_parameters(
8688 $n -> sub ( Crypt::OpenSSL::Bignum-> one() ),
8789 $e , $d , undef , $q
8890 );
8991 };
90- ok ( $@ =~ / OpenSSL error: p not prime/ );
92+ like ( $@ , qr / OpenSSL error: p not prime/ , " bad n with q triggers 'p not prime' error " );
9193
9294 # try again, to make sure the error queue was properly flushed
9395 eval {
@@ -96,5 +98,5 @@ sub check_key_parameters # runs 8 tests
9698 $e , $d , undef , $q
9799 );
98100 };
99- ok ( $@ =~ / OpenSSL error: p not prime/ );
101+ like ( $@ , qr / OpenSSL error: p not prime/ , " error queue flushed: repeat triggers same error " );
100102}
0 commit comments