1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

secrets: refactor for py3 (from 3c9c04d4)

This commit is contained in:
Zach Moody
2016-06-22 22:07:39 -05:00
parent ed794392c6
commit b21833f79c
2 changed files with 12 additions and 4 deletions

View File

@ -233,15 +233,23 @@ class Secret(CreatedUpdatedModel):
pad_length = 16 - ((len(s) + 2) % 16)
else:
pad_length = 0
return chr(len(s) >> 8) + chr(len(s) % 256) + s + os.urandom(pad_length)
return (
chr(len(s) >> 8).encode() +
chr(len(s) % 256).encode() +
s.encode() +
os.urandom(pad_length)
)
def _unpad(self, s):
"""
Consume the first two bytes of s as a plaintext length indicator and return only that many bytes as the
plaintext.
"""
plaintext_length = (ord(s[0]) << 8) + ord(s[1])
return s[2:plaintext_length + 2]
if isinstance(s[0], int):
plaintext_length = (s[0] << 8) + s[1]
elif isinstance(s[0], str):
plaintext_length = (ord(s[0]) << 8) + ord(s[1])
return s[2:plaintext_length + 2].decode()
def encrypt(self, secret_key):
"""

View File

@ -100,7 +100,7 @@ class SecretTestCase(TestCase):
# Ensure proper hashing algorithm is used
hasher, iterations, salt, sha256 = s.hash.split('$')
self.assertEqual(hasher, 'pbkdf2_sha256', "Hashing algorithm has been modified to: {}".format(hasher))
self.assertGreaterEqual(iterations, 24000, "Insufficient iteration count ({}) for hash".format(iterations))
self.assertGreaterEqual(int(iterations), 24000, "Insufficient iteration count ({}) for hash".format(iterations))
self.assertGreaterEqual(len(salt), 12, "Hash salt is too short ({} chars)".format(len(salt)))
# Test hash validation