]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - secure/lib/libssl/man/SSL_CTX_set_custom_cli_ext.3
MFC: r312825
[FreeBSD/FreeBSD.git] / secure / lib / libssl / man / SSL_CTX_set_custom_cli_ext.3
1 .\" Automatically generated by Pod::Man 4.07 (Pod::Simple 3.35)
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 .if !\nF .nr F 0
58 .if \nF>0 \{\
59 .    de IX
60 .    tm Index:\\$1\t\\n%\t"\\$2"
61 ..
62 .    if !\nF==2 \{\
63 .        nr % 0
64 .        nr F 2
65 .    \}
66 .\}
67 .\"
68 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
69 .\" Fear.  Run.  Save yourself.  No user-serviceable parts.
70 .    \" fudge factors for nroff and troff
71 .if n \{\
72 .    ds #H 0
73 .    ds #V .8m
74 .    ds #F .3m
75 .    ds #[ \f1
76 .    ds #] \fP
77 .\}
78 .if t \{\
79 .    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
80 .    ds #V .6m
81 .    ds #F 0
82 .    ds #[ \&
83 .    ds #] \&
84 .\}
85 .    \" simple accents for nroff and troff
86 .if n \{\
87 .    ds ' \&
88 .    ds ` \&
89 .    ds ^ \&
90 .    ds , \&
91 .    ds ~ ~
92 .    ds /
93 .\}
94 .if t \{\
95 .    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
96 .    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
97 .    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
98 .    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
99 .    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
100 .    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
101 .\}
102 .    \" troff and (daisy-wheel) nroff accents
103 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
104 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
105 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
106 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
107 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
108 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
109 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
110 .ds ae a\h'-(\w'a'u*4/10)'e
111 .ds Ae A\h'-(\w'A'u*4/10)'E
112 .    \" corrections for vroff
113 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
114 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
115 .    \" for low resolution devices (crt and lpr)
116 .if \n(.H>23 .if \n(.V>19 \
117 \{\
118 .    ds : e
119 .    ds 8 ss
120 .    ds o a
121 .    ds d- d\h'-1'\(ga
122 .    ds D- D\h'-1'\(hy
123 .    ds th \o'bp'
124 .    ds Th \o'LP'
125 .    ds ae ae
126 .    ds Ae AE
127 .\}
128 .rm #[ #] #H #V #F C
129 .\" ========================================================================
130 .\"
131 .IX Title "SSL_CTX_set_custom_cli_ext 3"
132 .TH SSL_CTX_set_custom_cli_ext 3 "2017-01-26" "1.0.2k" "OpenSSL"
133 .\" For nroff, turn off justification.  Always turn off hyphenation; it makes
134 .\" way too many mistakes in technical documents.
135 .if n .ad l
136 .nh
137 .SH "NAME"
138 SSL_CTX_add_client_custom_ext, SSL_CTX_add_server_custom_ext \- custom TLS extension handling
139 .SH "SYNOPSIS"
140 .IX Header "SYNOPSIS"
141 .Vb 1
142 \& #include <openssl/ssl.h>
143 \&
144 \& int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
145 \&                                   custom_ext_add_cb add_cb,
146 \&                                   custom_ext_free_cb free_cb, void *add_arg,
147 \&                                   custom_ext_parse_cb parse_cb,
148 \&                                   void *parse_arg);
149 \&
150 \& int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
151 \&                                   custom_ext_add_cb add_cb,
152 \&                                   custom_ext_free_cb free_cb, void *add_arg,
153 \&                                   custom_ext_parse_cb parse_cb,
154 \&                                   void *parse_arg);
155 \&
156 \& int SSL_extension_supported(unsigned int ext_type);
157 \&
158 \& typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
159 \&                                  const unsigned char **out,
160 \&                                  size_t *outlen, int *al,
161 \&                                  void *add_arg);
162 \&
163 \& typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
164 \&                                    const unsigned char *out,
165 \&                                    void *add_arg);
166 \&
167 \& typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
168 \&                                    const unsigned char *in,
169 \&                                    size_t inlen, int *al,
170 \&                                    void *parse_arg);
171 .Ve
172 .SH "DESCRIPTION"
173 .IX Header "DESCRIPTION"
174 \&\fISSL_CTX_add_client_custom_ext()\fR adds a custom extension for a \s-1TLS\s0 client 
175 with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and
176 \&\fBparse_cb\fR.
177 .PP
178 \&\fISSL_CTX_add_server_custom_ext()\fR adds a custom extension for a \s-1TLS\s0 server 
179 with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and
180 \&\fBparse_cb\fR.
181 .PP
182 In both cases the extension type must not be handled by OpenSSL internally
183 or an error occurs.
184 .PP
185 \&\fISSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled
186 internally by OpenSSL and 0 otherwise.
187 .SH "EXTENSION CALLBACKS"
188 .IX Header "EXTENSION CALLBACKS"
189 The callback \fBadd_cb\fR is called to send custom extension data to be 
190 included in ClientHello for \s-1TLS\s0 clients or ServerHello for servers. The
191 \&\fBext_type\fR parameter is set to the extension type which will be added and
192 \&\fBadd_arg\fR to the value set when the extension handler was added.
193 .PP
194 If the application wishes to include the extension \fBext_type\fR it should
195 set \fB*out\fR to the extension data, set \fB*outlen\fR to the length of the
196 extension data and return 1.
197 .PP
198 If the \fBadd_cb\fR does not wish to include the extension it must return 0.
199 .PP
200 If \fBadd_cb\fR returns \-1 a fatal handshake error occurs using the \s-1TLS\s0
201 alert value specified in \fB*al\fR.
202 .PP
203 For clients (but not servers) if \fBadd_cb\fR is set to \s-1NULL\s0 a zero length
204 extension is added for \fBext_type\fR.
205 .PP
206 For clients every registered \fBadd_cb\fR is always called to see if the
207 application wishes to add an extension to ClientHello.
208 .PP
209 For servers every registered \fBadd_cb\fR is called once if and only if the
210 corresponding extension was received in ClientHello to see if the application
211 wishes to add the extension to ServerHello. That is, if no corresponding extension
212 was received in ClientHello then \fBadd_cb\fR will not be called.
213 .PP
214 If an extension is added (that is \fBadd_cb\fR returns 1) \fBfree_cb\fR is called
215 (if it is set) with the value of \fBout\fR set by the add callback. It can be
216 used to free up any dynamic extension data set by \fBadd_cb\fR. Since \fBout\fR is
217 constant (to permit use of constant data in \fBadd_cb\fR) applications may need to
218 cast away const to free the data.
219 .PP
220 The callback \fBparse_cb\fR receives data for \s-1TLS\s0 extensions. For \s-1TLS\s0 clients
221 the extension data will come from ServerHello and for \s-1TLS\s0 servers it will
222 come from ClientHello.
223 .PP
224 The extension data consists of \fBinlen\fR bytes in the buffer \fBin\fR for the
225 extension \fBextension_type\fR.
226 .PP
227 If the \fBparse_cb\fR considers the extension data acceptable it must return
228 1. If it returns 0 or a negative value a fatal handshake error occurs
229 using the \s-1TLS\s0 alert value specified in \fB*al\fR.
230 .PP
231 The buffer \fBin\fR is a temporary internal buffer which will not be valid after
232 the callback returns.
233 .SH "NOTES"
234 .IX Header "NOTES"
235 The \fBadd_arg\fR and \fBparse_arg\fR parameters can be set to arbitrary values
236 which will be passed to the corresponding callbacks. They can, for example,
237 be used to store the extension data received in a convenient structure or
238 pass the extension data to be added or freed when adding extensions.
239 .PP
240 The \fBext_type\fR parameter corresponds to the \fBextension_type\fR field of
241 \&\s-1RFC5246\s0 et al. It is \fBnot\fR a \s-1NID.\s0
242 .PP
243 If the same custom extension type is received multiple times a fatal
244 \&\fBdecode_error\fR alert is sent and the handshake aborts. If a custom extension
245 is received in ServerHello which was not sent in ClientHello a fatal
246 \&\fBunsupported_extension\fR alert is sent and the handshake is aborted. The
247 ServerHello \fBadd_cb\fR callback is only called if the corresponding extension
248 was received in ClientHello. This is compliant with the \s-1TLS\s0 specifications.
249 This behaviour ensures that each callback is called at most once and that
250 an application can never send unsolicited extensions.
251 .SH "RETURN VALUES"
252 .IX Header "RETURN VALUES"
253 \&\fISSL_CTX_add_client_custom_ext()\fR and \fISSL_CTX_add_server_custom_ext()\fR return 1 for
254 success and 0 for failure. A failure can occur if an attempt is made to
255 add the same \fBext_type\fR more than once, if an attempt is made to use an
256 extension type handled internally by OpenSSL or if an internal error occurs
257 (for example a memory allocation failure).
258 .PP
259 \&\fISSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled
260 internally by OpenSSL and 0 otherwise.