Заранее необходимо установить КриптоПро CSP: https://cryptopro.ru/products/csp/downloads#latest_csp50r3 Компиляция и запуск производятся из встроенного терминала VS code в Windows 10/Windows 11. gcc version 13.1.0 (Rev6, Built by MSYS2 project)
myCreatingHash.c = пример получения хэша
selfmade_Hmac.c = реализация HMAC на основе ГОСТ Р 34.11-2012 (CALG_GR3411_2012_256)
built_in_hmac.c = реализация HMAC на основе встроенного алгоритма CALG_GR3411_2012_256_HMAC
filereader.c = модификация selfmade_Hmac.c, принимающая ключ как ещё один параметр.
WinCryptEx.h = CryptoPro CSP WinCrypt.h extensions
test.txt = необязательный файл, нужен для демонстрации работы, из него берутся данные для хэширования somkey.txt = необязательный файл, нужен для демонстрации работы, из него берётся ключ для хэширования
Компиляция
gcc .\selfmade_Hmac.c -o self
gcc .\built_in_hmac.c -o bltn
Запуск
.\self test.txt
.\bltn test.txt
Первая версия импорта ключа из внешнего файла
gcc filereader.c -o flrdr
.\flrdr.exe test.txt somkey.txt
Результат совпал с built_in_mac при одинаковых ключах (все 'a' и все '0')
В cross_check вместе слеплены selfmade_Hmac.c и built_in_hmac.c, а также программа ожидает на вход 3 параметра, подобно filereader.c
gcc .\cross_check.c -o cc
.\cc.exe .\test.txt .\somkey.txt
Если длина ключа > 32 байт, то для получения HMAC ключ хэшируется. Иначе дополняется нулями до 32.
CryptMessages.c = Шифрование и расшифрование данных из файла, если второй аргумент указывает валидное имя (Common Name) установленного сертификата
gcc -o CryptMessages.exe CryptMessages.c -lcrypt32
.\CryptMessages.exe test.txt Name