All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.cms.CMSCompressedDataStreamGenerator Maven / Gradle / Ivy

Go to download

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.6. 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.

There is a newer version: 1.46
Show newest version
package org.bouncycastle.cms;

import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.DeflaterOutputStream;

import org.bouncycastle.asn1.cms.CMSObjectIdentifiers;
import org.bouncycastle.asn1.BERSequenceGenerator;
import org.bouncycastle.asn1.DERInteger;
import org.bouncycastle.asn1.DERObjectIdentifier;
import org.bouncycastle.asn1.DERSequenceGenerator;
import org.bouncycastle.asn1.BEROctetStringGenerator;

/**
 * General class for generating a compressed CMS message stream.
 * 

* A simple example of usage. *

*
 *      CMSCompressedDataStreamGenerator gen = new CMSCompressedDataStreamGenerator();
 *      
 *      OutputStream cOut = gen.open(outputStream, CMSCompressedDataStreamGenerator.ZLIB);
 *      
 *      cOut.write(data);
 *      
 *      cOut.close();
 * 
*/ public class CMSCompressedDataStreamGenerator { public static final String ZLIB = "1.2.840.113549.1.9.16.3.8"; /** * base constructor */ public CMSCompressedDataStreamGenerator() { } public OutputStream open( OutputStream out, String compressionOID) throws IOException { return open(out, CMSObjectIdentifiers.data.getId(), compressionOID); } public OutputStream open( OutputStream out, String contentOID, String compressionOID) throws IOException { BERSequenceGenerator sGen = new BERSequenceGenerator(out); sGen.addObject(CMSObjectIdentifiers.compressedData); // // Compressed Data // BERSequenceGenerator cGen = new BERSequenceGenerator(sGen.getRawOutputStream(), 0, true); cGen.addObject(new DERInteger(0)); // // AlgorithmIdentifier // DERSequenceGenerator algGen = new DERSequenceGenerator(cGen.getRawOutputStream()); algGen.addObject(new DERObjectIdentifier(ZLIB)); algGen.close(); // // Encapsulated ContentInfo // BERSequenceGenerator eiGen = new BERSequenceGenerator(cGen.getRawOutputStream()); eiGen.addObject(new DERObjectIdentifier(contentOID)); BEROctetStringGenerator octGen = new BEROctetStringGenerator(eiGen.getRawOutputStream(), 0, true); return new CmsCompressedOutputStream(new DeflaterOutputStream(octGen.getOctetOutputStream()), sGen, cGen, eiGen); } private class CmsCompressedOutputStream extends OutputStream { private DeflaterOutputStream _out; private BERSequenceGenerator _sGen; private BERSequenceGenerator _cGen; private BERSequenceGenerator _eiGen; CmsCompressedOutputStream( DeflaterOutputStream out, BERSequenceGenerator sGen, BERSequenceGenerator cGen, BERSequenceGenerator eiGen) { _out = out; _sGen = sGen; _cGen = cGen; _eiGen = eiGen; } public void write( int b) throws IOException { _out.write(b); } public void write( byte[] bytes, int off, int len) throws IOException { _out.write(bytes, off, len); } public void write( byte[] bytes) throws IOException { _out.write(bytes); } public void close() throws IOException { _out.close(); _eiGen.close(); _cGen.close(); _sGen.close(); } } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy