xi-keyring

simple and extensible alternative for gnome-keyring
git clone https://git.ce9e.org/xi-keyring.git

commit
cfbf9e49c5b3f4d2926e36dfdadf72dd8951a01c
parent
1f5798323aa5cd0d492ca48ac1dffbaa34fdd20e
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2026-03-05 11:41
lint

Diffstat

M xikeyring/dbus.py 19 +++++++++++--------
M xikeyring/keyring.py 12 ++++++------
M xikeyring/prompt.py 2 +-

3 files changed, 18 insertions, 15 deletions


diff --git a/xikeyring/dbus.py b/xikeyring/dbus.py

@@ -38,10 +38,10 @@ class BaseDBusService:
   38    38             self.set_prop,
   39    39         )
   40    40 
   41    -1     def on_bus_acquired(self, conn, bus, user_data=None):
   -1    41     def on_bus_acquired(self, conn, bus):
   42    42         print(f'bus {bus} acquired', file=sys.stderr)
   43    43 
   44    -1     def on_name_lost(self, conn, name, user_data=None):
   -1    44     def on_name_lost(self, conn, name):
   45    45         sys.exit(f'Could not aquire name {name}. Is some other service blocking it?')
   46    46 
   47    47     def run(self, name):
@@ -95,7 +95,10 @@ class BaseDBusService:
   95    95         try:
   96    96             fds = invocation.get_message().get_unix_fd_list()
   97    97             types = GLib.Variant.split_signature(params.get_type_string())
   98    -1             args = [fds.get(v) if t == 'h' else v for v, t in zip(params, types)]
   -1    98             args = [
   -1    99                 fds.get(v) if t == 'h' else v
   -1   100                 for v, t in zip(params, types, strict=True)
   -1   101             ]
   99   102 
  100   103             error = Gio.DBusError.UNKNOWN_METHOD
  101   104             result = self._call(conn, sender, path, iface, method, args, error)
@@ -139,9 +142,7 @@ class DBusService(BaseDBusService):
  139   142         return [f'{OFSP}/collection/it/{id}' for id in items]
  140   143 
  141   144     def update_items(self, conn, *, add=[], rm=[], emit=True):
  142    -1         real_rm = [
  143    -1             id for id, reg_id in list(self.registered_items.items()) if id in rm
  144    -1         ]
   -1   145         real_rm = [id for id, reg_id in list(self.registered_items.items()) if id in rm]
  145   146         real_add = [id for id in add if id not in self.registered_items]
  146   147 
  147   148         for id in real_rm:
@@ -214,7 +215,7 @@ class DBusService(BaseDBusService):
  214   215             None,
  215   216             Gio.DBusSignalFlags.NONE,
  216   217             self.on_name_owner_changed,
  217    -1             None
   -1   218             None,
  218   219         )
  219   220         return GLib.Variant('(vo)', (GLib.Variant('ay', output), session_path))
  220   221 
@@ -374,7 +375,9 @@ class DBusService(BaseDBusService):
  374   375         return GLib.Variant('u', 1)
  375   376 
  376   377     def secret_retrieve_secret(self, conn, sender, path, handle, app_id, fd, options):
  377    -1         reg_id = self.register_object(conn, handle, 'org.freedesktop.impl.portal.Request')
   -1   378         reg_id = self.register_object(
   -1   379             conn, handle, 'org.freedesktop.impl.portal.Request'
   -1   380         )
  378   381         try:
  379   382             if self.get_app_id(conn, sender):
  380   383                 raise AccessDeniedError

diff --git a/xikeyring/keyring.py b/xikeyring/keyring.py

@@ -49,12 +49,12 @@ class Crypt:
   49    49         return base64.urlsafe_b64encode(key)
   50    50 
   51    51     def get_argon2(
   52    -1             self,
   53    -1             salt: bytes,
   54    -1             time_cost: int,
   55    -1             memory_cost: int,
   56    -1             parallelism: int,
   57    -1         ) -> bytes:
   -1    52         self,
   -1    53         salt: bytes,
   -1    54         time_cost: int,
   -1    55         memory_cost: int,
   -1    56         parallelism: int,
   -1    57     ) -> bytes:
   58    58         # https://www.rfc-editor.org/rfc/rfc9106.html#name-parameter-choice
   59    59         key = argon2.low_level.hash_secret_raw(
   60    60             secret=self.password.value,

diff --git a/xikeyring/prompt.py b/xikeyring/prompt.py

@@ -64,7 +64,7 @@ class PinentryPrompt:
   64    64     def confirm(self, desc: str) -> bool:
   65    65         with self:
   66    66             self.setup('Confirmation required', desc)
   67    -1             success, resp = self.call(b'CONFIRM')
   -1    67             success, _resp = self.call(b'CONFIRM')
   68    68             return success
   69    69 
   70    70