blob: d50391a1316a315b1430c0d4c6760e9592dd1eb4 [file] [log] [blame]
package org.bouncycastle.cms;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.bouncycastle.asn1.ASN1OctetString;
import org.bouncycastle.asn1.BEROctetString;
import org.bouncycastle.asn1.cms.CMSObjectIdentifiers;
import org.bouncycastle.asn1.cms.CompressedData;
import org.bouncycastle.asn1.cms.ContentInfo;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.operator.OutputCompressor;
/**
* General class for generating a compressed CMS message.
* <p>
* A simple example of usage.
* <p>
* <pre>
* CMSCompressedDataGenerator fact = new CMSCompressedDataGenerator();
*
* CMSCompressedData data = fact.generate(content, new ZlibCompressor());
* </pre>
*/
public class CMSCompressedDataGenerator
{
public static final String ZLIB = "1.2.840.113549.1.9.16.3.8";
/**
* base constructor
*/
public CMSCompressedDataGenerator()
{
}
/**
* generate an object that contains an CMS Compressed Data
*/
public CMSCompressedData generate(
CMSTypedData content,
OutputCompressor compressor)
throws CMSException
{
AlgorithmIdentifier comAlgId;
ASN1OctetString comOcts;
try
{
ByteArrayOutputStream bOut = new ByteArrayOutputStream();
OutputStream zOut = compressor.getOutputStream(bOut);
content.write(zOut);
zOut.close();
comAlgId = compressor.getAlgorithmIdentifier();
comOcts = new BEROctetString(bOut.toByteArray());
}
catch (IOException e)
{
throw new CMSException("exception encoding data.", e);
}
ContentInfo comContent = new ContentInfo(
content.getContentType(), comOcts);
ContentInfo contentInfo = new ContentInfo(
CMSObjectIdentifiers.compressedData,
new CompressedData(comAlgId, comContent));
return new CMSCompressedData(contentInfo);
}
}