aboutsummaryrefslogtreecommitdiff
path: root/libdino/src
diff options
context:
space:
mode:
authorMarvin W <git@larma.de>2026-10-23 16:46:01 +0200
committerMarvin W <git@larma.de>2026-10-23 17:01:44 +0200
commit5bf8b829b7f7f2fb6e2b920eed8eace6a801157c (patch)
treeb6a4ce6ca29c9ce96dd4547b825436f20e83a793 /libdino/src
parent2eb311938665f92ef48e2cfa030720fc68ca7cc9 (diff)
omemo: Hand direct database access to libomemo
Previously used an in-memory map to represent the database content and kept those in sync
Diffstat (limited to 'libdino/src')
-rw-r--r--libdino/src/crypto/omemo/simple_iks.vala23
-rw-r--r--libdino/src/crypto/omemo/simple_pks.vala19
-rw-r--r--libdino/src/crypto/omemo/simple_spks.vala19
-rw-r--r--libdino/src/crypto/omemo/simple_ss.vala24
-rw-r--r--libdino/src/crypto/omemo/store.vala56
5 files changed, 69 insertions, 72 deletions
diff --git a/libdino/src/crypto/omemo/simple_iks.vala b/libdino/src/crypto/omemo/simple_iks.vala
index b5d0f321..1c9c8a1d 100644
--- a/libdino/src/crypto/omemo/simple_iks.vala
+++ b/libdino/src/crypto/omemo/simple_iks.vala
@@ -4,10 +4,13 @@ using Omemo;
namespace Dino.Crypto.Omemo {
public class SimpleIdentityKeyStore : IdentityKeyStore {
+ public signal void trusted_identity_added(TrustedIdentity id);
+ public signal void trusted_identity_updated(TrustedIdentity id);
+
public override Bytes identity_key_private { get; set; }
public override Bytes identity_key_public { get; set; }
public override uint32 local_registration_id { get; set; }
- private Map<string, Map<int, IdentityKeyStore.TrustedIdentity>> trusted_identities = new HashMap<string, Map<int, IdentityKeyStore.TrustedIdentity>>();
+ private Map<string, Map<int, TrustedIdentity>> trusted_identities = new HashMap<string, Map<int, TrustedIdentity>>();
public override void save_identity(Address address, uint8[] key) throws Error {
string name = address.name;
@@ -20,7 +23,7 @@ public class SimpleIdentityKeyStore : IdentityKeyStore {
trusted_identity_added(trusted_identities[name][address.device_id]);
}
} else {
- trusted_identities[name] = new HashMap<int, IdentityKeyStore.TrustedIdentity>();
+ trusted_identities[name] = new HashMap<int, TrustedIdentity>();
trusted_identities[name][address.device_id] = new TrustedIdentity.by_address(address, key);
trusted_identity_added(trusted_identities[name][address.device_id]);
}
@@ -36,6 +39,22 @@ public class SimpleIdentityKeyStore : IdentityKeyStore {
}
return true;
}
+
+ public class TrustedIdentity {
+ public uint8[] key { get; set; }
+ public string name { get; private set; }
+ public int device_id { get; private set; }
+
+ public TrustedIdentity(string name, int device_id, uint8[] key) {
+ this.key = key;
+ this.name = name;
+ this.device_id = device_id;
+ }
+
+ public TrustedIdentity.by_address(Address address, uint8[] key) {
+ this(address.name, address.device_id, key);
+ }
+ }
}
}
diff --git a/libdino/src/crypto/omemo/simple_pks.vala b/libdino/src/crypto/omemo/simple_pks.vala
index 80aaf2eb..f22def89 100644
--- a/libdino/src/crypto/omemo/simple_pks.vala
+++ b/libdino/src/crypto/omemo/simple_pks.vala
@@ -4,7 +4,10 @@ using Omemo;
namespace Dino.Crypto.Omemo {
public class SimplePreKeyStore : PreKeyStore {
- private Map<uint32, PreKeyStore.Key> pre_key_map = new HashMap<uint32, PreKeyStore.Key>();
+ public signal void pre_key_stored(Key key);
+ public signal void pre_key_deleted(Key key);
+
+ private Map<uint32, Key> pre_key_map = new HashMap<uint32, Key>();
public override uint8[]? load_pre_key(uint32 pre_key_id) throws Error {
if (contains_pre_key(pre_key_id)) {
@@ -14,7 +17,7 @@ public class SimplePreKeyStore : PreKeyStore {
}
public override void store_pre_key(uint32 pre_key_id, uint8[] record) throws Error {
- PreKeyStore.Key key = new Key(pre_key_id, record);
+ Key key = new Key(pre_key_id, record);
pre_key_map[pre_key_id] = key;
pre_key_stored(key);
}
@@ -24,11 +27,21 @@ public class SimplePreKeyStore : PreKeyStore {
}
public override void delete_pre_key(uint32 pre_key_id) throws Error {
- PreKeyStore.Key key;
+ Key key;
if (pre_key_map.unset(pre_key_id, out key)) {
pre_key_deleted(key);
}
}
+
+ public class Key {
+ public uint32 key_id { get; private set; }
+ public uint8[] record { get; private set; }
+
+ public Key(uint32 key_id, uint8[] record) {
+ this.key_id = key_id;
+ this.record = record;
+ }
+ }
}
} \ No newline at end of file
diff --git a/libdino/src/crypto/omemo/simple_spks.vala b/libdino/src/crypto/omemo/simple_spks.vala
index 22cc6f12..b4a1b610 100644
--- a/libdino/src/crypto/omemo/simple_spks.vala
+++ b/libdino/src/crypto/omemo/simple_spks.vala
@@ -4,7 +4,10 @@ using Omemo;
namespace Dino.Crypto.Omemo {
public class SimpleSignedPreKeyStore : SignedPreKeyStore {
- private Map<uint32, SignedPreKeyStore.Key> pre_key_map = new HashMap<uint32, SignedPreKeyStore.Key>();
+ public signal void signed_pre_key_stored(Key key);
+ public signal void signed_pre_key_deleted(Key key);
+
+ private Map<uint32, Key> pre_key_map = new HashMap<uint32, Key>();
public override uint8[]? load_signed_pre_key(uint32 pre_key_id) throws Error {
if (contains_signed_pre_key(pre_key_id)) {
@@ -14,7 +17,7 @@ public class SimpleSignedPreKeyStore : SignedPreKeyStore {
}
public override void store_signed_pre_key(uint32 pre_key_id, uint8[] record) throws Error {
- SignedPreKeyStore.Key key = new Key(pre_key_id, record);
+ Key key = new Key(pre_key_id, record);
pre_key_map[pre_key_id] = key;
signed_pre_key_stored(key);
}
@@ -24,11 +27,21 @@ public class SimpleSignedPreKeyStore : SignedPreKeyStore {
}
public override void delete_signed_pre_key(uint32 pre_key_id) throws Error {
- SignedPreKeyStore.Key key;
+ Key key;
if (pre_key_map.unset(pre_key_id, out key)) {
signed_pre_key_deleted(key);
}
}
+
+ public class Key {
+ public uint32 key_id { get; private set; }
+ public uint8[] record { get; private set; }
+
+ public Key(uint32 key_id, uint8[] record) {
+ this.key_id = key_id;
+ this.record = record;
+ }
+ }
}
} \ No newline at end of file
diff --git a/libdino/src/crypto/omemo/simple_ss.vala b/libdino/src/crypto/omemo/simple_ss.vala
index a2e11607..8c095c6d 100644
--- a/libdino/src/crypto/omemo/simple_ss.vala
+++ b/libdino/src/crypto/omemo/simple_ss.vala
@@ -4,12 +4,14 @@ using Omemo;
namespace Dino.Crypto.Omemo {
public class SimpleSessionStore : SessionStore {
+ public signal void session_stored(Session session);
+ public signal void session_removed(Session session);
- private Map<string, ArrayList<SessionStore.Session>> session_map = new HashMap<string, ArrayList<SessionStore.Session>>();
+ private Map<string, ArrayList<Session>> session_map = new HashMap<string, ArrayList<Session>>();
public override uint8[]? load_session(Address address) throws Error {
if (session_map.has_key(address.name)) {
- foreach (SessionStore.Session session in session_map[address.name]) {
+ foreach (Session session in session_map[address.name]) {
if (session.device_id == address.device_id) return session.record;
}
}
@@ -19,7 +21,7 @@ public class SimpleSessionStore : SessionStore {
public override IntList get_sub_device_sessions(string name) throws Error {
IntList res = new IntList();
if (session_map.has_key(name)) {
- foreach (SessionStore.Session session in session_map[name]) {
+ foreach (Session session in session_map[name]) {
res.add(session.device_id);
}
}
@@ -31,16 +33,16 @@ public class SimpleSessionStore : SessionStore {
delete_session(address);
}
if (!session_map.has_key(address.name)) {
- session_map[address.name] = new ArrayList<SessionStore.Session>();
+ session_map[address.name] = new ArrayList<Session>();
}
- SessionStore.Session session = new Session() { name = address.name, device_id = address.device_id, record = record };
+ Session session = new Session() { name = address.name, device_id = address.device_id, record = record };
session_map[address.name].add(session);
session_stored(session);
}
public override bool contains_session(Address address) throws Error {
if (!session_map.has_key(address.name)) return false;
- foreach (SessionStore.Session session in session_map[address.name]) {
+ foreach (Session session in session_map[address.name]) {
if (session.device_id == address.device_id) return true;
}
return false;
@@ -48,7 +50,7 @@ public class SimpleSessionStore : SessionStore {
public override void delete_session(Address address) throws Error {
if (!session_map.has_key(address.name)) throw_by_code(ErrorCode.UNKNOWN, "No session found");
- foreach (SessionStore.Session session in session_map[address.name]) {
+ foreach (Session session in session_map[address.name]) {
if (session.device_id == address.device_id) {
session_map[address.name].remove(session);
if (session_map[address.name].size == 0) {
@@ -62,7 +64,7 @@ public class SimpleSessionStore : SessionStore {
public override void delete_all_sessions(string name) throws Error {
if (session_map.has_key(name)) {
- foreach (SessionStore.Session session in session_map[name]) {
+ foreach (Session session in session_map[name]) {
session_map[name].remove(session);
if (session_map[name].size == 0) {
session_map.unset(name);
@@ -71,6 +73,12 @@ public class SimpleSessionStore : SessionStore {
}
}
}
+
+ public class Session {
+ public string name;
+ public int device_id;
+ public uint8[] record;
+ }
}
} \ No newline at end of file
diff --git a/libdino/src/crypto/omemo/store.vala b/libdino/src/crypto/omemo/store.vala
index 5e57b0b2..746c07d7 100644
--- a/libdino/src/crypto/omemo/store.vala
+++ b/libdino/src/crypto/omemo/store.vala
@@ -7,34 +7,12 @@ public abstract class IdentityKeyStore : Object {
public abstract Bytes identity_key_public { get; set; }
public abstract uint32 local_registration_id { get; set; }
- public signal void trusted_identity_added(TrustedIdentity id);
- public signal void trusted_identity_updated(TrustedIdentity id);
-
public abstract void save_identity(Address address, uint8[] key) throws Error ;
public abstract bool is_trusted_identity(Address address, uint8[] key) throws Error ;
-
- public class TrustedIdentity {
- public uint8[] key { get; set; }
- public string name { get; private set; }
- public int device_id { get; private set; }
-
- public TrustedIdentity(string name, int device_id, uint8[] key) {
- this.key = key;
- this.name = name;
- this.device_id = device_id;
- }
-
- public TrustedIdentity.by_address(Address address, uint8[] key) {
- this(address.name, address.device_id, key);
- }
- }
}
public abstract class SessionStore : Object {
-
- public signal void session_stored(Session session);
- public signal void session_removed(Session session);
public abstract uint8[]? load_session(Address address) throws Error ;
public abstract IntList get_sub_device_sessions(string name) throws Error ;
@@ -46,19 +24,9 @@ public abstract class SessionStore : Object {
public abstract void delete_session(Address address) throws Error ;
public abstract void delete_all_sessions(string name) throws Error ;
-
- public class Session {
- public string name;
- public int device_id;
- public uint8[] record;
- }
}
public abstract class PreKeyStore : Object {
-
- public signal void pre_key_stored(Key key);
- public signal void pre_key_deleted(Key key);
-
public abstract uint8[]? load_pre_key(uint32 pre_key_id) throws Error ;
public abstract void store_pre_key(uint32 pre_key_id, uint8[] record) throws Error ;
@@ -66,23 +34,9 @@ public abstract class PreKeyStore : Object {
public abstract bool contains_pre_key(uint32 pre_key_id) throws Error ;
public abstract void delete_pre_key(uint32 pre_key_id) throws Error ;
-
- public class Key {
- public uint32 key_id { get; private set; }
- public uint8[] record { get; private set; }
-
- public Key(uint32 key_id, uint8[] record) {
- this.key_id = key_id;
- this.record = record;
- }
- }
}
public abstract class SignedPreKeyStore : Object {
-
- public signal void signed_pre_key_stored(Key key);
- public signal void signed_pre_key_deleted(Key key);
-
public abstract uint8[]? load_signed_pre_key(uint32 pre_key_id) throws Error ;
public abstract void store_signed_pre_key(uint32 pre_key_id, uint8[] record) throws Error ;
@@ -90,16 +44,6 @@ public abstract class SignedPreKeyStore : Object {
public abstract bool contains_signed_pre_key(uint32 pre_key_id) throws Error ;
public abstract void delete_signed_pre_key(uint32 pre_key_id) throws Error ;
-
- public class Key {
- public uint32 key_id { get; private set; }
- public uint8[] record { get; private set; }
-
- public Key(uint32 key_id, uint8[] record) {
- this.key_id = key_id;
- this.record = record;
- }
- }
}
public class Store : Object {