fixed sessions for long keys

This commit is contained in:
mdipierro
2016-03-24 16:58:04 -05:00
parent c9e92fc686
commit 8f8ef4cca5
+4 -7
View File
@@ -163,11 +163,8 @@ def get_callable_argspec(fn):
def pad(s, n=32, padchar=' '): def pad(s, n=32, padchar=' '):
if len(s)<n: return s + (32 - len(s) % 32) * padchar
s += (32 - len(s)) * padchar
elif len(s)>n:
s = s[:n]
return s
def secure_dumps(data, encryption_key, hash_key=None, compression_level=None): def secure_dumps(data, encryption_key, hash_key=None, compression_level=None):
if not hash_key: if not hash_key:
@@ -175,7 +172,7 @@ def secure_dumps(data, encryption_key, hash_key=None, compression_level=None):
dump = pickle.dumps(data, pickle.HIGHEST_PROTOCOL) dump = pickle.dumps(data, pickle.HIGHEST_PROTOCOL)
if compression_level: if compression_level:
dump = zlib.compress(dump, compression_level) dump = zlib.compress(dump, compression_level)
key = pad(encryption_key) key = pad(encryption_key)[:32]
cipher, IV = AES_new(key) cipher, IV = AES_new(key)
encrypted_data = base64.urlsafe_b64encode(IV + cipher.encrypt(pad(dump))) encrypted_data = base64.urlsafe_b64encode(IV + cipher.encrypt(pad(dump)))
signature = hmac.new(hash_key, encrypted_data).hexdigest() signature = hmac.new(hash_key, encrypted_data).hexdigest()
@@ -191,7 +188,7 @@ def secure_loads(data, encryption_key, hash_key=None, compression_level=None):
actual_signature = hmac.new(hash_key, encrypted_data).hexdigest() actual_signature = hmac.new(hash_key, encrypted_data).hexdigest()
if not compare(signature, actual_signature): if not compare(signature, actual_signature):
return None return None
key = pad(encryption_key[:32]) key = pad(encryption_key)[:32]
encrypted_data = base64.urlsafe_b64decode(encrypted_data) encrypted_data = base64.urlsafe_b64decode(encrypted_data)
IV, encrypted_data = encrypted_data[:16], encrypted_data[16:] IV, encrypted_data = encrypted_data[:16], encrypted_data[16:]
cipher, _ = AES_new(key, IV=IV) cipher, _ = AES_new(key, IV=IV)