in reply to Code hanging with Crypt OpenPGP

Stumbled on this thread while investigating a problem similar. Running almost the exact same code, I have discovered that encrypting with certain keys work, and certain keys hang. I've traced the hang to ElGamal.pm, in a loop starting on line 59, the condition for exit is never satisfied -with some keys-.
While (1) { last if Math::BigInt::bgcd($k, $p_minus1) == 1; k++; }
Not even remotely sure how to resolve. -Darryl

Replies are listed 'Best First'.
Re^2: Code hanging with Crypt OpenPGP
by mark_elrod (Novice) on Dec 03, 2016 at 00:52 UTC
    I ran into this when we updated to CentOS 7.2 and went from perl 5.10 to 5.16. $p is too big for perl to subtract 1 from and results in inf. Still trying to figure out why it worked before but for now using Math::BigInt to calculate p_minus1 will fix it:
    sub gen_k { my ($p) = @_; ## XXX choose bitsize based on bitsize of $p my $bits = 198; my $p_minus1 = Math::BigInt->new($p)->bsub(1); my $k = Crypt::OpenPGP::Util::get_random_bigint($bits); while (1) { last if Math::BigInt::bgcd($k, $p_minus1) == 1; $k++; } $k; }