import base64
import hmac
import hashlib
import time
import struct

def generate_totp(secret_key, interval=30, digits=6):
	# Текущее время в секундах
	current_time = int(time.time())
	# Временной шаг
	time_step = current_time // interval
	# Преобразуем временной шаг в 8-байтовое число (big-endian)
	time_step_bytes = struct.pack(">Q", time_step)
	# Преобразуем секретный ключ из Base32 в байты
	secret_key_bytes = base64.b32decode(secret_key)
	# Вычисляем HMAC-SHA1
	hmac_result = hmac.new(secret_key_bytes, time_step_bytes, hashlib.sha1).digest()
	# Выбираем смещение
	offset = hmac_result[-1] & 0x0F
	# Извлекаем 4 байта
	truncated = hmac_result[offset:offset+4]
	# Преобразуем в число
	code = struct.unpack(">I", truncated)[0]
	# Обрезаем до 6 цифр
	code = code % 10**digits
	return f"{code:06d}"

# Пример использования
secret_key = "JBSWY3DPEHPK3PXP"
print(generate_totp(secret_key))