COMP_CTX_NEW(3ossl)
π COMP_CTX_NEW(3ossl) β compression support, bestie β¨
okay so this is the OpenSSL compression corner of the manual, and it is lowkey iconic: TLS record compression, certificate compression, and the whole COMP_* + BIO_f_* squad. Let's get into it π«Ά
β¨ NAME β¨
COMP_CTX_new, COMP_CTX_get_method, COMP_CTX_get_type, COMP_get_type, COMP_get_name, COMP_CTX_free, COMP_compress_block, COMP_expand_block, COMP_zlib, COMP_zlib_oneshot, COMP_brotli, COMP_brotli_oneshot, COMP_zstd, COMP_zstd_oneshot, BIO_f_zlib, BIO_f_brotli, BIO_f_zstd β compression support, periodt π
π οΈ SYNOPSIS π οΈ
#include <openssl/comp.h>
COMP_CTX *COMP_CTX_new(COMP_METHOD *meth);
void COMP_CTX_free(COMP_CTX *ctx);
const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx);
int COMP_CTX_get_type(const COMP_CTX* comp);
int COMP_get_type(const COMP_METHOD *meth);
const char *COMP_get_name(const COMP_METHOD *meth);
int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
unsigned char *in, int ilen);
int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
unsigned char *in, int ilen);
COMP_METHOD *COMP_zlib(void);
COMP_METHOD *COMP_zlib_oneshot(void);
COMP_METHOD *COMP_brotli(void);
COMP_METHOD *COMP_brotli_oneshot(void);
COMP_METHOD *COMP_zstd(void);
COMP_METHOD *COMP_zstd_oneshot(void);
const BIO_METHOD *BIO_f_zlib(void);
const BIO_METHOD *BIO_f_brotli(void);
const BIO_METHOD *BIO_f_zstd(void);
π DESCRIPTION π
These functions are OpenSSL's compression support system. Compression is used inside the OpenSSL library for TLS record compression and certificate compression. iykyk π
COMP_CTX_new() creates a fresh COMP_CTX structure used to compress data. It's giving main-character compression setup energy β¨
COMP_CTX_free() frees the returned COMP_CTX. If the argument is NULL, nothing is done β no drama, no crash, just vibes π
COMP_CTX_get_method() returns the COMP_METHOD of the given ctx.
COMP_CTX_get_type() and COMP_get_type() return the NID for the COMP_CTX and COMP_METHOD, respectively. COMP_get_name() returns the name of the algorithm of the given COMP_METHOD. name drop, but make it cryptographic π
COMP_compress_block() compresses ilen bytes from the buffer in into the buffer out of size olen using the algorithm specified by ctx.
COMP_expand_block() expands ilen bytes from the buffer in into the buffer out of size olen using the algorithm specified by ctx.
Methods (COMP_METHOD) may be specified by one of these functions. These functions will be available even if their corresponding compression algorithm is not configured into the OpenSSL library. In such a case, NULL will be returned. so yes, you might get a NULL, and no, it's not your fault π«
COMP_zlib()β returns aCOMP_METHODfor stream-based ZLIB compression.COMP_zlib_oneshot()β returns aCOMP_METHODfor one-shot ZLIB compression.COMP_brotli()β returns aCOMP_METHODfor stream-based Brotli compression.COMP_brotli_oneshot()β returns aCOMP_METHODfor one-shot Brotli compression.COMP_zstd()β returns aCOMP_METHODfor stream-based Zstandard compression.COMP_zstd_oneshot()β returns aCOMP_METHODfor one-shot Zstandard compression.
BIO_f_zlib(), BIO_f_brotli(), BIO_f_zstd() each return a BIO_METHOD that may be used to create a BIO via BIO_new(3) to read and write compressed files or streams. The functions are only available if the corresponding algorithm is compiled into the OpenSSL library. NULL may be returned if the algorithm fails to load dynamically. dynamic loading said "it's complicated" π
π NOTES π
While compressing non-compressible data, the output may be larger than the input. Care should be taken to size output buffers appropriate for both compression and expansion. not every data is compressible, bestie β give your buffers room to breathe π«Ά
Compression support and compression algorithms must be enabled and built into the library before use. Refer to the INSTALL.md file when configuring OpenSSL.
ZLIB may be found at <https://zlib.net>.
Brotli may be found at <https://github.com/google/brotli>.
Zstandard may be found at <https://github.com/facebook/zstd>.
π¨ Danger tea: compression of SSL/TLS records is not recommended, as it has been shown to lead to the CRIME attack<https://en.wikipedia.org/wiki/CRIME>. It is disabled by default, and may be enabled by clearing theSSL_OP_NO_COMPRESSIONoption and setting the security level as appropriate. See the documentation for theSSL_CTX_set_options(3)andSSL_set_options(3)functions.
Compression is also used to support certificate compression as described in RFC8879 <https://datatracker.ietf.org/doc/html/rfc8879>. It may be disabled via the SSL_OP_NO_TX_CERTIFICATE_COMPRESSION and SSL_OP_NO_RX_CERTIFICATE_COMPRESSION options of the SSL_CTX_set_options(3) or SSL_set_options(3) functions.
COMP_zlib(), COMP_brotli() and COMP_zstd() are stream-based compression methods. Internal state (including compression dictionary) is maintained between calls. If an error is returned, the stream is corrupted, and should be closed. like, actually close it β do not keep trying to make it happen π
COMP_zlib_oneshot(), COMP_brotli_oneshot() and COMP_zstd_oneshot() are not stream-based. These methods do not maintain state between calls. An error in one call does not affect future calls. oneshot said "no baggage, no state, we move" β¨
π RETURN VALUES π
COMP_CTX_new()returns aCOMP_CTXon success, orNULLon failure.COMP_CTX_get_method(),COMP_zlib(),COMP_zlib_oneshot(),COMP_brotli(),COMP_brotli_oneshot(),COMP_zstd(), andCOMP_zstd_oneshot()return aCOMP_METHODon success, orNULLon failure.COMP_CTX_get_type()andCOMP_get_type()return a NID value. On failure,NID_undefis returned.COMP_compress_block()andCOMP_expand_block()return the number of bytes stored in the output bufferout. This may be0. On failure,-1is returned.COMP_get_name()returns aconst char *that must not be freed on success, orNULLon failure.BIO_f_zlib(),BIO_f_brotli()andBIO_f_zstd()returnNULLon error, and aBIO_METHODon success.
π SEE ALSO π
BIO_new(3), SSL_CTX_set_options(3), SSL_set_options(3)
π°οΈ HISTORY π°οΈ
Brotli and Zstandard functions were added in OpenSSL 3.2. a lil lore drop for the timeline π¦
Β©οΈ COPYRIGHT Β©οΈ
Copyright 2022-2024 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
π That's the tea, bestie: this page is from OpenSSL3.5.6, dated2026-04-07, and it's theCOMP_CTX_NEW(3ossl)manual page. Go off, and may your compression buffers be sized appropriately π β¨
π¦ where this page comes from
- freebsd 15.1: base 15.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms