wolfSSL cible les systèmes embarqués et les déploiements FIPS, et presque tout y est une option de compilation : courbes, variantes d’EdDSA, nonces déterministes, algorithmes post-quantiques et prise en charge de PEM apparaissent ou disparaissent selon les options de ./configure. Les faits présentés ici décrivent le paquet Alpine 3.24.2 de wolfSSL 5.9.4, compilé avec HAVE_ECC, HAVE_ED25519, HAVE_CURVE25519 et WOLFSSL_HAVE_MLKEM, mais sans HAVE_ED448, sans HAVE_DILITHIUM, sans courbes Koblitz ou Brainpool et sans WOLFSSL_ECDSA_DETERMINISTIC_K. Un build personnalisé peut différer sur chacun de ces points.
wc_ecc_sign_hash signe un condensat que vous avez calculé et renvoie du DER ; wc_ecc_verify_hash_ex prend r et s sous forme d’entiers pour les signatures brutes. La vérification a deux sorties : le code de retour de la fonction indique si elle a pu s’exécuter, et l’argument int *res contient le verdict. Une signature brute de 64 octets passée à wc_ecc_verify_hash a renvoyé -171 (ECC ASN1 bad key data, invalid input) avec le verdict 0 ; un code qui ne contrôle que le code de retour, ou que le verdict, traite mal l’un des deux cas. L’exemple affiche les deux.
Avec ce build, les nonces sont aléatoires (la signature déterministe RFC 6979 nécessite WOLFSSL_ECDSA_DETERMINISTIC_K), s n’est pas normalisé et les signatures high-S passent la vérification. Les courbes vont de P-224 à P-521 ; secp256k1 et Brainpool sont absentes, sauf activation. Ed25519 fonctionne, et l’encapsulation comme la décapsulation ML-KEM-768 ont réussi via wc_MlKemKey_* ; ML-DSA (Dilithium) ne fait pas partie de ce build.
Les clés circulent en DER : wc_EccPublicKeyToDer écrit du SPKI et wc_EccKeyToDer une ECPrivateKey SEC1 ; la conversion PEM (wc_DerToPem) est disponible parce que le paquet définit WOLFSSL_DER_TO_PEM. Le paquet Alpine déclare la licence GPL-3.0-only ; des licences commerciales sont vendues séparément par wolfSSL Inc. Comparez les encodages avec ceux d’autres piles grâce au convertisseur DER ⇄ brut.