def test_multipart_encrypted(client, gpg): message = message_from_file(client, "multipart_encrypted.txt") decrypted_body = b"\n".join(message_from_file(client, "multipart_encrypted_body.txt")) gpg.decrypt = mock_decrypt(Encryption.correct, Signature.missing, decrypted_body) message = parse_message(message) _, encryption_status, signature_status, _ = handle_message(gpg, message) assert encryption_status == Encryption.correct assert signature_status == Signature.missing
def perform_encoding_test(original_subject, original_text, encoding, body_type="text", original_attachments=[]): msg = generate_message(original_subject, original_text, encoding, body_type, original_attachments) _, result_header, result_text, result_attachments = parse_message(msg) assert_equal(original_subject, result_header["Subject"]) assert_equal(original_text, result_text) original_attachments = [att[0] for att in original_attachments] # first entry in attachment tuple contains text assert_set_equal(set(original_attachments), set(result_attachments)) # don't care about ordering of attachments
def handle_multipart_encrypted(gpg, body): encryption_status, signature_status, reason = crypto.check_encryption_and_signature(gpg, body) if encryption_status != crypto.Encryption.correct: return encryption_status, signature_status, reason # parse the decrypted data into body and attachments result = gpg.decrypt(body) _, _, body, attachments = parse_message(result.data) # attachments might contain public key attachments = [crypto.decrypt_attachment(gpg, attachment) for attachment in attachments] crypto.import_public_keys_from_attachments(gpg, attachments) return encryption_status, signature_status, reason
def handle_multipart_signed(gpg, body, attachments): # there should be only one "attachment" which contains the signature signature = attachments[0] signature_status, reason = crypto.verify_external_sig(gpg, body, signature.encode()) if signature_status != crypto.Signature.correct: return crypto.Encryption.missing, signature_status, reason # the multipart/signed contains another multipart body, split that one into actual body and attachments _, _, body, attachments = parse_message(body) # attachments might contain public key attachments = [crypto.decrypt_attachment(gpg, attachment) for attachment in attachments] crypto.import_public_keys_from_attachments(gpg, attachments) return crypto.Encryption.missing, signature_status, reason
def perform_encoding_test(original_subject, original_text, encoding, body_type="text", original_attachments=[]): msg = generate_message(original_subject, original_text, encoding, body_type, original_attachments) _, result_header, result_text, result_attachments = parse_message(msg) assert_equal(original_subject, result_header["Subject"]) assert_equal(original_text, result_text) original_attachments = [att[0] for att in original_attachments ] # first entry in attachment tuple contains text assert_set_equal( set(original_attachments), set(result_attachments)) # don't care about ordering of attachments
def test_multipart_signed(client, gpg): message = message_from_file(client, "multipart_signed.txt") message = parse_message(message) _, encryption_status, signature_status, _ = handle_message(gpg, message) assert encryption_status == Encryption.missing assert signature_status == Signature.correct
def test_inline_encrypted(client, gpg): message = message_from_file(client, "inline_encrypted.txt") message = parse_message(message) _, encryption_status, signature_status, _ = handle_message(gpg, message) assert encryption_status == Encryption.correct assert signature_status == Signature.missing