Blame lang/python/tests/t-encrypt.py

Packit d7e8d0
#!/usr/bin/env python
Packit d7e8d0
Packit d7e8d0
# Copyright (C) 2016 g10 Code GmbH
Packit d7e8d0
#
Packit d7e8d0
# This file is part of GPGME.
Packit d7e8d0
#
Packit d7e8d0
# GPGME is free software; you can redistribute it and/or modify it
Packit d7e8d0
# under the terms of the GNU General Public License as published by
Packit d7e8d0
# the Free Software Foundation; either version 2 of the License, or
Packit d7e8d0
# (at your option) any later version.
Packit d7e8d0
#
Packit d7e8d0
# GPGME is distributed in the hope that it will be useful, but WITHOUT
Packit d7e8d0
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit d7e8d0
# or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General
Packit d7e8d0
# Public License for more details.
Packit d7e8d0
#
Packit d7e8d0
# You should have received a copy of the GNU Lesser General Public
Packit d7e8d0
# License along with this program; if not, see <http://www.gnu.org/licenses/>.
Packit d7e8d0
Packit d7e8d0
from __future__ import absolute_import, print_function, unicode_literals
Packit d7e8d0
del absolute_import, print_function, unicode_literals
Packit d7e8d0
Packit d7e8d0
import gpg
Packit d7e8d0
import support
Packit d7e8d0
Packit d7e8d0
c = gpg.Context()
Packit d7e8d0
c.set_armor(True)
Packit d7e8d0
Packit d7e8d0
source = gpg.Data("Hallo Leute\n")
Packit d7e8d0
sink = gpg.Data()
Packit d7e8d0
Packit d7e8d0
keys = []
Packit d7e8d0
keys.append(c.get_key("A0FF4590BB6122EDEF6E3C542D727CC768697734", False))
Packit d7e8d0
keys.append(c.get_key("D695676BDCEDCC2CDD6152BCFE180B1DA9E3B0B2", False))
Packit d7e8d0
Packit d7e8d0
c.op_encrypt(keys, gpg.constants.ENCRYPT_ALWAYS_TRUST, source, sink)
Packit d7e8d0
result = c.op_encrypt_result()
Packit d7e8d0
assert not result.invalid_recipients, \
Packit d7e8d0
  "Invalid recipients: {}".format(", ".join(r.fpr for r in result.recipients))
Packit d7e8d0
support.print_data(sink)
Packit d7e8d0
Packit d7e8d0
# Idiomatic interface.
Packit d7e8d0
with gpg.Context(armor=True) as c:
Packit d7e8d0
    ciphertext, _, _ = c.encrypt("Hallo Leute\n".encode(),
Packit d7e8d0
                                 recipients=keys,
Packit d7e8d0
                                 sign=False,
Packit d7e8d0
                                 always_trust=True)
Packit d7e8d0
    assert len(ciphertext) > 0
Packit d7e8d0
    assert ciphertext.find(b'BEGIN PGP MESSAGE') > 0, 'Marker not found'
Packit d7e8d0
Packit d7e8d0
    c.encrypt("Hallo Leute\n".encode(),
Packit d7e8d0
              recipients=[c.get_key(support.encrypt_only, False)],
Packit d7e8d0
              sign=False, always_trust=True)
Packit d7e8d0
Packit d7e8d0
    try:
Packit d7e8d0
        c.encrypt("Hallo Leute\n".encode(),
Packit d7e8d0
                  recipients=[c.get_key(support.sign_only, False)],
Packit d7e8d0
                  sign=False, always_trust=True)
Packit d7e8d0
    except gpg.errors.InvalidRecipients as e:
Packit d7e8d0
        assert len(e.recipients) == 1
Packit d7e8d0
        assert support.sign_only.endswith(e.recipients[0].fpr)
Packit d7e8d0
    else:
Packit d7e8d0
        assert False, "Expected an InvalidRecipients error, got none"
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
Packit d7e8d0
    try:
Packit d7e8d0
        # People might be tempted to provide strings.
Packit d7e8d0
        # We should raise something useful.
Packit d7e8d0
        ciphertext, _, _ = c.encrypt("Hallo Leute\n",
Packit d7e8d0
                                     recipients=keys,
Packit d7e8d0
                                     sign=False,
Packit d7e8d0
                                     always_trust=True)
Packit d7e8d0
    except TypeError as e:
Packit d7e8d0
        # This test is a bit fragile, because the message
Packit d7e8d0
        # may very well change. So if the behaviour will change
Packit d7e8d0
        # this test can easily be deleted.
Packit d7e8d0
        assert "encode" in str(e)