From cf75de650f8543d2bd30b9bf3d23218257e17955 Mon Sep 17 00:00:00 2001 From: Andrew Engelbrecht <sudoman@ninthfloor.org> Date: Mon, 20 Jul 2015 20:01:30 -0400 Subject: [PATCH] added the beginnings of detached sig verification also added some test cases. --- edward | 34 +++++++++++++++++++++++++++++++++- tests/gpg-flatten-3.eml | 23 +++++++++++++++++++++++ tests/gpg-flatten-3.out | 8 ++++++++ tests/gpg-flatten-4.eml | 41 +++++++++++++++++++++++++++++++++++++++++ tests/gpg-flatten-4.out | 26 ++++++++++++++++++++++++++ 5 files changed, 131 insertions(+), 1 deletion(-) create mode 100644 tests/gpg-flatten-3.eml create mode 100644 tests/gpg-flatten-3.out create mode 100644 tests/gpg-flatten-4.eml create mode 100644 tests/gpg-flatten-4.out diff --git a/edward b/edward index e83a0f1..b5a548e 100755 --- a/edward +++ b/edward @@ -122,20 +122,29 @@ def email_decode_flatten (email_text, gpgme_ctx, from_decryption): elif content_type == "application/pgp-keys": fingerprints += add_gpg_keys(payload, gpgme_ctx) + # this is ugly. it needs work. elif content_type == "text/plain": if from_decryption == True: body += payload + "\n" fingerprints += add_gpg_keys(payload, gpgme_ctx) + plaintext, more_fps = verify_clear_signature(payload, gpgme_ctx) + fingerprints += more_fps + else: plaintext, more_fps = decrypt_text(payload, gpgme_ctx) - body += plaintext fingerprints += more_fps fingerprints += add_gpg_keys(payload, gpgme_ctx) + plaintext, more_fps = verify_clear_signature(payload, gpgme_ctx) + fingerprints += more_fps + body += plaintext + + + return body, fingerprints @@ -223,6 +232,29 @@ def decrypt_text (gpg_text, gpgme_ctx): return body, fingerprints +def verify_clear_signature (text, gpgme_ctx): + + sig_blocks = scan_and_grab(text, + '-----BEGIN PGP SIGNED MESSAGE-----', + '-----END PGP SIGNATURE-----') + + fingerprints = [] + plaintext = "" + + for sig_block in sig_blocks: + msg_fp = io.BytesIO(sig_block.encode('utf-8')) + ptxt_fp = io.BytesIO() + + result = gpgme_ctx.verify(msg_fp, None, ptxt_fp) + + plaintext += ptxt_fp.getvalue().decode('utf-8') + fingerprint = result[0].fpr + + fingerprints += [fingerprint] + + return plaintext, fingerprints + + def scan_and_grab (text, start_text, end_text): matches = re.search('(' + start_text + '.*' + end_text + ')', diff --git a/tests/gpg-flatten-3.eml b/tests/gpg-flatten-3.eml new file mode 100644 index 0000000..d6409ee --- /dev/null +++ b/tests/gpg-flatten-3.eml @@ -0,0 +1,23 @@ +From: No One <noone@localhost> +To: No One <noone@localhost> +Subject: =?UTF-8?B?44GT44KT44Gr44Gh44Gv44CB44GK5YWD5rCX44Gn44GZ44GL77yf?= + + +DO YOU READ ME CAPTAIN??!!1 o_O + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +hi, i didn't encrypt this part. is that a mistake? + +bye! + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iJwEAQECAAYFAlWthWEACgkQsT5tL2pPbuhyWgQApzhIt4EM4FrqCibNI7ZS1V73 +yhml95bw5PXq2fB7wU2I4pkM30T2kpMxdtfHdPXHQSzvuo27IhrUOH7CUtvj0f23 +CllwAGoUmwmdXOLeVvgjwyPzSVAdWLO8/231fS1M8J42v8GV6w78hmq+/Cck2oQE +p4/91AVSikY7bwMrGpU= +=Tavv +-----END PGP SIGNATURE----- diff --git a/tests/gpg-flatten-3.out b/tests/gpg-flatten-3.out new file mode 100644 index 0000000..b77846c --- /dev/null +++ b/tests/gpg-flatten-3.out @@ -0,0 +1,8 @@ +thanks for the message! + + +> hi, i didn't encrypt this part. is that a mistake? +> +> bye! +> +> diff --git a/tests/gpg-flatten-4.eml b/tests/gpg-flatten-4.eml new file mode 100644 index 0000000..baaca45 --- /dev/null +++ b/tests/gpg-flatten-4.eml @@ -0,0 +1,41 @@ +From: No One <noone@localhost> +To: No One <noone@localhost> +Subject: =?UTF-8?B?44GT44KT44Gr44Gh44Gv44CB44GK5YWD5rCX44Gn44GZ44GL77yf?= + +DO YOU READ ME CAPTAIN??!!1 o_O + +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA1 + +hi, i didn't encrypt this part. is that a mistake? + +bye! + +-----BEGIN PGP SIGNATURE----- +Version: GnuPG v1 + +iJwEAQECAAYFAlWthWEACgkQsT5tL2pPbuhyWgQApzhIt4EM4FrqCibNI7ZS1V73 +yhml95bw5PXq2fB7wU2I4pkM30T2kpMxdtfHdPXHQSzvuo27IhrUOH7CUtvj0f23 +CllwAGoUmwmdXOLeVvgjwyPzSVAdWLO8/231fS1M8J42v8GV6w78hmq+/Cck2oQE +p4/91AVSikY7bwMrGpU= +=Tavv +-----END PGP SIGNATURE----- + +-----BEGIN PGP MESSAGE----- +Version: GnuPG v1 + +hIwDWouAYlp2iv8BBADAXsI9Y/miNCVnseKDNZVil3VK3SUbJ4DYoVDVcymcStUw ++bmk3XSk5hqap3CfSKdSvdnxSmaKzYOdpv03kiRtK2gjnakcKxk4pGz85UM5t8ZZ +3estj/Ca40kvSHZAYelgC1W8JshDOyOrS93acfUgJxKQMdxhGRjVAW1YbQWFyNLA +3QEJJeg6obNktEbhXCSlupZFAKJQgdAPDOWYgNeFnTkS4MttM+G0ABx/o8JjeIl5 +wYDucFBDHXSuld9RBzQ1QLOUhB8BOkCq6XFgwaaTKTBT7SQ19n0G8RpZmJ/BX5Ok +msi9nlRm9z6Irjtx9bDudzUfpCzO/YeYBN1J/1o3pw8f/otzOMfRHBStkdo0V9i5 +9JS77QRkSnM4hVrZuvfplYa5iRftdYehLMaMk7k9gOY+B5WEMdgV9ZWRrWOXmqTK +NyB1fIWgKNEqCgZnBFPS6Es6kUXUNnFvsvFMPg5WXx+HBJ3YqhNzsdVegagxjE9F +wi7qHlcHbRGFv7Zz+BsiPQ3M3tQgwBAd1c/d/6CIdZDArvsTZiSdkszpfeziVj2p +ZKhWUBUIpqP59MMlftD19EFTtJm8mpc/gBH074nEwzXdLFKg08Vb5fH2zMRo37w4 +HZzUHFJaj8VMIjQPRXqD6ELclHJbO7ASTyh8S+v9Iv+t4PpJXn8odwAm08bd//e9 +Ch/H9RAlS/22W4KlpZdIvwz7JmwVE9T4Xq1e22Df +=Sn5u +-----END PGP MESSAGE----- + diff --git a/tests/gpg-flatten-4.out b/tests/gpg-flatten-4.out new file mode 100644 index 0000000..214b734 --- /dev/null +++ b/tests/gpg-flatten-4.out @@ -0,0 +1,26 @@ +thanks for the message! + + +> -----BEGIN PGP SIGNED MESSAGE----- +> Hash: SHA1 +> +> hello again!!!! +> +> i think i'll try this encryption thing and paste this in. +> +> let's see how it works! +> -----BEGIN PGP SIGNATURE----- +> Version: GnuPG v1 +> +> iJwEAQECAAYFAlWthW0ACgkQsT5tL2pPbuh5DQQAnkjHaeOoOKICD0o7ne5hp1TD +> 7l7A2TszHerbk7SLSC3W5PV9PV8frj4NxyFUe6n1x2hYiIqJqxjctB2+7oV12Z1w +> l3IYtYwjLk1Rqc+iHTb+S2+1XycXoTesRcK5f1bZIIl50RUpx4hLZVbIYyA6CoyE +> ldPslQXK+wrNm3mkspY= +> =+Jmq +> -----END PGP SIGNATURE----- +> +> hi, i didn't encrypt this part. is that a mistake? +> +> bye! +> +> -- 2.25.1