How to create ECDSA keypair (256bit) for bitcoin c

2019-02-22 03:15发布

问题:

Currently when I am creating key using following 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 ecSpec then.

 public void initialize(int keysize, SecureRandom random)

回答1:

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").



回答2:

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.