Minicrypto
Криптографическая библиотека для D, частичный порт Monocypher. Содержит реализации некоторых современных криптоалгоритмов, в том числе на эллиптических кривых.
Библиотека предоставляет:
- Аутентифицированное шифрование с присоединенными данными (AEAD) по алгоритму ChaCha20-Poly1305;
- Протокол Диффи-Хеллмана на эллиптических кривых Curve25519;
- Криптографическую хеш-функцию BLAKE2b;
- Функцию хеширования паролей Argon2;
- Схему цифровой подписи EdDSA;
- Криптостойкий генератор псевдослучайных чисел;
- Кодировку Base64;
- Конвертер байтовых массивов в шестнадцатиричный текст и обратно.
Все функции @nogc, библиотека может быть скомпилирована в режиме BetterC. Как и в оригинальном Monocypher, динамическая память не используется, а промежуточные секретные данные на стеке уничтожаются после вывода в пользовательские буферы.
Библиотека сохраняет, насколько это возможно, оригинальный API Monocypher.
Репозиторий проекта: https://github.com/gecko0307/minicrypto
Для чего этот проект, когда есть SecureD, Botan и libsodium? Существующие библиотеки перегружены legacy-примитивами, которые не стоит использовать для создания новых программ. Попытка поддерживать все существующие стандарты делает их переусложненными и сбивает с толку пользователей. Minicrypto предоставляет лишь минимальный набор современных алгоритмов. Это не привязка к тяжелой внешней библиотеке и не обертка над системной криптографией — у Minicrypto, как и у Monocypher, нет зависимостей, что сильно облегчает использование и сопровождение, а также позволяет портировать код на любую платформу (известно, что Monocypher работает даже на маломощных контроллерах). Кроме того, Minicrypto — единственная известная криптографическая библиотека для D, совместимая с @nogc и BetterC, что является абсолютной необходимостью в системной разработке.