Introduce SSL_CIPHER_get_protocol_id
[openssl.git] / doc / man3 / SSL_CIPHER_get_name.pod
1 =pod
2
3 =head1 NAME
4
5 SSL_CIPHER_get_name,
6 SSL_CIPHER_standard_name,
7 OPENSSL_cipher_name,
8 SSL_CIPHER_get_bits,
9 SSL_CIPHER_get_version,
10 SSL_CIPHER_description,
11 SSL_CIPHER_get_cipher_nid,
12 SSL_CIPHER_get_digest_nid,
13 SSL_CIPHER_get_handshake_digest,
14 SSL_CIPHER_get_kx_nid,
15 SSL_CIPHER_get_auth_nid,
16 SSL_CIPHER_is_aead,
17 SSL_CIPHER_find,
18 SSL_CIPHER_get_id,
19 SSL_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
44 SSL_CIPHER_get_name() returns a pointer to the name of B<cipher>. If the
45 B<cipher> is NULL, it returns "(NONE)".
46
47 SSL_CIPHER_standard_name() returns a pointer to the standard RFC name of
48 B<cipher>. If the B<cipher> is NULL, it returns "(NONE)". If the B<cipher>
49 has no standard name, it returns B<NULL>. If B<cipher> was defined in both
50 SSLv3 and TLS, it returns the TLS name.
51
52 OPENSSL_cipher_name() returns a pointer to the OpenSSL name of B<stdname>.
53 If the B<stdname> is NULL, or B<stdname> has no corresponding OpenSSL name,
54 it returns "(NONE)". Where both exist, B<stdname> should be the TLS name rather
55 than the SSLv3 name.
56
57 SSL_CIPHER_get_bits() returns the number of secret bits used for B<cipher>.
58 If B<cipher> is NULL, 0 is returned.
59
60 SSL_CIPHER_get_version() returns string which indicates the SSL/TLS protocol
61 version that first defined the cipher.  It returns "(NONE)" if B<cipher> is NULL.
62
63 SSL_CIPHER_get_cipher_nid() returns the cipher NID corresponding to B<c>.
64 If there is no cipher (e.g. for cipher suites with no encryption) then
65 B<NID_undef> is returned.
66
67 SSL_CIPHER_get_digest_nid() returns the digest NID corresponding to the MAC
68 used by B<c> during record encryption/decryption. If there is no digest (e.g.
69 for AEAD cipher suites) then B<NID_undef> is returned.
70
71 SSL_CIPHER_get_handshake_digest() returns an EVP_MD for the digest used during
72 the SSL/TLS handshake when using the SSL_CIPHER B<c>. Note that this may be
73 different to the digest used to calculate the MAC for encrypted records.
74
75 SSL_CIPHER_get_kx_nid() returns the key exchange NID corresponding to the method
76 used by B<c>. If there is no key exchange, then B<NID_undef> is returned.
77 If any appropriate key exchange algorithm can be used (as in the case of TLS 1.3
78 cipher 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
85 SSL_CIPHER_get_auth_nid() returns the authentication NID corresponding to the method
86 used by B<c>. If there is no authentication, then B<NID_undef> is returned.
87 If any appropriate authentication algorithm can be used (as in the case of
88 TLS 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
94 SSL_CIPHER_is_aead() returns 1 if the cipher B<c> is AEAD (e.g. GCM or
95 ChaCha20/Poly1305), and 0 if it is not AEAD.
96
97 SSL_CIPHER_find() returns a B<SSL_CIPHER> structure which has the cipher ID stored
98 in B<ptr>. The B<ptr> parameter is a two element array of B<char>, which stores the
99 two-byte TLS cipher ID (as allocated by IANA) in network byte order. This parameter
100 is usually retrieved from a TLS packet by using functions like L<SSL_early_get0_ciphers(3)>.
101 SSL_CIPHER_find() returns NULL if an error occurs or the indicated cipher is not found.
102
103 SSL_CIPHER_get_id() returns the OpenSSL-specific ID of the given cipher B<c>. That ID is
104 not the same as the IANA-specific ID.
105
106 SSL_CIPHER_get_protocol_id() returns the two-byte ID used in the TLS protocol of the given
107 cipher B<c>.
108
109 SSL_CIPHER_description() returns a textual description of the cipher used
110 into the buffer B<buf> of length B<len> provided.  If B<buf> is provided, it
111 must be at least 128 bytes, otherwise a buffer will be allocated using
112 OPENSSL_malloc().  If the provided buffer is too small, or the allocation fails,
113 B<NULL> is returned.
114
115 The string returned by SSL_CIPHER_description() consists of several fields
116 separated by whitespace:
117
118 =over 4
119
120 =item <ciphername>
121
122 Textual representation of the cipher name.
123
124 =item <protocol version>
125
126 Protocol version, such as B<TLSv1.2>, when the cipher was first defined.
127
128 =item Kx=<key exchange>
129
130 Key exchange method such as B<RSA>, B<ECDHE>, etc.
131
132 =item Au=<authentication>
133
134 Authentication method such as B<RSA>, B<None>, etc.. None is the
135 representation of anonymous ciphers.
136
137 =item Enc=<symmetric encryption method>
138
139 Encryption method, with number of secret bits, such as B<AESGCM(128)>.
140
141 =item Mac=<message authentication code>
142
143 Message digest, such as B<SHA256>.
144
145 =back
146
147 Some examples for the output of SSL_CIPHER_description():
148
149  ECDHE-RSA-AES256-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(256) Mac=AEAD
150  RSA-PSK-AES256-CBC-SHA384 TLSv1.0 Kx=RSAPSK   Au=RSA  Enc=AES(256)  Mac=SHA384
151
152 =head1 HISTORY
153
154 SSL_CIPHER_get_version() was updated to always return the correct protocol
155 string in OpenSSL 1.1.0.
156
157 SSL_CIPHER_description() was changed to return B<NULL> on error,
158 rather than a fixed string, in OpenSSL 1.1.0.
159
160 SSL_CIPHER_get_handshake_digest() was added in OpenSSL 1.1.1.
161
162 SSL_CIPHER_standard_name() was globally available in OpenSSL 1.1.1. Before
163 OpenSSL 1.1.1, tracing (B<enable-ssl-trace> argument to Configure) was
164 required to enable this function.
165
166 OPENSSL_cipher_name() was added in OpenSSL 1.1.1.
167
168 =head1 SEE ALSO
169
170 L<ssl(7)>, L<SSL_get_current_cipher(3)>,
171 L<SSL_get_ciphers(3)>, L<ciphers(1)>
172
173 =head1 COPYRIGHT
174
175 Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
176
177 Licensed under the OpenSSL license (the "License").  You may not use
178 this file except in compliance with the License.  You can obtain a copy
179 in the file LICENSE in the source distribution or at
180 L<https://www.openssl.org/source/license.html>.
181
182 =cut