memory: add helper methods encryptValue and decryptValue

This commit is contained in:
souliane 2014-06-25 19:01:00 +02:00
commit 94d36a7d3e
2 changed files with 31 additions and 5 deletions

View file

@ -517,6 +517,36 @@ class Memory(object):
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).

View file

@ -385,11 +385,7 @@ class Params(object):
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