Skip to content

askarinka/gost34.11-2018

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Реализация хэш‑функции ГОСТ Р 34.11‑2018 (Стрибог, 512 бит)

Этот каталог содержит реализацию хэш‑функции ГОСТ Р 34.11‑2018 (Стрибог) на Python для выхода 512 бит.

Основной сценарий использования — вычисление хэша для:

  • произвольной строки;
  • содержимого файла;
  • встроенных тестовых векторов из стандарта.

Структура

  • main.py — CLI‑утилита и высокоуровневый интерфейс:
    • парсинг аргументов командной строки;
    • функции hash_bytes(...) и hash_string(...) для использования из кода;
    • обработка тестовых векторов/файлов/строк.
  • compression.py — сжимающее отображение (G):
    • константы C[0..11];
    • генерация раундовых ключей calcK;
    • функция compression(hash, input, N, istest).
  • xBlock.py — побитовое сложение по модулю 2 (операция X).
  • sBlock.py — нелинейное байтовое преобразование (S‑подстановка, S).
  • pBlock.py — перестановка байтов (операция P).
  • lBlock.py — линейное преобразование (операция L).

Использование в Bineqls

Модуль подключается через functional_hash.py (корень репозитория), который вычисляет хэш по секциям ELF, влияющим на выполнение (.text, .rodata, .data, .plt и др.), и экспортирует elf_functional_hash(path) и is_available(). Напрямую из основного кода модуль не импортируется.


Установка и требования

  • Python 3.7+.
  • Внешних библиотек не требуется, используется только стандартная библиотека (argparse, binascii, sys).

C-расширение (ускорение для больших данных): в каталоге есть исходник gost34native.c и setup.py. При сборке расширения (python setup.py build_ext --inplace или pip install -e .) модуль main.py автоматически использует нативную реализацию хэша вместо чисто Python. Требуется компилятор C (MSVC на Windows, gcc/clang на Linux/macOS). Если расширение не собрано или недоступно, используется реализация на Python.

Перейдите в каталог с кодом:

cd gost34.11-2018

Запуск из командной строки

Все команды выполняются из каталога gost34.11-2018:

  • Хэш произвольной строки (UTF‑8 по умолчанию):
python main.py -s "Привет, мир"
  • Хэш содержимого файла:
python main.py -f path/to/file.bin
  • Запуск встроенных тестов:
python main.py -t 1
python main.py -t 2

Опция -v/--verbose включает подробный отладочный вывод (промежуточные значения внутри сжимающего отображения):

python main.py -t 1 -v
python main.py -f path/to/file.bin -v

Вывод команды имеет вид:

H(M) = <128-символьный hex-хэш>

Использование из Python‑кода

Каталог должен быть доступен в PYTHONPATH или находиться рядом со скриптом, из которого выполняется импорт.

from main import hash_bytes, hash_string

# Хэш строки (UTF‑8)
digest1 = hash_string("Привет, мир")
print(digest1)

# Хэш произвольных байтов
data = b"\x01\x02\x03"
digest2 = hash_bytes(data)
print(digest2)

Обе функции возвращают строку длиной 128 символов, содержащую 512‑битное значение хэша в шестнадцатеричном представлении.


Ограничения и замечания

  • Реализация на Python ориентирована на наглядность и простоту.
  • Для больших файлов рекомендуется собрать и использовать C-расширение (gost34native.c), что существенно снижает время расчёта хэша.
  • В реальных системах можно также использовать проверенные сторонние реализации ГОСТ 34.11‑2012/2018.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors