changeset 1090:594fbdda4a87

memory: add helper methods encryptValue and decryptValue
author souliane <souliane@mailoo.org>
date Wed, 25 Jun 2014 19:01:00 +0200
parents 8e0072754413
children 2d035aaea13b
files src/memory/memory.py src/memory/params.py
diffstat 2 files changed, 31 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/memory/memory.py	Mon Jun 23 10:23:13 2014 +0200
+++ b/src/memory/memory.py	Wed Jun 25 19:01:00 2014 +0200
@@ -517,6 +517,36 @@
             except KeyError:
                 log.debug("Can't delete entity [%s]: not in cache" % entity.full())
 
+    def encryptValue(self, value, profile):
+        """Encrypt a value for the given profile. The personal key must be loaded
+        already in the profile session, that should be the case if the profile is
+        already authenticated.
+
+        @param value (str): the value to encrypt
+        @param profile (str): %(doc_profile)s
+        @return: the deferred encrypted value
+        """
+        try:
+            personal_key = self.host.memory.auth_sessions.profileGetUnique(profile)[C.MEMORY_CRYPTO_KEY]
+        except TypeError:
+            raise exceptions.InternalError(_('Trying to encrypt a value for %s while the personal key is undefined!') % profile)
+        return BlockCipher.encrypt(personal_key, value)
+
+    def decryptValue(self, value, profile):
+        """Decrypt a value for the given profile. The personal key must be loaded
+        already in the profile session, that should be the case if the profile is
+        already authenticated.
+
+        @param value (str): the value to decrypt
+        @param profile (str): %(doc_profile)s
+        @return: the deferred decrypted value
+        """
+        try:
+            personal_key = self.host.memory.auth_sessions.profileGetUnique(profile)[C.MEMORY_CRYPTO_KEY]
+        except TypeError:
+            raise exceptions.InternalError(_('Trying to decrypt a value for %s while the personal key is undefined!') % profile)
+        return BlockCipher.decrypt(personal_key, value)
+
     def encryptPersonalData(self, data_key, data_value, crypto_key, profile):
         """Re-encrypt a personal data (saved to a PersistentDict).
 
--- a/src/memory/params.py	Mon Jun 23 10:23:13 2014 +0200
+++ b/src/memory/params.py	Wed Jun 25 19:01:00 2014 +0200
@@ -385,11 +385,7 @@
             return defer.succeed(value)  # profile password and empty passwords are returned "as is"
         if not profile:
             raise exceptions.ProfileUnknownError('The profile is needed to decrypt a password')
-        try:
-            personal_key = self.host.memory.auth_sessions.profileGetUnique(profile)[C.MEMORY_CRYPTO_KEY]
-        except TypeError:
-            raise exceptions.InternalError(_('Trying to decrypt a password while the personal key is undefined!'))
-        d = BlockCipher.decrypt(personal_key, value)
+        d = self.host.memory.decryptValue(value, profile)
 
         def gotPlainPassword(password):
             if password is None:  # empty value means empty password, None means decryption failure