package won.cryptography.service; import org.bouncycastle.jcajce.provider.asymmetric.ec.KeyPairGeneratorSpi; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import won.cryptography.key.KeyInformationExtractor; import java.security.InvalidAlgorithmParameterException; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.SecureRandom; import java.security.spec.ECGenParameterSpec; /** * All kind of stuff with cryptographic keys. * * @author Fabian Salcher * @version 2014-07 */ public class KeyPairService { private final Logger logger = LoggerFactory.getLogger(getClass()); private KeyPairGenerator keyPairGeneratorBrainpoolp384r1 = new KeyPairGeneratorSpi.ECDSA(); private org.bouncycastle.jcajce.provider.asymmetric.ec.KeyPairGeneratorSpi keyPairGeneratorSecp384r1 = new org.bouncycastle .jcajce.provider.asymmetric.ec.KeyPairGeneratorSpi.ECDSA(); public KeyPairService(KeyInformationExtractor keyInformationExtractor) { this(); this.keyInformationExtractor = keyInformationExtractor; } private KeyInformationExtractor keyInformationExtractor; public KeyPairService() { try { // use the predefined curves ECGenParameterSpec ecGenSpec = new ECGenParameterSpec("brainpoolp384r1"); keyPairGeneratorBrainpoolp384r1.initialize(ecGenSpec, new SecureRandom()); } catch (Exception e) { logger.error("Could not initialize bouncycastle key pair generator for ECDSA brainpoolp384r1"); throw new IllegalArgumentException(e); } try { ECGenParameterSpec ecGenSpec = new ECGenParameterSpec("secp384r1"); keyPairGeneratorSecp384r1.initialize(ecGenSpec, new SecureRandom()); } catch (InvalidAlgorithmParameterException e) { logger.error("Could not initialize bouncycastle key pair generator for ECDSA secp384r1"); throw new IllegalArgumentException(e); } } //TODO make better api for curve support, and ideally also add RSA support... public KeyPair generateNewKeyPairInSecp384r1() { KeyPair pair = keyPairGeneratorSecp384r1.generateKeyPair(); return pair; } public KeyPair generateNewKeyPairInBrainpoolp384r1() { KeyPair pair = keyPairGeneratorBrainpoolp384r1.generateKeyPair(); return pair; } }