예제 #1
0
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
예제 #2
0
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
예제 #3
0
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
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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
예제 #7
0
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