summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAzul <azul@riseup.net>2021-02-03 10:49:29 +0100
committerAzul <azul@riseup.net>2021-02-08 14:54:46 +0100
commit280796ac92d25ada9d6fd79d03aea7676b83ded7 (patch)
tree3991b0f7abcbf24e6a1f63f51775f6185a745f18
parent65f9d716c56c809b5cca59f964963b5ee062e261 (diff)
ffi: Move NetworkPolicy into net for python.
- See #665. - Also add test for keyserver to make sure the fix is correct.
-rw-r--r--ffi/lang/python/sequoia/core.py8
-rw-r--r--ffi/lang/python/sequoia/net.py27
-rw-r--r--ffi/lang/python/sequoia/store.py7
-rw-r--r--ffi/lang/python/tests/test_armor.py5
-rw-r--r--ffi/lang/python/tests/test_cert.py26
-rw-r--r--ffi/lang/python/tests/test_keyserver.py10
-rw-r--r--ffi/lang/python/tests/test_packet_parser.py5
7 files changed, 48 insertions, 40 deletions
diff --git a/ffi/lang/python/sequoia/core.py b/ffi/lang/python/sequoia/core.py
index b985247b..5f301c26 100644
--- a/ffi/lang/python/sequoia/core.py
+++ b/ffi/lang/python/sequoia/core.py
@@ -5,12 +5,6 @@ from _sequoia import ffi, lib
from .error import Error
from .glue import SQObject, invoke
-class NetworkPolicy(Enum):
- Offline = lib.SQ_NETWORK_POLICY_OFFLINE
- Anonymized = lib.SQ_NETWORK_POLICY_ANONYMIZED
- Encrypted = lib.SQ_NETWORK_POLICY_ENCRYPTED
- Insecure = lib.SQ_NETWORK_POLICY_INSECURE
-
class IPCPolicy(Enum):
External = lib.SQ_IPC_POLICY_EXTERNAL
Internal = lib.SQ_IPC_POLICY_INTERNAL
@@ -20,13 +14,11 @@ class Context(SQObject):
_del = lib.sq_context_free
def __init__(self,
home=None,
- network_policy=NetworkPolicy.Encrypted,
ipc_policy=IPCPolicy.Robust,
ephemeral=False):
cfg = lib.sq_context_configure()
if home:
lib.sq_config_home(cfg, home.encode())
- lib.sq_config_network_policy(cfg, network_policy.value)
lib.sq_config_ipc_policy(cfg, ipc_policy.value)
if ephemeral:
lib.sq_config_ephemeral(cfg)
diff --git a/ffi/lang/python/sequoia/net.py b/ffi/lang/python/sequoia/net.py
index de7a77fc..bc5de9eb 100644
--- a/ffi/lang/python/sequoia/net.py
+++ b/ffi/lang/python/sequoia/net.py
@@ -1,27 +1,40 @@
-from _sequoia import ffi, lib
+from enum import Enum
+from _sequoia import ffi, lib
from .openpgp import Cert
from .error import Error
from .glue import SQObject
+class NetworkPolicy(Enum):
+ Offline = lib.SQ_NETWORK_POLICY_OFFLINE
+ Anonymized = lib.SQ_NETWORK_POLICY_ANONYMIZED
+ Encrypted = lib.SQ_NETWORK_POLICY_ENCRYPTED
+ Insecure = lib.SQ_NETWORK_POLICY_INSECURE
+
class KeyServer(SQObject):
_del = lib.sq_keyserver_free
@classmethod
- def new(cls, ctx, uri, cert=None):
+ def new(cls, ctx, uri, network_policy=NetworkPolicy.Encrypted, cert=None):
if not cert:
- ks = lib.sq_keyserver_new(ctx.ref(), uri.encode())
+ ks = lib.sq_keyserver_new(
+ ctx.ref(),
+ network_policy.value,
+ uri.encode())
else:
ks = lib.sq_keyserver_with_cert(
- ctx.ref(), uri.encode(),
+ ctx.ref(),
+ network_policy.value,
+ uri.encode(),
ffi.cast("uint8_t *", ffi.from_buffer(cert)),
len(cert))
return KeyServer(ks, context=ctx)
@classmethod
- def keys_openpgp_org(cls, ctx):
- return KeyServer(lib.sq_keyserver_keys_openpgp_org(ctx.ref()),
- context=ctx)
+ def keys_openpgp_org(cls, ctx, network_policy=NetworkPolicy.Encrypted):
+ ks = lib.sq_keyserver_keys_openpgp_org(ctx.ref(),
+ network_policy.value)
+ return KeyServer(ks, context=ctx)
def get(self, keyid):
return Cert(lib.sq_keyserver_get(self.context().ref(),
diff --git a/ffi/lang/python/sequoia/store.py b/ffi/lang/python/sequoia/store.py
index 97c601ec..57d1b18f 100644
--- a/ffi/lang/python/sequoia/store.py
+++ b/ffi/lang/python/sequoia/store.py
@@ -2,6 +2,7 @@ from _sequoia import ffi, lib
from .error import Error
from .glue import _str, _static_str, SQObject, sq_iterator, sq_time
+from .net import NetworkPolicy
from .openpgp import Fingerprint, Cert
class Store(object):
@@ -41,8 +42,10 @@ class Mapping(SQObject):
REALM_SOFTWARE_UPDATES = _static_str(lib.SQ_REALM_SOFTWARE_UPDATES)
@classmethod
- def open(cls, ctx, realm=REALM_CONTACTS, name="default"):
- return Mapping(lib.sq_mapping_open(ctx.ref(), realm.encode(), name.encode()), context=ctx)
+ def open(cls, ctx, network_policy=NetworkPolicy.Encrypted, realm=REALM_CONTACTS, name="default"):
+ return Mapping(lib.sq_mapping_open(ctx.ref(), network_policy.value,
+ realm.encode(), name.encode()),
+ context=ctx)
def add(self, label, fingerprint):
diff --git a/ffi/lang/python/tests/test_armor.py b/ffi/lang/python/tests/test_armor.py
index 93486703..2d1815f6 100644
--- a/ffi/lang/python/tests/test_armor.py
+++ b/ffi/lang/python/tests/test_armor.py
@@ -2,13 +2,12 @@ import os
from os.path import join
from tempfile import TemporaryDirectory
-from sequoia.core import Context, NetworkPolicy, Reader, Writer
+from sequoia.core import Context, Reader, Writer
from sequoia.openpgp import ArmorReader, ArmorWriter, Kind
TEST_VECTORS = [0, 1, 2, 3, 47, 48, 49, 50, 51]
-ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ctx = Context(ephemeral=True)
def fn_bin(t):
return "../../../openpgp/tests/data/armor/test-{}.bin".format(t)
diff --git a/ffi/lang/python/tests/test_cert.py b/ffi/lang/python/tests/test_cert.py
index 8c38f205..98222529 100644
--- a/ffi/lang/python/tests/test_cert.py
+++ b/ffi/lang/python/tests/test_cert.py
@@ -1,7 +1,7 @@
from os.path import join
from tempfile import TemporaryDirectory
-from sequoia.core import Context, NetworkPolicy, Reader, Writer
+from sequoia.core import Context, Reader, Writer
from sequoia.openpgp import ArmorReader, Fingerprint, Cert, PacketPile
pgp = "../../../openpgp/tests/data/keys/testy.pgp"
@@ -9,15 +9,13 @@ asc = "../../../openpgp/tests/data/keys/testy.asc"
fp = Fingerprint.from_hex("3E8877C877274692975189F5D03F6F865226FE8B")
def test_from_reader():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
r = Reader.open(ctx, pgp)
t = Cert.from_reader(ctx, r)
assert t.fingerprint() == fp
def test_from_armor_reader():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
k = open(asc, "rb").read()
r = Reader.from_bytes(ctx, k)
r = ArmorReader.new(ctx, r)
@@ -25,27 +23,23 @@ def test_from_armor_reader():
assert t.fingerprint() == fp
def test_from_file():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
t = Cert.open(ctx, pgp)
assert t.fingerprint() == fp
def test_from_packet_pile():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
r = PacketPile.open(ctx, pgp)
t = Cert.from_packet_pile(ctx, r)
assert t.fingerprint() == fp
def test_from_bytes():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
t = Cert.from_bytes(ctx, open(pgp, "rb").read())
assert t.fingerprint() == fp
def test_from_serialize():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
with TemporaryDirectory() as tmp:
sink = join(tmp, "a")
@@ -57,16 +51,14 @@ def test_from_serialize():
assert t.fingerprint() == fp
def test_equals():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
b = open(pgp, "rb").read()
t = Cert.from_bytes(ctx, b)
u = Cert.from_bytes(ctx, b)
assert t == u
def test_clone():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
a = Cert.open(ctx, pgp)
b = a.copy()
del a
diff --git a/ffi/lang/python/tests/test_keyserver.py b/ffi/lang/python/tests/test_keyserver.py
new file mode 100644
index 00000000..30d237fa
--- /dev/null
+++ b/ffi/lang/python/tests/test_keyserver.py
@@ -0,0 +1,10 @@
+from sequoia.prelude import Context
+from sequoia.net import KeyServer
+
+def test_keys_openpgp_org():
+ c = Context(ephemeral=True)
+ KeyServer.keys_openpgp_org(c)
+
+def test_new():
+ c = Context(ephemeral=True)
+ KeyServer.new(c, "hkps://keys.domain.example")
diff --git a/ffi/lang/python/tests/test_packet_parser.py b/ffi/lang/python/tests/test_packet_parser.py
index e50a58f5..abb0ab24 100644
--- a/ffi/lang/python/tests/test_packet_parser.py
+++ b/ffi/lang/python/tests/test_packet_parser.py
@@ -1,13 +1,12 @@
from enum import Enum
-from sequoia.core import Context, NetworkPolicy
+from sequoia.core import Context
from sequoia.openpgp import Tag, PacketParser
pgp = "../../../openpgp/tests/data/messages/encrypted-aes128-password-123456789.gpg"
plain = "../../../openpgp/tests/data/messages/a-cypherpunks-manifesto.txt"
def test_decryption():
- ctx = Context(network_policy=NetworkPolicy.Offline,
- ephemeral=True)
+ ctx = Context(ephemeral=True)
class State(Enum):
# XXX: In Python 3.6, we can use enum.auto() to assign values.