From 07f12934700cd8d85132d75b307019625cd17076 Mon Sep 17 00:00:00 2001 From: Hamish Downer Date: Tue, 16 Nov 2010 20:58:01 +0000 Subject: [PATCH 3/4] improved signature messages --- lib/sup/crypto.rb | 31 ++++++++++++++++++++++++++----- 1 files changed, 26 insertions(+), 5 deletions(-) diff --git a/lib/sup/crypto.rb b/lib/sup/crypto.rb index 83176d9..88228ff 100644 --- a/lib/sup/crypto.rb +++ b/lib/sup/crypto.rb @@ -242,8 +242,7 @@ private # remove the hex key_id and info in () def simplify_sig_line sig_line - sig_line = sig_line.sub(/from [0-9A-F]{16} /, "from ") - sig_line.sub(/\(.+\) error + rescue EOFError + from_key = nil first_sig = "No public key available for #{signature.fingerprint}" end time_line = "Signature made " + signature.timestamp.strftime("%a %d %b %Y %H:%M:%S %Z") + - " using key ID " + signature.fingerprint[-8..-1] + " using " + key_type(from_key, signature.fingerprint) + + "key ID " + signature.fingerprint[-8..-1] output_lines = [time_line, first_sig] if from_key + # first list all the uids if from_key.uids.length > 1 aka_list = from_key.uids[1..-1] aka_list.each { |aka| output_lines << ' aka "' + aka.uid + '"' } end + + # now we want to look at the trust of that key + if signature.validity != GPGME::GPGME_VALIDITY_FULL && signature.validity != GPGME::GPGME_VALIDITY_MARGINAL + output_lines << "WARNING: This key is not certified with a trusted signature!" + output_lines << "There is no indication that the signature belongs to the owner" + end + end + output_lines + end + + def key_type key, fpr + return "" if key.nil? + subkey = key.subkeys.find {|subkey| subkey.fpr == fpr || subkey.keyid == fpr } + return "" if subkey.nil? + + case subkey.pubkey_algo + when GPGME::PK_RSA then "RSA " + when GPGME::PK_DSA then "DSA " + when GPGME::PK_ELG then "ElGamel " + when GPGME::PK_ELG_E then "ElGamel " end - output_lines.flatten! end # logic is: -- 1.7.1