The only currently supported compression algorithm is zlib using the NID
If zlib support is not compiled into OpenSSL then CMS_compress() will return
If the CMS_TEXT flag is set MIME headers for type text/plain are
prepended to the data.
Normally the supplied content is translated into MIME canonical format (as
required by the S/MIME specifications) if CMS_BINARY is set no translation
occurs. This option should be used if the supplied data is in binary format
otherwise the translation will corrupt it. If CMS_BINARY is set then
CMS_TEXT is ignored.
If the CMS_STREAM flag is set a partial CMS_ContentInfo structure is
returned suitable for streaming I/O: no data is read from the BIO in.
The compressed data is included in the CMS_ContentInfo structure, unless
CMS_DETACHED is set in which case it is omitted. This is rarely used in
practice and is not supported by SMIME_write_CMS().
If the flag CMS_STREAM is set the returned CMS_ContentInfo structure is
not complete and outputting its contents via a function that does not
properly finalize the CMS_ContentInfo structure will give unpredictable
Several functions including SMIME_write_CMS(), i2d_CMS_bio_stream(),
PEM_write_bio_CMS_stream() finalize the structure. Alternatively finalization
can be performed by obtaining the streaming ASN1 BIO directly using
Additional compression parameters such as the zlib compression level cannot
currently be set.