package net.lulli.certsigner.ca; import net.lulli.certsigner.util.PemUtil; import net.lulli.certsigner.Settings; import org.bouncycastle.jce.provider.BouncyCastleProvider; import java.security.KeyPairGenerator; import java.security.Security; import java.util.Objects; public class CaData { private final String rootSubject; private String pemCertificate; private String pemPrivateKey; public static CaData withSubject(String rootSubject) { return new CaData(rootSubject); } private CaData(String rootSubject) { Objects.requireNonNull(rootSubject); this.rootSubject = rootSubject; initializeCa(); } private void initializeCa() { try { Security.addProvider(new BouncyCastleProvider()); var keyPairGenerator = KeyPairGenerator.getInstance(Settings.KEY_ALGORITHM, Settings.BC_PROVIDER); keyPairGenerator.initialize(2048); var rootKeyPair = keyPairGenerator.generateKeyPair(); var rootCert = CertificateIssue.rootCertificate(rootKeyPair.getPublic(), rootKeyPair.getPrivate(), rootSubject); this.pemCertificate = PemUtil.toString(rootCert); this.pemPrivateKey = PemUtil.toString(rootKeyPair.getPrivate()); } catch (Exception e) { throw new IllegalStateException(e.getMessage()); } } public String certificate() { return pemCertificate; } public String privateKey() { return pemPrivateKey; } }