summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeikki Vatiainen <hvn@radiatorsoftware.com>2023-12-02 23:50:32 +0200
committerGitHub <noreply@github.com>2023-12-02 23:50:32 +0200
commita32ca8b77669dddd8a3f721f33753818cec5b9db (patch)
tree7bc8b678b028c88742a2fc82b844599419948e12
parent9404593d2e5ab6e95dcdd93329ca9b0544adf0b9 (diff)
parent3aef86e0fceda3c8d007c73ef25ef4025e317564 (diff)
Merge pull request #448 from radiator-software/GH-93-add-ssl_ctx_set_psk_use_session_callback-and-related-functions
GH-93 Add SSL_CTX_set_psk_use_session_callback and related functions for TLS 1.3 PSK
-rw-r--r--Changes11
-rw-r--r--SSLeay.xs176
-rw-r--r--constants.c371
-rw-r--r--helper_script/constants.txt18
-rw-r--r--lib/Net/SSLeay.pm18
-rw-r--r--lib/Net/SSLeay.pod887
-rw-r--r--t/local/21_constants.t20
-rw-r--r--t/local/43_misc_functions.t25
-rw-r--r--t/local/44_sess.t29
-rw-r--r--t/local/50_digest.t12
-rw-r--r--typemap1
11 files changed, 1122 insertions, 446 deletions
diff --git a/Changes b/Changes
index 6363ecd..8b74434 100644
--- a/Changes
+++ b/Changes
@@ -65,6 +65,17 @@ Revision history for Perl extension Net::SSLeay.
- SSL_SESSION_set_cipher
- SSL_SESSION_set_protocol_version
- SSL_CIPHER_find
+ - Expose NID_shake128, NID_shake256 and the rest of NID_sha* constants.
+ - Expose functions for setting up TLS 1.3 PSK authentication
+ on the client side. Only SSL_SESSION_get0_cipher is
+ available with LibreSSL.
+ - SSL_set_psk_use_session_callback
+ - SSL_CTX_set_psk_use_session_callback
+ - SSL_CIPHER_get_handshake_digest
+ - SSL_SESSION_get0_cipher
+ - EVP_MD_get0_description
+ - EVP_MD_get0_name
+ - EVP_MD_get_type
1.93_02 2023-02-22
- Update ppport.h to version 3.68. This eliminates thousands of
diff --git a/SSLeay.xs b/SSLeay.xs
index e9fd58c..c263efb 100644
--- a/SSLeay.xs
+++ b/SSLeay.xs
@@ -1313,6 +1313,127 @@ int ssleay_ctx_set_psk_find_session_callback_invoke(SSL *ssl, const unsigned cha
return ret;
}
+int ssleay_set_psk_use_session_callback_invoke(SSL *ssl, const EVP_MD *md,
+ const unsigned char **id,
+ size_t *idlen,
+ SSL_SESSION **sess)
+{
+ dSP;
+ int count = -1, ret;
+ SV * cb_func, *sess_sv, *id_sv;
+
+ PR1("STARTED: ssleay_psk_use_session_callback_invoke\n");
+
+ cb_func = cb_data_advanced_get(ssl, "ssleay_set_psk_use_session_callback!!func");
+ if(!SvOK(cb_func))
+ croak ("Net::SSLeay: ssleay_psk_use_session_callback_invoke called, but not set to point to any perl function.\n");
+
+ ENTER;
+ SAVETMPS;
+
+ PUSHMARK(SP);
+ EXTEND(SP, 2);
+ PUSHs(sv_2mortal(newSViv(PTR2IV(ssl))));
+ PUSHs(sv_2mortal(newSViv(PTR2IV(md))));
+
+ PUTBACK;
+
+ count = call_sv( cb_func, G_LIST );
+
+ SPAGAIN;
+
+ if (count != 3)
+ croak ("Net::SSLeay: ssleay_psk_use_session_callback_invoke perl function did not return 3 values.\n");
+
+ *sess = NULL;
+ *id = NULL;
+ *idlen = 0;
+ sess_sv = POPs;
+ id_sv = POPs;
+ ret = POPi;
+ if (ret && SvOK(sess_sv)) {
+ /* Returning with success but without NULL SSL_SESSION is
+ * permissible. In this case the handshake continues with
+ * certificate authentication */
+ char *id_sv_ptr;
+ STRLEN id_sv_len;
+ *sess = INT2PTR(SSL_SESSION *, SvIV(sess_sv));
+ id_sv_ptr = SvPVbyte(id_sv, id_sv_len);
+ *id = (const unsigned char *)id_sv_ptr;
+ *idlen = id_sv_len;
+ sv_dump(id_sv);
+ SSL_SESSION_print_fp(stdout, *sess);
+ }
+
+ PUTBACK;
+ FREETMPS;
+ LEAVE;
+
+ return ret;
+}
+
+int ssleay_ctx_set_psk_use_session_callback_invoke(SSL *ssl, const EVP_MD *md,
+ const unsigned char **id,
+ size_t *idlen,
+ SSL_SESSION **sess)
+{
+ dSP;
+ SSL_CTX *ctx;
+ int count = -1, ret;
+ SV * cb_func, *sess_sv, *id_sv;
+
+ ctx = SSL_get_SSL_CTX(ssl);
+
+ PR1("STARTED: ssleay_ctx_psk_use_session_callback_invoke\n");
+
+ cb_func = cb_data_advanced_get(ctx, "ssleay_ctx_set_psk_use_session_callback!!func");
+ if(!SvOK(cb_func))
+ croak ("Net::SSLeay: ssleay_ctx_psk_use_session_callback_invoke called, but not set to point to any perl function.\n");
+
+ ENTER;
+ SAVETMPS;
+
+ PUSHMARK(SP);
+ EXTEND(SP, 2);
+ PUSHs(sv_2mortal(newSViv(PTR2IV(ssl))));
+ PUSHs(sv_2mortal(newSViv(PTR2IV(md))));
+
+ PUTBACK;
+
+ count = call_sv( cb_func, G_LIST );
+
+ SPAGAIN;
+
+ if (count != 3)
+ croak ("Net::SSLeay: ssleay_ctx_psk_use_session_callback_invoke perl function did not return 2 values.\n");
+
+ *sess = NULL;
+ *id = NULL;
+ *idlen = 0;
+ sess_sv = POPs;
+ id_sv = POPs;
+ ret = POPi;
+ if (ret && SvOK(sess_sv)) {
+ /* Returning with success but without NULL SSL_SESSION is
+ * permissible. In this case the handshake continues with
+ * certificate authentication */
+ char *id_sv_ptr;
+ STRLEN id_sv_len;
+ *sess = INT2PTR(SSL_SESSION *, SvIV(sess_sv));
+ id_sv_ptr = SvPVbyte(id_sv, id_sv_len);
+ *id = (const unsigned char *)id_sv_ptr;
+ *idlen = id_sv_len;
+ sv_dump(id_sv);
+ SSL_SESSION_print_fp(stdout, *sess);
+ }
+
+ PUTBACK;
+ FREETMPS;
+ LEAVE;
+
+ return ret;
+}
+
#endif
#endif
@@ -5640,6 +5761,13 @@ SSL_CIPHER_get_bits(c, ...)
const char *
SSL_CIPHER_get_version(const SSL_CIPHER *cipher)
+#if OPENSSL_VERSION_NUMBER >= 0x10101001L && !defined(LIBRESSL_VERSION_NUMBER)
+
+const EVP_MD *
+SSL_CIPHER_get_handshake_digest(const SSL_CIPHER *c)
+
+#endif /* OpenSSL 1.1.1-pre1 */
+
#if (OPENSSL_VERSION_NUMBER >= 0x1000200fL && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3040000fL) /* LibreSSL >= 3.4.0 */
const SSL_CIPHER *
@@ -7034,6 +7162,13 @@ SSL_SESSION_set_protocol_version(SSL_SESSION *s, int version)
#endif
+#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x3040000fL)
+
+const SSL_CIPHER *
+SSL_SESSION_get0_cipher(const SSL_SESSION *s)
+
+#endif
+
#if (OPENSSL_VERSION_NUMBER >= 0x10100000L && !defined(LIBRESSL_VERSION_NUMBER)) || (LIBRESSL_VERSION_NUMBER >= 0x2070000fL)
void
@@ -7285,6 +7420,34 @@ SSL_CTX_set_psk_find_session_callback(ctx,cb=&PL_sv_undef)
SSL_CTX_set_psk_find_session_callback(ctx, ssleay_ctx_set_psk_find_session_callback_invoke);
}
+void
+SSL_set_psk_use_session_callback(s,cb=&PL_sv_undef)
+ SSL * s
+ SV * cb
+ CODE:
+ if (cb==NULL || !SvOK(cb)) {
+ SSL_set_psk_use_session_callback(s, NULL);
+ cb_data_advanced_put(s, "ssleay_set_psk_use_session_callback!!func", NULL);
+ }
+ else {
+ cb_data_advanced_put(s, "ssleay_set_psk_use_session_callback!!func", newSVsv(cb));
+ SSL_set_psk_use_session_callback(s, ssleay_set_psk_use_session_callback_invoke);
+ }
+
+void
+SSL_CTX_set_psk_use_session_callback(ctx,cb=&PL_sv_undef)
+ SSL_CTX * ctx
+ SV * cb
+ CODE:
+ if (cb==NULL || !SvOK(cb)) {
+ SSL_CTX_set_psk_use_session_callback(ctx, NULL);
+ cb_data_advanced_put(ctx, "ssleay_ctx_set_psk_use_session_callback!!func", NULL);
+ }
+ else {
+ cb_data_advanced_put(ctx, "ssleay_ctx_set_psk_use_session_callback!!func", newSVsv(cb));
+ SSL_CTX_set_psk_use_session_callback(ctx, ssleay_ctx_set_psk_use_session_callback_invoke);
+ }
+
#endif
#endif
@@ -7345,6 +7508,19 @@ int EVP_MD_type(const EVP_MD *md)
int EVP_MD_size(const EVP_MD *md)
+#if OPENSSL_VERSION_NUMBER >= 0x30000000L
+
+const char *
+EVP_MD_get0_description(const EVP_MD *md)
+
+const char *
+EVP_MD_get0_name(const EVP_MD *md)
+
+int
+EVP_MD_get_type(const EVP_MD *md)
+
+#endif
+
#if OPENSSL_VERSION_NUMBER >= 0x1000000fL
SV*
diff --git a/constants.c b/constants.c
index ad3e101..70f521b 100644
--- a/constants.c
+++ b/constants.c
@@ -650,37 +650,73 @@ constant (const char *name, size_t len) {
/* Names all of length 10. */
/* ERROR_NONE EVP_PKS_EC EVP_PK_DSA EVP_PK_RSA F_SSL_READ MODE_ASYNC
NID_bf_cbc NID_bf_ecb NID_crlBag NID_keyBag NID_ms_efs NID_ms_sgc
- NID_ns_sgc NID_pbmac1 NID_rc4_40 NID_rsadsi R_X509_LIB SSLEAY_DIR
- ST_CONNECT */
- /* Offset 4 gives the best switch position. */
- switch (name[4]) {
- case '0':
- if (!memcmp(name, "R_X509_LIB", 10)) {
- /* ^ */
+ NID_ns_sgc NID_pbmac1 NID_rc4_40 NID_rsadsi NID_sha224 NID_sha256
+ NID_sha384 NID_sha512 R_X509_LIB SSLEAY_DIR ST_CONNECT */
+ /* Offset 8 gives the best switch position. */
+ switch (name[8]) {
+ case '1':
+ if (!memcmp(name, "NID_sha512", 10)) {
+ /* ^ */
-#ifdef SSL_R_X509_LIB
- return SSL_R_X509_LIB;
+#ifdef NID_sha512
+ return NID_sha512;
#else
goto not_there;
#endif
}
break;
- case 'A':
- if (!memcmp(name, "SSLEAY_DIR", 10)) {
- /* ^ */
+ case '2':
+ if (!memcmp(name, "NID_sha224", 10)) {
+ /* ^ */
-#ifdef SSLEAY_DIR
- return SSLEAY_DIR;
+#ifdef NID_sha224
+ return NID_sha224;
#else
goto not_there;
#endif
}
break;
- case 'L':
+ case '4':
+ if (!memcmp(name, "NID_rc4_40", 10)) {
+ /* ^ */
+
+#ifdef NID_rc4_40
+ return NID_rc4_40;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case '5':
+ if (!memcmp(name, "NID_sha256", 10)) {
+ /* ^ */
+
+#ifdef NID_sha256
+ return NID_sha256;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case '8':
+ if (!memcmp(name, "NID_sha384", 10)) {
+ /* ^ */
+
+#ifdef NID_sha384
+ return NID_sha384;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case 'A':
if (!memcmp(name, "F_SSL_READ", 10)) {
- /* ^ */
+ /* ^ */
#ifdef SSL_F_SSL_READ
return SSL_F_SSL_READ;
@@ -690,9 +726,9 @@ constant (const char *name, size_t len) {
}
break;
- case 'O':
+ case 'C':
if (!memcmp(name, "ST_CONNECT", 10)) {
- /* ^ */
+ /* ^ */
#ifdef SSL_ST_CONNECT
return SSL_ST_CONNECT;
@@ -702,9 +738,9 @@ constant (const char *name, size_t len) {
}
break;
- case 'P':
+ case 'E':
if (!memcmp(name, "EVP_PKS_EC", 10)) {
- /* ^ */
+ /* ^ */
#ifdef EVP_PKS_EC
return EVP_PKS_EC;
@@ -713,30 +749,32 @@ constant (const char *name, size_t len) {
#endif
}
- if (!memcmp(name, "EVP_PK_DSA", 10)) {
- /* ^ */
+ break;
+ case 'I':
+ if (!memcmp(name, "R_X509_LIB", 10)) {
+ /* ^ */
-#ifdef EVP_PK_DSA
- return EVP_PK_DSA;
+#ifdef SSL_R_X509_LIB
+ return SSL_R_X509_LIB;
#else
goto not_there;
#endif
}
- if (!memcmp(name, "EVP_PK_RSA", 10)) {
- /* ^ */
+ if (!memcmp(name, "SSLEAY_DIR", 10)) {
+ /* ^ */
-#ifdef EVP_PK_RSA
- return EVP_PK_RSA;
+#ifdef SSLEAY_DIR
+ return SSLEAY_DIR;
#else
goto not_there;
#endif
}
break;
- case 'R':
+ case 'N':
if (!memcmp(name, "ERROR_NONE", 10)) {
- /* ^ */
+ /* ^ */
#ifdef SSL_ERROR_NONE
return SSL_ERROR_NONE;
@@ -745,10 +783,8 @@ constant (const char *name, size_t len) {
#endif
}
- break;
- case '_':
if (!memcmp(name, "MODE_ASYNC", 10)) {
- /* ^ */
+ /* ^ */
#ifdef SSL_MODE_ASYNC
return SSL_MODE_ASYNC;
@@ -758,31 +794,31 @@ constant (const char *name, size_t len) {
}
break;
- case 'b':
- if (!memcmp(name, "NID_bf_cbc", 10)) {
- /* ^ */
+ case 'S':
+ if (!memcmp(name, "EVP_PK_DSA", 10)) {
+ /* ^ */
-#ifdef NID_bf_cbc
- return NID_bf_cbc;
+#ifdef EVP_PK_DSA
+ return EVP_PK_DSA;
#else
goto not_there;
#endif
}
- if (!memcmp(name, "NID_bf_ecb", 10)) {
- /* ^ */
+ if (!memcmp(name, "EVP_PK_RSA", 10)) {
+ /* ^ */
-#ifdef NID_bf_ecb
- return NID_bf_ecb;
+#ifdef EVP_PK_RSA
+ return EVP_PK_RSA;
#else
goto not_there;
#endif
}
break;
- case 'c':
+ case 'a':
if (!memcmp(name, "NID_crlBag", 10)) {
- /* ^ */
+ /* ^ */
#ifdef NID_crlBag
return NID_crlBag;
@@ -791,10 +827,8 @@ constant (const char *name, size_t len) {
#endif
}
- break;
- case 'k':
if (!memcmp(name, "NID_keyBag", 10)) {
- /* ^ */
+ /* ^ */
#ifdef NID_keyBag
return NID_keyBag;
@@ -804,65 +838,77 @@ constant (const char *name, size_t len) {
}
break;
- case 'm':
- if (!memcmp(name, "NID_ms_efs", 10)) {
- /* ^ */
+ case 'b':
+ if (!memcmp(name, "NID_bf_cbc", 10)) {
+ /* ^ */
-#ifdef NID_ms_efs
- return NID_ms_efs;
+#ifdef NID_bf_cbc
+ return NID_bf_cbc;
#else
goto not_there;
#endif
}
- if (!memcmp(name, "NID_ms_sgc", 10)) {
- /* ^ */
+ break;
+ case 'c':
+ if (!memcmp(name, "NID_bf_ecb", 10)) {
+ /* ^ */
-#ifdef NID_ms_sgc
- return NID_ms_sgc;
+#ifdef NID_bf_ecb
+ return NID_bf_ecb;
#else
goto not_there;
#endif
}
- break;
- case 'n':
- if (!memcmp(name, "NID_ns_sgc", 10)) {
- /* ^ */
+ if (!memcmp(name, "NID_pbmac1", 10)) {
+ /* ^ */
-#ifdef NID_ns_sgc
- return NID_ns_sgc;
+#ifdef NID_pbmac1
+ return NID_pbmac1;
#else
goto not_there;
#endif
}
break;
- case 'p':
- if (!memcmp(name, "NID_pbmac1", 10)) {
- /* ^ */
+ case 'f':
+ if (!memcmp(name, "NID_ms_efs", 10)) {
+ /* ^ */
-#ifdef NID_pbmac1
- return NID_pbmac1;
+#ifdef NID_ms_efs
+ return NID_ms_efs;
#else
goto not_there;
#endif
}
break;
- case 'r':
- if (!memcmp(name, "NID_rc4_40", 10)) {
- /* ^ */
+ case 'g':
+ if (!memcmp(name, "NID_ms_sgc", 10)) {
+ /* ^ */
-#ifdef NID_rc4_40
- return NID_rc4_40;
+#ifdef NID_ms_sgc
+ return NID_ms_sgc;
#else
goto not_there;
#endif
}
+ if (!memcmp(name, "NID_ns_sgc", 10)) {
+ /* ^ */
+
+#ifdef NID_ns_sgc
+ return NID_ns_sgc;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case 's':
if (!memcmp(name, "NID_rsadsi", 10)) {
- /* ^ */
+ /* ^ */
#ifdef NID_rsadsi
return NID_rsadsi;
@@ -1196,10 +1242,68 @@ constant (const char *name, size_t len) {
/* ASYNC_PAUSED EVP_PKT_EXCH EVP_PKT_SIGN FILETYPE_PEM F_SSL_SET_FD
GEN_EDIPARTY MBSTRING_ASC MBSTRING_BMP NID_bf_cfb64 NID_bf_ofb64
NID_des_ede3 NID_desx_cbc NID_idea_cbc NID_idea_ecb NID_initials
- NID_md5_sha1 NID_netscape OP_NO_TICKET RETRY_VERIFY R_PEER_ERROR
- R_SHORT_READ SSL2_VERSION SSL3_VERSION ST_READ_BODY TLS1_VERSION */
+ NID_md5_sha1 NID_netscape NID_sha3_224 NID_sha3_256 NID_sha3_384
+ NID_sha3_512 NID_shake128 NID_shake256 OP_NO_TICKET RETRY_VERIFY
+ R_PEER_ERROR R_SHORT_READ SSL2_VERSION SSL3_VERSION ST_READ_BODY
+ TLS1_VERSION */
/* Offset 10 gives the best switch position. */
switch (name[10]) {
+ case '1':
+ if (!memcmp(name, "NID_sha3_512", 12)) {
+ /* ^ */
+
+#ifdef NID_sha3_512
+ return NID_sha3_512;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case '2':
+ if (!memcmp(name, "NID_sha3_224", 12)) {
+ /* ^ */
+
+#ifdef NID_sha3_224
+ return NID_sha3_224;
+#else
+ goto not_there;
+#endif
+
+ }
+ if (!memcmp(name, "NID_shake128", 12)) {
+ /* ^ */
+
+#ifdef NID_shake128
+ return NID_shake128;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case '5':
+ if (!memcmp(name, "NID_sha3_256", 12)) {
+ /* ^ */
+
+#ifdef NID_sha3_256
+ return NID_sha3_256;
+#else
+ goto not_there;
+#endif
+
+ }
+ if (!memcmp(name, "NID_shake256", 12)) {
+ /* ^ */
+
+#ifdef NID_shake256
+ return NID_shake256;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
case '6':
if (!memcmp(name, "NID_bf_cfb64", 12)) {
/* ^ */
@@ -1222,6 +1326,18 @@ constant (const char *name, size_t len) {
}
break;
+ case '8':
+ if (!memcmp(name, "NID_sha3_384", 12)) {
+ /* ^ */
+
+#ifdef NID_sha3_384
+ return NID_sha3_384;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
case 'A':
if (!memcmp(name, "R_SHORT_READ", 12)) {
/* ^ */
@@ -1944,12 +2060,12 @@ constant (const char *name, size_t len) {
F_SERVER_HELLO F_SSL_CERT_NEW NID_commonName NID_crl_number
NID_crl_reason NID_dsaWithSHA NID_idea_cfb64 NID_idea_ofb64
NID_localKeyID NID_md5WithRSA NID_ms_ext_req NID_pkcs7_data
- NID_rc2_40_cbc NID_rc2_64_cbc NID_time_stamp OPENSSL_CFLAGS
- OP_ENABLE_KTLS OP_NO_SSL_MASK R_BAD_CHECKSUM R_NO_PUBLICKEY
- R_NULL_SSL_CTX SESS_CACHE_OFF SSL3_RT_HEADER SSLEAY_VERSION
- ST_READ_HEADER TLS1_1_VERSION TLS1_2_VERSION TLS1_3_VERSION
- X509_TRUST_TSA XN_FLAG_COMPAT XN_FLAG_DN_REV XN_FLAG_FN_OID
- XN_FLAG_SPC_EQ */
+ NID_rc2_40_cbc NID_rc2_64_cbc NID_sha512_224 NID_sha512_256
+ NID_time_stamp OPENSSL_CFLAGS OP_ENABLE_KTLS OP_NO_SSL_MASK
+ R_BAD_CHECKSUM R_NO_PUBLICKEY R_NULL_SSL_CTX SESS_CACHE_OFF
+ SSL3_RT_HEADER SSLEAY_VERSION ST_READ_HEADER TLS1_1_VERSION
+ TLS1_2_VERSION TLS1_3_VERSION X509_TRUST_TSA XN_FLAG_COMPAT
+ XN_FLAG_DN_REV XN_FLAG_FN_OID XN_FLAG_SPC_EQ */
/* Offset 13 gives the best switch position. */
switch (name[13]) {
case '4':
@@ -1973,6 +2089,28 @@ constant (const char *name, size_t len) {
#endif
}
+ if (!memcmp(name, "NID_sha512_22", 13)) {
+ /* 4 */
+
+#ifdef NID_sha512_224
+ return NID_sha512_224;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
+ case '6':
+ if (!memcmp(name, "NID_sha512_25", 13)) {
+ /* 6 */
+
+#ifdef NID_sha512_256
+ return NID_sha512_256;
+#else
+ goto not_there;
+#endif
+
+ }
break;
case 'A':
if (!memcmp(name, "NID_dsaWithSH", 13)) {
@@ -6540,7 +6678,9 @@ constant (const char *name, size_t len) {
/* AD_CERTIFICATE_UNOBTAINABLE NID_crl_distribution_points
NID_netscape_cert_extension NID_netscape_revocation_url
NID_pbe_WithSHA1And40BitRC4 NID_pkcs9_challengePassword
- NID_pkcs9_extCertAttributes OPENSSL_FULL_VERSION_STRING
+ NID_pkcs9_extCertAttributes NID_sha224WithRSAEncryption
+ NID_sha256WithRSAEncryption NID_sha384WithRSAEncryption
+ NID_sha512WithRSAEncryption OPENSSL_FULL_VERSION_STRING
OPENSSL_INFO_LIST_SEPARATOR OP_CIPHER_SERVER_PREFERENCE
OP_SSLEAY_080_CLIENT_DH_BUG R_BAD_SSL_SESSION_ID_LENGTH
R_UNKNOWN_REMOTE_ERROR_TYPE SSL2_MT_REQUEST_CERTIFICATE
@@ -6873,6 +7013,48 @@ constant (const char *name, size_t len) {
}
break;
+ case 'y':
+ if (!memcmp(name, "NID_sha224WithRSAEncryption", 27)) {
+ /* ^ */
+
+#ifdef NID_sha224WithRSAEncryption
+ return NID_sha224WithRSAEncryption;
+#else
+ goto not_there;
+#endif
+
+ }
+ if (!memcmp(name, "NID_sha256WithRSAEncryption", 27)) {
+ /* ^ */
+
+#ifdef NID_sha256WithRSAEncryption
+ return NID_sha256WithRSAEncryption;
+#else
+ goto not_there;
+#endif
+
+ }
+ if (!memcmp(name, "NID_sha384WithRSAEncryption", 27)) {
+ /* ^ */
+
+#ifdef NID_sha384WithRSAEncryption
+ return NID_sha384WithRSAEncryption;
+#else
+ goto not_there;
+#endif
+
+ }
+ if (!memcmp(name, "NID_sha512WithRSAEncryption", 27)) {
+ /* ^ */
+
+#ifdef NID_sha512WithRSAEncryption
+ return NID_sha512WithRSAEncryption;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
}
break;
case 28:
@@ -7481,7 +7663,8 @@ constant (const char *name, size_t len) {
case 31:
/* Names all of length 31. */
/* MIN_RSA_MODULUS_LENGTH_IN_BYTES MODE_ACCEPT_MOVING_WRITE_BUFFER
- NID_pbe_WithSHA1And40BitRC2_CBC OCSP_RESPONSE_STATUS_SUCCESSFUL
+ NID_pbe_WithSHA1And40BitRC2_CBC NID_sha512_224WithRSAEncryption
+ NID_sha512_256WithRSAEncryption OCSP_RESPONSE_STATUS_SUCCESSFUL
TLSEXT_TYPE_max_fragment_length TLSEXT_TYPE_post_handshake_auth
X509_V_ERR_KEYUSAGE_NO_CERTSIGN X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
X509_V_ERR_NO_ISSUER_PUBLIC_KEY X509_V_ERR_PATH_LENGTH_EXCEEDED
@@ -7618,6 +7801,28 @@ constant (const char *name, size_t len) {
}
break;
+ case 'y':
+ if (!memcmp(name, "NID_sha512_224WithRSAEncryption", 31)) {
+ /* ^ */
+
+#ifdef NID_sha512_224WithRSAEncryption
+ return NID_sha512_224WithRSAEncryption;
+#else
+ goto not_there;
+#endif
+
+ }
+ if (!memcmp(name, "NID_sha512_256WithRSAEncryption", 31)) {
+ /* ^ */
+
+#ifdef NID_sha512_256WithRSAEncryption
+ return NID_sha512_256WithRSAEncryption;
+#else
+ goto not_there;
+#endif
+
+ }
+ break;
}
break;
case 32:
diff --git a/helper_script/constants.txt b/helper_script/constants.txt
index fc4d627..82a0962 100644
--- a/helper_script/constants.txt
+++ b/helper_script/constants.txt
@@ -209,7 +209,25 @@ NID_sha
NID_sha1
NID_sha1WithRSA
NID_sha1WithRSAEncryption
+NID_sha224
+NID_sha224WithRSAEncryption
+NID_sha256
+NID_sha256WithRSAEncryption
+NID_sha384
+NID_sha384WithRSAEncryption
+NID_sha3_224
+NID_sha3_256
+NID_sha3_384
+NID_sha3_512
+NID_sha512
+NID_sha512WithRSAEncryption
+NID_sha512_224
+NID_sha512_224WithRSAEncryption
+NID_sha512_256
+NID_sha512_256WithRSAEncryption
NID_shaWithRSAEncryption
+NID_shake128
+NID_shake256
NID_stateOrProvinceName
NID_subject_alt_name
NID_subject_key_identifier
diff --git a/lib/Net/SSLeay.pm b/lib/Net/SSLeay.pm
index 94a2ecf..7e95909 100644
--- a/lib/Net/SSLeay.pm
+++ b/lib/Net/SSLeay.pm
@@ -386,7 +386,25 @@ my @constants = qw(
NID_sha1
NID_sha1WithRSA
NID_sha1WithRSAEncryption
+ NID_sha224
+ NID_sha224WithRSAEncryption
+ NID_sha256
+ NID_sha256WithRSAEncryption
+ NID_sha384
+ NID_sha384WithRSAEncryption
+ NID_sha3_224
+ NID_sha3_256
+ NID_sha3_384
+ NID_sha3_512
+ NID_sha512
+ NID_sha512WithRSAEncryption
+ NID_sha512_224
+ NID_sha512_224WithRSAEncryption
+ NID_sha512_256
+ NID_sha512_256WithRSAEncryption
NID_shaWithRSAEncryption
+ NID_shake128
+ NID_shake256
NID_stateOrProvinceName
NID_subject_alt_name
NID_subject_key_identifier
diff --git a/lib/Net/SSLeay.pod b/lib/Net/SSLeay.pod
index 5fc9aa9..98dcce2 100644
--- a/lib/Net/SSLeay.pod
+++ b/lib/Net/SSLeay.pod
@@ -2215,6 +2215,19 @@ Sets the protocol version associated with an SSL_SESSION.
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_SESSION_set_protocol_version.html>
+=item * SESSION_get0_cipher
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.92 and before; requires at least OpenSSL 1.1.0 or LibreSSL 3.4.0
+
+Returns the value corresponding to OpenSSL's SSL_CIPHER associated with an SSL_SESSION.
+
+ my $ret = Net::SSLeay::SESSION_get0_cipher($s);
+ # $s - value corresponding to OpenSSL SSL_SESSION structure
+ #
+ # returns: A value corresponding to OpenSSL's SSL_CIPHER structure or undef if SSL_CIPHER can't be determined.
+
+Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_SESSION_get0_cipher.html>
+
=item * SESSION_get_time
Returns the time at which the session s was established.
@@ -8641,6 +8654,8 @@ B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
#
# returns: the NID (integer) of the OBJECT IDENTIFIER representing the given message digest
+C<EVP_MD_type> is a non-deprecated alias macro of C<EVP_MD_get_type> since OpenSSL 3.0.0.
+
=item * EVP_MD_size
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
@@ -8650,6 +8665,45 @@ B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before
#
# returns: the size of the message digest in bytes (e.g. 20 for SHA1)
+=item * EVP_MD_get0_description
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.92 and before; requires at least OpenSSL 3.0.0-beta1, not in LibreSSL
+
+Return description of a message digest.
+
+ my $rv = Net::SSLeay::EVP_MD_get0_description($md);
+ # $md - value corresponding to openssl's EVP_MD structure
+ #
+ # returns: String, a freeform and digest implementation dependent description of the digest for display and human consumption. (e.g. sha256)
+
+Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/EVP_MD_get0_description.html>
+
+=item * EVP_MD_get0_name
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.92 and before; requires at least OpenSSL 3.0.0-beta1, not in LibreSSL
+
+Return one name of a message digest.
+
+ my $rv = Net::SSLeay::EVP_MD_get0_description($md);
+ # $md - value corresponding to openssl's EVP_MD structure
+ #
+ # returns: String, the name of the given message digest. For fetched message digests with multiple names, only one of them is returned; it's recommended to use EVP_MD_names_do_all() instead. (e.g. SHA2-256 or SHA256 for the same digest)
+
+Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/EVP_MD_get0_name.html>
+
+=item * EVP_MD_get_type
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.92 and before; requires at least OpenSSL 3.0.0-beta1, not in LibreSSL
+
+Return NID value of a message digest.
+
+ my $rv = Net::SSLeay::EVP_MD_get_type($md);
+ # $md - value corresponding to openssl's EVP_MD structure
+ #
+ # returns: Integer, the NID of the OBJECT IDENTIFIER representing the given message digest when passed an EVP_MD structure.
+
+Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/EVP_MD_get_type.html>
+
=item * EVP_MD_CTX_md
B<COMPATIBILITY:> not available in Net-SSLeay-1.42 and before; requires at least openssl-0.9.7
@@ -8939,6 +8993,19 @@ Returns version of SSL/TLS protocol that first defined the cipher
Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CIPHER_get_version.html|https://www.openssl.org/docs/ssl/SSL_CIPHER_get_version.html>
+=item * CIPHER_get_handshake_digest
+
+B<COMPATIBILITY:> not available in Net-SSLeay-1.92 and before; requires at least OpenSSL 1.1.1-pre1, not in LibreSSL
+
+Returns version of SSL/TLS protocol that first defined the cipher
+
+ my $rv = Net::SSLeay::CIPHER_get_handshake_digest($cipher);
+ # $cipher - value corresponding to openssl's SSL_CIPHER structure
+ #
+ # returns: A value corresponding to OpenSSL's EVP_MD structure for the digest used during the SSL/TLS handshake when using $cipher.
+
+Check openssl doc L<https://www.openssl.org/docs/ssl/SSL_CIPHER_get_handshake_digest.html>
+
=item * CIPHER_find
B<COMPATIBILITY:> not available in Net-SSLeay-1.92 and before; requires at least OpenSSL 1.0.2 or LibreSSL 3.4.0
@@ -10050,6 +10117,101 @@ a full example with a callback.
Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_set_psk_find_session_callback.html>
+=item * CTX_set_psk_use_session_callback
+
+Set a callback for an SSL_CTX on TLS client for using TLSv1.3 PSKs.
+
+ # First set up a callback function.
+ sub tls13_use_psk_cb
+ {
+ my ($ssl, $md) = @_;
+
+ my $psk_identity = "test-tls-psk";
+ my $sess = Net::SSLeay::SESSION_new();
+ my $cipher = Net::SSLeay::CIPHER_find($ssl, pack('n', 0x1301));
+ Net::SSLeay::SESSION_set1_master_key($sess, pack('H*', 'deadbeef'));
+ Net::SSLeay::SESSION_set_cipher($sess, $cipher);
+ Net::SSLeay::SESSION_set_protocol_version($sess, Net::SSLeay::TLS1_3_VERSION());
+
+ # Typically not defined, see OpenSSL manual
+ if ($md)
+ {
+ my $sess_md = Net::SSLeay::CIPHER_get_handshake_digest($cipher);
+ my $md_type; $md_type = Net::SSLeay::EVP_MD_type($md) if $md;
+ my $sess_md_type = Net::SSLeay::EVP_MD_type($sess_md);
+
+ if ($md_type != $sess_md_type)
+ {
+ # Example only: guess and try SHA384
+ my $switched_cipher = Net::SSLeay::CIPHER_find($ssl, pack('n', 0x1302));
+ my $switched_md = Net::SSLeay::CIPHER_get_handshake_digest($switched_cipher);
+ my $switched_md_type = Net::SSLeay::EVP_MD_type($switched_md);
+ if ($md_type != $switched_md_type)
+ {
+ # Guessed wrong, can't proceed with mismatched digest function
+ Net::SSLeay::SESSION_free($sess);
+ return (0, undef, undef);
+ }
+ Net::SSLeay::SESSION_set_cipher($sess, $switched_cipher);
+ }
+ }
+
+ return (1, $psk_identity, $sess);
+ }
+
+ my $cb = \&tls13_use_psk_cb;
+ Net::SSLeay::CTX_set_psk_use_session_callback($ctx, $cb);
+ # $ctx - value corresponding to OpenSSL SSL_CTX structure
+ # $cb - reference to callback function
+ #
+ # returns: no return value
+
+The callback function must return a two value list. When the first
+value is 0, the connection setup fails. When the first value is 1, the
+second value must be a valid C<SSL_SESSION> or C<undef>. When the
+second value is a valid C<SSL_SESSION>, the TLS handshake proceeds
+with PSK authentication. When the the second value is C<undef>, PSK is
+not used the TLS handshake proceeds with certificate authentication.
+
+Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_psk_find_session_callback.html>
+
+=item * set_psk_use_session_callback
+
+Set a callback for an SSL on TLS client for using TLSv1.3 PSKs.
+
+ # First set up a callback function.
+ sub tls13_psk_cb
+ {
+ my ($ssl, $identity) = @_;
+
+ # Note: $identity is potentially hostile user supplied data
+
+ my $sess = Net::SSLeay::SESSION_new();
+ my $cipher = Net::SSLeay::CIPHER_find($ssl, pack('n', 0x1301));
+ Net::SSLeay::SESSION_set1_master_key($sess, pack('H*', 'deadbeef'));
+ Net::SSLeay::SESSION_set_cipher($sess, $cipher);
+ Net::SSLeay::SESSION_set_protocol_version($sess, Net::SSLeay::version($ssl));
+
+ return (1, $sess);
+ }
+
+ my $cb = \&tls13_psk_cb;
+ Net::SSLeay::CTX_set_psk_find_session_callback($ctx, $cb);
+ # $ctx - value corresponding to OpenSSL SSL_CTX structure
+ # $cb - reference to callback function
+ #
+ # returns: no return value
+
+The callback function must return a two value list. When the first
+value is 0, the connection setup fails. When the first value is 1, the
+second value must be a valid C<SSL_SESSION> or C<undef>. When the
+second value is a valid C<SSL_SESSION>, the TLS handshake proceeds
+with PSK authentication. When the the second value is C<undef>, PSK is
+not used the TLS handshake proceeds with certificate authentication.
+
+Check openssl doc L<https://www.openssl.org/docs/manmaster/man3/SSL_CTX_set_psk_find_session_callback.html>
+
+
=back
@@ -10083,364 +10245,373 @@ helper_script/update-exported-constants.
=for start_constants
- AD_ACCESS_DENIED OP_CRYPTOPRO_TLSEXT_BUG
- AD_BAD_CERTIFICATE OP_DISABLE_TLSEXT_CA_NAMES
- AD_BAD_CERTIFICATE_HASH_VALUE OP_DONT_INSERT_EMPTY_FRAGMENTS
- AD_BAD_CERTIFICATE_STATUS_RESPONSE OP_ENABLE_KTLS
- AD_BAD_RECORD_MAC OP_ENABLE_MIDDLEBOX_COMPAT
- AD_CERTIFICATE_EXPIRED OP_EPHEMERAL_RSA
- AD_CERTIFICATE_REQUIRED OP_IGNORE_UNEXPECTED_EOF
- AD_CERTIFICATE_REVOKED OP_LEGACY_SERVER_CONNECT
- AD_CERTIFICATE_UNKNOWN OP_MICROSOFT_BIG_SSLV3_BUFFER
- AD_CERTIFICATE_UNOBTAINABLE OP_MICROSOFT_SESS_ID_BUG
- AD_CLOSE_NOTIFY OP_MSIE_SSLV2_RSA_PADDING
- AD_DECODE_ERROR OP_NETSCAPE_CA_DN_BUG
- AD_DECOMPRESSION_FAILURE OP_NETSCAPE_CHALLENGE_BUG
- AD_DECRYPTION_FAILED OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
- AD_DECRYPT_ERROR OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
- AD_EXPORT_RESTRICTION OP_NON_EXPORT_FIRST
- AD_HANDSHAKE_FAILURE OP_NO_ANTI_REPLAY
- AD_ILLEGAL_PARAMETER OP_NO_CLIENT_RENEGOTIATION
- AD_INAPPROPRIATE_FALLBACK OP_NO_COMPRESSION
- AD_INSUFFICIENT_SECURITY OP_NO_ENCRYPT_THEN_MAC
- AD_INTERNAL_ERROR OP_NO_EXTENDED_MASTER_SECRET
- AD_MISSING_EXTENSION OP_NO_QUERY_MTU
- AD_NO_APPLICATION_PROTOCOL OP_NO_RENEGOTIATION
- AD_NO_CERTIFICATE OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
- AD_NO_RENEGOTIATION OP_NO_SSL_MASK
- AD_PROTOCOL_VERSION OP_NO_SSLv2
- AD_RECORD_OVERFLOW OP_NO_SSLv3
- AD_UNEXPECTED_MESSAGE OP_NO_TICKET
- AD_UNKNOWN_CA OP_NO_TLSv1
- AD_UNKNOWN_PSK_IDENTITY OP_NO_TLSv1_1
- AD_UNRECOGNIZED_NAME OP_NO_TLSv1_2
- AD_UNSUPPORTED_CERTIFICATE OP_NO_TLSv1_3
- AD_UNSUPPORTED_EXTENSION OP_PKCS1_CHECK_1
- AD_USER_CANCELLED OP_PKCS1_CHECK_2
- ASN1_STRFLGS_ESC_CTRL OP_PRIORITIZE_CHACHA
- ASN1_STRFLGS_ESC_MSB OP_SAFARI_ECDHE_ECDSA_BUG
- ASN1_STRFLGS_ESC_QUOTE OP_SINGLE_DH_USE
- ASN1_STRFLGS_RFC2253 OP_SINGLE_ECDH_USE
- ASYNC_NO_JOBS OP_SSLEAY_080_CLIENT_DH_BUG
- ASYNC_PAUSED OP_SSLREF2_REUSE_CERT_TYPE_BUG
- CB_ACCEPT_EXIT OP_TLSEXT_PADDING
- CB_ACCEPT_LOOP OP_TLS_BLOCK_PADDING_BUG
- CB_ALERT OP_TLS_D5_BUG
- CB_CONNECT_EXIT OP_TLS_ROLLBACK_BUG
- CB_CONNECT_LOOP READING
- CB_EXIT RECEIVED_SHUTDOWN
- CB_HANDSHAKE_DONE RETRY_VERIFY
- CB_HANDSHAKE_START RSA_3
- CB_LOOP RSA_F4
- CB_READ R_BAD_AUTHENTICATION_TYPE
- CB_READ_ALERT R_BAD_CHECKSUM
- CB_WRITE R_BAD_MAC_DECODE
- CB_WRITE_ALERT R_BAD_RESPONSE_ARGUMENT
- CLIENT_HELLO_CB R_BAD_SSL_FILETYPE
- CLIENT_HELLO_ERROR R_BAD_SSL_SESSION_ID_LENGTH
- CLIENT_HELLO_RETRY R_BAD_STATE
- CLIENT_HELLO_SUCCESS R_BAD_WRITE_RETRY
- ERROR_NONE R_CHALLENGE_IS_DIFFERENT
- ERROR_SSL R_CIPHER_TABLE_SRC_ERROR
- ERROR_SYSCALL R_INVALID_CHALLENGE_LENGTH
- ERROR_WANT_ACCEPT R_NO_CERTIFICATE_SET
- ERROR_WANT_ASYNC R_NO_CERTIFICATE_SPECIFIED
- ERROR_WANT_ASYNC_JOB R_NO_CIPHER_LIST
- ERROR_WANT_CLIENT_HELLO_CB R_NO_CIPHER_MATCH
- ERROR_WANT_CONNECT R_NO_PRIVATEKEY
- ERROR_WANT_READ R_NO_PUBLICKEY
- ERROR_WANT_RETRY_VERIFY R_NULL_SSL_CTX
- ERROR_WANT_WRITE R_PEER_DID_NOT_RETURN_A_CERTIFICATE
- ERROR_WANT_X509_LOOKUP R_PEER_ERROR
- ERROR_ZERO_RETURN R_PEER_ERROR_CERTIFICATE
- EVP_PKS_DSA R_PEER_ERROR_NO_CIPHER
- EVP_PKS_EC R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
- EVP_PKS_RSA R_PUBLIC_KEY_ENCRYPT_ERROR
- EVP_PKT_ENC R_PUBLIC_KEY_IS_NOT_RSA
- EVP_PKT_EXCH R_READ_WRONG_PACKET_TYPE
- EVP_PKT_EXP R_SHORT_READ
- EVP_PKT_SIGN R_SSL_SESSION_ID_IS_DIFFERENT
- EVP_PK_DH R_UNABLE_TO_EXTRACT_PUBLIC_KEY
- EVP_PK_DSA R_UNKNOWN_REMOTE_ERROR_TYPE
- EVP_PK_EC R_UNKNOWN_STATE
- EVP_PK_RSA R_X509_LIB
- FILETYPE_ASN1 SENT_SHUTDOWN
- FILETYPE_PEM SESSION_ASN1_VERSION
- F_CLIENT_CERTIFICATE SESS_CACHE_BOTH
- F_CLIENT_HELLO SESS_CACHE_CLIENT
- F_CLIENT_MASTER_KEY SESS_CACHE_NO_AUTO_CLEAR
- F_D2I_SSL_SESSION SESS_CACHE_NO_INTERNAL
- F_GET_CLIENT_FINISHED SESS_CACHE_NO_INTERNAL_LOOKUP
- F_GET_CLIENT_HELLO SESS_CACHE_NO_INTERNAL_STORE
- F_GET_CLIENT_MASTER_KEY SESS_CACHE_OFF
- F_GET_SERVER_FINISHED SESS_CACHE_SERVER
- F_GET_SERVER_HELLO SESS_CACHE_UPDATE_TIME
- F_GET_SERVER_VERIFY SSL2_MT_CLIENT_CERTIFICATE
- F_I2D_SSL_SESSION SSL2_MT_CLIENT_FINISHED
- F_READ_N SSL2_MT_CLIENT_HELLO
- F_REQUEST_CERTIFICATE SSL2_MT_CLIENT_MASTER_KEY
- F_SERVER_HELLO SSL2_MT_ERROR
- F_SSL_CERT_NEW SSL2_MT_REQUEST_CERTIFICATE
- F_SSL_GET_NEW_SESSION SSL2_MT_SERVER_FINISHED
- F_SSL_NEW SSL2_MT_SERVER_HELLO
- F_SSL_READ SSL2_MT_SERVER_VERIFY
- F_SSL_RSA_PRIVATE_DECRYPT SSL2_VERSION
- F_SSL_RSA_PUBLIC_ENCRYPT SSL3_MT_CCS
- F_SSL_SESSION_NEW SSL3_MT_CERTIFICATE
- F_SSL_SESSION_PRINT_FP SSL3_MT_CERTIFICATE_REQUEST
- F_SSL_SET_FD SSL3_MT_CERTIFICATE_STATUS
- F_SSL_SET_RFD SSL3_MT_CERTIFICATE_URL
- F_SSL_SET_WFD SSL3_MT_CERTIFICATE_VERIFY
- F_SSL_USE_CERTIFICATE SSL3_MT_CHANGE_CIPHER_SPEC
- F_SSL_USE_CERTIFICATE_ASN1 SSL3_MT_CLIENT_HELLO
- F_SSL_USE_CERTIFICATE_FILE SSL3_MT_CLIENT_KEY_EXCHANGE
- F_SSL_USE_PRIVATEKEY SSL3_MT_ENCRYPTED_EXTENSIONS
- F_SSL_USE_PRIVATEKEY_ASN1 SSL3_MT_END_OF_EARLY_DATA
- F_SSL_USE_PRIVATEKEY_FILE SSL3_MT_FINISHED
- F_SSL_USE_RSAPRIVATEKEY SSL3_MT_HELLO_REQUEST
- F_SSL_USE_RSAPRIVATEKEY_ASN1 SSL3_MT_KEY_UPDATE
- F_SSL_USE_RSAPRIVATEKEY_FILE SSL3_MT_MESSAGE_HASH
- F_WRITE_PENDING SSL3_MT_NEWSESSION_TICKET
- GEN_DIRNAME SSL3_MT_NEXT_PROTO
- GEN_DNS SSL3_MT_SERVER_DONE
- GEN_EDIPARTY SSL3_MT_SERVER_HELLO
- GEN_EMAIL SSL3_MT_SERVER_KEY_EXCHANGE
- GEN_IPADD SSL3_MT_SUPPLEMENTAL_DATA
- GEN_OTHERNAME SSL3_RT_ALERT
- GEN_RID SSL3_RT_APPLICATION_DATA
- GEN_URI SSL3_RT_CHANGE_CIPHER_SPEC
- GEN_X400 SSL3_RT_HANDSHAKE
- LIBRESSL_VERSION_NUMBER SSL3_RT_HEADER
- MBSTRING_ASC SSL3_RT_INNER_CONTENT_TYPE
- MBSTRING_BMP SSL3_VERSION
- MBSTRING_FLAG SSLEAY_BUILT_ON
- MBSTRING_UNIV SSLEAY_CFLAGS
- MBSTRING_UTF8 SSLEAY_DIR
- MIN_RSA_MODULUS_LENGTH_IN_BYTES SSLEAY_PLATFORM
- MODE_ACCEPT_MOVING_WRITE_BUFFER SSLEAY_VERSION
- MODE_ASYNC ST_ACCEPT
- MODE_AUTO_RETRY ST_BEFORE
- MODE_ENABLE_PARTIAL_WRITE ST_CONNECT
- MODE_NO_AUTO_CHAIN ST_INIT
- MODE_RELEASE_BUFFERS ST_OK
- NID_OCSP_sign ST_READ_BODY
- NID_SMIMECapabilities ST_READ_HEADER
- NID_X500 TLS1_1_VERSION
- NID_X509 TLS1_2_VERSION
- NID_ad_OCSP TLS1_3_VERSION
- NID_ad_ca_issuers TLS1_VERSION
- NID_algorithm TLSEXT_STATUSTYPE_ocsp
- NID_authority_key_identifier TLSEXT_TYPE_application_layer_protocol_negotiation
- NID_basic_constraints TLSEXT_TYPE_cert_type
- NID_bf_cbc TLSEXT_TYPE_certificate_authorities
- NID_bf_cfb64 TLSEXT_TYPE_client_authz
- NID_bf_ecb TLSEXT_TYPE_client_cert_type
- NID_bf_ofb64 TLSEXT_TYPE_client_certificate_url
- NID_cast5_cbc TLSEXT_TYPE_compress_certificate
- NID_cast5_cfb64 TLSEXT_TYPE_cookie
- NID_cast5_ecb TLSEXT_TYPE_early_data
- NID_cast5_ofb64 TLSEXT_TYPE_ec_point_formats
- NID_certBag TLSEXT_TYPE_elliptic_curves
- NID_certificate_policies TLSEXT_TYPE_encrypt_then_mac
- NID_client_auth TLSEXT_TYPE_extended_master_secret
- NID_code_sign TLSEXT_TYPE_key_share
- NID_commonName TLSEXT_TYPE_max_fragment_length
- NID_countryName TLSEXT_TYPE_next_proto_neg
- NID_crlBag TLSEXT_TYPE_padding
- NID_crl_distribution_points TLSEXT_TYPE_post_handshake_auth
- NID_crl_number TLSEXT_TYPE_psk
- NID_crl_reason TLSEXT_TYPE_psk_kex_modes
- NID_delta_crl TLSEXT_TYPE_quic_transport_parameters
- NID_des_cbc TLSEXT_TYPE_renegotiate
- NID_des_cfb64 TLSEXT_TYPE_server_authz
- NID_des_ecb TLSEXT_TYPE_server_cert_type
- NID_des_ede TLSEXT_TYPE_server_name
- NID_des_ede3 TLSEXT_TYPE_session_ticket
- NID_des_ede3_cbc TLSEXT_TYPE_signature_algorithms
- NID_des_ede3_cfb64 TLSEXT_TYPE_signature_algorithms_cert
- NID_des_ede3_ofb64 TLSEXT_TYPE_signed_certificate_timestamp
- NID_des_ede_cbc TLSEXT_TYPE_srp
- NID_des_ede_cfb64 TLSEXT_TYPE_status_request
- NID_des_ede_ofb64 TLSEXT_TYPE_supported_groups
- NID_des_ofb64 TLSEXT_TYPE_supported_versions
- NID_description TLSEXT_TYPE_truncated_hmac
- NID_desx_cbc TLSEXT_TYPE_trusted_ca_keys
- NID_dhKeyAgreement TLSEXT_TYPE_use_srtp
- NID_dnQualifier TLSEXT_TYPE_user_mapping
- NID_dsa VERIFY_CLIENT_ONCE
- NID_dsaWithSHA VERIFY_FAIL_IF_NO_PEER_CERT
- NID_dsaWithSHA1 VERIFY_NONE
- NID_dsaWithSHA1_2 VERIFY_PEER
- NID_dsa_2 VERIFY_POST_HANDSHAKE
- NID_email_protect V_OCSP_CERTSTATUS_GOOD
- NID_ext_key_usage V_OCSP_CERTSTATUS_REVOKED
- NID_ext_req V_OCSP_CERTSTATUS_UNKNOWN
- NID_friendlyName WRITING
- NID_givenName X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
- NID_hmacWithSHA1 X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
- NID_id_ad X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
- NID_id_ce X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
- NID_id_kp X509_CHECK_FLAG_NO_WILDCARDS
- NID_id_pbkdf2 X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
- NID_id_pe X509_FILETYPE_ASN1
- NID_id_pkix X509_FILETYPE_DEFAULT
- NID_id_qt_cps X509_FILETYPE_PEM
- NID_id_qt_unotice X509_LOOKUP
- NID_idea_cbc X509_PURPOSE_ANY
- NID_idea_cfb64 X509_PURPOSE_CRL_SIGN
- NID_idea_ecb X509_PURPOSE_NS_SSL_SERVER
- NID_idea_ofb64 X509_PURPOSE_OCSP_HELPER
- NID_info_access X509_PURPOSE_SMIME_ENCRYPT
- NID_initials X509_PURPOSE_SMIME_SIGN
- NID_invalidity_date X509_PURPOSE_SSL_CLIENT
- NID_issuer_alt_name X509_PURPOSE_SSL_SERVER
- NID_keyBag X509_PURPOSE_TIMESTAMP_SIGN
- NID_key_usage X509_TRUST_COMPAT
- NID_localKeyID X509_TRUST_DEFAULT
- NID_localityName X509_TRUST_EMAIL
- NID_md2 X509_TRUST_OBJECT_SIGN
- NID_md2WithRSAEncryption X509_TRUST_OCSP_REQUEST
- NID_md5 X509_TRUST_OCSP_SIGN
- NID_md5WithRSA X509_TRUST_SSL_CLIENT
- NID_md5WithRSAEncryption X509_TRUST_SSL_SERVER
- NID_md5_sha1 X509_TRUST_TSA
- NID_mdc2 X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
- NID_mdc2WithRSA X509_V_ERR_AKID_SKID_MISMATCH
- NID_ms_code_com X509_V_ERR_APPLICATION_VERIFICATION
- NID_ms_code_ind X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL
- NID_ms_ctl_sign X509_V_ERR_CA_BCONS_NOT_CRITICAL
- NID_ms_efs X509_V_ERR_CA_CERT_MISSING_KEY_USAGE
- NID_ms_ext_req X509_V_ERR_CA_KEY_TOO_SMALL
- NID_ms_sgc X509_V_ERR_CA_MD_TOO_WEAK
- NID_name X509_V_ERR_CERT_CHAIN_TOO_LONG
- NID_netscape X509_V_ERR_CERT_HAS_EXPIRED
- NID_netscape_base_url X509_V_ERR_CERT_NOT_YET_VALID
- NID_netscape_ca_policy_url X509_V_ERR_CERT_REJECTED
- NID_netscape_ca_revocation_url X509_V_ERR_CERT_REVOKED
- NID_netscape_cert_extension X509_V_ERR_CERT_SIGNATURE_FAILURE
- NID_netscape_cert_sequence X509_V_ERR_CERT_UNTRUSTED
- NID_netscape_cert_type X509_V_ERR_CRL_HAS_EXPIRED
- NID_netscape_comment X509_V_ERR_CRL_NOT_YET_VALID
- NID_netscape_data_type X509_V_ERR_CRL_PATH_VALIDATION_ERROR
- NID_netscape_renewal_url X509_V_ERR_CRL_SIGNATURE_FAILURE
- NID_netscape_revocation_url X509_V_ERR_DANE_NO_MATCH
- NID_netscape_ssl_server_name X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
- NID_ns_sgc X509_V_ERR_DIFFERENT_CRL_SCOPE
- NID_organizationName X509_V_ERR_EC_KEY_EXPLICIT_PARAMS
- NID_organizationalUnitName X509_V_ERR_EE_KEY_TOO_SMALL
- NID_pbeWithMD2AndDES_CBC X509_V_ERR_EMAIL_MISMATCH
- NID_pbeWithMD2AndRC2_CBC X509_V_ERR_EMPTY_SUBJECT_ALT_NAME
- NID_pbeWithMD5AndCast5_CBC X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL
- NID_pbeWithMD5AndDES_CBC X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
- NID_pbeWithMD5AndRC2_CBC X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
- NID_pbeWithSHA1AndDES_CBC X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
- NID_pbeWithSHA1AndRC2_CBC X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
- NID_pbe_WithSHA1And128BitRC2_CBC X509_V_ERR_EXCLUDED_VIOLATION
- NID_pbe_WithSHA1And128BitRC4 X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3
- NID_pbe_WithSHA1And2_Key_TripleDES_CBC X509_V_ERR_HOSTNAME_MISMATCH
- NID_pbe_WithSHA1And3_Key_TripleDES_CBC X509_V_ERR_INVALID_CA
- NID_pbe_WithSHA1And40BitRC2_CBC X509_V_ERR_INVALID_CALL
- NID_pbe_WithSHA1And40BitRC4 X509_V_ERR_INVALID_EXTENSION
- NID_pbes2 X509_V_ERR_INVALID_NON_CA
- NID_pbmac1 X509_V_ERR_INVALID_POLICY_EXTENSION
- NID_pkcs X509_V_ERR_INVALID_PURPOSE
- NID_pkcs3 X509_V_ERR_IP_ADDRESS_MISMATCH
- NID_pkcs7 X509_V_ERR_ISSUER_NAME_EMPTY
- NID_pkcs7_data X509_V_ERR_KEYUSAGE_NO_CERTSIGN
- NID_pkcs7_digest X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
- NID_pkcs7_encrypted X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
- NID_pkcs7_enveloped X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA
- NID_pkcs7_signed X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER
- NID_pkcs7_signedAndEnveloped X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER
- NID_pkcs8ShroudedKeyBag X509_V_ERR_NO_EXPLICIT_POLICY
- NID_pkcs9 X509_V_ERR_NO_ISSUER_PUBLIC_KEY
- NID_pkcs9_challengePassword X509_V_ERR_NO_VALID_SCTS
- NID_pkcs9_contentType X509_V_ERR_OCSP_CERT_UNKNOWN
- NID_pkcs9_countersignature X509_V_ERR_OCSP_VERIFY_FAILED
- NID_pkcs9_emailAddress X509_V_ERR_OCSP_VERIFY_NEEDED
- NID_pkcs9_extCertAttributes X509_V_ERR_OUT_OF_MEM
- NID_pkcs9_messageDigest X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA
- NID_pkcs9_signingTime X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN
- NID_pkcs9_unstructuredAddress X509_V_ERR_PATH_LENGTH_EXCEEDED
- NID_pkcs9_unstructuredName X509_V_ERR_PATH_LOOP
- NID_private_key_usage_period X509_V_ERR_PERMITTED_VIOLATION
- NID_rc2_40_cbc X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
- NID_rc2_64_cbc X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
- NID_rc2_cbc X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION
- NID_rc2_cfb64 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
- NID_rc2_ecb X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY
- NID_rc2_ofb64 X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH
- NID_rc4 X509_V_ERR_STORE_LOOKUP
- NID_rc4_40 X509_V_ERR_SUBJECT_ISSUER_MISMATCH
- NID_rc5_cbc X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL
- NID_rc5_cfb64 X509_V_ERR_SUBJECT_NAME_EMPTY
- NID_rc5_ecb X509_V_ERR_SUBTREE_MINMAX
- NID_rc5_ofb64 X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256
- NID_ripemd160 X509_V_ERR_SUITE_B_INVALID_ALGORITHM
- NID_ripemd160WithRSA X509_V_ERR_SUITE_B_INVALID_CURVE
- NID_rle_compression X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
- NID_rsa X509_V_ERR_SUITE_B_INVALID_VERSION
- NID_rsaEncryption X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED
- NID_rsadsi X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
- NID_safeContentsBag X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
- NID_sdsiCertificate X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
- NID_secretBag X509_V_ERR_UNABLE_TO_GET_CRL
- NID_serialNumber X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
- NID_server_auth X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
- NID_sha X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
- NID_sha1 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
- NID_sha1WithRSA X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
- NID_sha1WithRSAEncryption X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
- NID_shaWithRSAEncryption X509_V_ERR_UNNESTED_RESOURCE
- NID_stateOrProvinceName X509_V_ERR_UNSPECIFIED
- NID_subject_alt_name X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
- NID_subject_key_identifier X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
- NID_surname X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
- NID_sxnet X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
- NID_time_stamp X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM
- NID_title X509_V_FLAG_ALLOW_PROXY_CERTS
- NID_undef X509_V_FLAG_CB_ISSUER_CHECK
- NID_uniqueIdentifier X509_V_FLAG_CHECK_SS_SIGNATURE
- NID_x509Certificate X509_V_FLAG_CRL_CHECK
- NID_x509Crl X509_V_FLAG_CRL_CHECK_ALL
- NID_zlib_compression X509_V_FLAG_EXPLICIT_POLICY
- NOTHING X509_V_FLAG_EXTENDED_CRL_SUPPORT
- OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_FLAG_IGNORE_CRITICAL
- OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_FLAG_INHIBIT_ANY
- OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_FLAG_INHIBIT_MAP
- OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_FLAG_LEGACY_VERIFY
- OCSP_RESPONSE_STATUS_TRYLATER X509_V_FLAG_NOTIFY_POLICY
- OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_FLAG_NO_ALT_CHAINS
- OPENSSL_BUILT_ON X509_V_FLAG_NO_CHECK_TIME
- OPENSSL_CFLAGS X509_V_FLAG_PARTIAL_CHAIN
- OPENSSL_CPU_INFO X509_V_FLAG_POLICY_CHECK
- OPENSSL_DIR X509_V_FLAG_POLICY_MASK
- OPENSSL_ENGINES_DIR X509_V_FLAG_SUITEB_128_LOS
- OPENSSL_FULL_VERSION_STRING X509_V_FLAG_SUITEB_128_LOS_ONLY
- OPENSSL_INFO_CONFIG_DIR X509_V_FLAG_SUITEB_192_LOS
- OPENSSL_INFO_CPU_SETTINGS X509_V_FLAG_TRUSTED_FIRST
- OPENSSL_INFO_DIR_FILENAME_SEPARATOR X509_V_FLAG_USE_CHECK_TIME
- OPENSSL_INFO_DSO_EXTENSION X509_V_FLAG_USE_DELTAS
- OPENSSL_INFO_ENGINES_DIR X509_V_FLAG_X509_STRICT
- OPENSSL_INFO_LIST_SEPARATOR X509_V_OK
- OPENSSL_INFO_MODULES_DIR XN_FLAG_COMPAT
- OPENSSL_INFO_SEED_SOURCE XN_FLAG_DN_REV
- OPENSSL_MODULES_DIR XN_FLAG_DUMP_UNKNOWN_FIELDS
- OPENSSL_PLATFORM XN_FLAG_FN_ALIGN
- OPENSSL_VERSION XN_FLAG_FN_LN
- OPENSSL_VERSION_MAJOR XN_FLAG_FN_MASK
- OPENSSL_VERSION_MINOR XN_FLAG_FN_NONE
- OPENSSL_VERSION_NUMBER XN_FLAG_FN_OID
- OPENSSL_VERSION_PATCH XN_FLAG_FN_SN
- OPENSSL_VERSION_STRING XN_FLAG_MULTILINE
- OP_ALL XN_FLAG_ONELINE
- OP_ALLOW_CLIENT_RENEGOTIATION XN_FLAG_RFC2253
- OP_ALLOW_NO_DHE_KEX XN_FLAG_SEP_COMMA_PLUS
- OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION XN_FLAG_SEP_CPLUS_SPC
- OP_CIPHER_SERVER_PREFERENCE XN_FLAG_SEP_MASK
- OP_CISCO_ANYCONNECT XN_FLAG_SEP_MULTILINE
- OP_CLEANSE_PLAINTEXT XN_FLAG_SEP_SPLUS_SPC
- OP_COOKIE_EXCHANGE XN_FLAG_SPC_EQ
+ AD_ACCESS_DENIED OPENSSL_VERSION_STRING
+ AD_BAD_CERTIFICATE OP_ALL
+ AD_BAD_CERTIFICATE_HASH_VALUE OP_ALLOW_CLIENT_RENEGOTIATION
+ AD_BAD_CERTIFICATE_STATUS_RESPONSE OP_ALLOW_NO_DHE_KEX
+ AD_BAD_RECORD_MAC OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
+ AD_CERTIFICATE_EXPIRED OP_CIPHER_SERVER_PREFERENCE
+ AD_CERTIFICATE_REQUIRED OP_CISCO_ANYCONNECT
+ AD_CERTIFICATE_REVOKED OP_CLEANSE_PLAINTEXT
+ AD_CERTIFICATE_UNKNOWN OP_COOKIE_EXCHANGE
+ AD_CERTIFICATE_UNOBTAINABLE OP_CRYPTOPRO_TLSEXT_BUG
+ AD_CLOSE_NOTIFY OP_DISABLE_TLSEXT_CA_NAMES
+ AD_DECODE_ERROR OP_DONT_INSERT_EMPTY_FRAGMENTS
+ AD_DECOMPRESSION_FAILURE OP_ENABLE_KTLS
+ AD_DECRYPTION_FAILED OP_ENABLE_MIDDLEBOX_COMPAT
+ AD_DECRYPT_ERROR OP_EPHEMERAL_RSA
+ AD_EXPORT_RESTRICTION OP_IGNORE_UNEXPECTED_EOF
+ AD_HANDSHAKE_FAILURE OP_LEGACY_SERVER_CONNECT
+ AD_ILLEGAL_PARAMETER OP_MICROSOFT_BIG_SSLV3_BUFFER
+ AD_INAPPROPRIATE_FALLBACK OP_MICROSOFT_SESS_ID_BUG
+ AD_INSUFFICIENT_SECURITY OP_MSIE_SSLV2_RSA_PADDING
+ AD_INTERNAL_ERROR OP_NETSCAPE_CA_DN_BUG
+ AD_MISSING_EXTENSION OP_NETSCAPE_CHALLENGE_BUG
+ AD_NO_APPLICATION_PROTOCOL OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG
+ AD_NO_CERTIFICATE OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG
+ AD_NO_RENEGOTIATION OP_NON_EXPORT_FIRST
+ AD_PROTOCOL_VERSION OP_NO_ANTI_REPLAY
+ AD_RECORD_OVERFLOW OP_NO_CLIENT_RENEGOTIATION
+ AD_UNEXPECTED_MESSAGE OP_NO_COMPRESSION
+ AD_UNKNOWN_CA OP_NO_ENCRYPT_THEN_MAC
+ AD_UNKNOWN_PSK_IDENTITY OP_NO_EXTENDED_MASTER_SECRET
+ AD_UNRECOGNIZED_NAME OP_NO_QUERY_MTU
+ AD_UNSUPPORTED_CERTIFICATE OP_NO_RENEGOTIATION
+ AD_UNSUPPORTED_EXTENSION OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
+ AD_USER_CANCELLED OP_NO_SSL_MASK
+ ASN1_STRFLGS_ESC_CTRL OP_NO_SSLv2
+ ASN1_STRFLGS_ESC_MSB OP_NO_SSLv3
+ ASN1_STRFLGS_ESC_QUOTE OP_NO_TICKET
+ ASN1_STRFLGS_RFC2253 OP_NO_TLSv1
+ ASYNC_NO_JOBS OP_NO_TLSv1_1
+ ASYNC_PAUSED OP_NO_TLSv1_2
+ CB_ACCEPT_EXIT OP_NO_TLSv1_3
+ CB_ACCEPT_LOOP OP_PKCS1_CHECK_1
+ CB_ALERT OP_PKCS1_CHECK_2
+ CB_CONNECT_EXIT OP_PRIORITIZE_CHACHA
+ CB_CONNECT_LOOP OP_SAFARI_ECDHE_ECDSA_BUG
+ CB_EXIT OP_SINGLE_DH_USE
+ CB_HANDSHAKE_DONE OP_SINGLE_ECDH_USE
+ CB_HANDSHAKE_START OP_SSLEAY_080_CLIENT_DH_BUG
+ CB_LOOP OP_SSLREF2_REUSE_CERT_TYPE_BUG
+ CB_READ OP_TLSEXT_PADDING
+ CB_READ_ALERT OP_TLS_BLOCK_PADDING_BUG
+ CB_WRITE OP_TLS_D5_BUG
+ CB_WRITE_ALERT OP_TLS_ROLLBACK_BUG
+ CLIENT_HELLO_CB READING
+ CLIENT_HELLO_ERROR RECEIVED_SHUTDOWN
+ CLIENT_HELLO_RETRY RETRY_VERIFY
+ CLIENT_HELLO_SUCCESS RSA_3
+ ERROR_NONE RSA_F4
+ ERROR_SSL R_BAD_AUTHENTICATION_TYPE
+ ERROR_SYSCALL R_BAD_CHECKSUM
+ ERROR_WANT_ACCEPT R_BAD_MAC_DECODE
+ ERROR_WANT_ASYNC R_BAD_RESPONSE_ARGUMENT
+ ERROR_WANT_ASYNC_JOB R_BAD_SSL_FILETYPE
+ ERROR_WANT_CLIENT_HELLO_CB R_BAD_SSL_SESSION_ID_LENGTH
+ ERROR_WANT_CONNECT R_BAD_STATE
+ ERROR_WANT_READ R_BAD_WRITE_RETRY
+ ERROR_WANT_RETRY_VERIFY R_CHALLENGE_IS_DIFFERENT
+ ERROR_WANT_WRITE R_CIPHER_TABLE_SRC_ERROR
+ ERROR_WANT_X509_LOOKUP R_INVALID_CHALLENGE_LENGTH
+ ERROR_ZERO_RETURN R_NO_CERTIFICATE_SET
+ EVP_PKS_DSA R_NO_CERTIFICATE_SPECIFIED
+ EVP_PKS_EC R_NO_CIPHER_LIST
+ EVP_PKS_RSA R_NO_CIPHER_MATCH
+ EVP_PKT_ENC R_NO_PRIVATEKEY
+ EVP_PKT_EXCH R_NO_PUBLICKEY
+ EVP_PKT_EXP R_NULL_SSL_CTX
+ EVP_PKT_SIGN R_PEER_DID_NOT_RETURN_A_CERTIFICATE
+ EVP_PK_DH R_PEER_ERROR
+ EVP_PK_DSA R_PEER_ERROR_CERTIFICATE
+ EVP_PK_EC R_PEER_ERROR_NO_CIPHER
+ EVP_PK_RSA R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE
+ FILETYPE_ASN1 R_PUBLIC_KEY_ENCRYPT_ERROR
+ FILETYPE_PEM R_PUBLIC_KEY_IS_NOT_RSA
+ F_CLIENT_CERTIFICATE R_READ_WRONG_PACKET_TYPE
+ F_CLIENT_HELLO R_SHORT_READ
+ F_CLIENT_MASTER_KEY R_SSL_SESSION_ID_IS_DIFFERENT
+ F_D2I_SSL_SESSION R_UNABLE_TO_EXTRACT_PUBLIC_KEY
+ F_GET_CLIENT_FINISHED R_UNKNOWN_REMOTE_ERROR_TYPE
+ F_GET_CLIENT_HELLO R_UNKNOWN_STATE
+ F_GET_CLIENT_MASTER_KEY R_X509_LIB
+ F_GET_SERVER_FINISHED SENT_SHUTDOWN
+ F_GET_SERVER_HELLO SESSION_ASN1_VERSION
+ F_GET_SERVER_VERIFY SESS_CACHE_BOTH
+ F_I2D_SSL_SESSION SESS_CACHE_CLIENT
+ F_READ_N SESS_CACHE_NO_AUTO_CLEAR
+ F_REQUEST_CERTIFICATE SESS_CACHE_NO_INTERNAL
+ F_SERVER_HELLO SESS_CACHE_NO_INTERNAL_LOOKUP
+ F_SSL_CERT_NEW SESS_CACHE_NO_INTERNAL_STORE
+ F_SSL_GET_NEW_SESSION SESS_CACHE_OFF
+ F_SSL_NEW SESS_CACHE_SERVER
+ F_SSL_READ SESS_CACHE_UPDATE_TIME
+ F_SSL_RSA_PRIVATE_DECRYPT SSL2_MT_CLIENT_CERTIFICATE
+ F_SSL_RSA_PUBLIC_ENCRYPT SSL2_MT_CLIENT_FINISHED
+ F_SSL_SESSION_NEW SSL2_MT_CLIENT_HELLO
+ F_SSL_SESSION_PRINT_FP SSL2_MT_CLIENT_MASTER_KEY
+ F_SSL_SET_FD SSL2_MT_ERROR
+ F_SSL_SET_RFD SSL2_MT_REQUEST_CERTIFICATE
+ F_SSL_SET_WFD SSL2_MT_SERVER_FINISHED
+ F_SSL_USE_CERTIFICATE SSL2_MT_SERVER_HELLO
+ F_SSL_USE_CERTIFICATE_ASN1 SSL2_MT_SERVER_VERIFY
+ F_SSL_USE_CERTIFICATE_FILE SSL2_VERSION
+ F_SSL_USE_PRIVATEKEY SSL3_MT_CCS
+ F_SSL_USE_PRIVATEKEY_ASN1 SSL3_MT_CERTIFICATE
+ F_SSL_USE_PRIVATEKEY_FILE SSL3_MT_CERTIFICATE_REQUEST
+ F_SSL_USE_RSAPRIVATEKEY SSL3_MT_CERTIFICATE_STATUS
+ F_SSL_USE_RSAPRIVATEKEY_ASN1 SSL3_MT_CERTIFICATE_URL
+ F_SSL_USE_RSAPRIVATEKEY_FILE SSL3_MT_CERTIFICATE_VERIFY
+ F_WRITE_PENDING SSL3_MT_CHANGE_CIPHER_SPEC
+ GEN_DIRNAME SSL3_MT_CLIENT_HELLO
+ GEN_DNS SSL3_MT_CLIENT_KEY_EXCHANGE
+ GEN_EDIPARTY SSL3_MT_ENCRYPTED_EXTENSIONS
+ GEN_EMAIL SSL3_MT_END_OF_EARLY_DATA
+ GEN_IPADD SSL3_MT_FINISHED
+ GEN_OTHERNAME SSL3_MT_HELLO_REQUEST
+ GEN_RID SSL3_MT_KEY_UPDATE
+ GEN_URI SSL3_MT_MESSAGE_HASH
+ GEN_X400 SSL3_MT_NEWSESSION_TICKET
+ LIBRESSL_VERSION_NUMBER SSL3_MT_NEXT_PROTO
+ MBSTRING_ASC SSL3_MT_SERVER_DONE
+ MBSTRING_BMP SSL3_MT_SERVER_HELLO
+ MBSTRING_FLAG SSL3_MT_SERVER_KEY_EXCHANGE
+ MBSTRING_UNIV SSL3_MT_SUPPLEMENTAL_DATA
+ MBSTRING_UTF8 SSL3_RT_ALERT
+ MIN_RSA_MODULUS_LENGTH_IN_BYTES SSL3_RT_APPLICATION_DATA
+ MODE_ACCEPT_MOVING_WRITE_BUFFER SSL3_RT_CHANGE_CIPHER_SPEC
+ MODE_ASYNC SSL3_RT_HANDSHAKE
+ MODE_AUTO_RETRY SSL3_RT_HEADER
+ MODE_ENABLE_PARTIAL_WRITE SSL3_RT_INNER_CONTENT_TYPE
+ MODE_NO_AUTO_CHAIN SSL3_VERSION
+ MODE_RELEASE_BUFFERS SSLEAY_BUILT_ON
+ NID_OCSP_sign SSLEAY_CFLAGS
+ NID_SMIMECapabilities SSLEAY_DIR
+ NID_X500 SSLEAY_PLATFORM
+ NID_X509 SSLEAY_VERSION
+ NID_ad_OCSP ST_ACCEPT
+ NID_ad_ca_issuers ST_BEFORE
+ NID_algorithm ST_CONNECT
+ NID_authority_key_identifier ST_INIT
+ NID_basic_constraints ST_OK
+ NID_bf_cbc ST_READ_BODY
+ NID_bf_cfb64 ST_READ_HEADER
+ NID_bf_ecb TLS1_1_VERSION
+ NID_bf_ofb64 TLS1_2_VERSION
+ NID_cast5_cbc TLS1_3_VERSION
+ NID_cast5_cfb64 TLS1_VERSION
+ NID_cast5_ecb TLSEXT_STATUSTYPE_ocsp
+ NID_cast5_ofb64 TLSEXT_TYPE_application_layer_protocol_negotiation
+ NID_certBag TLSEXT_TYPE_cert_type
+ NID_certificate_policies TLSEXT_TYPE_certificate_authorities
+ NID_client_auth TLSEXT_TYPE_client_authz
+ NID_code_sign TLSEXT_TYPE_client_cert_type
+ NID_commonName TLSEXT_TYPE_client_certificate_url
+ NID_countryName TLSEXT_TYPE_compress_certificate
+ NID_crlBag TLSEXT_TYPE_cookie
+ NID_crl_distribution_points TLSEXT_TYPE_early_data
+ NID_crl_number TLSEXT_TYPE_ec_point_formats
+ NID_crl_reason TLSEXT_TYPE_elliptic_curves
+ NID_delta_crl TLSEXT_TYPE_encrypt_then_mac
+ NID_des_cbc TLSEXT_TYPE_extended_master_secret
+ NID_des_cfb64 TLSEXT_TYPE_key_share
+ NID_des_ecb TLSEXT_TYPE_max_fragment_length
+ NID_des_ede TLSEXT_TYPE_next_proto_neg
+ NID_des_ede3 TLSEXT_TYPE_padding
+ NID_des_ede3_cbc TLSEXT_TYPE_post_handshake_auth
+ NID_des_ede3_cfb64 TLSEXT_TYPE_psk
+ NID_des_ede3_ofb64 TLSEXT_TYPE_psk_kex_modes
+ NID_des_ede_cbc TLSEXT_TYPE_quic_transport_parameters
+ NID_des_ede_cfb64 TLSEXT_TYPE_renegotiate
+ NID_des_ede_ofb64 TLSEXT_TYPE_server_authz
+ NID_des_ofb64 TLSEXT_TYPE_server_cert_type
+ NID_description TLSEXT_TYPE_server_name
+ NID_desx_cbc TLSEXT_TYPE_session_ticket
+ NID_dhKeyAgreement TLSEXT_TYPE_signature_algorithms
+ NID_dnQualifier TLSEXT_TYPE_signature_algorithms_cert
+ NID_dsa TLSEXT_TYPE_signed_certificate_timestamp
+ NID_dsaWithSHA TLSEXT_TYPE_srp
+ NID_dsaWithSHA1 TLSEXT_TYPE_status_request
+ NID_dsaWithSHA1_2 TLSEXT_TYPE_supported_groups
+ NID_dsa_2 TLSEXT_TYPE_supported_versions
+ NID_email_protect TLSEXT_TYPE_truncated_hmac
+ NID_ext_key_usage TLSEXT_TYPE_trusted_ca_keys
+ NID_ext_req TLSEXT_TYPE_use_srtp
+ NID_friendlyName TLSEXT_TYPE_user_mapping
+ NID_givenName VERIFY_CLIENT_ONCE
+ NID_hmacWithSHA1 VERIFY_FAIL_IF_NO_PEER_CERT
+ NID_id_ad VERIFY_NONE
+ NID_id_ce VERIFY_PEER
+ NID_id_kp VERIFY_POST_HANDSHAKE
+ NID_id_pbkdf2 V_OCSP_CERTSTATUS_GOOD
+ NID_id_pe V_OCSP_CERTSTATUS_REVOKED
+ NID_id_pkix V_OCSP_CERTSTATUS_UNKNOWN
+ NID_id_qt_cps WRITING
+ NID_id_qt_unotice X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT
+ NID_idea_cbc X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS
+ NID_idea_cfb64 X509_CHECK_FLAG_NEVER_CHECK_SUBJECT
+ NID_idea_ecb X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS
+ NID_idea_ofb64 X509_CHECK_FLAG_NO_WILDCARDS
+ NID_info_access X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS
+ NID_initials X509_FILETYPE_ASN1
+ NID_invalidity_date X509_FILETYPE_DEFAULT
+ NID_issuer_alt_name X509_FILETYPE_PEM
+ NID_keyBag X509_LOOKUP
+ NID_key_usage X509_PURPOSE_ANY
+ NID_localKeyID X509_PURPOSE_CRL_SIGN
+ NID_localityName X509_PURPOSE_NS_SSL_SERVER
+ NID_md2 X509_PURPOSE_OCSP_HELPER
+ NID_md2WithRSAEncryption X509_PURPOSE_SMIME_ENCRYPT
+ NID_md5 X509_PURPOSE_SMIME_SIGN
+ NID_md5WithRSA X509_PURPOSE_SSL_CLIENT
+ NID_md5WithRSAEncryption X509_PURPOSE_SSL_SERVER
+ NID_md5_sha1 X509_PURPOSE_TIMESTAMP_SIGN
+ NID_mdc2 X509_TRUST_COMPAT
+ NID_mdc2WithRSA X509_TRUST_DEFAULT
+ NID_ms_code_com X509_TRUST_EMAIL
+ NID_ms_code_ind X509_TRUST_OBJECT_SIGN
+ NID_ms_ctl_sign X509_TRUST_OCSP_REQUEST
+ NID_ms_efs X509_TRUST_OCSP_SIGN
+ NID_ms_ext_req X509_TRUST_SSL_CLIENT
+ NID_ms_sgc X509_TRUST_SSL_SERVER
+ NID_name X509_TRUST_TSA
+ NID_netscape X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH
+ NID_netscape_base_url X509_V_ERR_AKID_SKID_MISMATCH
+ NID_netscape_ca_policy_url X509_V_ERR_APPLICATION_VERIFICATION
+ NID_netscape_ca_revocation_url X509_V_ERR_AUTHORITY_KEY_IDENTIFIER_CRITICAL
+ NID_netscape_cert_extension X509_V_ERR_CA_BCONS_NOT_CRITICAL
+ NID_netscape_cert_sequence X509_V_ERR_CA_CERT_MISSING_KEY_USAGE
+ NID_netscape_cert_type X509_V_ERR_CA_KEY_TOO_SMALL
+ NID_netscape_comment X509_V_ERR_CA_MD_TOO_WEAK
+ NID_netscape_data_type X509_V_ERR_CERT_CHAIN_TOO_LONG
+ NID_netscape_renewal_url X509_V_ERR_CERT_HAS_EXPIRED
+ NID_netscape_revocation_url X509_V_ERR_CERT_NOT_YET_VALID
+ NID_netscape_ssl_server_name X509_V_ERR_CERT_REJECTED
+ NID_ns_sgc X509_V_ERR_CERT_REVOKED
+ NID_organizationName X509_V_ERR_CERT_SIGNATURE_FAILURE
+ NID_organizationalUnitName X509_V_ERR_CERT_UNTRUSTED
+ NID_pbeWithMD2AndDES_CBC X509_V_ERR_CRL_HAS_EXPIRED
+ NID_pbeWithMD2AndRC2_CBC X509_V_ERR_CRL_NOT_YET_VALID
+ NID_pbeWithMD5AndCast5_CBC X509_V_ERR_CRL_PATH_VALIDATION_ERROR
+ NID_pbeWithMD5AndDES_CBC X509_V_ERR_CRL_SIGNATURE_FAILURE
+ NID_pbeWithMD5AndRC2_CBC X509_V_ERR_DANE_NO_MATCH
+ NID_pbeWithSHA1AndDES_CBC X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT
+ NID_pbeWithSHA1AndRC2_CBC X509_V_ERR_DIFFERENT_CRL_SCOPE
+ NID_pbe_WithSHA1And128BitRC2_CBC X509_V_ERR_EC_KEY_EXPLICIT_PARAMS
+ NID_pbe_WithSHA1And128BitRC4 X509_V_ERR_EE_KEY_TOO_SMALL
+ NID_pbe_WithSHA1And2_Key_TripleDES_CBC X509_V_ERR_EMAIL_MISMATCH
+ NID_pbe_WithSHA1And3_Key_TripleDES_CBC X509_V_ERR_EMPTY_SUBJECT_ALT_NAME
+ NID_pbe_WithSHA1And40BitRC2_CBC X509_V_ERR_EMPTY_SUBJECT_SAN_NOT_CRITICAL
+ NID_pbe_WithSHA1And40BitRC4 X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD
+ NID_pbes2 X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD
+ NID_pbmac1 X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD
+ NID_pkcs X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD
+ NID_pkcs3 X509_V_ERR_EXCLUDED_VIOLATION
+ NID_pkcs7 X509_V_ERR_EXTENSIONS_REQUIRE_VERSION_3
+ NID_pkcs7_data X509_V_ERR_HOSTNAME_MISMATCH
+ NID_pkcs7_digest X509_V_ERR_INVALID_CA
+ NID_pkcs7_encrypted X509_V_ERR_INVALID_CALL
+ NID_pkcs7_enveloped X509_V_ERR_INVALID_EXTENSION
+ NID_pkcs7_signed X509_V_ERR_INVALID_NON_CA
+ NID_pkcs7_signedAndEnveloped X509_V_ERR_INVALID_POLICY_EXTENSION
+ NID_pkcs8ShroudedKeyBag X509_V_ERR_INVALID_PURPOSE
+ NID_pkcs9 X509_V_ERR_IP_ADDRESS_MISMATCH
+ NID_pkcs9_challengePassword X509_V_ERR_ISSUER_NAME_EMPTY
+ NID_pkcs9_contentType X509_V_ERR_KEYUSAGE_NO_CERTSIGN
+ NID_pkcs9_countersignature X509_V_ERR_KEYUSAGE_NO_CRL_SIGN
+ NID_pkcs9_emailAddress X509_V_ERR_KEYUSAGE_NO_DIGITAL_SIGNATURE
+ NID_pkcs9_extCertAttributes X509_V_ERR_KU_KEY_CERT_SIGN_INVALID_FOR_NON_CA
+ NID_pkcs9_messageDigest X509_V_ERR_MISSING_AUTHORITY_KEY_IDENTIFIER
+ NID_pkcs9_signingTime X509_V_ERR_MISSING_SUBJECT_KEY_IDENTIFIER
+ NID_pkcs9_unstructuredAddress X509_V_ERR_NO_EXPLICIT_POLICY
+ NID_pkcs9_unstructuredName X509_V_ERR_NO_ISSUER_PUBLIC_KEY
+ NID_private_key_usage_period X509_V_ERR_NO_VALID_SCTS
+ NID_rc2_40_cbc X509_V_ERR_OCSP_CERT_UNKNOWN
+ NID_rc2_64_cbc X509_V_ERR_OCSP_VERIFY_FAILED
+ NID_rc2_cbc X509_V_ERR_OCSP_VERIFY_NEEDED
+ NID_rc2_cfb64 X509_V_ERR_OUT_OF_MEM
+ NID_rc2_ecb X509_V_ERR_PATHLEN_INVALID_FOR_NON_CA
+ NID_rc2_ofb64 X509_V_ERR_PATHLEN_WITHOUT_KU_KEY_CERT_SIGN
+ NID_rc4 X509_V_ERR_PATH_LENGTH_EXCEEDED
+ NID_rc4_40 X509_V_ERR_PATH_LOOP
+ NID_rc5_cbc X509_V_ERR_PERMITTED_VIOLATION
+ NID_rc5_cfb64 X509_V_ERR_PROXY_CERTIFICATES_NOT_ALLOWED
+ NID_rc5_ecb X509_V_ERR_PROXY_PATH_LENGTH_EXCEEDED
+ NID_rc5_ofb64 X509_V_ERR_PROXY_SUBJECT_NAME_VIOLATION
+ NID_ripemd160 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN
+ NID_ripemd160WithRSA X509_V_ERR_SIGNATURE_ALGORITHM_INCONSISTENCY
+ NID_rle_compression X509_V_ERR_SIGNATURE_ALGORITHM_MISMATCH
+ NID_rsa X509_V_ERR_STORE_LOOKUP
+ NID_rsaEncryption X509_V_ERR_SUBJECT_ISSUER_MISMATCH
+ NID_rsadsi X509_V_ERR_SUBJECT_KEY_IDENTIFIER_CRITICAL
+ NID_safeContentsBag X509_V_ERR_SUBJECT_NAME_EMPTY
+ NID_sdsiCertificate X509_V_ERR_SUBTREE_MINMAX
+ NID_secretBag X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256
+ NID_serialNumber X509_V_ERR_SUITE_B_INVALID_ALGORITHM
+ NID_server_auth X509_V_ERR_SUITE_B_INVALID_CURVE
+ NID_sha X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
+ NID_sha1 X509_V_ERR_SUITE_B_INVALID_VERSION
+ NID_sha1WithRSA X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED
+ NID_sha1WithRSAEncryption X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY
+ NID_sha224 X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE
+ NID_sha224WithRSAEncryption X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE
+ NID_sha256 X509_V_ERR_UNABLE_TO_GET_CRL
+ NID_sha256WithRSAEncryption X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER
+ NID_sha384 X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT
+ NID_sha384WithRSAEncryption X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY
+ NID_sha3_224 X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE
+ NID_sha3_256 X509_V_ERR_UNHANDLED_CRITICAL_CRL_EXTENSION
+ NID_sha3_384 X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION
+ NID_sha3_512 X509_V_ERR_UNNESTED_RESOURCE
+ NID_sha512 X509_V_ERR_UNSPECIFIED
+ NID_sha512WithRSAEncryption X509_V_ERR_UNSUPPORTED_CONSTRAINT_SYNTAX
+ NID_sha512_224 X509_V_ERR_UNSUPPORTED_CONSTRAINT_TYPE
+ NID_sha512_224WithRSAEncryption X509_V_ERR_UNSUPPORTED_EXTENSION_FEATURE
+ NID_sha512_256 X509_V_ERR_UNSUPPORTED_NAME_SYNTAX
+ NID_sha512_256WithRSAEncryption X509_V_ERR_UNSUPPORTED_SIGNATURE_ALGORITHM
+ NID_shaWithRSAEncryption X509_V_FLAG_ALLOW_PROXY_CERTS
+ NID_shake128 X509_V_FLAG_CB_ISSUER_CHECK
+ NID_shake256 X509_V_FLAG_CHECK_SS_SIGNATURE
+ NID_stateOrProvinceName X509_V_FLAG_CRL_CHECK
+ NID_subject_alt_name X509_V_FLAG_CRL_CHECK_ALL
+ NID_subject_key_identifier X509_V_FLAG_EXPLICIT_POLICY
+ NID_surname X509_V_FLAG_EXTENDED_CRL_SUPPORT
+ NID_sxnet X509_V_FLAG_IGNORE_CRITICAL
+ NID_time_stamp X509_V_FLAG_INHIBIT_ANY
+ NID_title X509_V_FLAG_INHIBIT_MAP
+ NID_undef X509_V_FLAG_LEGACY_VERIFY
+ NID_uniqueIdentifier X509_V_FLAG_NOTIFY_POLICY
+ NID_x509Certificate X509_V_FLAG_NO_ALT_CHAINS
+ NID_x509Crl X509_V_FLAG_NO_CHECK_TIME
+ NID_zlib_compression X509_V_FLAG_PARTIAL_CHAIN
+ NOTHING X509_V_FLAG_POLICY_CHECK
+ OCSP_RESPONSE_STATUS_INTERNALERROR X509_V_FLAG_POLICY_MASK
+ OCSP_RESPONSE_STATUS_MALFORMEDREQUEST X509_V_FLAG_SUITEB_128_LOS
+ OCSP_RESPONSE_STATUS_SIGREQUIRED X509_V_FLAG_SUITEB_128_LOS_ONLY
+ OCSP_RESPONSE_STATUS_SUCCESSFUL X509_V_FLAG_SUITEB_192_LOS
+ OCSP_RESPONSE_STATUS_TRYLATER X509_V_FLAG_TRUSTED_FIRST
+ OCSP_RESPONSE_STATUS_UNAUTHORIZED X509_V_FLAG_USE_CHECK_TIME
+ OPENSSL_BUILT_ON X509_V_FLAG_USE_DELTAS
+ OPENSSL_CFLAGS X509_V_FLAG_X509_STRICT
+ OPENSSL_CPU_INFO X509_V_OK
+ OPENSSL_DIR XN_FLAG_COMPAT
+ OPENSSL_ENGINES_DIR XN_FLAG_DN_REV
+ OPENSSL_FULL_VERSION_STRING XN_FLAG_DUMP_UNKNOWN_FIELDS
+ OPENSSL_INFO_CONFIG_DIR XN_FLAG_FN_ALIGN
+ OPENSSL_INFO_CPU_SETTINGS XN_FLAG_FN_LN
+ OPENSSL_INFO_DIR_FILENAME_SEPARATOR XN_FLAG_FN_MASK
+ OPENSSL_INFO_DSO_EXTENSION XN_FLAG_FN_NONE
+ OPENSSL_INFO_ENGINES_DIR XN_FLAG_FN_OID
+ OPENSSL_INFO_LIST_SEPARATOR XN_FLAG_FN_SN
+ OPENSSL_INFO_MODULES_DIR XN_FLAG_MULTILINE
+ OPENSSL_INFO_SEED_SOURCE XN_FLAG_ONELINE
+ OPENSSL_MODULES_DIR XN_FLAG_RFC2253
+ OPENSSL_PLATFORM XN_FLAG_SEP_COMMA_PLUS
+ OPENSSL_VERSION XN_FLAG_SEP_CPLUS_SPC
+ OPENSSL_VERSION_MAJOR XN_FLAG_SEP_MASK
+ OPENSSL_VERSION_MINOR XN_FLAG_SEP_MULTILINE
+ OPENSSL_VERSION_NUMBER XN_FLAG_SEP_SPLUS_SPC
+ OPENSSL_VERSION_PATCH XN_FLAG_SPC_EQ
=for end_constants
diff --git a/t/local/21_constants.t b/t/local/21_constants.t
index 31762a4..bebf09b 100644
--- a/t/local/21_constants.t
+++ b/t/local/21_constants.t
@@ -11,7 +11,7 @@ use Test::Net::SSLeay qw(dies_like);
# We rely on symbolic references in the dies_like() tests:
no strict 'refs';
-plan tests => 718;
+plan tests => 736;
my @constants = qw(
AD_ACCESS_DENIED
@@ -322,7 +322,25 @@ my @constants = qw(
NID_sha1
NID_sha1WithRSA
NID_sha1WithRSAEncryption
+ NID_sha224
+ NID_sha224WithRSAEncryption
+ NID_sha256
+ NID_sha256WithRSAEncryption
+ NID_sha384
+ NID_sha384WithRSAEncryption
+ NID_sha3_224
+ NID_sha3_256
+ NID_sha3_384
+ NID_sha3_512
+ NID_sha512
+ NID_sha512WithRSAEncryption
+ NID_sha512_224
+ NID_sha512_224WithRSAEncryption
+ NID_sha512_256
+ NID_sha512_256WithRSAEncryption
NID_shaWithRSAEncryption
+ NID_shake128
+ NID_shake256
NID_stateOrProvinceName
NID_subject_alt_name
NID_subject_key_identifier
diff --git a/t/local/43_misc_functions.t b/t/local/43_misc_functions.t
index 68914f2..8c1b6d5 100644
--- a/t/local/43_misc_functions.t
+++ b/t/local/43_misc_functions.t
@@ -8,7 +8,7 @@ use Test::Net::SSLeay qw(
if (not can_fork()) {
plan skip_all => "fork() not supported on this system";
} else {
- plan tests => 46;
+ plan tests => 47;
}
initialise_libssl();
@@ -134,6 +134,7 @@ sub client {
client_test_finished($ssl);
client_test_keyblock_size($ssl);
client_test_version_funcs($ssl);
+ client_test_post_handshake_funcs($ssl);
# Tell the server to quit and see that our connection is still up
my $end = "end";
@@ -255,6 +256,28 @@ sub client_test_version_funcs
return;
}
+# Test a variety of functions that are valid after a handshake
+sub client_test_post_handshake_funcs
+{
+ my ($ssl) = @_;
+
+ unless (defined &Net::SSLeay::CIPHER_get_handshake_digest) {
+ SKIP: {
+ skip('Do not have Net::SSLeay::CIPHER_get_handshake_digest', 1);
+ };
+ return;
+ }
+
+ # We could test this without an SSL, but now we don't need to
+ # worry about knowing which CIPHERs are available.
+ my $cipher = Net::SSLeay::get_current_cipher($ssl);
+ my $md = Net::SSLeay::CIPHER_get_handshake_digest($cipher);
+ my $nid = Net::SSLeay::EVP_MD_type($md);
+ isnt($nid, Net::SSLeay::NID_undef(), "Net::SSLeay::CIPHER_get_handshake_digest returns MD with a NID: $nid, " . Net::SSLeay::OBJ_nid2sn($nid));
+
+ return;
+}
+
sub client_test_ciphersuites
{
unless (defined &Net::SSLeay::CTX_set_ciphersuites)
diff --git a/t/local/44_sess.t b/t/local/44_sess.t
index 6e09a88..efd5b03 100644
--- a/t/local/44_sess.t
+++ b/t/local/44_sess.t
@@ -14,7 +14,7 @@ use English qw( $EVAL_ERROR $OSNAME $PERL_VERSION -no_match_vars );
if (not can_fork()) {
plan skip_all => "fork() not supported on this system";
} else {
- plan tests => 59;
+ plan tests => 67;
}
initialise_libssl();
@@ -221,6 +221,14 @@ sub server
set_server_stat($round, 'old_session_is_resumable', $is_resumable);
}
+ if (defined &Net::SSLeay::SESSION_get0_cipher) {
+ my $cipher = Net::SSLeay::SESSION_get0_cipher($sess);
+ my $name = Net::SSLeay::CIPHER_get_name($cipher);
+ my $get0_cipher_ok = (length $name && $name ne '(NONE)') ? 1 : 0;
+ diag("SESSION_get0_cipher not ok: round $round, name: '$name'") unless $get0_cipher_ok;
+ set_server_stat($round, 'get0_cipher', $get0_cipher_ok);
+ }
+
Net::SSLeay::SESSION_free($sess) unless $ret; # Not cached, undo get1
Net::SSLeay::free($ssl);
close($cl) || die("server close: $!");
@@ -290,6 +298,14 @@ sub client {
set_client_stat($round, 'old_session_is_resumable', $is_resumable);
}
+ if (defined &Net::SSLeay::SESSION_get0_cipher) {
+ my $cipher = Net::SSLeay::SESSION_get0_cipher($sess);
+ my $name = Net::SSLeay::CIPHER_get_name($cipher);
+ my $get0_cipher_ok = (length $name && $name ne '(NONE)') ? 1 : 0;
+ diag("SESSION_get0_cipher not ok: round $round, name: '$name'") unless $get0_cipher_ok;
+ set_client_stat($round, 'get0_cipher', $get0_cipher_ok);
+ }
+
Net::SSLeay::shutdown($ssl);
Net::SSLeay::free($ssl);
close($cl) || die("client close: $!");
@@ -322,7 +338,7 @@ sub test_stats {
if (!$usable{$round}) {
SKIP: {
- skip( "$round not available in this libssl", 12 );
+ skip( "$round not available in this libssl", 14 );
}
next;
}
@@ -358,6 +374,15 @@ sub test_stats {
skip( 'Do not have Net::SSLeay::SESSION_is_resumable', 4 );
}
}
+
+ if (defined &Net::SSLeay::SESSION_get0_cipher) {
+ is( $s->{get0_cipher}, 1, "Server $round SESSION_get0_cipher appears correct" );
+ is( $c->{get0_cipher}, 1, "Client $round SESSION_get0_cipher appears correct" );
+ } else {
+ SKIP: {
+ skip( 'Do not have &Net::SSLeay::SESSION_get0_cipher', 2 );
+ }
+ }
}
if ($usable{'TLSv1.3'}) {
diff --git a/t/local/50_digest.t b/t/local/50_digest.t
index 949092e..12a52bf 100644
--- a/t/local/50_digest.t
+++ b/t/local/50_digest.t
@@ -3,7 +3,7 @@ use lib 'inc';
use Net::SSLeay;
use Test::Net::SSLeay qw( data_file_path initialise_libssl );
-plan tests => 203;
+plan tests => 206;
initialise_libssl();
Net::SSLeay::OpenSSL_add_all_digests();
@@ -296,5 +296,15 @@ SKIP: {
is(Net::SSLeay::EVP_MD_size(Net::SSLeay::EVP_sha1()), 20, 'EVP_MD_size sha1');
}
+# OpenSSL 3.0.0 adds these functions. We assume SHA256 is available
+# because it can't be disabled with 3.0.0 and later. The latest
+# OpenSSL, as of time of writing, is 3.2.0.
+SKIP: {
+ skip "Net::SSLeay::EVP_MD_get0_description, EVP_MD_get0_name and EVP_MD_get_type not available", 3, unless exists &Net::SSLeay::EVP_MD_get0_description;
+ like(Net::SSLeay::EVP_MD_get0_description(Net::SSLeay::EVP_sha512()), qr/SHA512/si, 'EVP_MD_get0_description');
+ like(Net::SSLeay::EVP_MD_get0_name(Net::SSLeay::EVP_sha512()), qr/SHA512/si, 'EVP_MD_get0_name');
+ is(Net::SSLeay::EVP_MD_get_type(Net::SSLeay::EVP_sha512()), Net::SSLeay::NID_sha512(), 'EVP_MD_get_type');
+}
+
digest_file($file, $file_digests, \%all_digests);
digest_strings(\%fps, \%all_digests);
diff --git a/typemap b/typemap
index 5d530c6..c2831e1 100644
--- a/typemap
+++ b/typemap
@@ -4,6 +4,7 @@ const SSL_METHOD * T_PTR
SSL_CTX * T_PTR
const SSL_CTX * T_PTR
SSL_SESSION * T_PTR
+const SSL_SESSION * T_PTR
SSL * T_PTR
RSA * T_PTR
DH * T_PTR