http://qs321.pair.com?node_id=325866

hv has asked for the wisdom of the Perl Monks concerning the following question:

I'm trying to PGP-encrypt data, by importing a standard text block:

-----BEGIN PGP PUBLIC KEY BLOCK-----
data ...
-----END PGP PUBLIC KEY BLOCK-----
and then encrypting with this example code:
#!/usr/bin/perl -w use Crypt::OpenPGP; use Crypt::OpenPGP::KeyRing; my($keyfile, $email) = @ARGV; my $ring = Crypt::OpenPGP::KeyRing->new(Filename => $keyfile); my $pgp = Crypt::OpenPGP->new(PubRing => $ring); my $crypt = $pgp->encrypt( Data => 'squeamish ossifrage', Recipients => [ $email ], Armour => 1, Cipher => 'CAST5', ); defined($crypt) ? print $crypt : die $pgp->errstr;

This works fine for encrypting with my colleague's key, but only after adding the Cipher => 'CAST5' - without that, his decrypt function complains of a 'bad session key'.

What I don't understand is how I can determine the appropriate cipher given the public key: I don't see anything in the Crypt::OpenPGP interface that would allow me to ask that from the KeyRing or KeyBlock objects once I've determined them.

I suspect I'm missing a fundamental concept somewhere; clues gratefully received.

Hugo