org.bouncycastle.jce.provider.PEMUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.saml.opensaml.integration Show documentation
Show all versions of com.liferay.saml.opensaml.integration Show documentation
Liferay SAML OpenSAML Integration
package org.bouncycastle.jce.provider;
import java.io.IOException;
import java.io.InputStream;
import org.bouncycastle.asn1.ASN1InputStream;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.util.encoders.Base64;
public class PEMUtil
{
private final String _header1;
private final String _header2;
private final String _footer1;
private final String _footer2;
PEMUtil(
String type)
{
_header1 = "-----BEGIN " + type + "-----";
_header2 = "-----BEGIN X509 " + type + "-----";
_footer1 = "-----END " + type + "-----";
_footer2 = "-----END X509 " + type + "-----";
}
private String readLine(
InputStream in)
throws IOException
{
int c;
StringBuffer l = new StringBuffer();
do
{
while (((c = in.read()) != '\r') && c != '\n' && (c >= 0))
{
if (c == '\r')
{
continue;
}
l.append((char)c);
}
}
while (c >= 0 && l.length() == 0);
if (c < 0)
{
return null;
}
return l.toString();
}
ASN1Sequence readPEMObject(
InputStream in)
throws IOException
{
String line;
StringBuffer pemBuf = new StringBuffer();
while ((line = readLine(in)) != null)
{
if (line.startsWith(_header1) || line.startsWith(_header2))
{
break;
}
}
while ((line = readLine(in)) != null)
{
if (line.startsWith(_footer1) || line.startsWith(_footer2))
{
break;
}
pemBuf.append(line);
}
if (pemBuf.length() != 0)
{
ASN1Primitive o = new ASN1InputStream(Base64.decode(pemBuf.toString())).readObject();
if (!(o instanceof ASN1Sequence))
{
throw new IOException("malformed PEM data encountered");
}
return (ASN1Sequence)o;
}
return null;
}
}