| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 | 
							- import os 
 
- import hashlib
 
- class password:
 
-     """
 
-     This class is responsible for managing passwords and passwords hashes
 
-     generating.
 
-     """
 
-     def __init__(self, target: str, lenght: int = 48) -> None:
 
-         """
 
-         This is password initialized. It generate new password hash
 
-         from the password. Lenght of the hash could be changed.
 
-         
 
-         target: str - Target password
 
-         lenght: int - Lenght of the password hash (default: 48)
 
-         """
 
-         self.__lenght = lenght
 
-         self.__target = target
 
-     @property
 
-     def lenght(self) -> int:
 
-         """
 
-         This return lenght of the hash.
 
-         """
 
-         return self.__lenght
 
-     @property
 
-     def __salt(self) -> str:
 
-         """
 
-         This return random salt with lenght of the hash."
 
-         """
 
-         
 
-         return os.urandom(self.lenght).hex()
 
-     @property
 
-     def separator(self) -> str:
 
-         """
 
-         This return separator between salt and hash.
 
-         """
 
-         return "."
 
-     def __generate(self, salt: str) -> str:
 
-         """
 
-         This generate new hash from the password and salt.
 
-         salt: str - Salt to use when generating
 
-         return: str - Password hash generated from given salt
 
-         """
 
-         salted = salt + self.__target
 
-         binary = hashlib.shake_256(salted.encode())
 
-         hashed = binary.hexdigest(self.lenght)
 
-         full = salt + self.separator + hashed
 
-         return full
 
-     @property
 
-     def result(self) -> str:
 
-         """
 
-         This generate new hash from the password.
 
-         return: str - New password hash with random salt
 
-         """
 
-         return self.__generate(self.__salt)
 
-     def validate(self, hashed: str) -> bool:
 
-         """
 
-         This function validate password hash. When passwords match, then
 
-         return True, when password from the class not match with given hash,
 
-         then return False.
 
-         hashed: str - Password hash to check
 
-         return: bool - True when passwords match, False if not
 
-         """
 
-         position = hashed.find(self.separator)
 
-         if position == -1:
 
-             return False
 
-         salt = hashed[:position]
 
-         full = hashed[position + len(self.separator):]
 
-         if len(salt) != len(full):
 
-             return False
 
-         if len(full) != self.lenght * 2:
 
-             return False
 
-         return self.__generate(salt) == hashed
 
 
  |