# Нормирование длины пароля перед вычислением хеш-значения
# DATA	-	строка (пароль)
# SIZE	-	требуемая длина 
#				нормированной строки
# RETURN 
#		нормированная по длине строка
def normalizeDataLen(
			data: str, 
			size: int):
	# будущий результат
	res = ""
	# длина входной строки
	dataLen = len(data)

	# копируем символы из data 
	# до требуемого размера size 
	# если длина строки data меньше size
	# то циклически повторяем ее требуемое количество раз
	for i in range(0, size):
		res = res + data[i % dataLen]
	return res


# Вычисление одного хеш-значения 
# от строки
# DATA	-	строка 
# MASK	-	массив значений коэффициентов
#	(размер совпадает с длиной data)
# SIZE	-	длина строки и маски
# MOD	-	модуль вычисления хеш-значения
#		(по умолчанию, 256)
# RETURN 
#	вычисленное хеш-значение
def hashMask(
				data: str, 
				mask: [], 
				size: int, 
				mod = 256):
	# будущий результат
	sum = 0
	# в цикле сложение байтов строки,
	# умноженных на коэффициенты 
	# из массива MASK
	# (коэффициенты равны 0 или 1)
	for i in range(0, size):
		sum += ord(data[i]) * mask[i]

	# вычисление модуля итоговой суммы
	# (остаток от деления на MOD)
	sum = sum % mod
	return sum
