BoringSSL is Google's fork of OpenSSL, used in Chrome and Android; AWS-LC, the library under aws-lc-rs, is in turn a fork of it, and ring reuses its assembly. It has no releases and makes no API stability promise — consumers pin a commit. The facts here were checked by building commit b50cad27ee80 (19 October 2026) from source.
ECDSA keeps the OpenSSL conventions: DER signatures, random nonces, no low-S normalization, and verification that accepts high-S; ECDSA_sign signs a digest you computed. Unlike OpenSSL, malformed input is just a failed verification — EVP_DigestVerify returned 0 for a raw r‖s signature and for a 3-byte blob, so the error queue is the only place a format problem shows up. Check encodings with the DER ⇄ raw converter.
Curves are deliberately limited to P-224, P-256, P-384 and P-521 — EC_GROUP_new_by_curve_name(NID_secp256k1) returned NULL — and Ed25519 is the only working EdDSA variant: EVP_PKEY_ED448 is defined for compatibility, but generating an Ed448 key through EVP failed. Code that moves from OpenSSL to BoringSSL loses secp256k1, Brainpool and Ed448 without a compile error until the algorithm is requested.
Post-quantum support is extensive and comes as separate, typed APIs rather than EVP: MLKEM768_* and MLKEM1024_*, MLDSA65_* and related sizes, and SLHDSA_SHA2_128S_*, all of which round-tripped in the check; ssl.h also defines the X25519MLKEM768 hybrid TLS group (0x11EC). The sample uses ML-KEM-768 and ML-DSA-65 directly. See what your browser negotiates with the browser PQ check.