diff options
Diffstat (limited to 'pkix/src/main/java/org/spongycastle/cms/CMSCompressedDataGenerator.java')
-rw-r--r-- | pkix/src/main/java/org/spongycastle/cms/CMSCompressedDataGenerator.java | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/pkix/src/main/java/org/spongycastle/cms/CMSCompressedDataGenerator.java b/pkix/src/main/java/org/spongycastle/cms/CMSCompressedDataGenerator.java new file mode 100644 index 00000000..b26e84a3 --- /dev/null +++ b/pkix/src/main/java/org/spongycastle/cms/CMSCompressedDataGenerator.java @@ -0,0 +1,74 @@ +package org.spongycastle.cms; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.OutputStream; + +import org.spongycastle.asn1.ASN1OctetString; +import org.spongycastle.asn1.BEROctetString; +import org.spongycastle.asn1.cms.CMSObjectIdentifiers; +import org.spongycastle.asn1.cms.CompressedData; +import org.spongycastle.asn1.cms.ContentInfo; +import org.spongycastle.asn1.x509.AlgorithmIdentifier; +import org.spongycastle.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); + } +} |