package io.fathom.cloud.secrets.services.ca; import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import org.bouncycastle.openssl.PEMReader; import org.bouncycastle.openssl.PEMWriter; import com.fathomdb.crypto.bouncycastle.BouncyCastleLoader; import com.fathomdb.io.IoUtils; public class KeyPairs { public static KeyPair fromPem(String keyData) throws IOException { PEMReader r = new PEMReader(new StringReader(keyData), null, BouncyCastleLoader.getName()); try { return (KeyPair) r.readObject(); } finally { IoUtils.safeClose(r); } } public static String toPem(KeyPair keyPair) throws IOException { StringWriter writer = new StringWriter(); PEMWriter pemWriter = new PEMWriter(writer, BouncyCastleLoader.getName()); try { pemWriter.writeObject(keyPair); pemWriter.flush(); return writer.toString(); } finally { IoUtils.safeClose(pemWriter); } } public static KeyPair generateKeyPair(String algorithm, Integer keySize) { KeyPairGenerator generator; try { generator = KeyPairGenerator.getInstance(algorithm); } catch (NoSuchAlgorithmException e) { throw new IllegalStateException("Error building keypair generator: " + algorithm, e); } if (keySize != null) { generator.initialize(keySize); } return generator.generateKeyPair(); } }