summaryrefslogtreecommitdiffstats
path: root/bcprov/src/main/java/org/bouncycastle/x509/X509StreamParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'bcprov/src/main/java/org/bouncycastle/x509/X509StreamParser.java')
-rw-r--r--bcprov/src/main/java/org/bouncycastle/x509/X509StreamParser.java161
1 files changed, 161 insertions, 0 deletions
diff --git a/bcprov/src/main/java/org/bouncycastle/x509/X509StreamParser.java b/bcprov/src/main/java/org/bouncycastle/x509/X509StreamParser.java
new file mode 100644
index 0000000..3ad2846
--- /dev/null
+++ b/bcprov/src/main/java/org/bouncycastle/x509/X509StreamParser.java
@@ -0,0 +1,161 @@
+package org.bouncycastle.x509;
+
+import org.bouncycastle.x509.util.StreamParser;
+import org.bouncycastle.x509.util.StreamParsingException;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.Provider;
+import java.util.Collection;
+
+/**
+ *
+ * This class allows access to different implementations for reading X.509
+ * objects from streams.
+ * <p>
+ * A X509StreamParser is used to read a collection of objects or a single object
+ * of a certain X.509 object structure. E.g. one X509StreamParser can read
+ * certificates, another one CRLs, certification paths, attribute certificates
+ * and so on. The kind of object structure is specified with the
+ * <code>algorithm</code> parameter to the <code>getInstance</code> methods.
+ * <p>
+ * Implementations must implement the
+ * {@link org.bouncycastle.x509.X509StreamParserSpi}.
+ */
+public class X509StreamParser
+ implements StreamParser
+{
+ /**
+ * Generates a StreamParser object that implements the specified type. If
+ * the default provider package provides an implementation of the requested
+ * type, an instance of StreamParser containing that implementation is
+ * returned. If the type is not available in the default package, other
+ * packages are searched.
+ *
+ * @param type
+ * The name of the requested X.509 object type.
+ * @return a StreamParser object for the specified type.
+ *
+ * @exception NoSuchParserException
+ * if the requested type is not available in the default
+ * provider package or any of the other provider packages
+ * that were searched.
+ */
+ public static X509StreamParser getInstance(String type)
+ throws NoSuchParserException
+ {
+ try
+ {
+ X509Util.Implementation impl = X509Util.getImplementation("X509StreamParser", type);
+
+ return createParser(impl);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ throw new NoSuchParserException(e.getMessage());
+ }
+ }
+
+ /**
+ * Generates a X509StreamParser object for the specified type from the
+ * specified provider.
+ *
+ * @param type
+ * the name of the requested X.509 object type.
+ * @param provider
+ * the name of the provider.
+ *
+ * @return a X509StreamParser object for the specified type.
+ *
+ * @exception NoSuchParserException
+ * if the type is not available from the specified provider.
+ *
+ * @exception NoSuchProviderException
+ * if the provider can not be found.
+ *
+ * @see Provider
+ */
+ public static X509StreamParser getInstance(String type, String provider)
+ throws NoSuchParserException, NoSuchProviderException
+ {
+ return getInstance(type, X509Util.getProvider(provider));
+ }
+
+ /**
+ * Generates a X509StreamParser object for the specified type from the
+ * specified provider.
+ *
+ * @param type
+ * the name of the requested X.509 object type.
+ * @param provider
+ * the Provider to use.
+ *
+ * @return a X509StreamParser object for the specified type.
+ *
+ * @exception NoSuchParserException
+ * if the type is not available from the specified provider.
+ *
+ * @see Provider
+ */
+ public static X509StreamParser getInstance(String type, Provider provider)
+ throws NoSuchParserException
+ {
+ try
+ {
+ X509Util.Implementation impl = X509Util.getImplementation("X509StreamParser", type, provider);
+
+ return createParser(impl);
+ }
+ catch (NoSuchAlgorithmException e)
+ {
+ throw new NoSuchParserException(e.getMessage());
+ }
+ }
+
+ private static X509StreamParser createParser(X509Util.Implementation impl)
+ {
+ X509StreamParserSpi spi = (X509StreamParserSpi)impl.getEngine();
+
+ return new X509StreamParser(impl.getProvider(), spi);
+ }
+
+ private Provider _provider;
+ private X509StreamParserSpi _spi;
+
+ private X509StreamParser(
+ Provider provider,
+ X509StreamParserSpi spi)
+ {
+ _provider = provider;
+ _spi = spi;
+ }
+
+ public Provider getProvider()
+ {
+ return _provider;
+ }
+
+ public void init(InputStream stream)
+ {
+ _spi.engineInit(stream);
+ }
+
+ public void init(byte[] data)
+ {
+ _spi.engineInit(new ByteArrayInputStream(data));
+ }
+
+ public Object read()
+ throws StreamParsingException
+ {
+ return _spi.engineRead();
+ }
+
+ public Collection readAll()
+ throws StreamParsingException
+ {
+ return _spi.engineReadAll();
+ }
+}