BoringSSL — форк OpenSSL от Google, используемый в Chrome и Android. От него, в свою очередь, ответвилась AWS-LC — библиотека, на которой построен aws-lc-rs, а ring заимствует его ассемблерный код. У BoringSSL нет релизов и нет гарантий стабильности API: пользователи фиксируют конкретный коммит. Факты на этой странице проверены на сборке коммита b50cad27ee80 (19 октября 2026 года) из исходного кода.
ECDSA следует соглашениям OpenSSL: подписи в DER, случайные nonce, никакой нормализации low-S, а проверка принимает high-S; ECDSA_sign подписывает вычисленный вами дайджест. В отличие от OpenSSL, некорректные входные данные дают просто неудачную проверку: EVP_DigestVerify вернула 0 и для подписи raw r‖s, и для 3-байтового фрагмента данных, поэтому проблема с форматом видна только в очереди ошибок. Проверяйте кодировки конвертером DER ⇄ raw.
Набор кривых намеренно ограничен P-224, P-256, P-384 и P-521 (EC_GROUP_new_by_curve_name(NID_secp256k1) вернула NULL), а Ed25519 — единственный работающий вариант EdDSA: EVP_PKEY_ED448 определён для совместимости, но генерация ключа Ed448 через EVP завершилась ошибкой. Код, который переходит с OpenSSL на BoringSSL, теряет secp256k1, Brainpool и Ed448, и компилятор об этом не сообщает: ошибка появится, только когда код запросит такой алгоритм.
Поддержка постквантовых алгоритмов обширна и реализована отдельными типизированными API, а не через EVP: MLKEM768_* и MLKEM1024_*, MLDSA65_* вместе со связанными константами размеров, а также SLHDSA_SHA2_128S_*; в ходе проверки все они прошли полный цикл. В ssl.h также определена гибридная группа TLS X25519MLKEM768 (0x11EC). Пример использует ML-KEM-768 и ML-DSA-65 напрямую. Что согласовывает ваш браузер, покажет проверка постквантового TLS в браузере.