Fix race for X509 store found by thread sanitizer
[openssl.git] / doc / man3 / SSL_CTX_set1_curves.pod
1 =pod
2
3 =head1 NAME
4
5 SSL_CTX_set1_groups, SSL_CTX_set1_groups_list, SSL_set1_groups,
6 SSL_set1_groups_list, SSL_get1_groups, SSL_get0_iana_groups,
7 SSL_get_shared_group, SSL_get_negotiated_group, SSL_CTX_set1_curves,
8 SSL_CTX_set1_curves_list, SSL_set1_curves, SSL_set1_curves_list,
9 SSL_get1_curves, SSL_get_shared_curve
10 - EC supported curve functions
11
12 =head1 SYNOPSIS
13
14  #include <openssl/ssl.h>
15
16  int SSL_CTX_set1_groups(SSL_CTX *ctx, int *glist, int glistlen);
17  int SSL_CTX_set1_groups_list(SSL_CTX *ctx, char *list);
18
19  int SSL_set1_groups(SSL *ssl, int *glist, int glistlen);
20  int SSL_set1_groups_list(SSL *ssl, char *list);
21
22  int SSL_get1_groups(SSL *ssl, int *groups);
23  int SSL_get0_iana_groups(SSL *ssl, uint16_t **out);
24  int SSL_get_shared_group(SSL *s, int n);
25  int SSL_get_negotiated_group(SSL *s);
26
27  int SSL_CTX_set1_curves(SSL_CTX *ctx, int *clist, int clistlen);
28  int SSL_CTX_set1_curves_list(SSL_CTX *ctx, char *list);
29
30  int SSL_set1_curves(SSL *ssl, int *clist, int clistlen);
31  int SSL_set1_curves_list(SSL *ssl, char *list);
32
33  int SSL_get1_curves(SSL *ssl, int *curves);
34  int SSL_get_shared_curve(SSL *s, int n);
35
36 =head1 DESCRIPTION
37
38 For all of the functions below that set the supported groups there must be at
39 least one group in the list. A number of these functions identify groups via a
40 unique integer NID value. However, support for some groups may be added by
41 external providers. In this case there will be no NID assigned for the group.
42 When setting such groups applications should use the "list" form of these
43 functions (i.e. SSL_CTX_set1_groups_list() and SSL_set1_groups_list).
44
45 SSL_CTX_set1_groups() sets the supported groups for B<ctx> to B<glistlen>
46 groups in the array B<glist>. The array consist of all NIDs of groups in
47 preference order. For a TLS client the groups are used directly in the
48 supported groups extension. For a TLS server the groups are used to
49 determine the set of shared groups. Currently supported groups for
50 B<TLSv1.3> are B<NID_X9_62_prime256v1>, B<NID_secp384r1>, B<NID_secp521r1>,
51 B<NID_X25519>, B<NID_X448>, B<NID_ffdhe2048>, B<NID_ffdhe3072>,
52 B<NID_ffdhe4096>, B<NID_ffdhe6144> and B<NID_ffdhe8192>.
53
54 SSL_CTX_set1_groups_list() sets the supported groups for B<ctx> to
55 string B<list>. The string is a colon separated list of group NIDs or
56 names, for example "P-521:P-384:P-256:X25519:ffdhe2048". Currently supported
57 groups for B<TLSv1.3> are B<P-256>, B<P-384>, B<P-521>, B<X25519>, B<X448>,
58 B<ffdhe2048>, B<ffdhe3072>, B<ffdhe4096>, B<ffdhe6144>, B<ffdhe8192>. Support
59 for other groups may be added by external providers.
60
61 SSL_set1_groups() and SSL_set1_groups_list() are similar except they set
62 supported groups for the SSL structure B<ssl>.
63
64 SSL_get1_groups() returns the set of supported groups sent by a client
65 in the supported groups extension. It returns the total number of
66 supported groups. The B<groups> parameter can be B<NULL> to simply
67 return the number of groups for memory allocation purposes. The
68 B<groups> array is in the form of a set of group NIDs in preference
69 order. It can return zero if the client did not send a supported groups
70 extension. If a supported group NID is unknown then the value is set to the
71 bitwise OR of TLSEXT_nid_unknown (0x1000000) and the id of the group.
72
73 SSL_get0_iana_groups() retrieves the list of groups sent by the
74 client in the supported_groups extension.  The B<*out> array of bytes
75 is populated with the host-byte-order representation of the uint16_t group
76 identifiers, as assigned by IANA.  The group list is returned in the same order
77 that was received in the ClientHello.  The return value is the number of groups,
78 not the number of bytes written.
79
80 SSL_get_shared_group() returns the NID of the shared group B<n> for a
81 server-side SSL B<ssl>. If B<n> is -1 then the total number of shared groups is
82 returned, which may be zero. Other than for diagnostic purposes,
83 most applications will only be interested in the first shared group
84 so B<n> is normally set to zero. If the value B<n> is out of range,
85 NID_undef is returned. If the NID for the shared group is unknown then the value
86 is set to the bitwise OR of TLSEXT_nid_unknown (0x1000000) and the id of the
87 group.
88
89 SSL_get_negotiated_group() returns the NID of the negotiated group used for
90 the handshake key exchange process.  For TLSv1.3 connections this typically
91 reflects the state of the current connection, though in the case of PSK-only
92 resumption, the returned value will be from a previous connection.  For earlier
93 TLS versions, when a session has been resumed, it always reflects the group
94 used for key exchange during the initial handshake (otherwise it is from the
95 current, non-resumption, connection).  This can be called by either client or
96 server. If the NID for the shared group is unknown then the value is set to the
97 bitwise OR of TLSEXT_nid_unknown (0x1000000) and the id of the group.
98
99 All these functions are implemented as macros.
100
101 The curve functions are synonyms for the equivalently named group functions and
102 are identical in every respect. They exist because, prior to TLS1.3, there was
103 only the concept of supported curves. In TLS1.3 this was renamed to supported
104 groups, and extended to include Diffie Hellman groups. The group functions
105 should be used in preference.
106
107 =head1 NOTES
108
109 If an application wishes to make use of several of these functions for
110 configuration purposes either on a command line or in a file it should
111 consider using the SSL_CONF interface instead of manually parsing options.
112
113 =head1 RETURN VALUES
114
115 SSL_CTX_set1_groups(), SSL_CTX_set1_groups_list(), SSL_set1_groups() and
116 SSL_set1_groups_list(), return 1 for success and 0 for failure.
117
118 SSL_get1_groups() returns the number of groups, which may be zero.
119
120 SSL_get0_iana_groups() returns the number of (uint16_t) groups, which may be zero.
121
122 SSL_get_shared_group() returns the NID of shared group B<n> or NID_undef if there
123 is no shared group B<n>; or the total number of shared groups if B<n>
124 is -1.
125
126 When called on a client B<ssl>, SSL_get_shared_group() has no meaning and
127 returns -1.
128
129 SSL_get_negotiated_group() returns the NID of the negotiated group used for
130 key exchange, or NID_undef if there was no negotiated group.
131
132 =head1 SEE ALSO
133
134 L<ssl(7)>,
135 L<SSL_CTX_add_extra_chain_cert(3)>
136
137 =head1 HISTORY
138
139 The curve functions were added in OpenSSL 1.0.2. The equivalent group
140 functions were added in OpenSSL 1.1.1. The SSL_get_negotiated_group() function
141 was added in OpenSSL 3.0.0.
142
143 =head1 COPYRIGHT
144
145 Copyright 2013-2022 The OpenSSL Project Authors. All Rights Reserved.
146
147 Licensed under the Apache License 2.0 (the "License").  You may not use
148 this file except in compliance with the License.  You can obtain a copy
149 in the file LICENSE in the source distribution or at
150 L<https://www.openssl.org/source/license.html>.
151
152 =cut