aws-lc-rs открывает доступ к AWS-LC — форку BoringSSL от Amazon — через API по образцу ring, поэтому большая часть кода для ring компилируется после замены имени крейта. Это криптопровайдер rustls по умолчанию, и именно его выбирают сервисы на Rust, когда им нужна сертификация FIPS 140-3 (feature-флаг fips) или постквантовые алгоритмы. C-библиотека компилируется во время сборки; для проверки версию 1.18.2 собрали с feature-флагами по умолчанию в обычном образе rust.
Кодировки подписей работают точно так же, как в ring: константы *_FIXED создают и принимают 64-байтовые подписи raw r‖s, константы *_ASN1 — DER, а подпись raw не прошла проверку с константой ASN1. Nonce случайные, s не нормализуется, а проверка принимает s из обеих половин диапазона. Помимо P-256 и P-384, которые есть в ring, библиотека подписывает и проверяет на P-521 и secp256k1, с вариантами SHA-2 и SHA-3.
В версии 1.18.2 постквантовые алгоритмы входят в стабильный API (для проверки библиотеку собрали без feature-флага unstable): ML-KEM-512, ML-KEM-768 и ML-KEM-1024 в aws_lc_rs::kem и ML-DSA-44, ML-DSA-65 и ML-DSA-87 в aws_lc_rs::signature, которые использует пример. Размеры, которые он выводит, — открытый ключ 1952 байта и подпись 3309 байт для ML-DSA-65, шифртекст 1088 байт для ML-KEM-768 — это то, что придётся передавать в сертификатах, токенах и рукопожатиях; песочница постквантовых подписей и песочница KEM сравнивают их с классическими алгоритмами.
Загрузка ключей поддерживает больше форматов, чем в ring: ключи ECDSA загружаются из PKCS#8, SEC1 (RFC 5915) DER и из скаляра в формате raw вместе с его открытым ключом, открытые ключи — из SPKI DER и из точек SEC1, сжатых или несжатых. В отличие от ring, Ed25519KeyPair::from_pkcs8 принял 48-байтовую форму PKCS#8 v1, которую записывает OpenSSL.
Если подозреваете путаницу FIXED и ASN1, воспользуйтесь конвертером DER ⇄ raw, а настройки гибридного постквантового обмена ключами подготовит генератор конфигурации TLS.