From: Sergey Matveev Date: Tue, 10 Feb 2026 13:07:23 +0000 (+0300) Subject: GnuTLS с ML-KEM X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=d5698e8a5be612a2dedb35007c45c9f9e510fd2a;p=stargrave-blog.git GnuTLS с ML-KEM Как-то не правильно, что у меня GnuTLS был без поддержки пост-квантовой криптографии. Вообще у меня большая часть HTTP запросов проходит через мой tofuproxy, который на Go, где есть ML-KEM поддержка. Но когда руками вызываю curl/wget, то оно идёт не через прокси, соответственно и без PQ/T TLS. В новых версиях GnuTLS видел упоминание ML-KEM. В NEWS файле увидел упоминание необходимости использования liboqs. Скачать liboqs оказалось приключением. По сути -- дома я это сделать не смог. Единственная ссылка для скачивания это API GitHub-а на tarball-а. И хоть скорость скачивания и под полмегабайта/сек, но после 50-ти мегабайт соединение GitHub-ом рвётся. А сам файл занимает ~54MiB. На работе скачался без проблем. Похоже, что timeout-ы на соединения для API у них довольно низкие, и такие здоровые tarball-ы являются проблемой. Но собирается без проблем. Вот только позже увидел, что GnuTLS использует leancrypto библиотеку, избавившись от liboqs зависимости в принципе. Про неё прежде не слышал. Сразу не понравилась. В addon/generate_header.sh написан /bin/bash, но скрипт вообще ничего от него не использует. Уроды. Дальше упало на сборке x509/pkcs7 вещей, в которых неизвестно что за ENODATA константа. https://patchwork.kernel.org/project/xen-devel/patch/1461939680-32574-2-git-send-email-roger.pau@citrix.com/ пишут, что она давно obsolete и в FreeBSD и OpenBSD её нет (поэтому и падает у меня). Я подумал, что это GNU/Linux-specific код. "Решил" проблему просто отключением сборки этих модулей, без которых GnuTLS работает. GnuTLS обновлённой версии не стал собираться, ибо в коде сгенерированном макросами вообще синтаксическая невалидность. Патчем убираю на FreeBSD этот код. Хотя наверняка особенность в Clang-е, а не ОС, конечно же. Но тоже собралось. Добавляя +GROUP-X25519-MLKEM768 к списку алгоритмов, гибридный TLS работает. Во время сборки GnuTLS можно указать строчку приоритетов алгоритмов по умолчанию, чтобы оно по умолчанию и применялось для всего. NORMAL:-VERS-TLS1.0:-VERS-TLS1.1:+GROUP-X25519-MLKEM768 Вот только cURL выставляет свои собственные приоритеты алгоритмов. Благо, тоже легко глобально переопределить: $ cat >~/.curlrc <