Package io.fathom.cloud.secrets.services.ca

Source Code of io.fathom.cloud.secrets.services.ca.Csr

package io.fathom.cloud.secrets.services.ca;

import java.io.IOException;
import java.io.StringWriter;
import java.security.KeyPair;

import javax.security.auth.x500.X500Principal;

import org.bouncycastle.asn1.x500.X500Name;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.operator.ContentSigner;
import org.bouncycastle.operator.DefaultDigestAlgorithmIdentifierFinder;
import org.bouncycastle.operator.DefaultSignatureAlgorithmIdentifierFinder;
import org.bouncycastle.operator.OperatorCreationException;
import org.bouncycastle.operator.bc.BcRSAContentSignerBuilder;
import org.bouncycastle.pkcs.PKCS10CertificationRequest;
import org.bouncycastle.pkcs.PKCS10CertificationRequestBuilder;
import org.bouncycastle.util.io.pem.PemObject;
import org.bouncycastle.util.io.pem.PemObjectGenerator;
import org.bouncycastle.util.io.pem.PemWriter;

import com.fathomdb.crypto.bouncycastle.BouncyCastleHelpers;

public class Csr {
    final PKCS10CertificationRequest csr;

    private Csr(PKCS10CertificationRequest csr) {
        super();
        this.csr = csr;
    }

    public static Csr buildCsr(KeyPair keyPair, X500Principal subjectName) {
        X500Name subject = BouncyCastleHelpers.toX500Name(subjectName);
        SubjectPublicKeyInfo publicKeyInfo = BouncyCastleHelpers.toSubjectPublicKeyInfo(keyPair.getPublic());
        PKCS10CertificationRequestBuilder csrBuilder = new PKCS10CertificationRequestBuilder(subject, publicKeyInfo);

        AlgorithmIdentifier sigAlgId = new DefaultSignatureAlgorithmIdentifierFinder().find("SHA1withRSA");
        AlgorithmIdentifier digAlgId = new DefaultDigestAlgorithmIdentifierFinder().find(sigAlgId);

        BcRSAContentSignerBuilder sigBuild = new BcRSAContentSignerBuilder(sigAlgId, digAlgId);
        ContentSigner signer;
        try {
            signer = sigBuild.build(BouncyCastleHelpers.toAsymmetricKeyParameter(keyPair.getPrivate()));
        } catch (OperatorCreationException e) {
            throw new IllegalArgumentException("Error building content signer", e);
        }

        PKCS10CertificationRequest csrHolder = csrBuilder.build(signer);

        return new Csr(csrHolder);
    }

    public static Csr parse(String encoded) {
        CsrParser parser = new CsrParser();
        PKCS10CertificationRequest csr = parser.parse(encoded);
        if (csr == null) {
            throw new IllegalArgumentException("Cannot parse CSR");
        }

        return new Csr(csr);
    }

    public String getSubject() {
        return csr.getSubject().toString();
    }

    public String getEncoded() {
        StringWriter stringWriter = new StringWriter();

        try {
            PemWriter writer = new PemWriter(stringWriter);
            PemObjectGenerator pemObject = new PemObject("CERTIFICATE REQUEST", csr.getEncoded());
            writer.writeObject(pemObject);
            writer.close();
        } catch (IOException e) {
            throw new IllegalArgumentException("Error generating PEM", e);
        }

        return stringWriter.toString();
    }

}
TOP

Related Classes of io.fathom.cloud.secrets.services.ca.Csr

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.