Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions src/internal.c
Original file line number Diff line number Diff line change
Expand Up @@ -28749,6 +28749,20 @@ const char* GetCipherSegment(const WOLFSSL_CIPHER* cipher, char n[][MAX_SEGMENT_

offset = cipher->offset;

/* offset is not set via wolfSSL_get_current_cipher(), so resolve it from
* the always-populated suite bytes. */
for (i = 0; i < GetCipherNamesSize(); i++) {
if (cipher_names[i].cipherSuite0 == cipher->cipherSuite0 &&
cipher_names[i].cipherSuite == cipher->cipherSuite
#ifndef NO_CIPHER_SUITE_ALIASES
&& (!(cipher_names[i].flags & WOLFSSL_CIPHER_SUITE_FLAG_NAMEALIAS))
#endif
) {
offset = (unsigned long)i;
break;
}
}

if (offset >= (unsigned long)GetCipherNamesSize())
return NULL;
Comment thread
julek-wolfssl marked this conversation as resolved.

Expand Down
1 change: 1 addition & 0 deletions src/ssl.c
Original file line number Diff line number Diff line change
Expand Up @@ -11321,6 +11321,7 @@ int wolfSSL_CIPHER_get_kx_nid(const WOLFSSL_CIPHER* cipher)
{"RSAPSK", WC_NID_kx_rsa_psk},
{"SRP", WC_NID_kx_srp},
{"EDH", WC_NID_kx_dhe},
{"PSK", WC_NID_kx_psk},
{"RSA", WC_NID_kx_rsa},
{NULL, WC_NID_undef}
};
Expand Down
41 changes: 41 additions & 0 deletions tests/api.c
Original file line number Diff line number Diff line change
Expand Up @@ -28172,6 +28172,46 @@ static int test_SSL_CIPHER_get_xxx(void)
return EXPECT_RESULT();
}

/* Cipher property helpers must report the negotiated cipher when it is
* obtained via SSL_get_current_cipher(), which does not populate
* cipher->offset. */
static int test_SSL_CIPHER_get_current_kx(void)
{
EXPECT_DECLS;
#if defined(OPENSSL_ALL) && !defined(NO_TLS) && \
defined(BUILD_TLS_PSK_WITH_AES_128_GCM_SHA256)
SSL_CTX* ctx = NULL;
SSL* ssl = NULL;
const SSL_CIPHER* cipher = NULL;

#ifndef NO_WOLFSSL_CLIENT
ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_client_method()));
#else
ExpectNotNull(ctx = wolfSSL_CTX_new(wolfSSLv23_server_method()));
#endif
ExpectNotNull(ssl = SSL_new(ctx));

/* Set a negotiated plain-PSK suite without a full handshake. */
if (ssl != NULL) {
ssl->options.cipherSuite0 = CIPHER_BYTE;
ssl->options.cipherSuite = TLS_PSK_WITH_AES_128_GCM_SHA256;
}

ExpectNotNull(cipher = SSL_get_current_cipher(ssl));
ExpectStrEQ(SSL_CIPHER_get_name(cipher), "TLS_PSK_WITH_AES_128_GCM_SHA256");
ExpectIntEQ(wolfSSL_CIPHER_get_kx_nid(cipher), NID_kx_psk);
ExpectIntEQ(wolfSSL_CIPHER_get_auth_nid(cipher), NID_auth_psk);
ExpectIntEQ(wolfSSL_CIPHER_get_cipher_nid(cipher), NID_aes_128_gcm);
ExpectIntEQ(wolfSSL_CIPHER_get_digest_nid(cipher), NID_sha256);
ExpectIntEQ(wolfSSL_CIPHER_is_aead(cipher), 1);

SSL_free(ssl);
SSL_CTX_free(ctx);
#endif

return EXPECT_RESULT();
}

#if defined(WOLF_CRYPTO_CB) && defined(HAVE_IO_TESTS_DEPENDENCIES) && \
(!defined(WOLF_CRYPTO_CB_ONLY_SHA256) && !defined(WOLF_CRYPTO_CB_ONLY_AES) && \
!defined(WOLF_CRYPTO_CB_ONLY_ECC) && !defined(WOLF_CRYPTO_CB_ONLY_RSA))
Expand Down Expand Up @@ -34955,6 +34995,7 @@ TEST_CASE testCases[] = {
TEST_DECL(test_wolfSSL_get_peer_finished_overrun),
#endif
TEST_DECL(test_SSL_CIPHER_get_xxx),
TEST_DECL(test_SSL_CIPHER_get_current_kx),
TEST_DECL(test_wolfSSL_ERR_strings),
TEST_DECL(test_wolfSSL_CTX_set_cipher_list_bytes),
TEST_DECL(test_wolfSSL_set_cipher_list_tls12_keeps_tls13),
Expand Down
Loading