Как создать ECDSA keypair (256bit) для Bitcoin curve (secp256k1) с помощью spongy castle?

в настоящее время, когда я создаю ключ, используя следующий метод

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 имеет другой метод, в котором я могу указать keySize, но я не уверен, как я передам ecSpec тогда.

 public void initialize(int keysize, SecureRandom random)

2 ответов


ваш код уже достаточен, и указание "secp256k1" уже устанавливает правильный размер. The initialize(int, SecureRandom) метод альтернатива до initialize(AlgorithmParameterSpec, SecureRandom); вы называете одно или другое, а не оба. Если вы вызываете тот, который указывает keysize (скажем, 256), поставщик BC попытается выбрать кривую по умолчанию правильного размера (для 256 это будет "prime256v1" a.к. a. "P-256" или "secp256r1").


на документация для KeyPairGenerator говорит о том, что initialize(int, SecureRandom) Это:

инициализирует генератор пар ключей определенного размера с заданным источником случайности (и набором параметров по умолчанию).

KeyPairGenerator является абстрактным классом, и я предполагаю, что этот "набор параметров по умолчанию" определяется конкретным подклассом, который вы используете. Вы можете попытаться выяснить, какой класс является вашим объектом KeyPairGenerator, и затем обратитесь к документации этого класса, чтобы узнать, где вы можете установить параметры по умолчанию.