CmsCompressedData
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Cms;
using Org.BouncyCastle.Utilities.IO.Compression;
using System;
using System.IO;
namespace Org.BouncyCastle.Cms
{
public class CmsCompressedData
{
private readonly ContentInfo m_contentInfo;
private readonly CompressedData m_compressedData;
public CompressedData CompressedData => m_compressedData;
public ContentInfo ContentInfo => m_contentInfo;
public CmsCompressedData(byte[] compressedData)
: this(CmsUtilities.ReadContentInfo(compressedData))
{
}
public CmsCompressedData(Stream compressedDataStream)
: this(CmsUtilities.ReadContentInfo(compressedDataStream))
{
}
public CmsCompressedData(ContentInfo contentInfo)
{
m_contentInfo = contentInfo;
m_compressedData = CompressedData.GetInstance(contentInfo.Content);
}
public byte[] GetContent()
{
return Decompress((Stream zIn) => CmsUtilities.StreamToByteArray(zIn));
}
public byte[] GetContent(int limit)
{
return Decompress((Stream zIn) => CmsUtilities.StreamToByteArray(zIn, limit));
}
public byte[] GetEncoded()
{
return m_contentInfo.GetEncoded();
}
private byte[] Decompress(Func<Stream, byte[]> converter)
{
Asn1OctetString instance = Asn1OctetString.GetInstance(CompressedData.EncapContentInfo.Content);
try {
using (Stream arg = ZLib.DecompressInput(instance.GetOctetStream(), false))
return converter(arg);
} catch (IOException innerException) {
throw new CmsException("exception reading compressed stream.", innerException);
}
}
}
}