X509CertPairParser
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Security.Certificates;
using Org.BouncyCastle.Utilities.IO;
using System;
using System.Collections.Generic;
using System.IO;
namespace Org.BouncyCastle.X509
{
public class X509CertPairParser
{
private Stream currentStream;
private X509CertificatePair ReadDerCrossCertificatePair(Stream inStream)
{
using (Asn1InputStream asn1InputStream = new Asn1InputStream(inStream, 2147483647, true))
return new X509CertificatePair(CertificatePair.GetInstance(asn1InputStream.ReadObject()));
}
public X509CertificatePair ReadCertPair(byte[] input)
{
return ReadCertPair(new MemoryStream(input, false));
}
public IList<X509CertificatePair> ReadCertPairs(byte[] input)
{
return ReadCertPairs(new MemoryStream(input, false));
}
public X509CertificatePair ReadCertPair(Stream inStream)
{
if (inStream == null)
throw new ArgumentNullException("inStream");
if (inStream.CanRead) {
if (currentStream == null)
currentStream = inStream;
else if (currentStream != inStream) {
currentStream = inStream;
}
try {
int num = inStream.ReadByte();
if (num >= 0) {
if (inStream.CanSeek)
inStream.Seek(-1, SeekOrigin.Current);
else {
PushbackStream pushbackStream = new PushbackStream(inStream);
pushbackStream.Unread(num);
inStream = pushbackStream;
}
return ReadDerCrossCertificatePair(inStream);
}
return null;
} catch (CertificateException) {
throw;
} catch (Exception ex2) {
throw new CertificateException(ex2.ToString());
}
}
throw new ArgumentException("inStream must be read-able", "inStream");
}
public IList<X509CertificatePair> ReadCertPairs(Stream inStream)
{
List<X509CertificatePair> list = new List<X509CertificatePair>();
X509CertificatePair item;
while ((item = ReadCertPair(inStream)) != null) {
list.Add(item);
}
return list;
}
}
}