Как создать ключевую пару ECDSA (256 бит) для кривой биткойнов (secp256k1) с использованием губчатого замка?

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

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) 

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

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

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

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