1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
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, network_policy=NetworkPolicy.Encrypted, cert=None):
if not cert:
ks = lib.sq_keyserver_new(
ctx.ref(),
network_policy.value,
uri.encode())
else:
ks = lib.sq_keyserver_with_cert(
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, 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(),
self.ref(),
keyid.ref()),
context=self.context())
def send(self, cert):
r = lib.sq_keyserver_send(self.context().ref(),
self.ref(),
cert.ref())
if r:
raise Error._last(self.context())
|