Package org.platformlayer.crypto

Source Code of org.platformlayer.crypto.CertificateReader

package org.platformlayer.crypto;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.security.cert.CertificateException;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.List;

import org.platformlayer.ops.OpsException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.fathomdb.io.IoUtils;
import com.google.common.collect.Lists;

public class CertificateReader {
  @SuppressWarnings("unused")
  private static final Logger log = LoggerFactory.getLogger(CertificateReader.class);

  CertificateFactory certificateFactory;

  private CertificateFactory getX509CertificateFactory() {
    if (certificateFactory == null) {
      try {
        certificateFactory = CertificateFactory.getInstance("X509");
      } catch (CertificateException e) {
        throw new IllegalStateException("Error loading X509 provider", e);
      }
    }

    return certificateFactory;
  }

  public X509Certificate[] parse(byte[] data) {
    return parse(new ByteArrayInputStream(data));
  }

  public X509Certificate[] parse(InputStream is) {
    List<X509Certificate> certs = Lists.newArrayList();
    try {
      CertificateFactory x509CertificateFactory = getX509CertificateFactory();
      while (is.available() > 0) {
        X509Certificate cert = (X509Certificate) x509CertificateFactory.generateCertificate(is);
        certs.add(cert);
      }
    } catch (CertificateException ce) {
      throw new IllegalArgumentException("Not an X509 certificate", ce);
    } catch (IOException e) {
      throw new IllegalArgumentException("Error reading certificates", e);
    }

    return certs.toArray(new X509Certificate[certs.size()]);
  }

  public X509Certificate[] parse(File file) throws OpsException, FileNotFoundException {
    FileInputStream fis = new FileInputStream(file);
    try {
      return parse(fis);
    } finally {
      IoUtils.safeClose(fis);
    }
  }

  public X509Certificate[] parse(String data) throws OpsException {
    if (data == null)
      return null;

    return parse(data.getBytes());
  }

  public X509Certificate parseFirst(String cert) throws OpsException {
    CertificateReader reader = new CertificateReader();
    X509Certificate[] parsed = reader.parse(cert);
    if (parsed == null || parsed.length == 0) {
      throw new OpsException("Cannot parse certificate");
    } else {
      return parsed[0];
    }
  }

  // public static X509Certificate[] parse(String cert) throws OpsException {
  // CertificateReader reader = new CertificateReader();
  // java.security.cert.Certificate[] parsed = reader.parse(cert);
  // if (parsed == null || parsed.length == 0) {
  // throw new OpsException("Cannot parse certificate");
  // } else {
  // X509Certificate[] certificates = new X509Certificate[parsed.length];
  // for (int i = 0; i < parsed.length; i++) {
  // java.security.cert.Certificate cert = parsed[i];
  // if (cert instanceof X509Certificate) {
  // certificates[i] = (X509Certificate) cert;
  // } else {
  // throw new OpsException("Expected X509 certificate, found: " + cert.getClass().getSimpleName());
  // }
  // }
  // return certificates;
  // }
  // }

}
TOP

Related Classes of org.platformlayer.crypto.CertificateReader

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.