builder110697
asked on
Crypt::OpenPGP without external dependencies
I'm trying to write a subroutine to GnuPG encrypt a report (generated from a database query) given only the report contents and the encryption key as arguments. No external dependencies (other than Perl modules and specifically excluding GPG binaries and its keyring files).
This concept test script looks like it should work (I had help from the module author, but I guess, I don't fully understand his comments). Does anyone have any other bright ideas?
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::OpenPGP;
use Crypt::OpenPGP::KeyBlock;
use Crypt::OpenPGP::KeyRing;
my $plaintext = qq^
Dummy report data
^;
my $ring = Crypt::OpenPGP::KeyRing->n ew( Data => "-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP 6.5.1
mQGiBES0BisRBAD11RjxN2lk+2 eKsVjfJSrj krbhoIRS1e duMb1Q1dzb qNAG1L/j
Srd+T/dfWEqWu0LqBwgSK/P6a+ cdnENSFj8L QOWD8zbrXb ok2gFoIkF/ L1O/7znC
5IwFPP+2FZe1kFyY36PKooot+o kYG/G16HNA uU3CzxBYCu qkxqEDeU1k dwCg/1jI
FrbO0cUrJrit/6NIyzDBCOMEAN gBXtHtdrdt mwE35HcFO2 sdywvvIOE+ L1Wouwku
ewK6/bpLGa1LnYu7T7xO+CziYq jp9SIGiSPm ZjQQPXfBrE tCvLMCTC/m dylOP6Sh
hrnLWgPgAV5d7wpR1VUQCugDDZ 9s/ExQuQEe D3dHt2dBBc o5/+lvdr/c XE06J3x2
fETgA/9dhSfdp4h4PIKYkgDvTG IpFp6JeKTV d5PnTu80JO 9JkkSWtPry ukDT/smq
ACzyrCkexY0zdGgFJ5mmrK/S5K NyrUOw46no Cj07k6/l4d l5CCM0K670 JpoYijL5
rAUnfvvcozjhqKpgwalGDsIZ+p DNTL2BjREZ ulU6mTEiO9 iAxLQMZnR0 LXRlc3Qt
a2V5iQBOBBARAgAOBQJEtAYrBA sDAQICGQEA CgkQ7PgWEn FENBZ0NACg l4QXiLg5
3ziImum1iWQDTjSFBA8AoI9A3r EbeeaqUAHW QMn7x2wtof PiuQMNBES0 Bi8QDADM
HXdXJDhK4sTw6I4TZ5dOkhNh9t vrJQ4X/faY 98h8ebByHT h1+/bBc8SD ESYrQ2DD
4+jWCv2hKCYLrqmus2UPogBTAa B81qujEh76 DyrOH3SET8 rzF/OkQOnX 0ne2Qi0C
NsEmy2henXyYCQqNfi3t5F159d SST5sYjvwq p0t8MvZCV7 cIfwgXcqK6 1qlC8wXo
+VMROU+28W65Szgg2gGnVqMU6Y 9AVfPQB8bL Q6mUrfdMZI ZJ+AyDvWXp F9Sh01D4
9Vlf3HZSTz09jdvOmeFXklnN/b iudE/F/Ha8 g8VHMGHOfM lm/xX5u/2R XscBqtNb
no2gpXI61Brwv0YAWCvl9Ij9WE 5J280gtJ3k kQc2azNsOA 1FHQ98iLMc fFstjvbz
ySPAQ/ClWxiNjrtVjLhdONM0/X wXV0OjHRhs 3jMhLLUq/z zhsSlAGBGN fISnCnLW
hsQDGcgHKXrKlQzZlp+r0ApQmw JG0wg9ZqRd QZ+cfL2JSy IZJrqrol7D VelMMm8A
AgIL/jQq8VcNbVMOJVW9ijKHVg /wbx6wzqYE OedqsbLjcX 0TNvrp2aL2 RDK4xq/E
oIERKZftsI2TvglcgNrw8NXnps 1hT5lP1oEj mRF8B57bm4 p4fScfaPEo dzCTsbX7
KFI+ie/XbApHrcFnQzfQFA0hqD FidATSxf6m WPPMUVSvDT aNbq1Ps88O LeSoF3kE
58hMm9x8xZJOnQeTe4gvX2uDz+ F6daxC7xBd 73axc2KS9m nBqj9Xw2qL m438TuKC
V7ioOXxzeSVioDNsnh+PLYhEBP FCgsjEqKu0 TXWDVkkzzx LO11Uq6VTY t/ve1cVz
mq2vLN3km1kZoumXHYROV9mg2Z r7Y6604r+O AVHxNgJz5X 6OB36bjQgp WDPuNWmk
uh1PrZAT6WB2LJDaSZk6y3EQfG WvnZ5Oqgqh IVl2HlyMGU 4E8C8iTkuC StpndMFw
ZchMKR7UbTswzI7m4t4RPLvpaF 8YxmAJy9Uz ZEK3Ycnq5o NsgicKqgM2 GVpky1GO
oAtMaIkARgQYEQIABgUCRLQGLw AKCRDs+BYS cUQ0FoObAK D1vGbfNCeu /CVvwsTr
9mz6nUmeTgCeNO9P7OkUuySN6D 2YTYbKvgIA Ees=
=+ksY
-----END PGP PUBLIC KEY BLOCK-----" );
my $kb = Crypt::OpenPGP::KeyBlock-> new;
$kb->add( ($ring->blocks)[0] );
my $cert = $kb->encrypting_key;
my $pgp = Crypt::OpenPGP->new( Compat => 'GnuPG' );
my $ct = $pgp->encrypt( Key => $cert, Data => $plaintext )
or die "ERROR: " . $pgp->errstr;
print $ct;
This concept test script looks like it should work (I had help from the module author, but I guess, I don't fully understand his comments). Does anyone have any other bright ideas?
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::OpenPGP;
use Crypt::OpenPGP::KeyBlock;
use Crypt::OpenPGP::KeyRing;
my $plaintext = qq^
Dummy report data
^;
my $ring = Crypt::OpenPGP::KeyRing->n
Version: PGP 6.5.1
mQGiBES0BisRBAD11RjxN2lk+2
Srd+T/dfWEqWu0LqBwgSK/P6a+
5IwFPP+2FZe1kFyY36PKooot+o
FrbO0cUrJrit/6NIyzDBCOMEAN
ewK6/bpLGa1LnYu7T7xO+CziYq
hrnLWgPgAV5d7wpR1VUQCugDDZ
fETgA/9dhSfdp4h4PIKYkgDvTG
ACzyrCkexY0zdGgFJ5mmrK/S5K
rAUnfvvcozjhqKpgwalGDsIZ+p
a2V5iQBOBBARAgAOBQJEtAYrBA
3ziImum1iWQDTjSFBA8AoI9A3r
HXdXJDhK4sTw6I4TZ5dOkhNh9t
4+jWCv2hKCYLrqmus2UPogBTAa
NsEmy2henXyYCQqNfi3t5F159d
+VMROU+28W65Szgg2gGnVqMU6Y
9Vlf3HZSTz09jdvOmeFXklnN/b
no2gpXI61Brwv0YAWCvl9Ij9WE
ySPAQ/ClWxiNjrtVjLhdONM0/X
hsQDGcgHKXrKlQzZlp+r0ApQmw
AgIL/jQq8VcNbVMOJVW9ijKHVg
oIERKZftsI2TvglcgNrw8NXnps
KFI+ie/XbApHrcFnQzfQFA0hqD
58hMm9x8xZJOnQeTe4gvX2uDz+
V7ioOXxzeSVioDNsnh+PLYhEBP
mq2vLN3km1kZoumXHYROV9mg2Z
uh1PrZAT6WB2LJDaSZk6y3EQfG
ZchMKR7UbTswzI7m4t4RPLvpaF
oAtMaIkARgQYEQIABgUCRLQGLw
9mz6nUmeTgCeNO9P7OkUuySN6D
=+ksY
-----END PGP PUBLIC KEY BLOCK-----" );
my $kb = Crypt::OpenPGP::KeyBlock->
$kb->add( ($ring->blocks)[0] );
my $cert = $kb->encrypting_key;
my $pgp = Crypt::OpenPGP->new( Compat => 'GnuPG' );
my $ct = $pgp->encrypt( Key => $cert, Data => $plaintext )
or die "ERROR: " . $pgp->errstr;
print $ct;
I don't have the Crypt::OpenPGP module installed, so I can't run your code. What problems are there with the code you posted? Do you get errors?
ASKER
Unfortunately it doesn't help too much.
<code>
[builder@engproto crypt]$ perl crypt
ERROR: Need something to encrypt with
[builder@engproto crypt]$
</code>
<code>
[builder@engproto crypt]$ perl crypt
ERROR: Need something to encrypt with
[builder@engproto crypt]$
</code>
ASKER
Sorry about the "<code>" tags - wrong website ;-)
ASKER
This script works thanks to a lot of help from Benjamin Trott.
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::OpenPGP;
my $ring = Crypt::OpenPGP::KeyRing->n ew(
Data => qq^-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP 6.5.1
mQGiBES0BisRBAD11RjxN2lk+2 eKsVjfJSrj krbhoIRS1e duMb1Q1dzb qNAG1L/j
Srd+T/dfWEqWu0LqBwgSK/P6a+ cdnENSFj8L QOWD8zbrXb ok2gFoIkF/ L1O/7znC
5IwFPP+2FZe1kFyY36PKooot+o kYG/G16HNA uU3CzxBYCu qkxqEDeU1k dwCg/1jI
FrbO0cUrJrit/6NIyzDBCOMEAN gBXtHtdrdt mwE35HcFO2 sdywvvIOE+ L1Wouwku
ewK6/bpLGa1LnYu7T7xO+CziYq jp9SIGiSPm ZjQQPXfBrE tCvLMCTC/m dylOP6Sh
hrnLWgPgAV5d7wpR1VUQCugDDZ 9s/ExQuQEe D3dHt2dBBc o5/+lvdr/c XE06J3x2
fETgA/9dhSfdp4h4PIKYkgDvTG IpFp6JeKTV d5PnTu80JO 9JkkSWtPry ukDT/smq
ACzyrCkexY0zdGgFJ5mmrK/S5K NyrUOw46no Cj07k6/l4d l5CCM0K670 JpoYijL5
rAUnfvvcozjhqKpgwalGDsIZ+p DNTL2BjREZ ulU6mTEiO9 iAxLQMZnR0 LXRlc3Qt
a2V5iQBOBBARAgAOBQJEtAYrBA sDAQICGQEA CgkQ7PgWEn FENBZ0NACg l4QXiLg5
3ziImum1iWQDTjSFBA8AoI9A3r EbeeaqUAHW QMn7x2wtof PiuQMNBES0 Bi8QDADM
HXdXJDhK4sTw6I4TZ5dOkhNh9t vrJQ4X/faY 98h8ebByHT h1+/bBc8SD ESYrQ2DD
4+jWCv2hKCYLrqmus2UPogBTAa B81qujEh76 DyrOH3SET8 rzF/OkQOnX 0ne2Qi0C
NsEmy2henXyYCQqNfi3t5F159d SST5sYjvwq p0t8MvZCV7 cIfwgXcqK6 1qlC8wXo
+VMROU+28W65Szgg2gGnVqMU6Y 9AVfPQB8bL Q6mUrfdMZI ZJ+AyDvWXp F9Sh01D4
9Vlf3HZSTz09jdvOmeFXklnN/b iudE/F/Ha8 g8VHMGHOfM lm/xX5u/2R XscBqtNb
no2gpXI61Brwv0YAWCvl9Ij9WE 5J280gtJ3k kQc2azNsOA 1FHQ98iLMc fFstjvbz
ySPAQ/ClWxiNjrtVjLhdONM0/X wXV0OjHRhs 3jMhLLUq/z zhsSlAGBGN fISnCnLW
hsQDGcgHKXrKlQzZlp+r0ApQmw JG0wg9ZqRd QZ+cfL2JSy IZJrqrol7D VelMMm8A
AgIL/jQq8VcNbVMOJVW9ijKHVg /wbx6wzqYE OedqsbLjcX 0TNvrp2aL2 RDK4xq/E
oIERKZftsI2TvglcgNrw8NXnps 1hT5lP1oEj mRF8B57bm4 p4fScfaPEo dzCTsbX7
KFI+ie/XbApHrcFnQzfQFA0hqD FidATSxf6m WPPMUVSvDT aNbq1Ps88O LeSoF3kE
58hMm9x8xZJOnQeTe4gvX2uDz+ F6daxC7xBd 73axc2KS9m nBqj9Xw2qL m438TuKC
V7ioOXxzeSVioDNsnh+PLYhEBP FCgsjEqKu0 TXWDVkkzzx LO11Uq6VTY t/ve1cVz
mq2vLN3km1kZoumXHYROV9mg2Z r7Y6604r+O AVHxNgJz5X 6OB36bjQgp WDPuNWmk
uh1PrZAT6WB2LJDaSZk6y3EQfG WvnZ5Oqgqh IVl2HlyMGU 4E8C8iTkuC StpndMFw
ZchMKR7UbTswzI7m4t4RPLvpaF 8YxmAJy9Uz ZEK3Ycnq5o NsgicKqgM2 GVpky1GO
oAtMaIkARgQYEQIABgUCRLQGLw AKCRDs+BYS cUQ0FoObAK D1vGbfNCeu /CVvwsTr
9mz6nUmeTgCeNO9P7OkUuySN6D 2YTYbKvgIA Ees=
=+ksY
-----END PGP PUBLIC KEY BLOCK-----^ );
my $datafile = "TESTING_MerlintoMerlin-op 071106_QAO PT1.csv";
open( INFILE, "< $datafile" )
or die "Could not open csv file - $!";
my $plaintext = <INFILE>;
close INFILE;
$ring->read;
my $kb = $ring->find_keyblock_by_in dex(0);
my $cert = $kb->encrypting_key;
my $pgp = Crypt::OpenPGP->new( Compat => 'GnuPG' );
my $ct = $pgp->encrypt( Key => $cert, Data => $plaintext )
or die "ERROR: " . $pgp->errstr;
open( OUTFILE, "> $datafile.pgp" )
or die "Could not open file for encrypted data - $!";
print OUTFILE $ct;
close OUTFILE;
#!/usr/bin/perl
use strict;
use warnings;
use Crypt::OpenPGP;
my $ring = Crypt::OpenPGP::KeyRing->n
Data => qq^-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: PGP 6.5.1
mQGiBES0BisRBAD11RjxN2lk+2
Srd+T/dfWEqWu0LqBwgSK/P6a+
5IwFPP+2FZe1kFyY36PKooot+o
FrbO0cUrJrit/6NIyzDBCOMEAN
ewK6/bpLGa1LnYu7T7xO+CziYq
hrnLWgPgAV5d7wpR1VUQCugDDZ
fETgA/9dhSfdp4h4PIKYkgDvTG
ACzyrCkexY0zdGgFJ5mmrK/S5K
rAUnfvvcozjhqKpgwalGDsIZ+p
a2V5iQBOBBARAgAOBQJEtAYrBA
3ziImum1iWQDTjSFBA8AoI9A3r
HXdXJDhK4sTw6I4TZ5dOkhNh9t
4+jWCv2hKCYLrqmus2UPogBTAa
NsEmy2henXyYCQqNfi3t5F159d
+VMROU+28W65Szgg2gGnVqMU6Y
9Vlf3HZSTz09jdvOmeFXklnN/b
no2gpXI61Brwv0YAWCvl9Ij9WE
ySPAQ/ClWxiNjrtVjLhdONM0/X
hsQDGcgHKXrKlQzZlp+r0ApQmw
AgIL/jQq8VcNbVMOJVW9ijKHVg
oIERKZftsI2TvglcgNrw8NXnps
KFI+ie/XbApHrcFnQzfQFA0hqD
58hMm9x8xZJOnQeTe4gvX2uDz+
V7ioOXxzeSVioDNsnh+PLYhEBP
mq2vLN3km1kZoumXHYROV9mg2Z
uh1PrZAT6WB2LJDaSZk6y3EQfG
ZchMKR7UbTswzI7m4t4RPLvpaF
oAtMaIkARgQYEQIABgUCRLQGLw
9mz6nUmeTgCeNO9P7OkUuySN6D
=+ksY
-----END PGP PUBLIC KEY BLOCK-----^ );
my $datafile = "TESTING_MerlintoMerlin-op
open( INFILE, "< $datafile" )
or die "Could not open csv file - $!";
my $plaintext = <INFILE>;
close INFILE;
$ring->read;
my $kb = $ring->find_keyblock_by_in
my $cert = $kb->encrypting_key;
my $pgp = Crypt::OpenPGP->new( Compat => 'GnuPG' );
my $ct = $pgp->encrypt( Key => $cert, Data => $plaintext )
or die "ERROR: " . $pgp->errstr;
open( OUTFILE, "> $datafile.pgp" )
or die "Could not open file for encrypted data - $!";
print OUTFILE $ct;
close OUTFILE;
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.