wolfSSL targets embedded systems and FIPS deployments, and almost everything is a compile-time option: curves, EdDSA variants, deterministic nonces, post-quantum algorithms and PEM support all come and go with ./configure flags. The facts here describe the Alpine 3.24.2 package of wolfSSL 5.9.4, built with HAVE_ECC, HAVE_ED25519, HAVE_CURVE25519 and WOLFSSL_HAVE_MLKEM but without HAVE_ED448, HAVE_DILITHIUM, Koblitz or Brainpool curves, or WOLFSSL_ECDSA_DETERMINISTIC_K. A custom build can differ in every one of those.
wc_ecc_sign_hash signs a digest you computed and returns DER; wc_ecc_verify_hash_ex takes r and s as integers for raw signatures. Verification has two outputs: the function's return code says whether it could run, and the int *res argument holds the verdict. A raw 64-byte signature passed to wc_ecc_verify_hash returned -171 (ECC ASN1 bad key data, invalid input) with the verdict 0; code that checks only the return code, or only the verdict, mishandles one of the two cases. The sample prints both.
With this build, nonces are random (deterministic RFC 6979 signing needs WOLFSSL_ECDSA_DETERMINISTIC_K), s is not normalized and high-S signatures verify. Curves covered P-224 to P-521; secp256k1 and Brainpool are absent unless enabled. Ed25519 works, and ML-KEM-768 encapsulated and decapsulated through wc_MlKemKey_*; ML-DSA (Dilithium) is not in this build.
Keys move as DER: wc_EccPublicKeyToDer writes SPKI and wc_EccKeyToDer writes a SEC1 ECPrivateKey; PEM conversion (wc_DerToPem) is available because the package sets WOLFSSL_DER_TO_PEM. The Alpine package declares its license as GPL-3.0-only; commercial licenses are sold separately by wolfSSL Inc. Check encodings against other stacks with the DER ⇄ raw converter.