SSL_CIPHER_GET_NAME(3SSL)
π SSL_CIPHER_GET_NAME π β it's giving "get SSL_CIPHER properties"
okay bestie, welcome to the 3SSL manual page π
this is the OpenSSL one, and it's literally a whole lil family of functions whose entire job is to tell you things about a cipher β its name, its standard name, its bits, its version, its NIDs, all of it. no cap.
β¨ NAME β¨
SSL_CIPHER_get_name, SSL_CIPHER_standard_name, OPENSSL_cipher_name, SSL_CIPHER_get_bits, SSL_CIPHER_get_version, SSL_CIPHER_description, SSL_CIPHER_get_cipher_nid, SSL_CIPHER_get_digest_nid, SSL_CIPHER_get_handshake_digest, SSL_CIPHER_get_kx_nid, SSL_CIPHER_get_auth_nid, SSL_CIPHER_is_aead, SSL_CIPHER_find, SSL_CIPHER_get_id, SSL_CIPHER_get_protocol_id β get SSL_CIPHER properties π
that's a lot of names, i know. breathe. they're all your friends.
πΈ SYNOPSIS πΈ
#include <openssl/ssl.h>
const char *SSL_CIPHER_get_name(const SSL_CIPHER *cipher);
const char *SSL_CIPHER_standard_name(const SSL_CIPHER *cipher);
const char *OPENSSL_cipher_name(const char *stdname);
int SSL_CIPHER_get_bits(const SSL_CIPHER *cipher, int *alg_bits);
const char *SSL_CIPHER_get_version(const SSL_CIPHER *cipher);
char *SSL_CIPHER_description(const SSL_CIPHER *cipher, char *buf, int size);
int SSL_CIPHER_get_cipher_nid(const SSL_CIPHER *c);
int SSL_CIPHER_get_digest_nid(const SSL_CIPHER *c);
const EVP_MD *SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c);
int SSL_CIPHER_get_kx_nid(const SSL_CIPHER *c);
int SSL_CIPHER_get_auth_nid(const SSL_CIPHER *c);
int SSL_CIPHER_is_aead(const SSL_CIPHER *c);
const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
uint32_t SSL_CIPHER_get_id(const SSL_CIPHER *c);
uint16_t SSL_CIPHER_get_protocol_id(const SSL_CIPHER *c);
π¦ DESCRIPTION π¦
kay so, one by one, here's the tea on each of them β
SSL_CIPHER_get_name() hands you back a pointer to the name of cipher. but if cipher is NULL? it gives you "(NONE)". iconic of it tbh.
SSL_CIPHER_standard_name() returns a pointer to the standard RFC name of cipher. If cipher is NULL you get "(NONE)". If the cipher literally has no standard name, you get NULL (rude, but valid). And if the cipher was defined in both SSLv3 and TLS, it gives you the TLS name β always the TLS name, periodt.
OPENSSL_cipher_name() goes the other direction: you hand it a stdname and it returns a pointer to the OpenSSL name. If stdname is NULL, or stdname has no matching OpenSSL name, you get "(NONE)". And where both exist, stdname should be the TLS name rather than the SSLv3 name. okurrr.
SSL_CIPHER_get_bits() gives you the number of secret bits used for cipher. If cipher is NULL, you get 0. π
SSL_CIPHER_get_version() returns a string telling you which SSL/TLS protocol version first defined the cipher. It returns "(NONE)" if cipher is NULL.
SSL_CIPHER_get_cipher_nid() returns the cipher NID corresponding to c. if there's no cipher (like, say, for cipher suites with no encryption at all) then NID_undef comes back at you.
SSL_CIPHER_get_digest_nid() returns the digest NID corresponding to the MAC that c uses during record encryption/decryption. no digest? (e.g. for AEAD cipher suites, which do not have one) then it's NID_undef again. π
SSL_CIPHER_get_handshake_digest() returns an EVP_MD for the digest used during the SSL/TLS handshake when you're using the SSL_CIPHER c. heads up though β this may be different from the digest used to calculate the MAC for encrypted records. keep that in mind bestie, it's a vibe check trap.
SSL_CIPHER_get_kx_nid() returns the key exchange NID for the method c uses. no key exchange? NID_undef. and if any appropriate key exchange algorithm can be used (which is the whole situation with TLS 1.3 cipher suites) you get NID_kx_any. examples (and this is not comprehensive, so don't come for me):
NID_kx_rsa
NID_kx_ecdhe
NID_kx_dhe
NID_kx_psk
SSL_CIPHER_get_auth_nid() returns the authentication NID for the method c uses. no authentication? NID_undef. and if any appropriate authentication algorithm can be used (again: TLS 1.3 cipher suites) you get NID_auth_any. examples (also not comprehensive):
NID_auth_rsa
NID_auth_ecdsa
NID_auth_psk
SSL_CIPHER_is_aead() returns 1 if the cipher c is AEAD (like GCM or ChaCha20/Poly1305), and 0 if it is not AEAD. short and sweet. π
SSL_CIPHER_find() returns an SSL_CIPHER structure that has the cipher ID stored in ptr. and ptr? it's a two element array of char that stores the two-byte TLS cipher ID (the one allocated by IANA) in network byte order. usually you get this parameter out of a TLS packet by using functions like SSL_client_hello_get0_ciphers(3). SSL_CIPHER_find() returns NULL if an error happens or if that cipher is simply not found. π
SSL_CIPHER_get_id() returns the OpenSSL-specific ID of the given cipher c. and ngl, that ID is not the same as the IANA-specific ID β do not mix them up, that's the whole plot twist.
SSL_CIPHER_get_protocol_id() returns the two-byte ID used in the TLS protocol for the given cipher c.
SSL_CIPHER_description() returns a textual description of the cipher into the buffer buf of length len that you provide. If buf is provided, it must be at least 128 bytes. If buf is NULL, it'll be allocated for you using OPENSSL_malloc(). If the buffer you gave is too small, or the allocation fails, NULL is returned. no description for you. π
so the string that SSL_CIPHER_description() returns is made of several fields, all separated by whitespace:
<ciphername>β a textual representation of the cipher name.<protocol version>β the minimum protocol version that the ciphersuite supports, likeTLSv1.2. note that this is not always the same as the protocol version in which the ciphersuite was first defined, because some ciphersuites are backwards compatible with earlier protocol versions.Kx=<key exchange>β the key exchange method, such asRSA,ECDHE, etc.Au=<authentication>β the authentication method, such asRSA,None, etc.Noneis the representation for anonymous ciphers.Enc=<symmetric encryption method>β the encryption method, with the number of secret bits, such asAESGCM(128).Mac=<message authentication code>β the message digest, such asSHA256.
some examples of what SSL_CIPHER_description() spits out:
ECDHE-RSA-AES256-GCM-SHA256 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
RSA-PSK-AES256-CBC-SHA384 TLSv1.0 Kx=RSAPSK Au=RSA Enc=AES(256) Mac=SHA384
look at that formatting. slay. β¨
π RETURN VALUES π
SSL_CIPHER_get_name(), SSL_CIPHER_standard_name(), OPENSSL_cipher_name(), SSL_CIPHER_get_version() and SSL_CIPHER_description() all return the corresponding value in a NUL-terminated string for a specific cipher β or "(NONE)" if the cipher isn't found.
SSL_CIPHER_get_bits() returns a positive integer with the number of secret bits, or 0 if an error occurred.
SSL_CIPHER_get_cipher_nid(), SSL_CIPHER_get_digest_nid(), SSL_CIPHER_get_kx_nid() and SSL_CIPHER_get_auth_nid() return the NID value, or NID_undef if an error occurred.
SSL_CIPHER_get_handshake_digest() returns a valid EVP_MD structure, or NULL if an error occurred.
SSL_CIPHER_is_aead() returns 1 if the cipher is AEAD, or 0 otherwise.
SSL_CIPHER_find() returns a valid SSL_CIPHER structure, or NULL if an error occurred.
SSL_CIPHER_get_id() returns a 4-byte integer representing the OpenSSL-specific ID.
SSL_CIPHER_get_protocol_id() returns a 2-byte integer representing the TLS protocol-specific ID.
π SEE ALSO π
ssl(7), SSL_get_current_cipher(3), SSL_get_ciphers(3), openssl-ciphers(1)
go read those next, bestie, i promise they ate π«Ά
π HISTORY π
SSL_CIPHER_get_version() was updated to always return the correct protocol string in OpenSSL 1.1.0.
SSL_CIPHER_description() was changed to return NULL on error, instead of a fixed string, in OpenSSL 1.1.0. (so if you're reading old code that expected a string back on failureβ¦ yeah. π)
SSL_CIPHER_get_handshake_digest() was added in OpenSSL 1.1.1.
SSL_CIPHER_standard_name() became globally available in OpenSSL 1.1.1. Before OpenSSL 1.1.1, you needed tracing β that's the enable-ssl-trace argument to Configure β to enable this function.
OPENSSL_cipher_name() was added in OpenSSL 1.1.1.
π COPYRIGHT π
Copyright 2000-2024 The OpenSSL Project Authors. All Rights Reserved.
Licensed under the Apache License 2.0 (the "License"). You may not use this file except in compliance with the License. You can obtain a copy in the file LICENSE in the source distribution or at <https://www.openssl.org/source/license.html>.
okay that's the whole page!! go forth and interrogate your ciphers π
and finally, the cute lil sign-off: this was version 4.0.3, dated 2026-09-29 β and it's the SSL_CIPHER_GET_NAME(3SSL) page, which, yeah, is a mouthful, but it's our mouthful. bye bestie, mwah ππΈπ§
π¦ where this page comes from
- ubuntu stonking: libssl-doc 4.0.3-1ubuntu1 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms