Revision 960c259e
Added by Marc Dequènes over 15 years ago
- ID 960c259e23a88e40cbcfd210fbc8cc052eb7bb5a
lib/tmail_extra.rb | ||
---|---|---|
module TMail
|
||
class Mail
|
||
def is_pgp_signed?
|
||
content_type == "multipart/signed" and parts.size == 2 and parts[1].content_type == "application/pgp-signature"
|
||
content_type == "multipart/signed" and parts.size == 2 and
|
||
parts[1].content_type == "application/pgp-signature"
|
||
end
|
||
|
||
def pgp_signature
|
||
... | ... | |
sig = pgp_signature()
|
||
|
||
sig_check = nil
|
||
GPGME::verify(sig, content) do |signature|
|
||
GPGME.verify(sig, content) do |signature|
|
||
sig_check = signature
|
||
end
|
||
|
||
sig_check
|
||
end
|
||
|
||
def is_pgp_encrypted?
|
||
content_type == "multipart/encrypted" and parts.size == 2 and
|
||
parts[0].content_type == "application/pgp-encrypted" and
|
||
parts[1].content_type == "application/octet-stream"
|
||
end
|
||
|
||
def pgp_crypt_info
|
||
return nil unless is_pgp_encrypted?
|
||
a = parts[0].body.split("\n").collect{|l| l.chomp.split(": ") if l =~ /: / }.compact.flatten
|
||
Hash[*a]
|
||
end
|
||
|
||
def pgp_encrypted_part
|
||
return nil unless is_pgp_encrypted?
|
||
parts[1].body
|
||
end
|
||
|
||
def decrypt(&passphrase_callback)
|
||
return nil unless is_pgp_encrypted?
|
||
protocol_version = pgp_crypt_info()["Version"].to_i
|
||
raise NotImplementedError, "pgp-encrypted protocol version #{protocol_version} is not implemented" unless protocol_version == 1
|
||
|
||
encrypted_data = pgp_encrypted_part()
|
||
passphrase_callback_wrapper = Proc.new do |hook, uid_hint, passphrase_info, prev_was_bad, fd|
|
||
# sending key
|
||
io = IO.for_fd(fd, 'w')
|
||
io.puts hook.call(uid_hint, passphrase_info, prev_was_bad)
|
||
io.flush
|
||
end
|
||
GPGME.decrypt(encrypted_data, {:passphrase_callback => passphrase_callback_wrapper, :passphrase_callback_value => passphrase_callback, :textmode => true})
|
||
end
|
||
|
||
protected
|
||
|
||
def raw
|
Also available in: Unified diff
[evol] handle incoming encrypted messages