NAME

App::Eduard - GnuPG email sign/encrypt testing bot

SYNOPSIS

use App::Eduard;
my ($status, %params) = process_message '/path/to/message';
if ($status eq 'signencrypt') {
  say 'This message is encrypted and signed with key ', $params{keyid}, ' from ', $params{email};
  say 'Its contents are: ', $params{plaintext};
} elsif ($status eq 'encrypt') {
  say 'This message is encrypted but not signed';
  say 'Its contents are: ', $params{plaintext};
} elsif ($status eq 'encrypt_error') {
  say 'This message is encrypted but I was unable to decrypt it. GnuPG output: ', $params{message};
} elsif ($status eq 'sign') {
  say 'This message is signed with key ', $params{keyid}, ' from ', $params{email};
} elsif ($status eq 'sign_error') {
  say 'This message is signed but I was unable to verify the signature. GnuPG output: ', $params{message};
} elsif ($status eq 'plain') {
  say 'This message is neither signed nor encrypted';
} elsif ($status eq 'error') {
  say 'There was an error processing the message: ', $params{message};
}

DESCRIPTION

Eduard is Ceata's reimplementation of the Edward reply bot referenced in https://emailselfdefense.fsf.org/.

EXPORTS

None by default.

import_keys($entity, $gpg)

Scan a message for PGP public keys, and import them. $entity is a MIME::Entity to scan, $gpg is a Mail::GnuPG instance.

Returns a list of fingerprints of keys found.

process_message($message)

Analyze a message, looking for PGP signatures and encryption. $message can be:

A filehandle reference, e.g. \*STDIN.
A reference to a scalar which holds the message contents.
A scalar which represents a path to a message.
A MIME::Entity object created with decode_bodies(0)

The function returns a status followed by a hash. Possible results:

plain

The message is neither signed nor encrypted.

sign_error, message => $message

The message is signed but the signature could not be verified. GnuPG output is $message.

sign, keyid => $keyid, email => $email, message => $message

The message is signed with key $keyid from $email. GnuPG output is $message.

encrypt_error, message => $message

The message is encrypted and unable to be decrypted. GnuPG output is $message.

encrypt, plaintext => $plaintext, decrypted => $decrypted, message => $message

The message is encrypted and unsigned. $plaintext is the decrypted message as plain text, while $decrypted is a MIME::Entity representing the decrypted message. GnuPG output is $message.

signencrypt, plaintext => $plaintext, decrypted => $decrypted, keyid => $keyid, email => $email, message => $message

The message is encrypted and signed with key $keyid from $email. $plaintext is the decrypted message as plain text, while $decrypted is a MIME::Entity representing the decrypted message. GnuPG output is $message.

error, message => $message

There was an error while processing the message. The error can be found in $message.

ENVIRONMENT

This module is configured via the %ENV hash. See the eduard(1) manpage for more information.

SEE ALSO

eduard(1), http://ceata.org/proiecte/eduard

AUTHOR

Marius Gavrilescu, <marius@ceata.org>

COPYRIGHT AND LICENSE

Copyright (C) 2014 by Fundația Ceata

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.18.2 or, at your option, any later version of Perl 5 you may have available.