Fully encrypt both label and the id for the label
authorMaran <maran.hidskes@gmail.com>
Sun, 17 Mar 2013 17:27:26 +0000 (18:27 +0100)
committerMaran <maran.hidskes@gmail.com>
Sun, 17 Mar 2013 17:27:26 +0000 (18:27 +0100)
plugins/labels.py

index bd9aa69..e00d1bf 100644 (file)
@@ -13,11 +13,21 @@ from PyQt4.QtGui import *
 from PyQt4.QtCore import *
 import PyQt4.QtCore as QtCore
 import PyQt4.QtGui as QtGui
+import aes
+import base64
 from electrum_gui import bmp, pyqrnative, BasePlugin
 from electrum_gui.i18n import _
 
 class Plugin(BasePlugin):
 
+    def encode(self, message):
+        encoded_message = base64.b64encode(aes.encryptData(self.encode_password, message))
+        return encoded_message
+
+    def decode(self, message):
+        decoded_message = aes.decryptData(self.encode_password, base64.b64decode(message)) 
+        return decoded_message
+
     def __init__(self, gui):
         self.target_host = 'labelectrum.herokuapp.com'
         BasePlugin.__init__(self, gui, 'labels', _('Label Sync'),_('This plugin can sync your labels accross multiple Electrum installs by using a remote database to save your data. Labels are not encrypted, \
@@ -29,6 +39,7 @@ To get started visit http://labelectrum.herokuapp.com/ to sign up for an account
         self.config = gui.config
         self.labels = self.wallet.labels
         self.transactions = self.wallet.transactions
+        self.encode_password = hashlib.sha1(self.config.get("master_public_key")).digest().encode('hex')[:32]
 
         self.wallet_id = hashlib.sha256(str(self.config.get("master_public_key"))).digest().encode('hex')
 
@@ -57,8 +68,7 @@ To get started visit http://labelectrum.herokuapp.com/ to sign up for an account
         if not changed:
             return 
 
-        hashed = hashlib.sha256(item).digest().encode('hex')
-        bundle = {"label": {"external_id": hashed, "text": label}}
+        bundle = {"label": {"external_id": self.encode(item), "text": self.encode(label)}}
         params = json.dumps(bundle)
         connection = httplib.HTTPConnection(self.target_host)
         connection.request("POST", ("/api/wallets/%s/labels.json?auth_token=%s" % (self.wallet_id, self.auth_token())), params, {'Content-Type': 'application/json'})
@@ -143,8 +153,8 @@ To get started visit http://labelectrum.herokuapp.com/ to sign up for an account
     def do_full_push(self):
         bundle = {"labels": {}}
         for key, value in self.labels.iteritems():
-            hashed = hashlib.sha256(key).digest().encode('hex')
-            bundle["labels"][hashed] = value
+            encoded = self.encode(key)
+            bundle["labels"][encoded] = self.encode(value)
 
         params = json.dumps(bundle)
         connection = httplib.HTTPConnection(self.target_host)
@@ -180,14 +190,8 @@ To get started visit http://labelectrum.herokuapp.com/ to sign up for an account
             return False
 
         for label in response:
-            for key in self.addresses:
-                target_hashed = hashlib.sha256(key).digest().encode('hex')
-                if label["external_id"] == target_hashed:
-                   if force or not self.labels.get(key):
-                       self.labels[key] = label["text"] 
-            for key, value in self.transactions.iteritems():
-                target_hashed = hashlib.sha256(key).digest().encode('hex')
-                if label["external_id"] == target_hashed:
-                   if force or not self.labels.get(key):
-                       self.labels[key] = label["text"] 
+             decoded_key = self.decode(label["external_id"]) 
+             decoded_label = self.decode(label["text"]) 
+             if force or not self.labels.get(decoded_key):
+                 self.labels[decoded_key] = decoded_label 
         return True