This release is a pre-release and may not be stable for production use.
🇷🇺 talonlib v1.3 beta
talonlib - библиотека, опережающая свое время, использующая запатентованную технологию УНППТ™ (Уникальная Необратимая Публичная Подпись Талона). Создана для Минцифры.
ВВЕДЕНИЕ
talonlib является криптографически защищенной библиотекой и использует продвинутые импортозамещенные алгоритмы. Использование библиотеки крайне простое. Сферы применения могут быть разными, но основная - генерация криптографически стойких аптечных талончиков (см. пункт "примеры использования"). Для генерации используются данные о железе и текущая дата, поэтому сгенерированный на двух разных устройствах талон будет разным, что значительно усложняет взлом. Открытый исходный код полностью соответствует законам №159-УК ("О защите от подделки талонов" от 06.10.2028) и №115-ФЗ ("О легализации продаж анальгина для сертифицированных учреждений" от 15.08.1823). Сделано по заказу Минцифры #ГЛЫШ-ЦАЫС (в кодировке base32-кириллица). Особенностью библиотеки является простота использования и при этом широкий низкоуровневый доступ к параметрам (никаких magic numbers)
УСТАНОВКА
Стандартный метод (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
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 создает цепочку хешей указанной длины применяя salt в виде HWID и текущей даты, выводит все или только последний
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 обратно? Никак! Но вы можете их верифицировать (в теории)
Metadata
Release files for talonlib 1.3.1b0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| talonlib-1.3.1b0.tar.gz | 19.2 kB | Without provenance | Details for talonlib-1.3.1b0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| talonlib-1.3.1b0-py3-none-any.whl | Python 3 | none | any | Details for talonlib-1.3.1b0-py3-none-any.whl |
Total release size: 38.5 kB
Release files / talonlib-1.3.1b0.tar.gz
| Download URL | talonlib-1.3.1b0.tar.gz |
|---|---|
| Size | 19.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
07652386e7410d714085be84b4b85e2ddc33cad7228a98d00098556c8cb3570f
|
|
BLAKE2b-256 checksum How to use checksums |
b724df40cb045f0175d3c7111e88515054e2150fba17ef1597635efb1f864fe0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.7
|
Release files / talonlib-1.3.1b0-py3-none-any.whl
| Download URL | talonlib-1.3.1b0-py3-none-any.whl |
|---|---|
| Size | 19.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b0a22ccb40224bee02ab8c0ab6b7cf309175e642f36ddc1f05a95412af43512c
|
|
BLAKE2b-256 checksum How to use checksums |
f4a4b33fefbea5e399c007f7b37225dd0777ae9c842c099ed19d7b8c3fab84ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.7
|
Security for talonlib 1.3.1b0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.