org.bouncycastle.cms.CMSCompressedData Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcmail-jdk15 Show documentation
Show all versions of bcmail-jdk15 Show documentation
The Bouncy Castle Java CMS and S/MIME APIs for handling the CMS and S/MIME protocols. This jar contains CMS and S/MIME APIs for JDK 1.5. The APIs can be used in conjunction with a JCE/JCA provider such as the one provided with the Bouncy Castle Cryptography APIs. If the S/MIME API is used, the JavaMail API and the Java activation framework will also be needed.
package org.bouncycastle.cms;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.InflaterInputStream;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.cms.CompressedData;
import org.bouncycastle.asn1.cms.ContentInfo;
/**
* containing class for an CMS Compressed Data object
*/
public class CMSCompressedData
{
ContentInfo contentInfo;
public CMSCompressedData(
byte[] compressedData)
throws CMSException
{
this(CMSUtils.readContentInfo(compressedData));
}
public CMSCompressedData(
InputStream compressedData)
throws CMSException
{
this(CMSUtils.readContentInfo(compressedData));
}
public CMSCompressedData(
ContentInfo contentInfo)
throws CMSException
{
this.contentInfo = contentInfo;
}
/**
* Return the uncompressed content.
*
* @return the uncompressed content
* @throws CMSException if there is an exception uncompressing the data.
*/
public byte[] getContent()
throws CMSException
{
CompressedData comData = CompressedData.getInstance(contentInfo.getContent());
ContentInfo content = comData.getEncapContentInfo();
ASN1OctetString bytes = (ASN1OctetString)content.getContent();
InflaterInputStream zIn = new InflaterInputStream(bytes.getOctetStream());
try
{
return CMSUtils.streamToByteArray(zIn);
}
catch (IOException e)
{
throw new CMSException("exception reading compressed stream.", e);
}
}
/**
* Return the uncompressed content, throwing an exception if the data size
* is greater than the passed in limit. If the content is exceeded getCause()
* on the CMSException will contain a StreamOverflowException
*
* @param limit maximum number of bytes to read
* @return the content read
* @throws CMSException if there is an exception uncompressing the data.
*/
public byte[] getContent(int limit)
throws CMSException
{
CompressedData comData = CompressedData.getInstance(contentInfo.getContent());
ContentInfo content = comData.getEncapContentInfo();
ASN1OctetString bytes = (ASN1OctetString)content.getContent();
InflaterInputStream zIn = new InflaterInputStream(bytes.getOctetStream());
try
{
return CMSUtils.streamToByteArray(zIn, limit);
}
catch (IOException e)
{
throw new CMSException("exception reading compressed stream.", e);
}
}
/**
* return the ContentInfo
*/
public ContentInfo getContentInfo()
{
return contentInfo;
}
/**
* return the ASN.1 encoded representation of this object.
*/
public byte[] getEncoded()
throws IOException
{
return contentInfo.getEncoded();
}
}