2015-04-21 28 views
5

Attualmente quando sto creando chiave utilizzando il metodo seguenteCome creare la coppia di chiavi ECDSA (256 bit) per la curva bitcoin (secp256k1) utilizzando il castello spugnoso?

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 ha un altro metodo, in cui posso specificare KeySize ma non sono sicuro di come io passerò ecSpec poi.

public void initialize(int keysize, SecureRandom random) 
+0

stai usando una libreria di terze parti con questo codice? – Bunny

+0

Sì, libreria spongycastle. – ua741

risposta

3

Il codice è già sufficiente e la specifica "secp256k1" imposta già la dimensione corretta. Il metodo initialize(int, SecureRandom) è un alternativo a initialize(AlgorithmParameterSpec, SecureRandom); chiami uno o l'altro, non entrambi. Se chiami quello che specifica il keysize (ad esempio, 256), il provider BC proverà a scegliere una curva di default della dimensione giusta (per 256, sarà "prime256v1" a.k.a. "P-256" o "secp256r1").

0

Il documentation for KeyPairGenerator dice che il initialize(int, SecureRandom) fa questo:

inizializza il generatore di coppia di chiavi per un certo dimensione della chiave con la data sorgente di casualità (e un set di parametri di default).

KeyPairGenerator è una classe astratta e presumo che questo "set di parametri predefinito" sia determinato da una sottoclasse specifica che si sta utilizzando. Potresti provare a capire quale classe sia realmente il tuo oggetto KeyPairGenerator, quindi consulta la documentazione di quella classe per sapere dove puoi impostare i suoi parametri predefiniti.