Edward now reports: clear are sigs not supported dev
authorAndrew Engelbrecht <sudoman@ninthfloor.org>
Tue, 11 Oct 2016 20:03:20 +0000 (16:03 -0400)
committerAndrew Engelbrecht <sudoman@ninthfloor.org>
Tue, 11 Oct 2016 20:03:20 +0000 (16:03 -0400)
Previously, if a user tried sending edward a message using clear
signatures, edward would reply that the signature could not be
validataed. This is because supporting clear signatures is quite hard,
partially due to mangling that an MTA might perform on white space in a
clear signed message, along with other issues.

Now edward lets the user know that it does not support clear text
messages. This should prevent user confusion under this scenario.
Currently this message is shared in english, even if the rest of the
response is in another language. Once translations are added, this issue
should be mitigated.

14 files changed:
edward
lang/de.py
lang/el.py
lang/en.py
lang/es.py
lang/fr.py
lang/it.py
lang/ja.py
lang/pt_br.py
lang/ro.py
lang/ru.py
lang/tr.py
tests/flatten-1.out
tests/flatten-2.out

diff --git a/edward b/edward
index fc099d82ccfa605f3d2f49e9746b8d99a666aecd..d06788757d925110eb20f5cf06ccb85b8209ba2b 100755 (executable)
--- a/edward
+++ b/edward
@@ -62,6 +62,7 @@ class TxtType (enum.Enum):
     pubkey      = 2
     detachedsig = 3
     signature   = 4
+    clearsig    = 5
 
 
 match_pairs =  [(TxtType.message,
@@ -69,7 +70,9 @@ match_pairs =  [(TxtType.message,
                 (TxtType.pubkey,
                 '-----BEGIN PGP PUBLIC KEY BLOCK-----.*?-----END PGP PUBLIC KEY BLOCK-----'),
                 (TxtType.detachedsig,
-                '-----BEGIN PGP SIGNATURE-----.*?-----END PGP SIGNATURE-----')]
+                '-----BEGIN PGP SIGNATURE-----.*?-----END PGP SIGNATURE-----'),
+                (TxtType.clearsig,
+                '-----BEGIN PGP SIGNED MESSAGE-----')]
 
 """This list of tuples matches query names with re.search() queries used
 to find GPG data for edward to process."""
@@ -232,6 +235,7 @@ class ReplyInfo (object):
     sig_failure             = False
     sigkey_missing          = False
     key_cannot_encrypt      = False
+    using_clearsig          = False
 
     have_reply_key          = False
 
@@ -610,6 +614,10 @@ def gpg_on_payloads (eddymsg_obj, gpgme_ctx, prev_parts=[]):
             # don't transform the plaintext.
             pass
 
+        if piece.piece_type == TxtType.clearsig:
+            # edward doesn't handle clear sigs
+            pass
+
         elif piece.piece_type == TxtType.message:
             piece.gpg_data = GPGData()
 
@@ -728,6 +736,9 @@ def prepare_for_reply_pieces (eddymsg_obj, replyinfo_obj):
             or (piece.piece_type == TxtType.signature):
                     prepare_for_reply_sig(piece, replyinfo_obj)
 
+        elif (piece.piece_type == TxtType.clearsig):
+            prepare_for_reply_clearsig(piece, replyinfo_obj)
+
 
 def prepare_for_reply_message (piece, replyinfo_obj):
     """Helper function for prepare_for_reply()
@@ -847,6 +858,26 @@ def prepare_for_reply_sig (piece, replyinfo_obj):
         prepare_for_reply(piece.gpg_data.plainobj, replyinfo_obj)
 
 
+def prepare_for_reply_clearsig (piece, replyinfo_obj):
+    """Helper function for prepare_for_reply(). Marks clear sig use status.
+
+    Marks replyinfo_obj with clear signature use status.
+
+    Args:
+        piece: a PayloadPiece object
+        replyinfo_obj: a ReplyInfo object
+
+    Pre:
+        piece.piece_type should be set to TxtType.clearsig
+
+    Post:
+        replyinfo_obj has its fields updated with the using_clearsig property
+        set to True
+    """
+
+    replyinfo_obj.using_clearsig = True
+
+
 def flatten_decrypted_payloads (eddymsg_obj, replyinfo_obj, get_signed_part):
     """For creating a string representation of a signed, encrypted part.
 
@@ -983,7 +1014,14 @@ def write_reply (replyinfo_obj):
         reply_plain += "\n\n"
 
 
-    if replyinfo_obj.sig_success == True:
+    if replyinfo_obj.using_clearsig == True:
+        debug('clear signature')
+        reply_plain += replyinfo_obj.replies['sig_failure']
+        reply_plain += "\n\n"
+        reply_plain += replyinfo_obj.replies['clearsig']
+        reply_plain += "\n\n"
+
+    elif replyinfo_obj.sig_success == True:
         debug('signature success')
         reply_plain += replyinfo_obj.replies['sig_success']
         reply_plain += "\n\n"
@@ -1013,6 +1051,7 @@ def write_reply (replyinfo_obj):
 
     if (replyinfo_obj.decrypt_success == True) \
             and (replyinfo_obj.sig_success == True) \
+            and (replyinfo_obj.using_clearsig == False) \
             and (replyinfo_obj.have_reply_key == True):
         debug('message quoted')
         reply_plain += replyinfo_obj.replies['quote_follows']
index 1798c3b64ddcbde0493cfc63d676454b5bf530e5..e0f2fc483f548a54cf68eebd028337a7d2dba782 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Tut mir leid, Ich konnte deinen öffentlicher Schlüssel nicht finden. Hast du daran gedacht ihn an die E-Mail anzuhängen?",
     'sig_failure' : 'Deine Signatur konnte nicht verifiziert werden.',
     'sig_success' : 'Deine Signatur wurde erfolgreich verifiziert.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, der freundliche GnuPG Roboter\nnDie Free Software Foundation hat mich erstellt. Kannst du etwas spenden, um ihre Arbeit zu unterstützung? | https://www.fsf.org/donate',
     'space' : " "
 }
index e87b993ffef900d0ac5aca9f2f31339428807e42..b98ba37eabc0cb7038213af7c4e24a69b0c28433 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Δυστυχώς δε μπόρεσα να βρώ το δημόσιο κλειδί σου. Μήπως ξέχασες να το επισυνάψεις;",
     'sig_failure' : 'Δε μπόρεσα να επαληθεύσω την υπογραφή σου.',
     'sig_success' : 'nΕπαλήθευσα την υπογραφή σου.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, το φιλικό ρομπότ του GnuPG\n\nΜε δημιούργησε η Free Software Foundation. Μπορείς να υποστηρίξεις το έργο τους με μια δωρεά; | https://www.fsf.org/donate',
     'space' : " "
 }
index f9455db1dd8749e056668b6739f65a9d7fc99ef1..8f2c1f2b3bd0cff563e2e3645281d072b1b71353 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "I'm sorry, I was not able to find your public key. Did you remember to attach it?",
     'sig_failure' : 'Your signature could not be verified.',
     'sig_success' : 'Your signature was verified.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, the friendly GnuPG bot\nThe Free Software Foundation created me.\n\nCan you donate to support their work?\nhttps://www.fsf.org/donate',
     'space' : " "
 }
index 4dc6512c43187f20f3736ecad8e2a66ac07c259c..c615704bfe25f800e7c85c1c05cc3751282ac6a4 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Lo siento, no he podido encontrar tu clave pública. ¿Te acordaste de adjuntarla?",
     'sig_failure' : 'No he podido verificar tu firma criptográfica.',
     'sig_success' : 'He verificado con éxito tu firma criptográfica.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, el simpático robot GnuPG\n\nMe creó la Free Software Foundation. ¿Puedes hacer una donación para apoyar su trabajo? | https://www.fsf.org/donate',
     'space' : " "
 }
index 788e546669ea7b8f44b9f65143ea939ef3dbe1e5..1f499f5f26171365c7b7349497c77523fb2c75c8 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Je n'ai pas pu trouver votre clef publique, désolé. Avez-vous oublié de la joindre ?",
     'sig_failure' : "Votre signature n'a pas pu être vérifiée.",
     'sig_success' : 'Votre signature a été vérifiée.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : "- Edward, le gentil robot de GnuPGn\nLa Free Software Foundation m'a créé. Pourriez-vous faire un don pour soutenir leur travail ? | https://www.fsf.org/donate",
     'space' : " "
 }
index 277168c322af06c73173c9f3925f50ee14592980..99a12b3d07b3e76fa9cea6dfa0dccf28eaa416d8 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Mi dispiace, non ho trovato la tua chiave pubblica. Ti sei ricordato di allegarla?",
     'sig_failure' : 'La tua firma non può essere verificata.',
     'sig_success' : 'La tua firma è stata verificata.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : "- Edward, l'amichevole bot GnuPG\n\nLa Free Software Foundation mi ha creato. Potresti fare una donazione per supportare il loro lavoro? | https://www.fsf.org/donate",
     'space' : " "
 }
index caf6d4a6e47c4724c16cff3487fbb330c7919cef..7f5f597b5f7cb56d99235d55b0c2939202de354c 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "ごめんなさい、あなたの公開鍵が見つからないのです。公開鍵を添付したメールを前に送ってくださいましたか?",
     'sig_failure' : 'あなたの署名を認証できませんでした。',
     'sig_success' : 'あなたの署名を確認できました。',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- GnuPGボットのEdward\n\nFree Software Foundationが私を制作しました。 Free Software Foundationに寄付しませんか。| https://www.fsf.org/donate',
     'space' : ""
 }
index 5c700a5b0adac79508095400558f27ea8645deef..42c3335512a026e5132676bc88ff2f6ca98be9a4 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Perdão, não consegui encontrar sua chave pública. Você se lembrou de anexá-la?",
     'sig_failure' : 'Sua assinatura não pôde ser verificada.',
     'sig_success' : 'Sua assinatura foi verificada.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, o amigo robô de GnuPG\n\nA Free Software Foundation me criou. Você pode fazer uma doação para apoiar o trabalho dela? | https://www.fsf.org/donate',
     'space' : " "
 }
index 4eb67af7176ed3702a62229c12ec3082af21d77b..0f9b250d69a0b4a934b96ca88b48121a2ad253de 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Îmi pare rău, dar nu am putut găsi cheia dumneavoastră publică. V-ați amintit să o atașați?",
     'sig_failure' : 'Semnătura dumneavoastră nu a putut fi verificată.',
     'sig_success' : 'Semnătura dumneavoastră a fost verificată.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, robotul GnuPG cel prietenos.\n\nFundația pentru Software Liber m-a creat. Puteți dona ca să le susțineți munca? | https://www.fsf.org/donate',
     'space' : " "
 }
index acae0b3449d077c2cc6a6564b5cea81f6e7663bd..63773b0c0b9026d9d0648af2a81b3d0dba4b9014 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Прошу прощения, я не смог найти ваш открытый ключ. Вы не забыли вложить его в письмо?",
     'sig_failure' : 'Мне не удалось проверить вашу подпись.',
     'sig_success' : 'Ваша подпись была успешно проверена.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Эдвард, дружелюбный GnuPG бот\nЯ был создан Фондом свободного программного обеспечения. Вы можете сделать пожертвование в поддержку их работы? | https://www.fsf.org/donate',
     'space' : " "
 }
index ce2661279a2cf169b85e863d4f3ab1bfc58bc33f..4ee9d8978bb10510ce31e2253d19863763808d74 100644 (file)
@@ -29,6 +29,7 @@ replies = {
     'no_public_key' : "Özür dilerim, açık anahtarınızı bulamadım. E-postaya eklemeyi unutmadınız, değil mi?",
     'sig_failure' : 'İmzanız doğrulanamadı.',
     'sig_success' : 'İmzanız doğrulandı.',
+    'clearsig' : 'Sorry, I don\'t know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.',
     'signature' : '- Edward, arkadaş canlısı GnuPG botu\n\nÖzgür Yazılım Vakfı tarafından yaratıldım. Çalışmalarını desteklemek için bağışta bulunur musunuz? | https://www.fsf.org/donate',
     'space' : " "
 }
index 75759f9f2c7e0f860cb56eee353b53cf4d6c1df1..4e3147ea4904f1b16a67d9a90acea55cd07daeb0 100644 (file)
@@ -1,5 +1,7 @@
 Your signature could not be verified.
 
+Sorry, I don't know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.
+
 - Edward, the friendly GnuPG bot
 The Free Software Foundation created me.
 
index 795aac07c292c7e735e8c7b8deec959b471e8331..3e19d51b280940278e52043cb1d00deebe124d2a 100644 (file)
@@ -2,6 +2,8 @@ I received your message and decrypted it.
 
 Your signature could not be verified.
 
+Sorry, I don't know how to verify clear signatures. I do understand PGP/MIME, which Enigmail produces by default.
+
 - Edward, the friendly GnuPG bot
 The Free Software Foundation created me.