#!/usr/bin/perl -- use strict; use warnings; use File::Spec; use Crypt::RSA; Main(@ARGV); exit(0); sub Main { my $thisf = File::Spec->rel2abs(__FILE__); my $fprivate = "$thisf-testkey.private"; my $fpublic = "$thisf-testkey.public"; print "RSA tester ($thisf)\n"; my $infoToSign = "blah"; my $privateKey = 5; my $rsa = new Crypt::RSA; my ( $public, $private ); if ( -e $fpublic and -e $fprivate ) { print "reading $fprivate\n"; $private = new Crypt::RSA::Key::Private( Filename => $fprivate, @_ ? ( Password => 'password' ) : (), # NOTICE ARGV ); } else { print "generating keys\n"; ( $public, $private ) = $rsa->keygen( Identity => 'RBSClient', Size => 1024, Password => 'password', ) or die $rsa->errstr(); $private->write( Filename => $fprivate ); $public->write( Filename => $fpublic ); } print "signing $infoToSign\n"; my $signature = $rsa->sign( Message => $infoToSign, Key => $private, Armour => 1, ) || die $rsa->errstr(); print "$signature \n"; } __END__ $ perl crypt-rsa-sign-test.pl RSA tester (~/tmp/crypt-rsa-sign-test.pl) generating keys signing blah PARI: *** negative exponent in glog. at ~/lib/Crypt/RSA/DataFormat.pm line 77. $ $ perl crypt-rsa-sign-test.pl RSA tester (~/tmp/crypt-rsa-sign-test.pl) reading ~/tmp/crypt-rsa-sign-test.pl-testkey.private signing blah PARI: *** negative exponent in glog. at ~/lib/MSWin32-x86-multi-thread/Math/Pari.pm line 994. $ perl crypt-rsa-sign-test.pl asdf RSA tester (~/tmp/crypt-rsa-sign-test.pl) reading ~/tmp/crypt-rsa-sign-test.pl-testkey.private signing blah -----BEGIN RSA SIGNATURE----- Version: 1.99 Scheme: Crypt::RSA::SS::PSS OQAxMjgAU2lnbmF0dXJlU7UxMIX136kFP+o3o7Pf5orq6jeCJWI7qG/uRqCwFgAoUc/LUR9jsmBM B1Wl6krjm/98qTYUNgNNWgApxsfTFu23jL3LBbrKH50fNql9YuElxYdER0kyFJgX61xmrgivfbm1 Vim4LMMoCSJq2qyhCOEcA1q3zg/p+6U5/Zg8Lbg= =ufjanyZlBik+n/N3tWigfw== -----END RSA SIGNATURE----- $