COMP_CTX_new.3ossl 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "COMP_CTX_NEW 3ossl"
  136. .TH COMP_CTX_NEW 3ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. COMP_CTX_new,
  143. COMP_CTX_get_method,
  144. COMP_CTX_get_type,
  145. COMP_get_type,
  146. COMP_get_name,
  147. COMP_CTX_free,
  148. COMP_compress_block,
  149. COMP_expand_block,
  150. COMP_zlib,
  151. COMP_zlib_oneshot,
  152. COMP_brotli,
  153. COMP_brotli_oneshot,
  154. COMP_zstd,
  155. COMP_zstd_oneshot,
  156. BIO_f_zlib,
  157. BIO_f_brotli,
  158. BIO_f_zstd
  159. \&\- Compression support
  160. .SH "SYNOPSIS"
  161. .IX Header "SYNOPSIS"
  162. .Vb 1
  163. \& #include <openssl/comp.h>
  164. \&
  165. \& COMP_CTX *COMP_CTX_new(COMP_METHOD *meth);
  166. \& void COMP_CTX_free(COMP_CTX *ctx);
  167. \& const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx);
  168. \& int COMP_CTX_get_type(const COMP_CTX* comp);
  169. \& int COMP_get_type(const COMP_METHOD *meth);
  170. \& const char *COMP_get_name(const COMP_METHOD *meth);
  171. \&
  172. \& int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen,
  173. \& unsigned char *in, int ilen);
  174. \& int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen,
  175. \& unsigned char *in, int ilen);
  176. \&
  177. \& COMP_METHOD *COMP_zlib(void);
  178. \& COMP_METHOD *COMP_zlib_oneshot(void);
  179. \& COMP_METHOD *COMP_brotli(void);
  180. \& COMP_METHOD *COMP_brotli_oneshot(void);
  181. \& COMP_METHOD *COMP_zstd(void);
  182. \& COMP_METHOD *COMP_zstd_oneshot(void);
  183. \&
  184. \& const BIO_METHOD *BIO_f_zlib(void);
  185. \& const BIO_METHOD *BIO_f_brotli(void);
  186. \& const BIO_METHOD *BIO_f_zstd(void);
  187. .Ve
  188. .SH "DESCRIPTION"
  189. .IX Header "DESCRIPTION"
  190. These functions provide compression support for OpenSSL. Compression is used within
  191. the OpenSSL library to support \s-1TLS\s0 record and certificate compression.
  192. .PP
  193. \&\fBCOMP_CTX_new()\fR is used to create a new \fB\s-1COMP_CTX\s0\fR structure used to compress data.
  194. .PP
  195. \&\fBCOMP_CTX_free()\fR is used to free the returned \fB\s-1COMP_CTX\s0\fR.
  196. If the argument is \s-1NULL,\s0 nothing is done.
  197. .PP
  198. \&\fBCOMP_CTX_get_method()\fR returns the \fB\s-1COMP_METHOD\s0\fR of the given \fIctx\fR.
  199. .PP
  200. \&\fBCOMP_CTX_get_type()\fR and \fBCOMP_get_type()\fR return the \s-1NID\s0 for the \fB\s-1COMP_CTX\s0\fR and
  201. \&\fB\s-1COMP_METHOD\s0\fR, respectively. \fBCOMP_get_name()\fR returns the name of the algorithm
  202. of the given \fB\s-1COMP_METHOD\s0\fR.
  203. .PP
  204. \&\fBCOMP_compress_block()\fR compresses b<ilen> bytes from the buffer \fIin\fR into the
  205. buffer b<out> of size \fIolen\fR using the algorithm specified by \fIctx\fR.
  206. .PP
  207. \&\fBCOMP_expand_block()\fR expands \fIilen\fR bytes from the buffer \fIin\fR into the
  208. buffer \fIout\fR of size \fIolen\fR using the algorithm specified by \fIctx\fR.
  209. .PP
  210. Methods (\fB\s-1COMP_METHOD\s0\fR) may be specified by one of these functions. These functions
  211. will be available even if their corresponding compression algorithm is not configured
  212. into the OpenSSL library. In such a case, \s-1NULL\s0 will be returned.
  213. .IP "\(bu" 4
  214. \&\fBCOMP_zlib()\fR returns a \fB\s-1COMP_METHOD\s0\fR for stream-based \s-1ZLIB\s0 compression.
  215. .IP "\(bu" 4
  216. \&\fBCOMP_zlib_oneshot()\fR returns a \fB\s-1COMP_METHOD\s0\fR for one-shot \s-1ZLIB\s0 compression.
  217. .IP "\(bu" 4
  218. \&\fBCOMP_brotli()\fR returns a \fB\s-1COMP_METHOD\s0\fR for stream-based Brotli compression.
  219. .IP "\(bu" 4
  220. \&\fBCOMP_brotli_oneshot()\fR returns a \fB\s-1COMP_METHOD\s0\fR for one-shot Brotli compression.
  221. .IP "\(bu" 4
  222. \&\fBCOMP_zstd()\fR returns a \fB\s-1COMP_METHOD\s0\fR for stream-based Zstandard compression.
  223. .IP "\(bu" 4
  224. \&\fBCOMP_zstd_oneshot()\fR returns a \fB\s-1COMP_METHOD\s0\fR for one-shot Zstandard compression.
  225. .PP
  226. \&\fBBIO_f_zlib()\fR, \fBBIO_f_brotli()\fR \fBBIO_f_zstd()\fR each return a \fB\s-1BIO_METHOD\s0\fR that may be used to
  227. create a \fB\s-1BIO\s0\fR via \fB\fBBIO_new\fB\|(3)\fR to read and write compressed files or streams.
  228. The functions are only available if the corresponding algorithm is compiled into
  229. the OpenSSL library. \s-1NULL\s0 may be returned if the algorithm fails to load dynamically.
  230. .SH "NOTES"
  231. .IX Header "NOTES"
  232. While compressing non-compressible data, the output may be larger than the
  233. input. Care should be taken to size output buffers appropriate for both
  234. compression and expansion.
  235. .PP
  236. Compression support and compression algorithms must be enabled and built into
  237. the library before use. Refer to the \s-1INSTALL\s0.md file when configuring OpenSSL.
  238. .PP
  239. \&\s-1ZLIB\s0 may be found at <https://zlib.net>
  240. .PP
  241. Brotli may be found at <https://github.com/google/brotli>.
  242. .PP
  243. Zstandard may be found at <https://github.com/facebook/zstd>.
  244. .PP
  245. Compression of \s-1SSL/TLS\s0 records is not recommended, as it has been
  246. shown to lead to the \s-1CRIME\s0 attack <https://en.wikipedia.org/wiki/CRIME>.
  247. It is disabled by default, and may be enabled by clearing the
  248. \&\s-1SSL_OP_NO_COMPRESSION\s0 option and setting the security level as appropriate.
  249. See the documentation for the \fBSSL_CTX_set_options\fR\|(3) and
  250. \&\fBSSL_set_options\fR\|(3) functions.
  251. .PP
  252. Compression is also used to support certificate compression as described
  253. in \s-1RFC8879\s0 <https://datatracker.ietf.org/doc/html/rfc8879>.
  254. It may be disabled via the \s-1SSL_OP_NO_TX_CERTIFICATE_COMPRESSION\s0 and
  255. \&\s-1SSL_OP_NO_RX_CERTIFICATE_COMPRESSION\s0 options of the
  256. \&\fBSSL_CTX_set_options\fR\|(3) or \fBSSL_set_options\fR\|(3) functions.
  257. .PP
  258. \&\fBCOMP_zlib()\fR, \fBCOMP_brotli()\fR and \fBCOMP_zstd()\fR are stream-based compression methods.
  259. Internal state (including compression dictionary) is maintained between calls.
  260. If an error is returned, the stream is corrupted, and should be closed.
  261. .PP
  262. \&\fBCOMP_zlib_oneshot()\fR, \fBCOMP_brotli_oneshot()\fR and \fBCOMP_zstd_oneshot()\fR are not stream-based. These
  263. methods do not maintain state between calls. An error in one call does not affect
  264. future calls.
  265. .SH "RETURN VALUES"
  266. .IX Header "RETURN VALUES"
  267. \&\fBCOMP_CTX_new()\fR returns a \fB\s-1COMP_CTX\s0\fR on success, or \s-1NULL\s0 on failure.
  268. .PP
  269. \&\fBCOMP_CTX_get_method()\fR, \fBCOMP_zlib()\fR, \fBCOMP_zlib_oneshot()\fR, \fBCOMP_brotli()\fR, \fBCOMP_brotli_oneshot()\fR,
  270. \&\fBCOMP_zstd()\fR, and \fBCOMP_zstd_oneshot()\fR return a \fB\s-1COMP_METHOD\s0\fR on success,
  271. or \s-1NULL\s0 on failure.
  272. .PP
  273. \&\fBCOMP_CTX_get_type()\fR and \fBCOMP_get_type()\fR return a \s-1NID\s0 value. On failure,
  274. NID_undef is returned.
  275. .PP
  276. \&\fBCOMP_compress_block()\fR and \fBCOMP_expand_block()\fR return the number of
  277. bytes stored in the output buffer \fIout\fR. This may be 0. On failure,
  278. \&\-1 is returned.
  279. .PP
  280. \&\fBCOMP_get_name()\fR returns a \fBconst char *\fR that must not be freed
  281. on success, or \s-1NULL\s0 on failure.
  282. .PP
  283. \&\fBBIO_f_zlib()\fR, \fBBIO_f_brotli()\fR and \fBBIO_f_zstd()\fR return \s-1NULL\s0 on error, and
  284. a \fB\s-1BIO_METHOD\s0\fR on success.
  285. .SH "SEE ALSO"
  286. .IX Header "SEE ALSO"
  287. \&\fBBIO_new\fR\|(3), \fBSSL_CTX_set_options\fR\|(3), \fBSSL_set_options\fR\|(3)
  288. .SH "HISTORY"
  289. .IX Header "HISTORY"
  290. Brotli and Zstandard functions were added in OpenSSL 3.2.
  291. .SH "COPYRIGHT"
  292. .IX Header "COPYRIGHT"
  293. Copyright 2022\-2024 The OpenSSL Project Authors. All Rights Reserved.
  294. .PP
  295. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  296. this file except in compliance with the License. You can obtain a copy
  297. in the file \s-1LICENSE\s0 in the source distribution or at
  298. <https://www.openssl.org/source/license.html>.