def test_ldap_password_valid(self): """test the ldap auth method with all the schemes""" salt = b"UVVAQvrMyXMF3FF3" schemes_salt = [b"{SMD5}", b"{SSHA}", b"{SSHA256}", b"{SSHA384}", b"{SSHA512}"] schemes_nosalt = [b"{MD5}", b"{SHA}", b"{SHA256}", b"{SHA384}", b"{SHA512}"] hashed_password1 = [] for scheme in schemes_salt: hashed_password1.append( utils.LdapHashUserPassword.hash(scheme, self.password1, salt, charset="utf8") ) for scheme in schemes_nosalt: hashed_password1.append( utils.LdapHashUserPassword.hash(scheme, self.password1, charset="utf8") ) hashed_password1.append( utils.LdapHashUserPassword.hash( b"{CRYPT}", self.password1, b"$6$UVVAQvrMyXMF3FF3", charset="utf8" ) ) for hp1 in hashed_password1: self.assertIsInstance(hp1, bytes) self.assertTrue(utils.check_password("ldap", self.password1, hp1, "utf8")) self.assertFalse(utils.check_password("ldap", self.password2, hp1, "utf8"))
def test_ldap_password_valid(self): """test the ldap auth method with all the schemes""" salt = b"UVVAQvrMyXMF3FF3" schemes_salt = [ b"{SMD5}", b"{SSHA}", b"{SSHA256}", b"{SSHA384}", b"{SSHA512}" ] schemes_nosalt = [ b"{MD5}", b"{SHA}", b"{SHA256}", b"{SHA384}", b"{SHA512}" ] hashed_password1 = [] for scheme in schemes_salt: hashed_password1.append( utils.LdapHashUserPassword.hash(scheme, self.password1, salt, charset="utf8")) for scheme in schemes_nosalt: hashed_password1.append( utils.LdapHashUserPassword.hash(scheme, self.password1, charset="utf8")) hashed_password1.append( utils.LdapHashUserPassword.hash(b"{CRYPT}", self.password1, b"$6$UVVAQvrMyXMF3FF3", charset="utf8")) for hp1 in hashed_password1: self.assertIsInstance(hp1, bytes) self.assertTrue( utils.check_password("ldap", self.password1, hp1, "utf8")) self.assertFalse( utils.check_password("ldap", self.password2, hp1, "utf8"))
def test_plain_unicode(self): """test the plain auth method with unicode input""" self.assertTrue( utils.check_password("plain", self.password1.decode("utf8"), self.password1.decode("utf8"), "utf8")) self.assertFalse( utils.check_password("plain", self.password1.decode("utf8"), self.password2.decode("utf8"), "utf8"))
def test_plain(self): """test the plain auth method""" self.assertTrue( utils.check_password("plain", self.password1, self.password1, "utf8")) self.assertFalse( utils.check_password("plain", self.password1, self.password2, "utf8"))
def test_hex(self): """test all the hex_HASH method: the hashed password is a simple hash of the password""" hashes = ["md5", "sha1", "sha224", "sha256", "sha384", "sha512"] hashed_password1 = [] for hash_scheme in hashes: hashed_password1.append( ( "hex_%s" % hash_scheme, getattr(utils.hashlib, hash_scheme)(self.password1).hexdigest() ) ) for (method, hp1) in hashed_password1: self.assertTrue(utils.check_password(method, self.password1, hp1, "utf8")) self.assertFalse(utils.check_password(method, self.password2, hp1, "utf8"))
def test_hex(self): """test all the hex_HASH method: the hashed password is a simple hash of the password""" hashes = ["md5", "sha1", "sha224", "sha256", "sha384", "sha512"] hashed_password1 = [] for hash_scheme in hashes: hashed_password1.append( ("hex_%s" % hash_scheme, getattr(utils.hashlib, hash_scheme)(self.password1).hexdigest())) for (method, hp1) in hashed_password1: self.assertTrue( utils.check_password(method, self.password1, hp1, "utf8")) self.assertFalse( utils.check_password(method, self.password2, hp1, "utf8"))
def test_plain_unicode(self): """test the plain auth method with unicode input""" self.assertTrue( utils.check_password( "plain", self.password1.decode("utf8"), self.password1.decode("utf8"), "utf8" ) ) self.assertFalse( utils.check_password( "plain", self.password1.decode("utf8"), self.password2.decode("utf8"), "utf8" ) )
def test_crypt(self): """test the crypt auth method""" salts = ["$6$UVVAQvrMyXMF3FF3", "aa"] hashed_password1 = [] for salt in salts: if six.PY3: hashed_password1.append( utils.crypt.crypt( self.password1.decode("utf8"), salt ).encode("utf8") ) else: hashed_password1.append(utils.crypt.crypt(self.password1, salt)) for hp1 in hashed_password1: self.assertTrue(utils.check_password("crypt", self.password1, hp1, "utf8")) self.assertFalse(utils.check_password("crypt", self.password2, hp1, "utf8")) with self.assertRaises(ValueError): utils.check_password("crypt", self.password1, b"$truc$s$dsdsd", "utf8")
def test_ldap_password_fail(self): """test the ldap auth method with malformed hash or bad schemes""" salt = b"UVVAQvrMyXMF3FF3" schemes_salt = [b"{SMD5}", b"{SSHA}", b"{SSHA256}", b"{SSHA384}", b"{SSHA512}"] schemes_nosalt = [b"{MD5}", b"{SHA}", b"{SHA256}", b"{SHA384}", b"{SHA512}"] # first try to hash with bad parameters with self.assertRaises(utils.LdapHashUserPassword.BadScheme): utils.LdapHashUserPassword.hash(b"TOTO", self.password1) for scheme in schemes_nosalt: with self.assertRaises(utils.LdapHashUserPassword.BadScheme): utils.LdapHashUserPassword.hash(scheme, self.password1, salt) for scheme in schemes_salt: with self.assertRaises(utils.LdapHashUserPassword.BadScheme): utils.LdapHashUserPassword.hash(scheme, self.password1) with self.assertRaises(utils.LdapHashUserPassword.BadSalt): utils.LdapHashUserPassword.hash(b'{CRYPT}', self.password1, b"$truc$toto") # then try to check hash with bad hashes with self.assertRaises(utils.LdapHashUserPassword.BadHash): utils.check_password("ldap", self.password1, b"TOTOssdsdsd", "utf8") for scheme in schemes_salt: # bad length with self.assertRaises(utils.LdapHashUserPassword.BadHash): utils.check_password("ldap", self.password1, scheme + b"dG90b3E8ZHNkcw==", "utf8") # bad base64 with self.assertRaises(utils.LdapHashUserPassword.BadHash): utils.check_password("ldap", self.password1, scheme + b"dG90b3E8ZHNkcw", "utf8")
def test_plain(self): """test the plain auth method""" self.assertTrue(utils.check_password("plain", self.password1, self.password1, "utf8")) self.assertFalse(utils.check_password("plain", self.password1, self.password2, "utf8"))
def test_bad_method(self): """try to check password with a bad method, should raise a ValueError""" with self.assertRaises(ValueError): utils.check_password("test", self.password1, b"$truc$s$dsdsd", "utf8")