ua741
ua741

Reputation: 1466

How to create ECDSA keypair (256bit) for bitcoin curve (secp256k1) using spongy castle?

Currently, I am creating keyPair using this method

private  KeyPair getKeyPair() throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException {
    KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDsA", "SC");
    ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1");
    keyGen.initialize(ecSpec, new SecureRandom());
    return keyGen.generateKeyPair();
}

KeyPairGenerator has another method, in which I can specify keySize but I am not sure how I will pass the keySpecs?

 public void initialize(int keysize, SecureRandom random)

Upvotes: 7

Views: 7377

Answers (2)

Peter Dettman
Peter Dettman

Reputation: 4042

Your code is already sufficient, and specifying "secp256k1" already sets the correct size. The initialize(int, SecureRandom) method is an alternative to initialize(AlgorithmParameterSpec, SecureRandom); you call one or the other, not both. If you call the one specifying the keysize (say, 256), the BC provider will try to choose a default curve of the right size (for 256, it will be "prime256v1" a.k.a. "P-256" or "secp256r1").

Upvotes: 5

David Grayson
David Grayson

Reputation: 87406

The documentation for KeyPairGenerator says that the initialize(int, SecureRandom) does this:

Initializes the key pair generator for a certain keysize with the given source of randomness (and a default parameter set).

KeyPairGenerator is an abstract class, and I assume that this "default parameter set" is determined by a specific subclass you are using. You might try to figure out what class your KeyPairGenerator object really is, and then consult the documentation of that class to learn where you can set its default parameters.

Upvotes: 0

Related Questions