* gnu/packages/sequoia.scm (sequoia-package-origin): New variable. (libsequoia): New variable. * gnu/packages/patches/sequoia-fix-ffi-Makefile.patch, gnu/packages/patches/sequoia-remove-store.patch New files. * gnu/local.mk (dist_patch_DATA): Add them.
		
			
				
	
	
		
			432 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			432 lines
		
	
	
	
		
			14 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| Shortend version of
 | |
| From 351ad5e5e2dd67f427b7eb2e4d5d0b35d90ffaf7 Mon Sep 17 00:00:00 2001
 | |
| From: Justus Winter <justus@sequoia-pgp.org>
 | |
| Date: Wed, 24 Nov 2021 15:09:34 +0100
 | |
| Subject: [PATCH] store: Drop crate.
 | |
| 
 | |
|   - The store has never been really used, and never reached a maturity
 | |
|     where it was useful.  And, we're on the verge of replacing it with
 | |
|     the Shared PGP Certificate Directory.
 | |
| ---
 | |
|  Cargo.toml                               |    1 -
 | |
|  ffi/Cargo.toml                           |    4 +-
 | |
|  ffi/include/sequoia.h                    |    1 -
 | |
|  ffi/include/sequoia/store.h              |  409 ------
 | |
|  ffi/lang/python/sequoia/__init__.py      |    1 -
 | |
|  ffi/lang/python/sequoia/prelude.py       |    1 -
 | |
|  ffi/lang/python/sequoia/sequoia_build.py |    3 +-
 | |
|  ffi/lang/python/sequoia/store.py         |  246 ----
 | |
|  ffi/lang/python/tests/test_store.py      |   47 -
 | |
|  ffi/src/lib.rs                           |    2 -
 | |
|  ffi/src/store.rs                         |  659 ----------
 | |
|  25 files changed, 3 insertions(+), 5064 deletions(-)
 | |
|  delete mode 100644 ffi/include/sequoia/store.h
 | |
|  delete mode 100644 ffi/lang/python/sequoia/store.py
 | |
|  delete mode 100644 ffi/lang/python/tests/test_store.py
 | |
|  delete mode 100644 ffi/src/store.rs
 | |
| 
 | |
| diff --git a/Cargo.toml b/Cargo.toml
 | |
| index a4f48520..a573ddbf 100644
 | |
| --- a/Cargo.toml
 | |
| +++ b/Cargo.toml
 | |
| @@ -10,7 +10,6 @@ members = [
 | |
|      "openpgp",
 | |
|      "openpgp-ffi",
 | |
|      "sq",
 | |
| -    "store",
 | |
|  ]
 | |
|  
 | |
|  [profile.release]
 | |
| diff --git a/ffi/Cargo.toml b/ffi/Cargo.toml
 | |
| index 53ddaf68..2ec84e6e 100644
 | |
| --- a/ffi/Cargo.toml
 | |
| +++ b/ffi/Cargo.toml
 | |
| @@ -24,7 +24,6 @@ maintenance = { status = "actively-developed" }
 | |
|  [dependencies]
 | |
|  sequoia-ffi-macros = { path = "../ffi-macros", version = "0.22" }
 | |
|  sequoia-openpgp = { path = "../openpgp", version = "1.0.0", default-features = false }
 | |
| -sequoia-store = { path = "../store", version = "0.22", default-features = false }
 | |
|  sequoia-net = { path = "../net", version = "0.23", default-features = false }
 | |
|  sequoia-ipc = { path = "../ipc", version = "0.26", default-features = false }
 | |
|  anyhow = "1.0.18"
 | |
| @@ -42,10 +41,9 @@ crate-type = ["cdylib", "staticlib"]
 | |
|  bench = false
 | |
|  
 | |
|  [features]
 | |
| -default = ["sequoia-openpgp/default", "sequoia-store/default"]
 | |
| +default = ["sequoia-openpgp/default"]
 | |
|  crypto-nettle = ["sequoia-openpgp/crypto-nettle"]
 | |
|  crypto-cng = ["sequoia-openpgp/crypto-cng"]
 | |
|  compression = ["sequoia-openpgp/compression"]
 | |
|  compression-deflate = ["sequoia-openpgp/compression-deflate"]
 | |
|  compression-bzip2 = ["sequoia-openpgp/compression-bzip2"]
 | |
| -background-services = ["sequoia-store/background-services"]
 | |
| diff --git a/ffi/include/sequoia.h b/ffi/include/sequoia.h
 | |
| index 8c62ba8f..c32a2f3e 100644
 | |
| --- a/ffi/include/sequoia.h
 | |
| +++ b/ffi/include/sequoia.h
 | |
| @@ -5,6 +5,5 @@
 | |
|  #include <sequoia/core.h>
 | |
|  #include <sequoia/openpgp.h>
 | |
|  #include <sequoia/net.h>
 | |
| -#include <sequoia/store.h>
 | |
|  
 | |
|  #endif
 | |
| diff --git a/ffi/lang/python/sequoia/__init__.py b/ffi/lang/python/sequoia/__init__.py
 | |
| index 4f84346e..fc170e20 100644
 | |
| --- a/ffi/lang/python/sequoia/__init__.py
 | |
| +++ b/ffi/lang/python/sequoia/__init__.py
 | |
| @@ -4,5 +4,4 @@ from . import (
 | |
|      openpgp,
 | |
|      core,
 | |
|      net,
 | |
| -    store,
 | |
|  )
 | |
| diff --git a/ffi/lang/python/sequoia/prelude.py b/ffi/lang/python/sequoia/prelude.py
 | |
| index 42b0156a..61efbab0 100644
 | |
| --- a/ffi/lang/python/sequoia/prelude.py
 | |
| +++ b/ffi/lang/python/sequoia/prelude.py
 | |
| @@ -3,4 +3,3 @@ from .error import *
 | |
|  from .openpgp import *
 | |
|  from .core import *
 | |
|  from .net import *
 | |
| -from .store import *
 | |
| diff --git a/ffi/lang/python/sequoia/sequoia_build.py b/ffi/lang/python/sequoia/sequoia_build.py
 | |
| index a3ce2786..058f1380 100644
 | |
| --- a/ffi/lang/python/sequoia/sequoia_build.py
 | |
| +++ b/ffi/lang/python/sequoia/sequoia_build.py
 | |
| @@ -14,8 +14,7 @@ defs = "".join(l
 | |
|                                open(join(pgp_inc, "openpgp/serialize.h")).readlines(),
 | |
|                                open(join(pgp_inc, "openpgp.h")).readlines(),
 | |
|                                open(join(sq_inc, "core.h")).readlines(),
 | |
| -                              open(join(sq_inc, "net.h")).readlines(),
 | |
| -                              open(join(sq_inc, "store.h")).readlines())
 | |
| +                              open(join(sq_inc, "net.h")).readlines())
 | |
|                 if not l.startswith('#'))
 | |
|  
 | |
|  defs = defs.replace("INT_MAX", "{}".format(1<<31))
 | |
| diff --git a/ffi/lang/python/sequoia/store.py b/ffi/lang/python/sequoia/store.py
 | |
| deleted file mode 100644
 | |
| index 57d1b18f..00000000
 | |
| --- a/ffi/lang/python/sequoia/store.py
 | |
| +++ /dev/null
 | |
| @@ -1,246 +0,0 @@
 | |
| -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):
 | |
| -    @classmethod
 | |
| -    def log(cls, ctx):
 | |
| -        yield from sq_iterator(
 | |
| -            ffi.gc(
 | |
| -                lib.sq_store_server_log(ctx.ref()),
 | |
| -                lib.sq_log_iter_free),
 | |
| -            lib.sq_log_iter_next,
 | |
| -            lambda x: Log(x, context=ctx))
 | |
| -
 | |
| -    @classmethod
 | |
| -    def list_keys(cls, ctx):
 | |
| -        def next_fn(i):
 | |
| -            fpp = ffi.new("pgp_fingerprint_t[1]")
 | |
| -            key = lib.sq_key_iter_next(i, fpp)
 | |
| -            if key == ffi.NULL:
 | |
| -                return ffi.NULL
 | |
| -            else:
 | |
| -                return (Fingerprint(fpp[0], ctx),
 | |
| -                        Key(key, ctx))
 | |
| -
 | |
| -        yield from sq_iterator(
 | |
| -            ffi.gc(
 | |
| -                lib.sq_store_list_keys(ctx.ref()),
 | |
| -                lib.sq_key_iter_free),
 | |
| -            next_fn)
 | |
| -
 | |
| -class Mapping(SQObject):
 | |
| -    _del = lib.sq_mapping_free
 | |
| -
 | |
| -    # Keys used for communications.
 | |
| -    REALM_CONTACTS = _static_str(lib.SQ_REALM_CONTACTS)
 | |
| -
 | |
| -    # Keys used for signing software updates.
 | |
| -    REALM_SOFTWARE_UPDATES = _static_str(lib.SQ_REALM_SOFTWARE_UPDATES)
 | |
| -
 | |
| -    @classmethod
 | |
| -    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):
 | |
| -        return Binding(lib.sq_mapping_add(self.context().ref(), self.ref(),
 | |
| -                                        label.encode(), fingerprint.ref()),
 | |
| -                       context=self.context())
 | |
| -
 | |
| -    def import_(self, label, cert):
 | |
| -        return Cert(lib.sq_mapping_import(self.context().ref(), self.ref(),
 | |
| -                                       label.encode(), cert.ref()),
 | |
| -                   context=self.context())
 | |
| -
 | |
| -    def lookup(self, label):
 | |
| -        return Binding(lib.sq_mapping_lookup(self.context().ref(), self.ref(),
 | |
| -                                           label.encode()),
 | |
| -                       self.context())
 | |
| -
 | |
| -    def delete(self):
 | |
| -        if lib.sq_mapping_delete(self.ref()):
 | |
| -            raise Error._last(self.context())
 | |
| -        super(Mapping, self)._delete(skip_free=True)
 | |
| -
 | |
| -    def iter(self):
 | |
| -        def next_fn(i):
 | |
| -            labelp = ffi.new("char *[1]")
 | |
| -            fpp = ffi.new("pgp_fingerprint_t[1]")
 | |
| -            binding = lib.sq_binding_iter_next(i, labelp, fpp)
 | |
| -            if binding == ffi.NULL:
 | |
| -                return ffi.NULL
 | |
| -            else:
 | |
| -                return (_str(labelp[0]),
 | |
| -                        Fingerprint(fpp[0], self.context()),
 | |
| -                        Binding(binding, self.context()))
 | |
| -
 | |
| -        yield from sq_iterator(
 | |
| -            ffi.gc(
 | |
| -                lib.sq_mapping_iter(self.context().ref(), self.ref()),
 | |
| -                lib.sq_binding_iter_free),
 | |
| -            next_fn)
 | |
| -
 | |
| -    def log(self):
 | |
| -        yield from sq_iterator(
 | |
| -            ffi.gc(
 | |
| -                lib.sq_mapping_log(self.context().ref(), self.ref()),
 | |
| -                lib.sq_log_iter_free),
 | |
| -            lib.sq_log_iter_next,
 | |
| -            lambda x: Log(x, context=self.context()))
 | |
| -
 | |
| -class Binding(SQObject):
 | |
| -    _del = lib.sq_binding_free
 | |
| -
 | |
| -    def stats(self):
 | |
| -        return Stats(lib.sq_binding_stats(self.context().ref(), self.ref()),
 | |
| -                     self.context())
 | |
| -
 | |
| -    def key(self):
 | |
| -        return Key(lib.sq_binding_key(self.context().ref(), self.ref()),
 | |
| -                   self.context())
 | |
| -
 | |
| -    def cert(self):
 | |
| -        return Cert(lib.sq_binding_cert(self.context().ref(), self.ref()),
 | |
| -                   self.context())
 | |
| -
 | |
| -    def import_(self, cert):
 | |
| -        return Cert(lib.sq_binding_import(self.context().ref(), self.ref(), cert),
 | |
| -                   self.context())
 | |
| -
 | |
| -    def rotate(self, cert):
 | |
| -        return Cert(lib.sq_binding_rotate(self.context().ref(), self.ref(), cert),
 | |
| -                   self.context())
 | |
| -
 | |
| -    def delete(self):
 | |
| -        if lib.sq_binding_delete(self.ref()):
 | |
| -            raise Error._last(self.context())
 | |
| -        super(Binding, self)._delete(skip_free=True)
 | |
| -
 | |
| -    def log(self):
 | |
| -        yield from sq_iterator(
 | |
| -            ffi.gc(
 | |
| -                lib.sq_binding_log(self.context().ref(), self.ref()),
 | |
| -                lib.sq_log_iter_free),
 | |
| -            lib.sq_log_iter_next,
 | |
| -            lambda x: Log(x, context=self.context()))
 | |
| -
 | |
| -class Key(SQObject):
 | |
| -    _del = lib.sq_key_free
 | |
| -
 | |
| -    def stats(self):
 | |
| -        return Stats(lib.sq_key_stats(self.context().ref(), self.ref()),
 | |
| -                     self.context())
 | |
| -
 | |
| -    def cert(self):
 | |
| -        return Cert(lib.sq_key_cert(self.context().ref(), self.ref()),
 | |
| -                   self.context())
 | |
| -
 | |
| -    def import_(self, cert):
 | |
| -        return Cert(lib.sq_key_import(self.context().ref(), self.ref(), cert),
 | |
| -                   self.context())
 | |
| -
 | |
| -    def log(self):
 | |
| -        yield from sq_iterator(
 | |
| -            ffi.gc(
 | |
| -                lib.sq_key_log(self.context().ref(), self.ref()),
 | |
| -                lib.sq_log_iter_free),
 | |
| -            lib.sq_log_iter_next)
 | |
| -
 | |
| -
 | |
| -class Stats(SQObject):
 | |
| -    _del = lib.sq_stats_free
 | |
| -    def __init__(self, o, context=None):
 | |
| -        super(Stats, self).__init__(o, context=context)
 | |
| -        self.encryption = Stamps(ffi.addressof(o, "encryption"))
 | |
| -        self.verification = Stamps(ffi.addressof(o, "verification"))
 | |
| -
 | |
| -    @property
 | |
| -    def created(self):
 | |
| -        return sq_time(self.ref().created)
 | |
| -
 | |
| -    @property
 | |
| -    def updated(self):
 | |
| -        return sq_time(self.ref().updated)
 | |
| -
 | |
| -    def __str__(self):
 | |
| -        return \
 | |
| -            "Stats{{created={}, updated={}, encryption={}, verification={}}}" \
 | |
| -            .format(self.created, self.updated, self.encryption,
 | |
| -                    self.verification)
 | |
| -
 | |
| -class Stamps(SQObject):
 | |
| -    @property
 | |
| -    def count(self):
 | |
| -        return self.ref().count
 | |
| -
 | |
| -    @property
 | |
| -    def first(self):
 | |
| -        return sq_time(self.ref().first)
 | |
| -
 | |
| -    @property
 | |
| -    def last(self):
 | |
| -        return sq_time(self.ref().last)
 | |
| -
 | |
| -    def __str__(self):
 | |
| -        return "Stamps{{count={}, first={}, last={}}}".format(
 | |
| -            self.count, self.first, self.last)
 | |
| -
 | |
| -class Log(SQObject):
 | |
| -    _del = lib.sq_log_free
 | |
| -
 | |
| -    @property
 | |
| -    def timestamp(self):
 | |
| -        return sq_time(self.ref().timestamp)
 | |
| -
 | |
| -    @property
 | |
| -    def store(self):
 | |
| -        if self.ref().store == ffi.NULL:
 | |
| -            return None
 | |
| -        else:
 | |
| -            return Store(self.ref().store, context=self.context(),
 | |
| -                         owner=self)
 | |
| -
 | |
| -    @property
 | |
| -    def binding(self):
 | |
| -        if self.ref().binding == ffi.NULL:
 | |
| -            return None
 | |
| -        else:
 | |
| -            return Binding(self.ref().binding, context=self.context(),
 | |
| -                           owner=self)
 | |
| -
 | |
| -    @property
 | |
| -    def key(self):
 | |
| -        if self.ref().key == ffi.NULL:
 | |
| -            return None
 | |
| -        else:
 | |
| -            return Key(self.ref().key, context=self.context(),
 | |
| -                       owner=self)
 | |
| -
 | |
| -    @property
 | |
| -    def slug(self):
 | |
| -        return ffi.string(self.ref().slug).decode()
 | |
| -
 | |
| -    @property
 | |
| -    def status(self):
 | |
| -        return ffi.string(self.ref().status).decode()
 | |
| -
 | |
| -    @property
 | |
| -    def error(self):
 | |
| -        if self.ref().error == ffi.NULL:
 | |
| -            return None
 | |
| -        else:
 | |
| -            return ffi.string(self.ref().error).decode()
 | |
| -
 | |
| -    def __str__(self):
 | |
| -        if self.error:
 | |
| -            return "{}: {}: {}: {}".format(
 | |
| -                self.timestamp, self.slug, self.status, self.error)
 | |
| -        else:
 | |
| -            return "{}: {}: {}".format(
 | |
| -                self.timestamp, self.slug, self.status)
 | |
| diff --git a/ffi/lang/python/tests/test_store.py b/ffi/lang/python/tests/test_store.py
 | |
| deleted file mode 100644
 | |
| index 7b06cc1a..00000000
 | |
| --- a/ffi/lang/python/tests/test_store.py
 | |
| +++ /dev/null
 | |
| @@ -1,47 +0,0 @@
 | |
| -from sequoia.prelude import Context, Store, Mapping, Fingerprint
 | |
| -
 | |
| -def test_open():
 | |
| -    c = Context(ephemeral=True)
 | |
| -    Mapping.open(c)
 | |
| -
 | |
| -def test_add():
 | |
| -    c = Context(ephemeral=True)
 | |
| -    s = Mapping.open(c)
 | |
| -    fp = Fingerprint.from_hex("7DCA58B54EB143169DDEE15F247F6DABC84914FE")
 | |
| -    s.add("Ἀριστοτέλης", fp)
 | |
| -
 | |
| -def test_iterate():
 | |
| -    c = Context(ephemeral=True)
 | |
| -    s = Mapping.open(c)
 | |
| -    fp = Fingerprint.from_hex("7DCA58B54EB143169DDEE15F247F6DABC84914FE")
 | |
| -    s.add("Ἀριστοτέλης", fp)
 | |
| -    l = list(s.iter())
 | |
| -    assert len(l) == 1
 | |
| -    l = list(Store.list_keys(c))
 | |
| -    assert len(l) == 1
 | |
| -    fpi, key = l[0]
 | |
| -    assert fpi == fp
 | |
| -
 | |
| -def test_logs():
 | |
| -    c = Context(ephemeral=True)
 | |
| -    s = Mapping.open(c)
 | |
| -    fp = Fingerprint.from_hex("7DCA58B54EB143169DDEE15F247F6DABC84914FE")
 | |
| -    b = s.add("Ἀριστοτέλης", fp)
 | |
| -    l = list(s.iter())
 | |
| -    assert len(l) == 1
 | |
| -
 | |
| -    # global logs
 | |
| -    logs = list(Store.log(c))
 | |
| -    assert len(logs) > 0
 | |
| -
 | |
| -    # per store logs
 | |
| -    logs = list(s.log())
 | |
| -    assert len(logs) > 0
 | |
| -
 | |
| -    # per binding logs
 | |
| -    logs = list(b.log())
 | |
| -    assert len(logs) > 0
 | |
| -
 | |
| -    # per key logs
 | |
| -    logs = list(b.key().log())
 | |
| -    assert len(logs) > 0
 | |
| diff --git a/ffi/src/lib.rs b/ffi/src/lib.rs
 | |
| index 40e3672e..9b4577eb 100644
 | |
| --- a/ffi/src/lib.rs
 | |
| +++ b/ffi/src/lib.rs
 | |
| @@ -130,7 +130,6 @@ pub(crate) use crate::openpgp::{
 | |
|      MoveResultIntoRaw,
 | |
|      Maybe,
 | |
|      maybe_time,
 | |
| -    to_time_t,
 | |
|  };
 | |
|  
 | |
|  /* Error handling with implicit context.  */
 | |
| @@ -146,5 +145,4 @@ macro_rules! ffi_make_fry_from_ctx {
 | |
|  pub mod core;
 | |
|  pub mod error;
 | |
|  pub mod net;
 | |
| -pub mod store;
 | |
|  
 | |
| GitLab
 | |
| 
 |