diff --git a/omemo/backend/liteaxolotlstore.py b/omemo/backend/liteaxolotlstore.py index 8e56d8a..70111aa 100644 --- a/omemo/backend/liteaxolotlstore.py +++ b/omemo/backend/liteaxolotlstore.py @@ -33,6 +33,7 @@ from axolotl.util.medium import Medium from axolotl.util.keyhelper import KeyHelper from omemo.backend.util import Trust +from omemo.backend.util import IdentityKeyExtended from omemo.backend.util import DEFAULT_PREKEY_AMOUNT @@ -42,8 +43,14 @@ log = logging.getLogger('gajim.plugin_system.omemo') def _convert_to_string(text): return text.decode() +def _convert_identity_key(key): + if not key: + return + return IdentityKeyExtended(DjbECPublicKey(key[1:])) + sqlite3.register_converter('jid', _convert_to_string) +sqlite3.register_converter('pk', _convert_identity_key) class LiteAxolotlStore(AxolotlStore): @@ -399,13 +406,12 @@ class LiteAxolotlStore(AxolotlStore): self.storePreKey(pre_key.getId(), pre_key) def getIdentityKeyPair(self): - query = '''SELECT public_key, private_key FROM identities - WHERE recipient_id = -1''' + query = '''SELECT public_key as "public_key [pk]", private_key + FROM identities WHERE recipient_id = -1''' result = self._con.execute(query).fetchone() - return IdentityKeyPair( - IdentityKey(DjbECPublicKey(result.public_key[1:])), - DjbECPrivateKey(result.private_key)) + return IdentityKeyPair(result.public_key, + DjbECPrivateKey(result.private_key)) def getLocalRegistrationId(self): query = 'SELECT registration_id FROM identities WHERE recipient_id = -1' @@ -460,12 +466,12 @@ class LiteAxolotlStore(AxolotlStore): def getFingerprints(self, jid): query = '''SELECT _id, recipient_id as "recipient_id [jid]", - public_key, trust FROM identities + public_key as "public_key [pk]", trust FROM identities WHERE recipient_id =? ORDER BY trust ASC''' return self._con.execute(query, (jid,)).fetchall() def getTrustedFingerprints(self, jid): - query = '''SELECT public_key FROM identities + query = '''SELECT public_key as "public_key [pk]" FROM identities WHERE recipient_id = ? AND trust = ?''' result = self._con.execute(query, (jid, Trust.TRUSTED)).fetchall() return [row.public_key for row in result] diff --git a/omemo/backend/util.py b/omemo/backend/util.py index b31539c..1a440a5 100644 --- a/omemo/backend/util.py +++ b/omemo/backend/util.py @@ -18,6 +18,8 @@ import binascii import textwrap from enum import IntEnum +from axolotl.identitykey import IdentityKey + DEFAULT_PREKEY_AMOUNT = 100 MIN_PREKEY_AMOUNT = 80 SPK_ARCHIVE_TIME = 86400 * 15 # 15 Days @@ -43,3 +45,12 @@ def get_fingerprint(identity_key, formatted=False): buf += '{0} '.format(fingerprint[w:w + wordsize]) buf = textwrap.fill(buf, width=36) return buf.rstrip().upper() + + +class IdentityKeyExtended(IdentityKey): + def __hash__(self): + return hash(self.publicKey.serialize()) + + def get_fingerprint(self, formatted=False): + return get_fingerprint(self, formatted=formatted) + \ No newline at end of file