import gpgme
import re
import io
-import time
def main ():
email_from, email_subject = email_from_subject(email_text)
- plaintext, keys = email_decode_flatten (email_text)
+ plaintext, keys = email_decode_flatten(email_text)
encrypt_to_key = choose_reply_encryption_key(keys)
reply_message = generate_reply(plaintext, email_from, \
- email_subject, encrypt_to_key)
+ email_subject, encrypt_to_key,
+ "DAB4F989E2788B8DF058E0EFEF1EC52039B36E58")
print(reply_message)
def decrypt_chunks (gpg_chunks):
- plaintext_and_sigs_chunks = []
-
- for gpg_chunk in gpg_chunks:
- plaintext_and_sigs_chunks += [decrypt_chunk(gpg_chunk)]
-
- return plaintext_and_sigs_chunks
+ return map(decrypt_chunk, gpg_chunks)
def decrypt_chunk (gpg_chunk):
sigs = gpgme_ctx.decrypt_verify(chunk_b, plain_b)
- plaintext = plain_b.getvalue().decode('ASCII')
+ plaintext = plain_b.getvalue().decode('UTF-8')
return (plaintext, sigs)
reply_key = key
break
- return key
-
-
-def generate_reply (plaintext, email_from, email_subject, encrypt_to_key):
+ return reply_key
- plaintext_reply = "thanks for the message!\n\n\n"
- plaintext_reply += email_quote_text(plaintext)
- encrypted_reply = encrypt_message(plaintext_reply, encrypt_to_key)
+def generate_reply (plaintext, email_from, email_subject, encrypt_to_key,
+ sign_with_fingerprint):
reply = "To: " + email_from + "\n"
reply += "Subject: " + email_subject + "\n"
reply += "\n"
- reply += encrypted_reply
+
+ if (encrypt_to_key != None):
+ plaintext_reply = "thanks for the message!\n\n\n"
+ plaintext_reply += email_quote_text(plaintext)
+
+ encrypted_reply = encrypt_sign_message(plaintext_reply, encrypt_to_key,
+ sign_with_fingerprint)
+
+ reply += encrypted_reply
+
+ else:
+ reply += "Sorry, i couldn't find your key.\n"
+ reply += "I'll need that to encrypt a message to you."
return reply
return quoted_message
-def encrypt_message (plaintext, encrypt_to_key):
+def encrypt_sign_message (plaintext, encrypt_to_key, sign_with_fingerprint):
gpgme_ctx = gpgme.Context()
gpgme_ctx.armor = True
+ sign_with_key = gpgme_ctx.get_key(sign_with_fingerprint)
+ gpgme_ctx.signers = [sign_with_key]
+
plaintext_bytes = io.BytesIO(plaintext.encode('UTF-8'))
encrypted_bytes = io.BytesIO()
- gpgme_ctx.encrypt([encrypt_to_key], gpgme.ENCRYPT_ALWAYS_TRUST,
+ gpgme_ctx.encrypt_sign([encrypt_to_key], gpgme.ENCRYPT_ALWAYS_TRUST,
plaintext_bytes, encrypted_bytes)
encrypted_txt = encrypted_bytes.getvalue().decode('ASCII')