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