changeset c597ffa887f3 in /home/hg/repos/gajim-plugins

author: lovetox <[email protected]>
branches: 
details:gajim-plugins?cmd=changeset;node=c597ffa887f3
description: Create new PreKeys if minimum amount is reached

diffstat:

 omemo/omemo/liteaxolotlstore.py |   1 +
 omemo/omemo/liteprekeystore.py  |  20 ++++++++++++++++++++
 omemo/omemo/state.py            |  14 ++++++++++++--
 3 files changed, 33 insertions(+), 2 deletions(-)

diffs (81 lines):

diff -r 6e94ab2e1933 -r c597ffa887f3 omemo/omemo/liteaxolotlstore.py
--- a/omemo/omemo/liteaxolotlstore.py   Fri Jul 22 20:01:43 2016 +0200
+++ b/omemo/omemo/liteaxolotlstore.py   Sat Jul 23 00:50:53 2016 +0200
@@ -31,6 +31,7 @@
 log = logging.getLogger('gajim.plugin_system.omemo')
 
 DEFAULT_PREKEY_AMOUNT = 100
+MIN_PREKEY_AMOUNT = 80
 
 
 class LiteAxolotlStore(AxolotlStore):
diff -r 6e94ab2e1933 -r c597ffa887f3 omemo/omemo/liteprekeystore.py
--- a/omemo/omemo/liteprekeystore.py    Fri Jul 22 20:01:43 2016 +0200
+++ b/omemo/omemo/liteprekeystore.py    Sat Jul 23 00:50:53 2016 +0200
@@ -19,6 +19,7 @@
 
 from axolotl.state.prekeyrecord import PreKeyRecord
 from axolotl.state.prekeystore import PreKeyStore
+from axolotl.util.keyhelper import KeyHelper
 
 
 class LitePreKeyStore(PreKeyStore):
@@ -69,3 +70,22 @@
         cursor = self.dbConn.cursor()
         cursor.execute(q, (preKeyId, ))
         self.dbConn.commit()
+
+    def getCurrentPreKeyId(self):
+        q = "SELECT MAX(prekey_id) FROM prekeys"
+        cursor = self.dbConn.cursor()
+        cursor.execute(q)
+        return cursor.fetchone()[0]
+
+    def getPreKeyCount(self):
+        q = "SELECT COUNT(prekey_id) FROM prekeys"
+        cursor = self.dbConn.cursor()
+        cursor.execute(q)
+        return cursor.fetchone()[0]
+
+    def generateNewPreKeys(self, count):
+        startId = self.getCurrentPreKeyId() + 1
+        preKeys = KeyHelper.generatePreKeys(startId, count)
+
+        for preKey in preKeys:
+            self.storePreKey(preKey.getId(), preKey)
diff -r 6e94ab2e1933 -r c597ffa887f3 omemo/omemo/state.py
--- a/omemo/omemo/state.py      Fri Jul 22 20:01:43 2016 +0200
+++ b/omemo/omemo/state.py      Sat Jul 23 00:50:53 2016 +0200
@@ -35,9 +35,9 @@
 from Crypto.Random import get_random_bytes
 
 from .aes_gcm import NoValidSessions, aes_decrypt, aes_encrypt
-from .liteaxolotlstore import LiteAxolotlStore
+from .liteaxolotlstore import (LiteAxolotlStore, DEFAULT_PREKEY_AMOUNT,
+                               MIN_PREKEY_AMOUNT)
 
-# log = logging.getLogger('omemo')
 log = logging.getLogger('gajim.plugin_system.omemo')
 
 
@@ -328,6 +328,7 @@
         sessionCipher = self.get_session_cipher(recipient_id, device_id)
         if self.isTrusted(sessionCipher) != UNTRUSTED:
             key = sessionCipher.decryptPkmsg(preKeyWhisperMessage)
+            self.checkPreKeyAmount()
             return key
         else:
             raise Exception("Received PreKeyWhisperMessage "
@@ -343,3 +344,12 @@
         else:
             raise Exception("Received WhisperMessage "
                             "from Untrusted Fingerprint!")
+
+    def checkPreKeyAmount(self):
+        # Check if enough PreKeys are available
+        preKeyCount = self.store.preKeyStore.getPreKeyCount()
+        if preKeyCount < MIN_PREKEY_AMOUNT:
+            newKeys = DEFAULT_PREKEY_AMOUNT - preKeyCount
+            self.store.preKeyStore.generateNewPreKeys(newKeys)
+            log.info(self.account + ' => ' + str(newKeys) +
+                     ' PreKeys created')
_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to