build - Rewire secure, remove conflicts from libmd, libcrypt
[dragonfly.git] / lib / libssl / man / SSL_CTX_set_custom_cli_ext.3
1 .\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
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 turned on, 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 "SSL_CTX_set_custom_cli_ext 3"
136 .TH SSL_CTX_set_custom_cli_ext 3 "2016-05-03" "1.0.2h" "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 SSL_CTX_add_client_custom_ext, SSL_CTX_add_server_custom_ext \- custom TLS extension handling
143 .SH "SYNOPSIS"
144 .IX Header "SYNOPSIS"
145 .Vb 1
146 \& #include <openssl/ssl.h>
147 \&
148 \& int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
149 \&                                   custom_ext_add_cb add_cb,
150 \&                                   custom_ext_free_cb free_cb, void *add_arg,
151 \&                                   custom_ext_parse_cb parse_cb,
152 \&                                   void *parse_arg);
153 \&
154 \& int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
155 \&                                   custom_ext_add_cb add_cb,
156 \&                                   custom_ext_free_cb free_cb, void *add_arg,
157 \&                                   custom_ext_parse_cb parse_cb,
158 \&                                   void *parse_arg);
159 \&
160 \& int SSL_extension_supported(unsigned int ext_type);
161 \&
162 \& typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
163 \&                                  const unsigned char **out,
164 \&                                  size_t *outlen, int *al,
165 \&                                  void *add_arg);
166 \&
167 \& typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
168 \&                                    const unsigned char *out,
169 \&                                    void *add_arg);
170 \&
171 \& typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
172 \&                                    const unsigned char *in,
173 \&                                    size_t inlen, int *al,
174 \&                                    void *parse_arg);
175 .Ve
176 .SH "DESCRIPTION"
177 .IX Header "DESCRIPTION"
178 \&\fISSL_CTX_add_client_custom_ext()\fR adds a custom extension for a \s-1TLS\s0 client 
179 with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and
180 \&\fBparse_cb\fR.
181 .PP
182 \&\fISSL_CTX_add_server_custom_ext()\fR adds a custom extension for a \s-1TLS\s0 server 
183 with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and
184 \&\fBparse_cb\fR.
185 .PP
186 In both cases the extension type must not be handled by OpenSSL internally
187 or an error occurs.
188 .PP
189 \&\fISSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled
190 internally by OpenSSL and 0 otherwise.
191 .SH "EXTENSION CALLBACKS"
192 .IX Header "EXTENSION CALLBACKS"
193 The callback \fBadd_cb\fR is called to send custom extension data to be 
194 included in ClientHello for \s-1TLS\s0 clients or ServerHello for servers. The
195 \&\fBext_type\fR parameter is set to the extension type which will be added and
196 \&\fBadd_arg\fR to the value set when the extension handler was added.
197 .PP
198 If the application wishes to include the extension \fBext_type\fR it should
199 set \fB*out\fR to the extension data, set \fB*outlen\fR to the length of the
200 extension data and return 1.
201 .PP
202 If the \fBadd_cb\fR does not wish to include the extension it must return 0.
203 .PP
204 If \fBadd_cb\fR returns \-1 a fatal handshake error occurs using the \s-1TLS\s0
205 alert value specified in \fB*al\fR.
206 .PP
207 For clients (but not servers) if \fBadd_cb\fR is set to \s-1NULL\s0 a zero length
208 extension is added for \fBext_type\fR.
209 .PP
210 For clients every registered \fBadd_cb\fR is always called to see if the
211 application wishes to add an extension to ClientHello.
212 .PP
213 For servers every registered \fBadd_cb\fR is called once if and only if the
214 corresponding extension was received in ClientHello to see if the application
215 wishes to add the extension to ServerHello. That is, if no corresponding extension
216 was received in ClientHello then \fBadd_cb\fR will not be called.
217 .PP
218 If an extension is added (that is \fBadd_cb\fR returns 1) \fBfree_cb\fR is called
219 (if it is set) with the value of \fBout\fR set by the add callback. It can be
220 used to free up any dynamic extension data set by \fBadd_cb\fR. Since \fBout\fR is
221 constant (to permit use of constant data in \fBadd_cb\fR) applications may need to
222 cast away const to free the data.
223 .PP
224 The callback \fBparse_cb\fR receives data for \s-1TLS\s0 extensions. For \s-1TLS\s0 clients
225 the extension data will come from ServerHello and for \s-1TLS\s0 servers it will
226 come from ClientHello.
227 .PP
228 The extension data consists of \fBinlen\fR bytes in the buffer \fBin\fR for the
229 extension \fBextension_type\fR.
230 .PP
231 If the \fBparse_cb\fR considers the extension data acceptable it must return
232 1. If it returns 0 or a negative value a fatal handshake error occurs
233 using the \s-1TLS\s0 alert value specified in \fB*al\fR.
234 .PP
235 The buffer \fBin\fR is a temporary internal buffer which will not be valid after
236 the callback returns.
237 .SH "NOTES"
238 .IX Header "NOTES"
239 The \fBadd_arg\fR and \fBparse_arg\fR parameters can be set to arbitrary values
240 which will be passed to the corresponding callbacks. They can, for example,
241 be used to store the extension data received in a convenient structure or
242 pass the extension data to be added or freed when adding extensions.
243 .PP
244 The \fBext_type\fR parameter corresponds to the \fBextension_type\fR field of
245 \&\s-1RFC5246\s0 et al. It is \fBnot\fR a \s-1NID.\s0
246 .PP
247 If the same custom extension type is received multiple times a fatal
248 \&\fBdecode_error\fR alert is sent and the handshake aborts. If a custom extension
249 is received in ServerHello which was not sent in ClientHello a fatal
250 \&\fBunsupported_extension\fR alert is sent and the handshake is aborted. The
251 ServerHello \fBadd_cb\fR callback is only called if the corresponding extension
252 was received in ClientHello. This is compliant with the \s-1TLS\s0 specifications.
253 This behaviour ensures that each callback is called at most once and that
254 an application can never send unsolicited extensions.
255 .SH "RETURN VALUES"
256 .IX Header "RETURN VALUES"
257 \&\fISSL_CTX_add_client_custom_ext()\fR and \fISSL_CTX_add_server_custom_ext()\fR return 1 for
258 success and 0 for failure. A failure can occur if an attempt is made to
259 add the same \fBext_type\fR more than once, if an attempt is made to use an
260 extension type handled internally by OpenSSL or if an internal error occurs
261 (for example a memory allocation failure).
262 .PP
263 \&\fISSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled
264 internally by OpenSSL and 0 otherwise.