I am trying to implement ECDSA (Elliptic Curve Digital Signature Algorithm) but I couldn't find any examples in Java which use Bouncy Castle. I created the keys, but I really don't know what kind of functions I should use to create a signature and verify it.
public static KeyPair GenerateKeys()
throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException
{
ECParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("B-571");
KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC");
g.initialize(ecSpec, new SecureRandom());
return g.generateKeyPair();
}
owlstead is correct. And to elaborate a bit more, you can do this:
And to verify:
You seem to be using Bouncy Castle mainly as provider. In that case you could simply use
Signature.getInstance("SHA256withECDSA", "BC")
.BouncyCastle is a provider: a set of classes which provides some cryptographic functionalities that applications are supposed to use through the generic API that Java comes with. See the Java Cryptography Architecture, especially the section on signatures, to see how to generate or verify a signature. Basically, you get a
java.security.Signature
instance (with the staticgetInstance()
method), then you initialize it with either a private key (initSign()
, to generate a signature) or a public key (initVerify()
, to verify a signature). You then input the message data with one or severalupdate()
calls, and finally you callsign()
orverify()
, to generate or verify a signature.