From b4c116d5bbd8ca3ea5103fcc664b5b9028b9aee6 Mon Sep 17 00:00:00 2001 From: Andrew Engelbrecht Date: Sun, 9 Aug 2015 17:32:36 -0400 Subject: [PATCH] changed message generation logic; some refactoring now edward remains silent about not receiving a public key, unless we are not given a key and need one for verifying a signature. some refactoring was required. edward now complains to the user about lack of of encryption and signatures in received emails. i also changed the handling of newlines in email responses. --- edward | 166 +++++++++++++++++++++------------------- lang/an.py | 2 +- lang/de.py | 2 +- lang/el.py | 2 +- lang/en.py | 2 +- lang/fr.py | 2 +- lang/ja.py | 2 +- lang/pt_br.py | 2 +- lang/ro.py | 2 +- lang/ru.py | 2 +- lang/tr.py | 2 +- tests/flatten-1.out | 4 +- tests/flatten-2.out | 4 - tests/flatten-3.out | 2 +- tests/flatten-4.out | 4 +- tests/flatten-5.out | 2 - tests/flatten-6.out | 4 +- tests/flatten-7.out | 4 +- tests/flatten-8.out | 4 +- tests/gpg-flatten-3.out | 2 +- tests/gpg-flatten-5.out | 2 +- 21 files changed, 107 insertions(+), 111 deletions(-) diff --git a/edward b/edward index 6bb1f96..9a4b3f6 100755 --- a/edward +++ b/edward @@ -146,7 +146,8 @@ class GPGData (object): 'sigs' is a list of fingerprints of keys used to sign the data in plainobj. - 'sig_failure' is a boolean noting whether any signatures failed to verify. + 'sigkey_missing' is set to True if edward doesn't have the key it needs to + verify the signature on a block of text. 'keys' is a list of fingerprints of keys obtained in public key blocks. """ @@ -155,7 +156,7 @@ class GPGData (object): plainobj = None sigs = [] - sig_failure = False + sigkey_missing = False keys = [] @@ -185,23 +186,20 @@ class ReplyInfo (object): part. This is to avoid making edward a service for decrypting other people's messages to edward. - 'success_decrypt' is set to True if edward could decrypt part of the + 'decrypt_success' is set to True if edward could decrypt part of the message. - 'failed_decrypt' is set to True if edward failed to decrypt part of the - message. - - 'publick_key_received' is set to True if edward successfully imported a - public key. - - 'no_public_key' is set to True if edward doesn't have a key to encrypt to - when replying to the user. - 'sig_success' is set to True if edward could to some extent verify the signature of a signed part of the message to edward. - 'sig_failure' is set to True if edward failed to some extent verify the - signature of a signed part of the message to edward. + 'pubkey_success' is set to True if edward successfully imported a public + key. + + 'sigkey_missing' is set to True if edward doesn't have the public key + needed for signature verification. + + 'have_repy_key' is set to True if edward has a public key to encrypt its + reply to. """ replies = None @@ -211,12 +209,12 @@ class ReplyInfo (object): encrypt_to_key = None msg_to_quote = "" - success_decrypt = False - failed_decrypt = False - public_key_received = False - no_public_key = False + decrypt_success = False sig_success = False - sig_failure = False + pubkey_success = False + + sigkey_missing = False + have_reply_key = False def main (): @@ -586,25 +584,27 @@ def gpg_on_payloads (eddymsg_obj, gpgme_ctx, prev_parts=[]): pass elif piece.piece_type == TxtType.message: - (plaintext, sigs, sig_failure) = decrypt_block(piece.string, gpgme_ctx) + piece.gpg_data = GPGData() + + (plaintext, sigs, sigkey_missing) = decrypt_block(piece.string, gpgme_ctx) + + piece.gpg_data.sigkey_missing = sigkey_missing if plaintext: - piece.gpg_data = GPGData() piece.gpg_data.decrypted = True piece.gpg_data.sigs = sigs - piece.gpg_data.sig_failure = sig_failure # recurse! piece.gpg_data.plainobj = parse_pgp_mime(plaintext, gpgme_ctx) continue # if not encrypted, check to see if this is an armored signature. - (plaintext, sigs, sig_failure) = verify_sig_message(piece.string, gpgme_ctx) + (plaintext, sigs, sigkey_missing) = verify_sig_message(piece.string, gpgme_ctx) + + piece.gpg_data.sigkey_missing = sigkey_missing if plaintext: piece.piece_type = TxtType.signature - piece.gpg_data = GPGData() piece.gpg_data.sigs = sigs - piece.gpg_data.sig_failure = sig_failure # recurse! piece.gpg_data.plainobj = parse_pgp_mime(plaintext, gpgme_ctx) @@ -616,13 +616,15 @@ def gpg_on_payloads (eddymsg_obj, gpgme_ctx, prev_parts=[]): piece.gpg_data.keys = key_fps elif piece.piece_type == TxtType.detachedsig: + piece.gpg_data = GPGData() + for prev in prev_parts: - (sig_fps, sig_failure) = verify_detached_signature(piece.string, prev.payload_bytes, gpgme_ctx) + (sig_fps, sigkey_missing) = verify_detached_signature(piece.string, prev.payload_bytes, gpgme_ctx) + + piece.gpg_data.sigkey_missing = sigkey_missing if sig_fps != []: - piece.gpg_data = GPGData() piece.gpg_data.sigs = sig_fps - piece.gpg_data.sig_failure = sig_failure piece.gpg_data.plainobj = prev break @@ -706,7 +708,6 @@ def prepare_for_reply_message (piece, replyinfo_obj): piece: a PayloadPiece object. replyinfo_obj: object which gets updated with decryption status, etc. - Returns: Nothing @@ -714,15 +715,15 @@ def prepare_for_reply_message (piece, replyinfo_obj): the piece.payload_piece value should be TxtType.message. Post: - replyinfo_obj gets updated with decryption status, signing status and a - potential signing key. + replyinfo_obj gets updated with decryption status, signing status, a + potential signing key, and posession status of the public key for the + signature. """ - if piece.gpg_data == None: - replyinfo_obj.failed_decrypt = True + if piece.gpg_data == None or piece.gpg_data.plainobj == None: return - replyinfo_obj.success_decrypt = True + replyinfo_obj.decrypt_success = True # we already have a key (and a message) if replyinfo_obj.target_key != None: @@ -732,9 +733,10 @@ def prepare_for_reply_message (piece, replyinfo_obj): replyinfo_obj.target_key = piece.gpg_data.sigs[0] replyinfo_obj.sig_success = True get_signed_part = False + else: - if piece.gpg_data.sig_failure == True: - replyinfo_obj.sig_failure = True + if piece.gpg_data.sigkey_missing == True: + replyinfo_obj.sigkey_missing = True # only include a signed message in the reply. get_signed_part = True @@ -762,9 +764,9 @@ def prepare_for_reply_pubkey (piece, replyinfo_obj): """ if piece.gpg_data == None or piece.gpg_data.keys == []: - replyinfo_obj.no_public_key = True + pass else: - replyinfo_obj.public_key_received = True + replyinfo_obj.pubkey_success = True # prefer public key as a fallback for the encrypted reply replyinfo_obj.fallback_target_key = piece.gpg_data.keys[0] @@ -788,13 +790,13 @@ def prepare_for_reply_sig (piece, replyinfo_obj): """ if piece.gpg_data == None or piece.gpg_data.sigs == []: - replyinfo_obj.sig_failure = True + + if piece.gpg_data.sigkey_missing == True: + replyinfo_obj.sigkey_missing = True + else: replyinfo_obj.sig_success = True - if piece.gpg_data.sig_failure == True: - replyinfo_obj.sig_failure = True - if replyinfo_obj.fallback_target_key == None: replyinfo_obj.fallback_target_key = piece.gpg_data.sigs[0] @@ -842,7 +844,8 @@ def flatten_decrypted_payloads (eddymsg_obj, replyinfo_obj, get_signed_part): if (get_signed_part): if ((piece.piece_type == TxtType.detachedsig) \ or (piece.piece_type == TxtType.signature)) \ - and (piece.gpg_data != None): + and (piece.gpg_data != None) \ + and (piece.gpg_data.plainobj != None): flatten_decrypted_payloads(piece.gpg_data.plainobj, replyinfo_obj, False) replyinfo_obj.target_key = piece.gpg_data.sigs[0] break @@ -882,13 +885,12 @@ def get_key_from_fp (replyinfo_obj, gpgme_ctx): try: encrypt_to_key = gpgme_ctx.get_key(key) replyinfo_obj.encrypt_to_key = encrypt_to_key + replyinfo_obj.have_reply_key = True return except gpgme.GpgmeError: pass - replyinfo_obj.no_public_key = True - def write_reply (replyinfo_obj): """Write the reply email body about the GPG successes/failures. @@ -910,38 +912,38 @@ def write_reply (replyinfo_obj): reply_plain = "" - if replyinfo_obj.success_decrypt == True: + if replyinfo_obj.decrypt_success == True: reply_plain += replyinfo_obj.replies['success_decrypt'] + reply_plain += "\n\n" - if (replyinfo_obj.sig_success == True) and (replyinfo_obj.encrypt_to_key != None): + if (replyinfo_obj.sig_success == True) and (replyinfo_obj.have_reply_key == True): quoted_text = email_quote_text(replyinfo_obj.msg_to_quote) reply_plain += quoted_text + reply_plain += "\n\n" - elif replyinfo_obj.failed_decrypt == True: + else: reply_plain += replyinfo_obj.replies['failed_decrypt'] - + reply_plain += "\n\n" if replyinfo_obj.sig_success == True: - reply_plain += "\n\n" reply_plain += replyinfo_obj.replies['sig_success'] + reply_plain += "\n\n" else: - reply_plain += "\n\n" reply_plain += replyinfo_obj.replies['sig_failure'] + reply_plain += "\n\n" - - if replyinfo_obj.no_public_key == True: + if (replyinfo_obj.pubkey_success == True): + reply_plain += replyinfo_obj.replies['public_key_received'] reply_plain += "\n\n" - reply_plain += replyinfo_obj.replies['no_public_key'] - elif replyinfo_obj.public_key_received == True: + elif (replyinfo_obj.sigkey_missing == True): + reply_plain += replyinfo_obj.replies['no_public_key'] reply_plain += "\n\n" - reply_plain += replyinfo_obj.replies['public_key_received'] - reply_plain += "\n\n" reply_plain += replyinfo_obj.replies['signature'] - reply_plain += "\n" + reply_plain += "\n\n" return reply_plain @@ -995,9 +997,9 @@ def verify_sig_message (msg_block, gpgme_ctx): Returns: A tuple containing the plaintext of the signed part, the list of fingerprints of keys signing the data, and a boolean marking whether - there were any invalid signatures. If verification failed, perhaps - because the message was also encrypted, then empty results are - returned. + edward is missing all public keys for validating any of the signatures. + If verification failed, perhaps because the message was also encrypted, + then empty results are returned. """ block_b = io.BytesIO(msg_block.encode('ascii')) @@ -1006,19 +1008,22 @@ def verify_sig_message (msg_block, gpgme_ctx): try: sigs = gpgme_ctx.verify(block_b, None, plain_b) except gpgme.GpgmeError: - return ("",[],True) + return ("",[],False) plaintext = plain_b.getvalue().decode('utf-8') - sig_failure = False + sigkey_missing = False fingerprints = [] for sig in sigs: if (sig.summary == 0) or (sig.summary & gpgme.SIGSUM_VALID != 0) or (sig.summary & gpgme.SIGSUM_GREEN != 0): fingerprints += [sig.fpr] + sigkey_missing = False + break else: - sig_failure = True + if (sig.summary & gpgme.SIGSUM_KEY_MISSING != 0): + sigkey_missing = True - return (plaintext, fingerprints, sig_failure) + return (plaintext, fingerprints, sigkey_missing) def verify_detached_signature (detached_sig, plaintext_bytes, gpgme_ctx): @@ -1033,9 +1038,9 @@ def verify_detached_signature (detached_sig, plaintext_bytes, gpgme_ctx): Returns: A tuple containging a list of signing fingerprints if the signature - verification was sucessful, and a boolean noting whether there were any - failed signature validations. Otherwise, a tuple containing an empty - list and True are returned. + verification was sucessful, and a boolean marking whether edward is + missing all public keys for validating any of the signatures. + Otherwise, a tuple containing an empty list and True are returned. """ detached_sig_fp = io.BytesIO(detached_sig.encode('ascii')) @@ -1044,17 +1049,20 @@ def verify_detached_signature (detached_sig, plaintext_bytes, gpgme_ctx): try: result = gpgme_ctx.verify(detached_sig_fp, plaintext_fp, None) except gpgme.GpgmeError: - return ([],True) + return ([],False) - sig_failure = False + sigkey_missing = False sig_fingerprints = [] for res_ in result: if (res_.summary == 0) or (res_.summary & gpgme.SIGSUM_VALID != 0) or (res_.summary & gpgme.SIGSUM_GREEN != 0): sig_fingerprints += [res_.fpr] + sigkey_missing = False + break else: - sig_failure = True + if (res_.summary & gpgme.SIGSUM_KEY_MISSING != 0): + sigkey_missing = True - return (sig_fingerprints, sig_failure) + return (sig_fingerprints, sigkey_missing) def decrypt_block (msg_block, gpgme_ctx): @@ -1069,7 +1077,8 @@ def decrypt_block (msg_block, gpgme_ctx): Returns: A tuple containing plaintext, signatures (if the decryption and signature verification were successful, respectively), and a boolean - noting whether there were signatures that could not be validated. + marking whether edward is missing all public keys for validating any of + the signatures. """ block_b = io.BytesIO(msg_block.encode('ascii')) @@ -1078,19 +1087,22 @@ def decrypt_block (msg_block, gpgme_ctx): try: sigs = gpgme_ctx.decrypt_verify(block_b, plain_b) except gpgme.GpgmeError: - return ("",[],True) + return ("",[],False) plaintext = plain_b.getvalue().decode('utf-8') - sig_failure = False + sigkey_missing = False fingerprints = [] for sig in sigs: if (sig.summary == 0) or (sig.summary & gpgme.SIGSUM_VALID != 0) or (sig.summary & gpgme.SIGSUM_GREEN != 0): fingerprints += [sig.fpr] + sigkey_missing = False + break else: - sig_failure = True + if (sig.summary & gpgme.SIGSUM_KEY_MISSING != 0): + sigkey_missing = True - return (plaintext, fingerprints, sig_failure) + return (plaintext, fingerprints, sigkey_missing) def email_to_from_subject (email_text): diff --git a/lang/an.py b/lang/an.py index 2699642..a50e654 100644 --- a/lang/an.py +++ b/lang/an.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "\n\n", + 'success_decrypt' : "", 'public_key_received' : '', 'failed_decrypt' : "", 'no_public_key' : "", diff --git a/lang/de.py b/lang/de.py index 427aa62..4f7ce36 100644 --- a/lang/de.py +++ b/lang/de.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Hallo, Ich bin Edward, der freundliche GnuPG Roboter. Ich deine E-Mail empfangen und entschlüsselt. Hier ist eine Kopie deiner Nachricht:\n\n", + 'success_decrypt' : "Hallo, Ich bin Edward, der freundliche GnuPG Roboter. Ich deine E-Mail empfangen und entschlüsselt. Hier ist eine Kopie deiner Nachricht:", 'public_key_received' : 'Ich habe deinen öffentlicher Schlüssel erhalten. Danke.', 'failed_decrypt' : "Tut mir leid, ich konnte deine Nachricht nicht entschlüsseln. Bist du dir sicher, dass du sie mit meinem öffentlichen Schlüssel verschlüsselt hast?", '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?", diff --git a/lang/el.py b/lang/el.py index 7bc400b..4df5bb2 100644 --- a/lang/el.py +++ b/lang/el.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Γειά σου, είμαι ο Edward, το φιλικό ρομπότ του GnuPG. Έλαβα το μήνυμα σου και το αποκρυπτογράφησα. Δες ένα αντίγραφο του μηνύματος σου:\n\nx", + 'success_decrypt' : "Γειά σου, είμαι ο Edward, το φιλικό ρομπότ του GnuPG. Έλαβα το μήνυμα σου και το αποκρυπτογράφησα. Δες ένα αντίγραφο του μηνύματος σου:", 'public_key_received' : 'Έλαβα το δημόσιο κλειδί σου. Ευχαριστώ.', 'failed_decrypt' : "Λυπάμαι, δε μπόρεσα να αποκρυπτογραφήσω το μήνυμα σου. Είσαι σίγουρος/η ότι το κρυπτογράφησες με το δημόσιο κλειδί μου;", 'no_public_key' : "Δυστυχώς δε μπόρεσα να βρώ το δημόσιο κλειδί σου. Μήπως ξέχασες να το επισυνάψεις;", diff --git a/lang/en.py b/lang/en.py index bed71d3..582c165 100644 --- a/lang/en.py +++ b/lang/en.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Hello, I am Edward, the friendly GnuPG bot. I received your message and decrypted it. Here's a copy of your message:\n\n", + 'success_decrypt' : "Hello, I am Edward, the friendly GnuPG bot. I received your message and decrypted it. Here's a copy of your message:", 'public_key_received' : 'I received your public key. Thanks.', 'failed_decrypt' : "I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key?", 'no_public_key' : "I'm sorry, I was not able to find your public key. Did you remember to attach it?", diff --git a/lang/fr.py b/lang/fr.py index 9c9f42e..686ae65 100644 --- a/lang/fr.py +++ b/lang/fr.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt': " Bonjour, je suis Edward, le gentil robot de GnuPG. J'ai bien reçu votre message et l'ai déchiffré. En voici une copie: \n\n", + 'success_decrypt': " Bonjour, je suis Edward, le gentil robot de GnuPG. J'ai bien reçu votre message et l'ai déchiffré. En voici une copie:", 'public_key_received' : "J'ai bien reçu votre clef publique. Merci.", 'failed_decrypt' : "Je n'ai pas été en mesure de déchiffrer votre message, désolé. L'avez-vous bien chiffré avec ma clef publique ?", 'no_public_key' : "Je n'ai pas pu trouver votre clef publique, désolé. Avez-vous oublié de la joindre ?", diff --git a/lang/ja.py b/lang/ja.py index 915e67b..6cb9250 100644 --- a/lang/ja.py +++ b/lang/ja.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "こんにちは! 私はGnuPGボットのEdwardです。あなたから送られたメールの暗号を解きました。確認のため、内容を返信します:\n\n", + 'success_decrypt' : "こんにちは! 私はGnuPGボットのEdwardです。あなたから送られたメールの暗号を解きました。確認のため、内容を返信します:", 'public_key_received' : 'あなたの公開鍵を受けとりました。', 'failed_decrypt' : "あなたからのメッセージを解読できなくて、すみません。そちらでは暗号化のとき、私の公開鍵を使ってくださったでしょうか?", 'no_public_key' : "ごめんなさい、あなたの公開鍵が見つからないのです。公開鍵を添付したメールを前に送ってくださいましたか?", diff --git a/lang/pt_br.py b/lang/pt_br.py index 4c38683..43039b1 100644 --- a/lang/pt_br.py +++ b/lang/pt_br.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Olá, sou Edward, o amigo robô de GnuPG. Recebi e decifrei sua mensagem. Aqui vai uma cópia da sua mensagem:\n\n", + 'success_decrypt' : "Olá, sou Edward, o amigo robô de GnuPG. Recebi e decifrei sua mensagem. Aqui vai uma cópia da sua mensagem:", 'public_key_received' : 'Recebi sua chave pública. Muito agradecido.', 'failed_decrypt' : "Perdão, não consegui decifrar sua mensagem. Você tem certeza que a cifrou usando minha chave pública?", 'no_public_key' : "Perdão, não consegui encontrar sua chave pública. Você se lembrou de anexá-la?", diff --git a/lang/ro.py b/lang/ro.py index 869f9e6..539ea2c 100644 --- a/lang/ro.py +++ b/lang/ro.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Bună ziua, eu sunt Edward, robotul GnuPG cel prietenos. Am primit mesajul dumneavoastră și l-am decriptat. Iată o copie a mesajului dumneavoastră:\n\n", + 'success_decrypt' : "Bună ziua, eu sunt Edward, robotul GnuPG cel prietenos. Am primit mesajul dumneavoastră și l-am decriptat. Iată o copie a mesajului dumneavoastră:", 'public_key_received' : 'Am primit cheia dumneavoastră publică. Mulțumesc.', 'failed_decrypt' : "Îmi pare rău, dar nu am putut decripta mesajul dumneavoastră. Sunteți sigur(ă) că l-ați criptat cu cheia mea publică?", '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?", diff --git a/lang/ru.py b/lang/ru.py index 369ab33..c384839 100644 --- a/lang/ru.py +++ b/lang/ru.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Привет, я Эдвард, дружелюбный GnuPG бот. Я получил ваше сообщение и расшифровал его. Вот копия вашего сообщения:\n\n", + 'success_decrypt' : "Привет, я Эдвард, дружелюбный GnuPG бот. Я получил ваше сообщение и расшифровал его. Вот копия вашего сообщения:", 'public_key_received' : 'Я получил ваш открытый ключ. Спасибо.', 'failed_decrypt' : "Прошу прощения, я не смог расшифровать ваше сообщение. Вы уверены, что зашифровали его при помощи моего открытого ключа?", 'no_public_key' : "Прошу прощения, я не смог найти ваш открытый ключ. Вы не забыли вложить его в письмо?", diff --git a/lang/tr.py b/lang/tr.py index 32b7096..2ca1fa7 100644 --- a/lang/tr.py +++ b/lang/tr.py @@ -21,7 +21,7 @@ *********************************************************************""" replies = { - 'success_decrypt' : "Merhaba, Ben Edward, arkadaş canlısı GnuPG botu. Mesajınızı aldım ve şifresini çözerek düz metine çevirdim. Mesajınızın düz metin kopyası şudur:\n\n", + 'success_decrypt' : "Merhaba, Ben Edward, arkadaş canlısı GnuPG botu. Mesajınızı aldım ve şifresini çözerek düz metine çevirdim. Mesajınızın düz metin kopyası şudur:", 'public_key_received' : 'Açık anahtarınızı aldım. Teşekkürler.', 'failed_decrypt' : "Özür dilerim, mesajınızı çözmeyi ve düz metine çevirmeyi başaramadım. Benim açık anahtarımla şifrelediğinize emin misiniz?", 'no_public_key' : "Özür dilerim, açık anahtarınızı bulamadım. E-postaya eklemeyi unutmadınız, değil mi?", diff --git a/tests/flatten-1.out b/tests/flatten-1.out index ec68436..9374801 100644 --- a/tests/flatten-1.out +++ b/tests/flatten-1.out @@ -1,9 +1,7 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature could not be verified. -I'm sorry, I was not able to find your public key. Did you remember to attach it? - - Edward, the friendly GnuPG bot The Free Software Foundation created me. diff --git a/tests/flatten-2.out b/tests/flatten-2.out index a8bf99c..190652a 100644 --- a/tests/flatten-2.out +++ b/tests/flatten-2.out @@ -1,11 +1,7 @@ Hello, I am Edward, the friendly GnuPG bot. I received your message and decrypted it. Here's a copy of your message: - - Your signature could not be verified. -I'm sorry, I was not able to find your public key. Did you remember to attach it? - - Edward, the friendly GnuPG bot The Free Software Foundation created me. diff --git a/tests/flatten-3.out b/tests/flatten-3.out index ec68436..caecd47 100644 --- a/tests/flatten-3.out +++ b/tests/flatten-3.out @@ -1,4 +1,4 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature could not be verified. diff --git a/tests/flatten-4.out b/tests/flatten-4.out index ec68436..9374801 100644 --- a/tests/flatten-4.out +++ b/tests/flatten-4.out @@ -1,9 +1,7 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature could not be verified. -I'm sorry, I was not able to find your public key. Did you remember to attach it? - - Edward, the friendly GnuPG bot The Free Software Foundation created me. diff --git a/tests/flatten-5.out b/tests/flatten-5.out index caecd47..9374801 100644 --- a/tests/flatten-5.out +++ b/tests/flatten-5.out @@ -2,8 +2,6 @@ I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it Your signature could not be verified. -I'm sorry, I was not able to find your public key. Did you remember to attach it? - - Edward, the friendly GnuPG bot The Free Software Foundation created me. diff --git a/tests/flatten-6.out b/tests/flatten-6.out index ec68436..9374801 100644 --- a/tests/flatten-6.out +++ b/tests/flatten-6.out @@ -1,9 +1,7 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature could not be verified. -I'm sorry, I was not able to find your public key. Did you remember to attach it? - - Edward, the friendly GnuPG bot The Free Software Foundation created me. diff --git a/tests/flatten-7.out b/tests/flatten-7.out index ec68436..9374801 100644 --- a/tests/flatten-7.out +++ b/tests/flatten-7.out @@ -1,9 +1,7 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature could not be verified. -I'm sorry, I was not able to find your public key. Did you remember to attach it? - - Edward, the friendly GnuPG bot The Free Software Foundation created me. diff --git a/tests/flatten-8.out b/tests/flatten-8.out index 8f94374..c82d151 100644 --- a/tests/flatten-8.out +++ b/tests/flatten-8.out @@ -1,9 +1,7 @@ - +あなたからのメッセージを解読できなくて、すみません。そちらでは暗号化のとき、私の公開鍵を使ってくださったでしょうか? あなたの署名を認証できませんでした。 -ごめんなさい、あなたの公開鍵が見つからないのです。公開鍵を添付したメールを前に送ってくださいましたか? - - GnuPGボットのEdward Free Software Foundationが私を制作しました。 Free Software Foundationに寄付しませんか。| https://www.fsf.org/donate diff --git a/tests/gpg-flatten-3.out b/tests/gpg-flatten-3.out index f5eb59f..864c0c5 100644 --- a/tests/gpg-flatten-3.out +++ b/tests/gpg-flatten-3.out @@ -1,4 +1,4 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature was verified. diff --git a/tests/gpg-flatten-5.out b/tests/gpg-flatten-5.out index f5eb59f..864c0c5 100644 --- a/tests/gpg-flatten-5.out +++ b/tests/gpg-flatten-5.out @@ -1,4 +1,4 @@ - +I'm sorry, I was not able to decrypt your message. Are you sure you encrypted it with my public key? Your signature was verified. -- 2.25.1