diff options
| author | frosty <frostinator33@airmail.cc> | 2026-10-26 10:21:57 -0400 |
|---|---|---|
| committer | frosty <frostinator33@airmail.cc> | 2026-10-26 10:21:57 -0400 |
| commit | 74aecd8b0986d07b50b7ce310d64e645b8b54e38 (patch) | |
| tree | 560e6434f183eb54cd779936f3a4c9575146a066 /main/src/plugins/omemo/logic/pre_key_store.vala | |
| parent | 3d7e90d401da02d430a87db0ec7e1db3a6f1a68f (diff) | |
| parent | 4436001bb361ad4f9e4e05819214ecf0ea77c063 (diff) | |
Merge 'upstream/master'
Diffstat (limited to 'main/src/plugins/omemo/logic/pre_key_store.vala')
| -rw-r--r-- | main/src/plugins/omemo/logic/pre_key_store.vala | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/main/src/plugins/omemo/logic/pre_key_store.vala b/main/src/plugins/omemo/logic/pre_key_store.vala new file mode 100644 index 00000000..97e27858 --- /dev/null +++ b/main/src/plugins/omemo/logic/pre_key_store.vala @@ -0,0 +1,48 @@ +using Dino.Crypto.Omemo; +using Dino.Qlite; +using Omemo; + +namespace Dino.Plugins.Omemo { + +private class BackedPreKeyStore : PreKeyStore { + private Database db; + private int identity_id; + + public BackedPreKeyStore(Database db, int identity_id) { + this.db = db; + this.identity_id = identity_id; + } + + public override uint8[]? load_pre_key(uint32 pre_key_id) throws Crypto.Error { + RowOption row = db.pre_key.select({db.pre_key.record_base64}) + .with(db.pre_key.identity_id, "=", identity_id) + .with(db.pre_key.pre_key_id, "=", (int) pre_key_id) + .single().row(); + if (!row.is_present()) return null; + return Base64.decode(row[db.pre_key.record_base64]); + } + + public override void store_pre_key(uint32 pre_key_id, uint8[] record) throws Crypto.Error { + db.pre_key.upsert() + .value(db.pre_key.identity_id, identity_id, true) + .value(db.pre_key.pre_key_id, (int) pre_key_id, true) + .value(db.pre_key.record_base64, Base64.encode(record)) + .perform(); + } + + public override bool contains_pre_key(uint32 pre_key_id) throws Crypto.Error { + return db.pre_key.select({db.pre_key.pre_key_id}) + .with(db.pre_key.identity_id, "=", identity_id) + .with(db.pre_key.pre_key_id, "=", (int) pre_key_id) + .count() > 0; + } + + public override void delete_pre_key(uint32 pre_key_id) throws Crypto.Error { + db.pre_key.delete() + .with(db.pre_key.identity_id, "=", identity_id) + .with(db.pre_key.pre_key_id, "=", (int) pre_key_id) + .perform(); + } +} + +} |
