I'm trying to make a ECDSA signature using the ed25519 curve in Java, using the Bouncy Castle library.
I have managed to generate the keys and to be able to obtain the public key given the private key. However, I'm struggling to sign some data with it.
When I try to do so it says java.security.SignatureException: Curve not supported: java.security.spec.ECParameterSpec@223191a6
. I suppose that's because I initialized the curve parameters using CustomNamedCurves
. Does somebody know how to make this work?
// Bouncy Castle Provider
Security.addProvider(new BouncyCastleProvider());
// Secure random
SecureRandom secureRandom = new SecureRandom();
// Key generator
X9ECParameters curveParams = CustomNamedCurves.getByName("Curve25519");
ECParameterSpec ecSpec = new ECParameterSpec(curveParams.getCurve(), curveParams.getG(), curveParams.getN(), curveParams.getH(), curveParams.getSeed());
KeyPairGenerator ecKeyGen = KeyPairGenerator.getInstance("EC", "BC");
ecKeyGen.initialize(ecSpec);
ecKeyGen.initialize(ecSpec, secureRandom);
ecKeyGen.initialize(ecSpec);
// Signer
Signature ecdsaSign = Signature.getInstance("SHA256withECDSA");
// Generate Key pair
var keypair = ecKeyGen.generateKeyPair();
var pub = keypair.getPublic();
var priv = keypair.getPrivate();
// Signature
byte[] data = "Some data".getBytes();
ecdsaSign.initSign(priv);
ecdsaSign.update(data);
// java.security.SignatureException: Curve not supported: java.security.spec.ECParameterSpec@6069db5
byte[] sig = ecdsaSign.sign();
I'm using java 17.0.1
and org.bouncycastle:bcprov-jdk15on:1.70