Bouncy Castle est deux choses à la fois : un fournisseur JCA (BC) qui se branche sur Signature, KeyPairGenerator et KEM, et des API légères comme ECDSASigner qui fonctionnent sans la JCA. bcpkix ajoute les certificats, CMS, OCSP et le PEMParser qui manque toujours au JDK. La plupart du code JVM qui touche à secp256k1, à Brainpool, à PGP ou aux certificats en dépend.
Ses comportements ECDSA par défaut sont ceux du JDK : SHA256withECDSA produit du DER avec un nonce aléatoire et ne normalise pas s, et la vérification accepte les deux moitiés. Les différences passent par des noms d’algorithme à demander explicitement. SHA256withPLAIN-ECDSA produit le r‖s brut de 64 octets qu’attend JWS ; SHA256withECDDSA signe de façon déterministe, et l’ECDSASigner léger avec un HMacDSAKCalculator a reproduit exactement le vecteur de test de la RFC 6979. Comme avec SunEC, une signature brute transmise à l’algorithme DER lève SignatureException au lieu de renvoyer false.
C’est la couverture des courbes qui amène ici la plupart des développeurs : de P-224 à P-521, secp256k1 et les courbes Brainpool r1 ont toutes réussi la signature et la vérification, tout comme Ed25519 et Ed448. Enregistrez le fournisseur et nommez-le (KeyPairGenerator.getInstance("EC", "BC")), car sinon SunEC, le fournisseur du JDK, est consulté en premier et rejette secp256k1, ce que l’exemple évite.
La couverture post-quantique de la 1.86 est la plus large parmi les bibliothèques testées : ML-KEM via javax.crypto.KEM, ML-DSA, SLH-DSA et LMS dans le fournisseur BC, ainsi que Falcon et XMSS dans BCPQC. Essayez les algorithmes dans le bac à sable des signatures post-quantiques et inspectez les certificats hybrides avec l’inspecteur de certificats post-quantiques.
JcaPEMWriter écrit les clés privées EC au format SEC1 -----BEGIN EC PRIVATE KEY-----, que PEMParser relit sous forme de PEMKeyPair ; les outils qui attendent du PKCS#8 exigent d’abord une conversion de la clé. Le convertisseur DER ⇄ brut aide lorsqu’une signature PLAIN et une signature DER ont été confondues.