Skip to content
Merged
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
10 changes: 5 additions & 5 deletions include/openssl/ssl.h
Original file line number Diff line number Diff line change
Expand Up @@ -5198,16 +5198,16 @@ OPENSSL_EXPORT size_t SSL_get_finished(const SSL *ssl, void *buf, size_t count);
OPENSSL_EXPORT size_t SSL_get_peer_finished(const SSL *ssl, void *buf,
size_t count);

// SSL_alert_type_string returns "!". Use |SSL_alert_type_string_long|
// SSL_alert_type_string returns an unintelligible 1 letter string description
// of |value| as an alert type (W or F). Use |SSL_alert_type_string_long|
// instead.
OPENSSL_EXPORT const char *SSL_alert_type_string(int value);

// SSL_alert_desc_string returns "!!". Use |SSL_alert_desc_string_long|
// instead.
// SSL_alert_desc_string returns an unintelligible 2 letter string description
// of |value|. Use |SSL_alert_desc_string_long| instead.
OPENSSL_EXPORT const char *SSL_alert_desc_string(int value);

// SSL_state_string returns "!!!!!!". Use |SSL_state_string_long| for a more
// intelligible string.
// SSL_state_string returns |SSL_state_string_long|.
OPENSSL_EXPORT const char *SSL_state_string(const SSL *ssl);

// SSL_TXT_* expand to strings.
Expand Down
108 changes: 105 additions & 3 deletions ssl/ssl_stat.cc
Original file line number Diff line number Diff line change
Expand Up @@ -98,10 +98,11 @@ const char *SSL_state_string_long(const SSL *ssl) {
}

const char *SSL_state_string(const SSL *ssl) {
return "!!!!!!";
return SSL_state_string_long(ssl);
}

const char *SSL_alert_type_string_long(int value) {
value &= 0x0f00;
value >>= 8;
if (value == SSL3_AL_WARNING) {
return "warning";
Expand All @@ -113,11 +114,112 @@ const char *SSL_alert_type_string_long(int value) {
}

const char *SSL_alert_type_string(int value) {
return "!";
value &= 0x0f00;
value >>= 8;
if (value == SSL3_AL_WARNING) {
return "W";
} else if (value == SSL3_AL_FATAL) {
return "F";
}

return "U";
}

const char *SSL_alert_desc_string(int value) {
return "!!";
switch (value & 0xff) {
case SSL3_AD_CLOSE_NOTIFY:
return "CN";

case SSL3_AD_UNEXPECTED_MESSAGE:
return "UM";

case SSL3_AD_BAD_RECORD_MAC:
return "BM";

case SSL3_AD_DECOMPRESSION_FAILURE:
return "DF";

case SSL3_AD_HANDSHAKE_FAILURE:
return "HF";

case SSL3_AD_NO_CERTIFICATE:
return "NC";

case SSL3_AD_BAD_CERTIFICATE:
return "BC";

case SSL3_AD_UNSUPPORTED_CERTIFICATE:
return "UC";

case SSL3_AD_CERTIFICATE_REVOKED:
return "CR";

case SSL3_AD_CERTIFICATE_EXPIRED:
return "CE";

case SSL3_AD_CERTIFICATE_UNKNOWN:
return "CU";

case SSL3_AD_ILLEGAL_PARAMETER:
return "IP";

case TLS1_AD_DECRYPTION_FAILED:
return "DC";

case TLS1_AD_RECORD_OVERFLOW:
return "RO";

case TLS1_AD_UNKNOWN_CA:
return "CA";

case TLS1_AD_ACCESS_DENIED:
return "AD";

case TLS1_AD_DECODE_ERROR:
return "DE";

case TLS1_AD_DECRYPT_ERROR:
return "CY";

case TLS1_AD_EXPORT_RESTRICTION:
return "ER";

case TLS1_AD_PROTOCOL_VERSION:
return "PV";

case TLS1_AD_INSUFFICIENT_SECURITY:
return "IS";

case TLS1_AD_INTERNAL_ERROR:
return "IE";

case TLS1_AD_USER_CANCELLED:
return "US";

case TLS1_AD_NO_RENEGOTIATION:
return "NR";

case TLS1_AD_UNSUPPORTED_EXTENSION:
return "UE";

case TLS1_AD_CERTIFICATE_UNOBTAINABLE:
return "CO";

case TLS1_AD_UNRECOGNIZED_NAME:
return "UN";

case TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
return "BR";

case TLS1_AD_BAD_CERTIFICATE_HASH_VALUE:
return "BH";

case TLS1_AD_UNKNOWN_PSK_IDENTITY:
return "UP";

default:
return "UK";
}
}

const char *SSL_alert_desc_string_long(int value) {
Expand Down
14 changes: 14 additions & 0 deletions ssl/ssl_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -9683,5 +9683,19 @@ TEST(SSLTest, InvalidSignatureAlgorithm) {
ctx.get(), kDuplicatePrefs, OPENSSL_ARRAY_SIZE(kDuplicatePrefs)));
}

TEST(SSLTest, ErrorStrings) {
int warning_value = SSL3_AD_CLOSE_NOTIFY | (SSL3_AL_WARNING << 8);
int fatal_value = SSL3_AD_UNEXPECTED_MESSAGE | (SSL3_AL_FATAL << 8);
int unknown_value = 99999;

EXPECT_EQ(Bytes(SSL_alert_desc_string(warning_value)), Bytes("CN"));
EXPECT_EQ(Bytes(SSL_alert_desc_string(fatal_value)), Bytes("UM"));
EXPECT_EQ(Bytes(SSL_alert_desc_string(unknown_value)), Bytes("UK"));

EXPECT_EQ(Bytes(SSL_alert_type_string(warning_value)), Bytes("W"));
EXPECT_EQ(Bytes(SSL_alert_type_string(fatal_value)), Bytes("F"));
EXPECT_EQ(Bytes(SSL_alert_type_string(unknown_value)), Bytes("U"));
}

} // namespace
BSSL_NAMESPACE_END