Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Code hanging with Crypt OpenPGP

by kennethk (Monsignor)
on Nov 11, 2013 at 21:45 UTC ( #1062059=note: print w/ replies, xml ) Need Help??

in reply to Code hanging with Crypt OpenPGP

One issue with your posted code, though I would be surprised if this is your issue, is that you are only pulling in one line of your plaintext - to pull a full file into a scalar, you should either set binmode or slurp (my $plaintext = do{local $/;<INFILE>}). Maybe you're encoding a null string and thus your output is much shorter than you expect?

It's possible, though seems unlikely, that you've got some strange characters in your opens (your posted code shouldn't suffer from that issue). 3-argument open will handle any escapes that that need handling. Swapping to Indirect Filehandles, that would be:

#!/usr/bin/perl use strict; use warnings; use File::Basename; use Crypt::OpenPGP; my $ring = Crypt::OpenPGP::KeyRing->new( Data => qq^-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.8 (SunOS) mQGiBFDr..... -----END PGP PUBLIC KEY BLOCK-----^ ); my $datafile = "original.csv"; # Get just name of the original file to name the new encrypted file. my ( $encrypted ) = fileparse( $datafile, '\.[^.]*' ); # $name, $path, + $suffix open( my $in, "<", $datafile ) or die "Could not open csv file - $!"; my $plaintext = do{local $/;<$in>}; close $in; $ring->read; my $kb = $ring->find_keyblock_by_index(0); my $cert = $kb->encrypting_key; my $pgp = Crypt::OpenPGP->new( Compat => 'GnuPG' ); my $ct = $pgp->encrypt( Key => $cert, Data => $plaintext, Armour => 1 +) or die "ERROR: " . $pgp->errstr; open( my $out, ">", "$encrypted.pgp" ) or die "Could not open file for + encrypted data - $!"; print $out $ct; close $out;

Also note "\.[^.]*" doesn't mean what you likely thought, though it still works for your purposes for the given code.

Lastly, if you have your literal key pasted in the block for $ring, your use of qq delimiters might result in some weird interpolation, though that would likely have gotten caught by strict.

Hope some of this helps...

Update: Fixed typo, as per below.

#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Comment on Re: Code hanging with Crypt OpenPGP
Select or Download Code
Re^2: Code hanging with Crypt OpenPGP
by Anonymous Monk on Nov 12, 2013 at 15:53 UTC
    Shouldn't this line be :
    my $plaintext = do{local $/;<$in>};
    Instead of:
    my $plaintext = do{local $/;<INFILE>};
    Still hangs on this line for me:
    my $ct = $pgp->encrypt( Key => $cert, Data => $plaintext, Armour => 1 +) or die "ERROR: " . $pgp->errstr;
      What kind of debugging environment do you have set up? Since Crypt::OpenPGP is pure-Perl, you should be able to isolate the particular operation in encrypt that's causing trouble.

      #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

        I know, but I could not find any information on how to attach the public key, as an example this one:
        my $ring = Crypt::OpenPGP::KeyRing->new( Data => qq^-----BEGIN PGP PUB +LIC KEY BLOCK----- Version: PGP 6.5.1 mQGiBES0BisRBAD11RjxN2lk+2eKsVj +fJSrjkrbhoIRS1eduMb1Q1dzbqNAG1L/j Srd+T/dfWEqWu0LqBwgSK/P6a+cdnENSFj8 +LQOWD8zbrXbok2gFoIkF/L1O/7znC 5IwFPP+2FZe1kFyY36PKooot+okYG/G16HNAuU3 +CzxBYCuqkxqEDeU1kdwCg/1jI FrbO0cUrJrit/6NIyzDBCOMEANgBXtHtdrdtmwE35Hc +FO2sdywvvIOE+L1Wouwku ewK6/bpLGa1LnYu7T7xO+CziYqjp9SIGiSPmZjQQPXfBrEt +CvLMCTC/mdylOP6Sh hrnLWgPgAV5d7wpR1VUQCugDDZ9s/ExQuQEeD3dHt2dBBco5/+l +vdr/cXE06J3x2 fETgA/9dhSfdp4h4PIKYkgDvTGIpFp6JeKTVd5PnTu80JO9JkkSWtPr +yukDT/smq ACzyrCkexY0zdGgFJ5mmrK/S5KNyrUOw46noCj07k6/l4dl5CCM0K670Jpo +YijL5 rAUnfvvcozjhqKpgwalGDsIZ+pDNTL2BjREZulU6mTEiO9iAxLQMZnR0LXRlc3Q +t a2V5iQBOBBARAgAOBQJEtAYrBAsDAQICGQEACgkQ7PgWEnFENBZ0NACgl4QXiLg5 3z +iImum1iWQDTjSFBA8AoI9A3rEbeeaqUAHWQMn7x2wtofPiuQMNBES0Bi8QDADM HXdXJD +hK4sTw6I4TZ5dOkhNh9tvrJQ4X/faY98h8ebByHTh1+/bBc8SDESYrQ2DD 4+jWCv2hKC +YLrqmus2UPogBTAaB81qujEh76DyrOH3SET8rzF/OkQOnX0ne2Qi0C NsEmy2henXyYCQ +qNfi3t5F159dSST5sYjvwqp0t8MvZCV7cIfwgXcqK61qlC8wXo +VMROU+28W65Szgg2g +GnVqMU6Y9AVfPQB8bLQ6mUrfdMZIZJ+AyDvWXpF9Sh01D4 9Vlf3HZSTz09jdvOmeFXkl +nN/biudE/F/Ha8g8VHMGHOfMlm/xX5u/2RXscBqtNb no2gpXI61Brwv0YAWCvl9Ij9WE +5J280gtJ3kkQc2azNsOA1FHQ98iLMcfFstjvbz ySPAQ/ClWxiNjrtVjLhdONM0/XwXV0 +OjHRhs3jMhLLUq/zzhsSlAGBGNfISnCnLW hsQDGcgHKXrKlQzZlp+r0ApQmwJG0wg9Zq +RdQZ+cfL2JSyIZJrqrol7DVelMMm8A AgIL/jQq8VcNbVMOJVW9ijKHVg/wbx6wzqYEOe +dqsbLjcX0TNvrp2aL2RDK4xq/E oIERKZftsI2TvglcgNrw8NXnps1hT5lP1oEjmRF8B5 +7bm4p4fScfaPEodzCTsbX7 KFI+ie/XbApHrcFnQzfQFA0hqDFidATSxf6mWPPMUVSvDT +aNbq1Ps88OLeSoF3kE 58hMm9x8xZJOnQeTe4gvX2uDz+F6daxC7xBd73axc2KS9mnBqj +9Xw2qLm438TuKC V7ioOXxzeSVioDNsnh+PLYhEBPFCgsjEqKu0TXWDVkkzzxLO11Uq6V +TYt/ve1cVz mq2vLN3km1kZoumXHYROV9mg2Zr7Y6604r+OAVHxNgJz5X6OB36bjQgpWD +PuNWmk uh1PrZAT6WB2LJDaSZk6y3EQfGWvnZ5OqgqhIVl2HlyMGU4E8C8iTkuCStpndM +Fw ZchMKR7UbTswzI7m4t4RPLvpaF8YxmAJy9UzZEK3Ycnq5oNsgicKqgM2GVpky1GO o +AtMaIkARgQYEQIABgUCRLQGLwAKCRDs+BYScUQ0FoObAKD1vGbfNCeu/CVvwsTr 9mz6n +UmeTgCeNO9P7OkUuySN6D2YTYbKvgIAEes= =+ksY -----END PGP PUBLIC KEY BLO +CK-----^ );
        to the my $ct = $pgp->encrypt() code. Since you mentioned that you got the code to work I'd like to see where the differences are. Thanks.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1062059]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (8)
As of 2014-07-24 23:44 GMT
Find Nodes?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:

    Results (167 votes), past polls