УНППТ™ - Уникальная Необратимая Публичная Подпись Талона
Project description
🇷🇺 talonlib v1.3 beta
talonlib - библиотека, опережающая свое время, использующая запатентованную технологию УНППТ™ (Уникальная Необратимая Публичная Подпись Талона). Создана для Минцифры.
ВВЕДЕНИЕ
talonlib является криптографически защищенной библиотекой и использует продвинутые импортозамещенные алгоритмы. Использование библиотеки крайне простое. Сферы применения могут быть разными, но основная - генерация криптографически стойких аптечных талончиков (см директорию examples). Для генерации используются данные о железе и текущая дата, поэтому сгенерированный на двух разных устройствах талон будет разным, что значительно усложняет взлом. Открытый исходный код полностью соответствует законам №159-УК ("О защите от подделки талонов" от 06.10.2028) и №115-ФЗ ("О легализации продаж анальгина для сертифицированных учреждений" от 15.08.1823). Сделано по заказу Минцифры #ГЛЫШ-ЦАЫС (в кодировке base32-кириллица).
УСТАНОВКА
Стандартный метод (PyPI):
pip install talonlib
Если на PyPI нет (TestPyPI):
pip install talonlib --index-url https://test.pypi.org/simple/
Ручная установка (тянем с github):
git pull https://github.com/mrzff1/talonlib
С ЧЕГО НАЧАТЬ?
Использование из коробки
from talonlib import security
print(security.generate('test')) # Должно вывести 8 строк из букв
Изменение конфигурации генератора
from talonlib import security
print(security.generate(
'test',
rounds = 3,
use_date = False,
return_all_rounds = False)) # Выводит одну строку - результат 3 итераций, при изменении даты вывод не изменится
Получение HWID
from talonlib import security
print(security.hwid())
Настройка HWID
from talonlib import security
print(security.hwid(hardware_list = ('CPU_CORES', 'CPU_MAX_FREQ', 'CPU_MIN_FREQ', 'RAM'))) # Все кроме "MAC": у устройств с одинаковым ЦП и объемом ОЗУ будет генерироваться одинаковый HWID
Использование кодировки base32-кириллица
from talonlib import base32
from talonlib import base32
binary = base32.decode('привет')
print(binary)
print(base32.encode(
binary,
block_size=0 # убираем разделение, чтобы вывело "привет" вместо "прив ет"
))
БАЗОВАЯ СТРУКТУРА БИБЛИОТЕКИ
Класс info Содержит атрибуты:
- лицензию (
LICENSE) - версию (
VERSION)
Класс base32 Содержит статические методы:
encode(): бинарные данные (в строковом виде) -> base32decode(): base32 -> бинарные данные
Класс security Содержит 2 статических метода:
hwid(): возвращает идентификатор устройства (кроссплатформенный)generate(): генерирует идентификаторы по seed
СВОЙСТВА МЕТОДОВ
base32.encode Кодирует бинарную строку в base32-кириллица. Параметры:
binary: принимает бинарные данные типа str (например, '10' - В)alphabet: принимает алфавит длиной 32 символа (если длина отличается, вызывает исключение ValueError с причинойAlphabet must be 32 symbols length), по умолчанию русский алфавит без "ё"force_len: дополняет (но не урезает) вывод до указанного числа символов (используйте для стандартизованных выводов, 0 для отключения), по умолчанию0separator: разделитель блоков, по умолчанию" "block_size: размер блока (0 для отключения разделения), по умолчанию4
base32.decode Декодирует base32-кириллица в бинарную строку. Параметры:
encoded: принимает данные в кодировке base32.encode, игнорирует все, кроме алфавитаalphabet: принимает алфавит длиной 32 символа (если длина отличается, вызывает исключение ValueError с причинойAlphabet must be 32 symbols length), по умолчанию русский алфавит без "ё"force_len: дополняет (но не урезает) вывод до указанного числа бит (используйте для стандартизованных выводов, 0 для отключения), по умолчанию0
security.hwid Собирает данные о железе, склеивает, используя разделитель, хеширует через SHA-512, возвращает хеш
hardware_list: принимает набор (список или кортеж), строковых данных из следующего списка (по умолчанию используются все данные):"MAC": MAC-адрес устройства"CPU_CORES": количество логических ядер процессора"CPU_MAX_FREQ": максимальная частота процессора"CPU_MIN_FREQ": минимальная частота процессора (чаще всего 800/1200 МГц)"RAM": объем ОЗУ на устройствеseparator: принимает разделитель между данными, по умолчанию""(выключен)
security.generate
text: seed для генератораuse_hwid: передавать ли HWID генератору, по умолчаниюTrueuse_date: передавать ли текущую дату генератору, по умолчаниюTruerounds: количество проходов хеширования, по умолчанию8return_all_rounds: возвращать ли все проходы (True, по умолчанию) или только последний (False)
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ (ОБЕРТКИ)
Стандартная обертка, генерируем талон, соблюдаем все законы
from talonlib import security
from time import time
print(f'{"ГЕНЕРАТОР КРИПТОГРАФИЧЕСКИ СТОЙКИХ УНИКАЛЬНЫХ ТАЛОНЧИКОВ": ^80}')
print(f'{"C ТЕХНОЛОГИЕЙ УНППТ™Ⓒ (УНИКАЛЬНАЯ НЕОБРАТИМАЯ ПУБЛИЧНАЯ ПОДПИСЬ ТАЛОНА™Ⓒ)": ^80}')
print(f'{"ВСЕ ПРАВА ЗАЩИЩЕНЫ": ^80}')
print(f'{"УНППТ™ - СОБСТВЕННОСТЬ МИНЦИФРЫ (ПЕРЕДАНО В РАМКАХ ГОСЗАКУПКИ)": ^80}')
print(f'{"УНППТⒸ - ПРАВО КОПИРОВАНИЯ ЗА МИНЦИФРЫ (ПЕРЕДАНО В РАМКАХ ГОСЗАКУПКИ)": ^80}')
print('\n'*2)
print('Вас приветствует автомат выдачи талонов!')
TICKET = input('Введите полный текст врачебного направления: ')
start_time = time()
print('Ваш уникальный талон:')
print(security.generate(TICKET, return_all_rounds=False))
print(f'Генерация заняла {(time()-start_time)*1000:.3f} мс')
Использование кодирования base32-кириллица ("съедает" всё, кроме русских букв)
from talonlib import base32
binary = base32.decode('привет')
print(binary)
print(base32.encode(binary,block_size=0))
Получаем HWID (для других проектов)
from talonlib import security
print(security.hwid())
FAQ (БУДУТ ЗАНОСИТЬСЯ ВОПРОСЫ ИЗ ISSUES)
Где я могу это использовать? В любительских или шуточных проектах. Не используйте это в продакшене!
Могу я дорабатывать библиотеку? Конечно! Отправляйте pull-реквесты
Почему это существует? Это сатира. Рабочая сатира.
Как декодировать данные из generate обратно? Никак! Но вы можете их верифицировать (в теории)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file talonlib-1.3b0.tar.gz.
File metadata
- Download URL: talonlib-1.3b0.tar.gz
- Upload date:
- Size: 19.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d95c837f85e3f4732ab7c34bc5c3ef4fc220cdcd19b1cd3a58c4d657dc1e7966
|
|
| MD5 |
8c7219cc5af1122989e4a3d0039b1092
|
|
| BLAKE2b-256 |
ad42904fc41facd5a28f14ee4118644df6d1afc9f73d7d038ca6955da43209a2
|
File details
Details for the file talonlib-1.3b0-py3-none-any.whl.
File metadata
- Download URL: talonlib-1.3b0-py3-none-any.whl
- Upload date:
- Size: 19.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
964868faa0cfa8f1d744cf6ce43fa5296296c4755dc8821a8fd7e382a13c996c
|
|
| MD5 |
1cba8c9f0f7e8c2dc5fb4ecc8f60f753
|
|
| BLAKE2b-256 |
f1ebcef3cac01318e9f081f06fa4ec4001b2e6d177686f05209169cfa5c54895
|