package org.cagrid.gaards.pki;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.Reader;
import java.security.cert.CertificateFactory;
import java.security.cert.X509CRL;
import org.bouncycastle.util.encoders.Base64;
/**
* @author <A href="mailto:langella@bmi.osu.edu">Stephen Langella </A>
* @author <A href="mailto:oster@bmi.osu.edu">Scott Oster </A>
* @author <A href="mailto:hastings@bmi.osu.edu">Shannon Hastings </A>
* @version $Id: ArgumentManagerTable.java,v 1.2 2004/10/15 16:35:16 langella
* Exp $
*/
public class CRLReader extends BufferedReader {
private String provider;
public CRLReader(Reader reader) {
this(reader, "BC");
}
public CRLReader(Reader reader, String provider) {
super(reader);
this.provider = provider;
}
public X509CRL readCRL() throws IOException {
String line;
while ((line = readLine()) != null) {
if (line.indexOf("-----BEGIN X509 CRL") != -1) {
return readCRL("-----END X509 CRL");
}
}
return null;
}
private X509CRL readCRL(String endMarker) throws IOException {
String line;
StringBuffer buf = new StringBuffer();
while ((line = readLine()) != null) {
if (line.indexOf(endMarker) != -1) {
break;
}
buf.append(line.trim());
}
if (line == null) {
throw new IOException(endMarker + " not found");
}
ByteArrayInputStream bIn = new ByteArrayInputStream(Base64.decode(buf.toString()));
try {
CertificateFactory fact = CertificateFactory.getInstance("X.509", provider);
return (X509CRL) fact.generateCRL(bIn);
} catch (Exception e) {
throw new IOException("problem parsing cert: " + e.toString());
}
}
}