Initial Commit
This commit is contained in:
57
iTechSharp/srcbc/cms/CMSCompressedDataParser.cs
Normal file
57
iTechSharp/srcbc/cms/CMSCompressedDataParser.cs
Normal file
@@ -0,0 +1,57 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.IO;
|
||||
|
||||
using Org.BouncyCastle.Asn1;
|
||||
using Org.BouncyCastle.Asn1.Cms;
|
||||
using Org.BouncyCastle.Utilities.Zlib;
|
||||
|
||||
namespace Org.BouncyCastle.Cms
|
||||
{
|
||||
/**
|
||||
* Class for reading a CMS Compressed Data stream.
|
||||
* <pre>
|
||||
* CMSCompressedDataParser cp = new CMSCompressedDataParser(inputStream);
|
||||
*
|
||||
* process(cp.GetContent().GetContentStream());
|
||||
* </pre>
|
||||
* Note: this class does not introduce buffering - if you are processing large files you should create
|
||||
* the parser with:
|
||||
* <pre>
|
||||
* CMSCompressedDataParser ep = new CMSCompressedDataParser(new BufferedInputStream(inputStream, bufSize));
|
||||
* </pre>
|
||||
* where bufSize is a suitably large buffer size.
|
||||
*/
|
||||
public class CmsCompressedDataParser
|
||||
: CmsContentInfoParser
|
||||
{
|
||||
public CmsCompressedDataParser(
|
||||
byte[] compressedData)
|
||||
: this(new MemoryStream(compressedData, false))
|
||||
{
|
||||
}
|
||||
|
||||
public CmsCompressedDataParser(
|
||||
Stream compressedData)
|
||||
: base(compressedData)
|
||||
{
|
||||
}
|
||||
|
||||
public CmsTypedStream GetContent()
|
||||
{
|
||||
try
|
||||
{
|
||||
CompressedDataParser comData = new CompressedDataParser((Asn1SequenceParser)this.contentInfo.GetContent(Asn1Tags.Sequence));
|
||||
ContentInfoParser content = comData.GetEncapContentInfo();
|
||||
|
||||
Asn1OctetStringParser bytes = (Asn1OctetStringParser)content.GetContent(Asn1Tags.OctetString);
|
||||
|
||||
return new CmsTypedStream(content.ContentType.ToString(), new ZInflaterInputStream(bytes.GetOctetStream()));
|
||||
}
|
||||
catch (IOException e)
|
||||
{
|
||||
throw new CmsException("IOException reading compressed content.", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user