# HG changeset patch # User souliane # Date 1403715660 -7200 # Node ID 594fbdda4a879c105cdc92c16934d808df92b31b # Parent 8e0072754413f67311fe65bd3eac4323863707f8 memory: add helper methods encryptValue and decryptValue diff -r 8e0072754413 -r 594fbdda4a87 src/memory/memory.py --- 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). diff -r 8e0072754413 -r 594fbdda4a87 src/memory/params.py --- 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