Skip to main content
Pre-release

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(): бинарные данные (в строковом виде) -> base32
  • decode(): base32 -> бинарные данные

Класс security Содержит 2 статических метода:

  • hwid(): возвращает идентификатор устройства (кроссплатформенный)
  • generate(): генерирует идентификаторы по seed

СВОЙСТВА МЕТОДОВ


base32.encode Кодирует бинарную строку в base32-кириллица. Параметры:

  • binary: принимает бинарные данные типа str (например, '10' - В)
  • alphabet: принимает алфавит длиной 32 символа (если длина отличается, вызывает исключение ValueError с причиной Alphabet must be 32 symbols length), по умолчанию русский алфавит без "ё"
  • force_len: дополняет (но не урезает) вывод до указанного числа символов (используйте для стандартизованных выводов, 0 для отключения), по умолчанию 0
  • separator: разделитель блоков, по умолчанию " "
  • 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 генератору, по умолчанию True
  • use_date: передавать ли текущую дату генератору, по умолчанию True
  • rounds: количество проходов хеширования, по умолчанию 8
  • return_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)

Source distribution for talonlib 1.3.1b0
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)

Table of built distributions (wheels) for talonlib 1.3.1b0
File Interpreter ABI Platform Actions
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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page