1=pod
2
3=head1 NAME
4
5SSL_CIPHER_get_name,
6SSL_CIPHER_standard_name,
7OPENSSL_cipher_name,
8SSL_CIPHER_get_bits,
9SSL_CIPHER_get_version,
10SSL_CIPHER_description,
11SSL_CIPHER_get_cipher_nid,
12SSL_CIPHER_get_digest_nid,
13SSL_CIPHER_get_handshake_digest,
14SSL_CIPHER_get_kx_nid,
15SSL_CIPHER_get_auth_nid,
16SSL_CIPHER_is_aead,
17SSL_CIPHER_find,
18SSL_CIPHER_get_id,
19SSL_CIPHER_get_protocol_id
20- get SSL_CIPHER properties
21
22=head1 SYNOPSIS
23
24 #include <openssl/ssl.h>
25
26 const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher);
27 const char *SSL_CIPHER_standard_name(const SSL_CIPHER *cipher);
28 const char *OPENSSL_cipher_name(const char *stdname);
29 int SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits);
30 char *SSL_CIPHER_get_version(const SSL_CIPHER *cipher);
31 char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int size);
32 int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
33 int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
34 const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c);
35 int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
36 int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
37 int SSL_CIPHER_is_aead(const SSL_CIPHER *c);
38 const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
39 uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
40 uint32_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c);
41
42=head1 DESCRIPTION
43
44SSL_CIPHER_get_name() returns a pointer to the name of B<cipher>. If the
45B<cipher> is NULL, it returns "(NONE)".
46
47SSL_CIPHER_standard_name() returns a pointer to the standard RFC name of
48B<cipher>. If the B<cipher> is NULL, it returns "(NONE)". If the B<cipher>
49has no standard name, it returns B<NULL>. If B<cipher> was defined in both
50SSLv3 and TLS, it returns the TLS name.
51
52OPENSSL_cipher_name() returns a pointer to the OpenSSL name of B<stdname>.
53If the B<stdname> is NULL, or B<stdname> has no corresponding OpenSSL name,
54it returns "(NONE)". Where both exist, B<stdname> should be the TLS name rather
55than the SSLv3 name.
56
57SSL_CIPHER_get_bits() returns the number of secret bits used for B<cipher>.
58If B<cipher> is NULL, 0 is returned.
59
60SSL_CIPHER_get_version() returns string which indicates the SSL/TLS protocol
61version that first defined the cipher.  It returns "(NONE)" if B<cipher> is NULL.
62
63SSL_CIPHER_get_cipher_nid() returns the cipher NID corresponding to B<c>.
64If there is no cipher (e.g. for cipher suites with no encryption) then
65B<NID_undef> is returned.
66
67SSL_CIPHER_get_digest_nid() returns the digest NID corresponding to the MAC
68used by B<c> during record encryption/decryption. If there is no digest (e.g.
69for AEAD cipher suites) then B<NID_undef> is returned.
70
71SSL_CIPHER_get_handshake_digest() returns an EVP_MD for the digest used during
72the SSL/TLS handshake when using the SSL_CIPHER B<c>. Note that this may be
73different to the digest used to calculate the MAC for encrypted records.
74
75SSL_CIPHER_get_kx_nid() returns the key exchange NID corresponding to the method
76used by B<c>. If there is no key exchange, then B<NID_undef> is returned.
77If any appropriate key exchange algorithm can be used (as in the case of TLS 1.3
78cipher suites) B<NID_kx_any> is returned. Examples (not comprehensive):
79
80 NID_kx_rsa
81 NID_kx_ecdhe
82 NID_kx_dhe
83 NID_kx_psk
84
85SSL_CIPHER_get_auth_nid() returns the authentication NID corresponding to the method
86used by B<c>. If there is no authentication, then B<NID_undef> is returned.
87If any appropriate authentication algorithm can be used (as in the case of
88TLS 1.3 cipher suites) B<NID_auth_any> is returned. Examples (not comprehensive):
89
90 NID_auth_rsa
91 NID_auth_ecdsa
92 NID_auth_psk
93
94SSL_CIPHER_is_aead() returns 1 if the cipher B<c> is AEAD (e.g. GCM or
95ChaCha20/Poly1305), and 0 if it is not AEAD.
96
97SSL_CIPHER_find() returns a B<SSL_CIPHER> structure which has the cipher ID stored
98in B<ptr>. The B<ptr> parameter is a two element array of B<char>, which stores the
99two-byte TLS cipher ID (as allocated by IANA) in network byte order. This parameter
100is usually retrieved from a TLS packet by using functions like
101L<SSL_client_hello_get0_ciphers(3)>.  SSL_CIPHER_find() returns NULL if an
102error occurs or the indicated cipher is not found.
103
104SSL_CIPHER_get_id() returns the OpenSSL-specific ID of the given cipher B<c>. That ID is
105not the same as the IANA-specific ID.
106
107SSL_CIPHER_get_protocol_id() returns the two-byte ID used in the TLS protocol of the given
108cipher B<c>.
109
110SSL_CIPHER_description() returns a textual description of the cipher used
111into the buffer B<buf> of length B<len> provided.  If B<buf> is provided, it
112must be at least 128 bytes, otherwise a buffer will be allocated using
113OPENSSL_malloc().  If the provided buffer is too small, or the allocation fails,
114B<NULL> is returned.
115
116The string returned by SSL_CIPHER_description() consists of several fields
117separated by whitespace:
118
119=over 4
120
121=item <ciphername>
122
123Textual representation of the cipher name.
124
125=item <protocol version>
126
127Protocol version, such as B<TLSv1.2>, when the cipher was first defined.
128
129=item Kx=<key exchange>
130
131Key exchange method such as B<RSA>, B<ECDHE>, etc.
132
133=item Au=<authentication>
134
135Authentication method such as B<RSA>, B<None>, etc.. None is the
136representation of anonymous ciphers.
137
138=item Enc=<symmetric encryption method>
139
140Encryption method, with number of secret bits, such as B<AESGCM(128)>.
141
142=item Mac=<message authentication code>
143
144Message digest, such as B<SHA256>.
145
146=back
147
148Some examples for the output of SSL_CIPHER_description():
149
150 ECDHE-RSA-AES256-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
151 RSA-PSK-AES256-CBC-SHA384 TLSv1.0 Kx=RSAPSK   Au=RSA  Enc=AES(256)  Mac=SHA384
152
153=head1 RETURN VALUES
154
155SSL_CIPHER_get_name(), SSL_CIPHER_standard_name(), OPENSSL_cipher_name(),
156SSL_CIPHER_get_version() and SSL_CIPHER_description() return the corresponding
157value in a null-terminated string for a specific cipher or "(NONE)"
158if the cipher is not found.
159
160SSL_CIPHER_get_bits() returns a positive integer representing the number of
161secret bits or 0 if an error occurred.
162
163SSL_CIPHER_get_cipher_nid(), SSL_CIPHER_get_digest_nid(),
164SSL_CIPHER_get_kx_nid() and SSL_CIPHER_get_auth_nid() return the NID value or
165B<NID_undef> if an error occurred.
166
167SSL_CIPHER_get_handshake_digest() returns a valid B<EVP_MD> structure or NULL
168if an error occurred.
169
170SSL_CIPHER_is_aead() returns 1 if the cipher is AEAD or 0 otherwise.
171
172SSL_CIPHER_find() returns a valid B<SSL_CIPHER> structure or NULL if an error
173occurred.
174
175SSL_CIPHER_get_id() returns a 4-byte integer representing the OpenSSL-specific ID.
176
177SSL_CIPHER_get_protocol_id() returns a 2-byte integer representing the TLS
178protocol-specific ID.
179
180=head1 HISTORY
181
182SSL_CIPHER_get_version() was updated to always return the correct protocol
183string in OpenSSL 1.1.0.
184
185SSL_CIPHER_description() was changed to return B<NULL> on error,
186rather than a fixed string, in OpenSSL 1.1.0.
187
188SSL_CIPHER_get_handshake_digest() was added in OpenSSL 1.1.1.
189
190SSL_CIPHER_standard_name() was globally available in OpenSSL 1.1.1. Before
191OpenSSL 1.1.1, tracing (B<enable-ssl-trace> argument to Configure) was
192required to enable this function.
193
194OPENSSL_cipher_name() was added in OpenSSL 1.1.1.
195
196=head1 SEE ALSO
197
198L<ssl(7)>, L<SSL_get_current_cipher(3)>,
199L<SSL_get_ciphers(3)>, L<ciphers(1)>
200
201=head1 COPYRIGHT
202
203Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
204
205Licensed under the OpenSSL license (the "License").  You may not use
206this file except in compliance with the License.  You can obtain a copy
207in the file LICENSE in the source distribution or at
208L<https://www.openssl.org/source/license.html>.
209
210=cut
211