@@ -627,11 +627,21 @@ ossl_sslctx_get_options(VALUE self)
627627{
628628 SSL_CTX * ctx ;
629629 GetSSLCTX (self , ctx );
630+
630631 /*
631- * Do explicit cast because SSL_CTX_get_options() returned (signed) long in
632- * OpenSSL before 1.1.0.
632+ * SSL_CTX_get_options() returns different types in libssl variants, and
633+ * we want to treat them as a non-negative Integer in Ruby:
634+ * - uint64_t in OpenSSL >= 3
635+ * - unsigned long in OpenSSL >= 1.1
636+ * - long in OpenSSL <= 1.0.2 and LibreSSL 4.3 (latest), with all 32 bits
637+ * used for options.
638+ * - uint32_t in AWS-LC 5.0.0 (latest)
633639 */
634- return ULONG2NUM ((unsigned long )SSL_CTX_get_options (ctx ));
640+ #ifdef OSSL_SIZEOF_SSL_OPTIONS_IS_8
641+ return UINT64T2NUM ((uint64_t )SSL_CTX_get_options (ctx ));
642+ #else
643+ return UINT2NUM ((uint32_t )SSL_CTX_get_options (ctx ));
644+ #endif
635645}
636646
637647/*
@@ -655,13 +665,13 @@ ossl_sslctx_set_options(VALUE self, VALUE options)
655665 rb_check_frozen (self );
656666 GetSSLCTX (self , ctx );
657667
668+ #ifdef OSSL_SIZEOF_SSL_OPTIONS_IS_8
669+ uint64_t opts = NIL_P (options ) ? SSL_OP_ALL : NUM2UINT64T (options );
670+ #else
671+ uint32_t opts = NIL_P (options ) ? SSL_OP_ALL : NUM2UINT (options );
672+ #endif
658673 SSL_CTX_clear_options (ctx , SSL_CTX_get_options (ctx ));
659-
660- if (NIL_P (options )) {
661- SSL_CTX_set_options (ctx , SSL_OP_ALL );
662- } else {
663- SSL_CTX_set_options (ctx , NUM2ULONG (options ));
664- }
674+ SSL_CTX_set_options (ctx , opts );
665675
666676 return self ;
667677}
@@ -3178,98 +3188,98 @@ Init_ossl_ssl(void)
31783188 rb_define_const (mSSL , "VERIFY_FAIL_IF_NO_PEER_CERT" , INT2NUM (SSL_VERIFY_FAIL_IF_NO_PEER_CERT ));
31793189 rb_define_const (mSSL , "VERIFY_CLIENT_ONCE" , INT2NUM (SSL_VERIFY_CLIENT_ONCE ));
31803190
3181- rb_define_const (mSSL , "OP_ALL" , ULONG2NUM (SSL_OP_ALL ));
3191+ rb_define_const (mSSL , "OP_ALL" , UINT64T2NUM (SSL_OP_ALL ));
31823192#ifdef SSL_OP_CLEANSE_PLAINTEXT /* OpenSSL 3.0 */
3183- rb_define_const (mSSL , "OP_CLEANSE_PLAINTEXT" , ULONG2NUM (SSL_OP_CLEANSE_PLAINTEXT ));
3193+ rb_define_const (mSSL , "OP_CLEANSE_PLAINTEXT" , UINT64T2NUM (SSL_OP_CLEANSE_PLAINTEXT ));
31843194#endif
3185- rb_define_const (mSSL , "OP_LEGACY_SERVER_CONNECT" , ULONG2NUM (SSL_OP_LEGACY_SERVER_CONNECT ));
3195+ rb_define_const (mSSL , "OP_LEGACY_SERVER_CONNECT" , UINT64T2NUM (SSL_OP_LEGACY_SERVER_CONNECT ));
31863196#ifdef SSL_OP_ENABLE_KTLS /* OpenSSL 3.0 */
3187- rb_define_const (mSSL , "OP_ENABLE_KTLS" , ULONG2NUM (SSL_OP_ENABLE_KTLS ));
3197+ rb_define_const (mSSL , "OP_ENABLE_KTLS" , UINT64T2NUM (SSL_OP_ENABLE_KTLS ));
31883198#endif
3189- rb_define_const (mSSL , "OP_TLSEXT_PADDING" , ULONG2NUM (SSL_OP_TLSEXT_PADDING ));
3190- rb_define_const (mSSL , "OP_SAFARI_ECDHE_ECDSA_BUG" , ULONG2NUM (SSL_OP_SAFARI_ECDHE_ECDSA_BUG ));
3199+ rb_define_const (mSSL , "OP_TLSEXT_PADDING" , UINT64T2NUM (SSL_OP_TLSEXT_PADDING ));
3200+ rb_define_const (mSSL , "OP_SAFARI_ECDHE_ECDSA_BUG" , UINT64T2NUM (SSL_OP_SAFARI_ECDHE_ECDSA_BUG ));
31913201#ifdef SSL_OP_IGNORE_UNEXPECTED_EOF /* OpenSSL 3.0 */
3192- rb_define_const (mSSL , "OP_IGNORE_UNEXPECTED_EOF" , ULONG2NUM (SSL_OP_IGNORE_UNEXPECTED_EOF ));
3202+ rb_define_const (mSSL , "OP_IGNORE_UNEXPECTED_EOF" , UINT64T2NUM (SSL_OP_IGNORE_UNEXPECTED_EOF ));
31933203#endif
31943204#ifdef SSL_OP_ALLOW_CLIENT_RENEGOTIATION /* OpenSSL 3.0 */
3195- rb_define_const (mSSL , "OP_ALLOW_CLIENT_RENEGOTIATION" , ULONG2NUM (SSL_OP_ALLOW_CLIENT_RENEGOTIATION ));
3205+ rb_define_const (mSSL , "OP_ALLOW_CLIENT_RENEGOTIATION" , UINT64T2NUM (SSL_OP_ALLOW_CLIENT_RENEGOTIATION ));
31963206#endif
31973207#ifdef SSL_OP_DISABLE_TLSEXT_CA_NAMES /* OpenSSL 3.0 */
3198- rb_define_const (mSSL , "OP_DISABLE_TLSEXT_CA_NAMES" , ULONG2NUM (SSL_OP_DISABLE_TLSEXT_CA_NAMES ));
3208+ rb_define_const (mSSL , "OP_DISABLE_TLSEXT_CA_NAMES" , UINT64T2NUM (SSL_OP_DISABLE_TLSEXT_CA_NAMES ));
31993209#endif
32003210#ifdef SSL_OP_ALLOW_NO_DHE_KEX /* OpenSSL 1.1.1, missing in LibreSSL */
3201- rb_define_const (mSSL , "OP_ALLOW_NO_DHE_KEX" , ULONG2NUM (SSL_OP_ALLOW_NO_DHE_KEX ));
3211+ rb_define_const (mSSL , "OP_ALLOW_NO_DHE_KEX" , UINT64T2NUM (SSL_OP_ALLOW_NO_DHE_KEX ));
32023212#endif
3203- rb_define_const (mSSL , "OP_DONT_INSERT_EMPTY_FRAGMENTS" , ULONG2NUM (SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS ));
3204- rb_define_const (mSSL , "OP_NO_TICKET" , ULONG2NUM (SSL_OP_NO_TICKET ));
3205- rb_define_const (mSSL , "OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION" , ULONG2NUM (SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION ));
3206- rb_define_const (mSSL , "OP_NO_COMPRESSION" , ULONG2NUM (SSL_OP_NO_COMPRESSION ));
3207- rb_define_const (mSSL , "OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION" , ULONG2NUM (SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION ));
3213+ rb_define_const (mSSL , "OP_DONT_INSERT_EMPTY_FRAGMENTS" , UINT64T2NUM (SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS ));
3214+ rb_define_const (mSSL , "OP_NO_TICKET" , UINT64T2NUM (SSL_OP_NO_TICKET ));
3215+ rb_define_const (mSSL , "OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION" , UINT64T2NUM (SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION ));
3216+ rb_define_const (mSSL , "OP_NO_COMPRESSION" , UINT64T2NUM (SSL_OP_NO_COMPRESSION ));
3217+ rb_define_const (mSSL , "OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION" , UINT64T2NUM (SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION ));
32083218#ifdef SSL_OP_NO_ENCRYPT_THEN_MAC /* OpenSSL 1.1.1, missing in LibreSSL */
3209- rb_define_const (mSSL , "OP_NO_ENCRYPT_THEN_MAC" , ULONG2NUM (SSL_OP_NO_ENCRYPT_THEN_MAC ));
3219+ rb_define_const (mSSL , "OP_NO_ENCRYPT_THEN_MAC" , UINT64T2NUM (SSL_OP_NO_ENCRYPT_THEN_MAC ));
32103220#endif
32113221#ifdef SSL_OP_ENABLE_MIDDLEBOX_COMPAT /* OpenSSL 1.1.1, missing in LibreSSL */
3212- rb_define_const (mSSL , "OP_ENABLE_MIDDLEBOX_COMPAT" , ULONG2NUM (SSL_OP_ENABLE_MIDDLEBOX_COMPAT ));
3222+ rb_define_const (mSSL , "OP_ENABLE_MIDDLEBOX_COMPAT" , UINT64T2NUM (SSL_OP_ENABLE_MIDDLEBOX_COMPAT ));
32133223#endif
32143224#ifdef SSL_OP_PRIORITIZE_CHACHA /* OpenSSL 1.1.1, missing in LibreSSL */
3215- rb_define_const (mSSL , "OP_PRIORITIZE_CHACHA" , ULONG2NUM (SSL_OP_PRIORITIZE_CHACHA ));
3225+ rb_define_const (mSSL , "OP_PRIORITIZE_CHACHA" , UINT64T2NUM (SSL_OP_PRIORITIZE_CHACHA ));
32163226#endif
32173227#ifdef SSL_OP_NO_ANTI_REPLAY /* OpenSSL 1.1.1, missing in LibreSSL */
3218- rb_define_const (mSSL , "OP_NO_ANTI_REPLAY" , ULONG2NUM (SSL_OP_NO_ANTI_REPLAY ));
3228+ rb_define_const (mSSL , "OP_NO_ANTI_REPLAY" , UINT64T2NUM (SSL_OP_NO_ANTI_REPLAY ));
32193229#endif
3220- rb_define_const (mSSL , "OP_NO_SSLv3" , ULONG2NUM (SSL_OP_NO_SSLv3 ));
3221- rb_define_const (mSSL , "OP_NO_TLSv1" , ULONG2NUM (SSL_OP_NO_TLSv1 ));
3222- rb_define_const (mSSL , "OP_NO_TLSv1_1" , ULONG2NUM (SSL_OP_NO_TLSv1_1 ));
3223- rb_define_const (mSSL , "OP_NO_TLSv1_2" , ULONG2NUM (SSL_OP_NO_TLSv1_2 ));
3224- rb_define_const (mSSL , "OP_NO_TLSv1_3" , ULONG2NUM (SSL_OP_NO_TLSv1_3 ));
3225- rb_define_const (mSSL , "OP_CIPHER_SERVER_PREFERENCE" , ULONG2NUM (SSL_OP_CIPHER_SERVER_PREFERENCE ));
3226- rb_define_const (mSSL , "OP_TLS_ROLLBACK_BUG" , ULONG2NUM (SSL_OP_TLS_ROLLBACK_BUG ));
3230+ rb_define_const (mSSL , "OP_NO_SSLv3" , UINT64T2NUM (SSL_OP_NO_SSLv3 ));
3231+ rb_define_const (mSSL , "OP_NO_TLSv1" , UINT64T2NUM (SSL_OP_NO_TLSv1 ));
3232+ rb_define_const (mSSL , "OP_NO_TLSv1_1" , UINT64T2NUM (SSL_OP_NO_TLSv1_1 ));
3233+ rb_define_const (mSSL , "OP_NO_TLSv1_2" , UINT64T2NUM (SSL_OP_NO_TLSv1_2 ));
3234+ rb_define_const (mSSL , "OP_NO_TLSv1_3" , UINT64T2NUM (SSL_OP_NO_TLSv1_3 ));
3235+ rb_define_const (mSSL , "OP_CIPHER_SERVER_PREFERENCE" , UINT64T2NUM (SSL_OP_CIPHER_SERVER_PREFERENCE ));
3236+ rb_define_const (mSSL , "OP_TLS_ROLLBACK_BUG" , UINT64T2NUM (SSL_OP_TLS_ROLLBACK_BUG ));
32273237#ifdef SSL_OP_NO_RENEGOTIATION /* OpenSSL 1.1.1, missing in LibreSSL */
3228- rb_define_const (mSSL , "OP_NO_RENEGOTIATION" , ULONG2NUM (SSL_OP_NO_RENEGOTIATION ));
3238+ rb_define_const (mSSL , "OP_NO_RENEGOTIATION" , UINT64T2NUM (SSL_OP_NO_RENEGOTIATION ));
32293239#endif
3230- rb_define_const (mSSL , "OP_CRYPTOPRO_TLSEXT_BUG" , ULONG2NUM (SSL_OP_CRYPTOPRO_TLSEXT_BUG ));
3240+ rb_define_const (mSSL , "OP_CRYPTOPRO_TLSEXT_BUG" , UINT64T2NUM (SSL_OP_CRYPTOPRO_TLSEXT_BUG ));
32313241
32323242 /* SSL_OP_* flags for DTLS */
32333243#if 0
3234- rb_define_const (mSSL , "OP_NO_QUERY_MTU" , ULONG2NUM (SSL_OP_NO_QUERY_MTU ));
3235- rb_define_const (mSSL , "OP_COOKIE_EXCHANGE" , ULONG2NUM (SSL_OP_COOKIE_EXCHANGE ));
3236- rb_define_const (mSSL , "OP_CISCO_ANYCONNECT" , ULONG2NUM (SSL_OP_CISCO_ANYCONNECT ));
3244+ rb_define_const (mSSL , "OP_NO_QUERY_MTU" , UINT64T2NUM (SSL_OP_NO_QUERY_MTU ));
3245+ rb_define_const (mSSL , "OP_COOKIE_EXCHANGE" , UINT64T2NUM (SSL_OP_COOKIE_EXCHANGE ));
3246+ rb_define_const (mSSL , "OP_CISCO_ANYCONNECT" , UINT64T2NUM (SSL_OP_CISCO_ANYCONNECT ));
32373247#endif
32383248
32393249 /* Deprecated in OpenSSL 1.1.0. */
3240- rb_define_const (mSSL , "OP_MICROSOFT_SESS_ID_BUG" , ULONG2NUM (SSL_OP_MICROSOFT_SESS_ID_BUG ));
3250+ rb_define_const (mSSL , "OP_MICROSOFT_SESS_ID_BUG" , UINT64T2NUM (SSL_OP_MICROSOFT_SESS_ID_BUG ));
32413251 /* Deprecated in OpenSSL 1.1.0. */
3242- rb_define_const (mSSL , "OP_NETSCAPE_CHALLENGE_BUG" , ULONG2NUM (SSL_OP_NETSCAPE_CHALLENGE_BUG ));
3252+ rb_define_const (mSSL , "OP_NETSCAPE_CHALLENGE_BUG" , UINT64T2NUM (SSL_OP_NETSCAPE_CHALLENGE_BUG ));
32433253 /* Deprecated in OpenSSL 0.9.8q and 1.0.0c. */
3244- rb_define_const (mSSL , "OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG" , ULONG2NUM (SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG ));
3254+ rb_define_const (mSSL , "OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG" , UINT64T2NUM (SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG ));
32453255 /* Deprecated in OpenSSL 1.0.1h and 1.0.2. */
3246- rb_define_const (mSSL , "OP_SSLREF2_REUSE_CERT_TYPE_BUG" , ULONG2NUM (SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG ));
3256+ rb_define_const (mSSL , "OP_SSLREF2_REUSE_CERT_TYPE_BUG" , UINT64T2NUM (SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG ));
32473257 /* Deprecated in OpenSSL 1.1.0. */
3248- rb_define_const (mSSL , "OP_MICROSOFT_BIG_SSLV3_BUFFER" , ULONG2NUM (SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER ));
3258+ rb_define_const (mSSL , "OP_MICROSOFT_BIG_SSLV3_BUFFER" , UINT64T2NUM (SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER ));
32493259 /* Deprecated in OpenSSL 0.9.7h and 0.9.8b. */
3250- rb_define_const (mSSL , "OP_MSIE_SSLV2_RSA_PADDING" , ULONG2NUM (SSL_OP_MSIE_SSLV2_RSA_PADDING ));
3260+ rb_define_const (mSSL , "OP_MSIE_SSLV2_RSA_PADDING" , UINT64T2NUM (SSL_OP_MSIE_SSLV2_RSA_PADDING ));
32513261 /* Deprecated in OpenSSL 1.1.0. */
3252- rb_define_const (mSSL , "OP_SSLEAY_080_CLIENT_DH_BUG" , ULONG2NUM (SSL_OP_SSLEAY_080_CLIENT_DH_BUG ));
3262+ rb_define_const (mSSL , "OP_SSLEAY_080_CLIENT_DH_BUG" , UINT64T2NUM (SSL_OP_SSLEAY_080_CLIENT_DH_BUG ));
32533263 /* Deprecated in OpenSSL 1.1.0. */
3254- rb_define_const (mSSL , "OP_TLS_D5_BUG" , ULONG2NUM (SSL_OP_TLS_D5_BUG ));
3264+ rb_define_const (mSSL , "OP_TLS_D5_BUG" , UINT64T2NUM (SSL_OP_TLS_D5_BUG ));
32553265 /* Deprecated in OpenSSL 1.1.0. */
3256- rb_define_const (mSSL , "OP_TLS_BLOCK_PADDING_BUG" , ULONG2NUM (SSL_OP_TLS_BLOCK_PADDING_BUG ));
3266+ rb_define_const (mSSL , "OP_TLS_BLOCK_PADDING_BUG" , UINT64T2NUM (SSL_OP_TLS_BLOCK_PADDING_BUG ));
32573267 /* Deprecated in OpenSSL 1.1.0. */
3258- rb_define_const (mSSL , "OP_SINGLE_ECDH_USE" , ULONG2NUM (SSL_OP_SINGLE_ECDH_USE ));
3268+ rb_define_const (mSSL , "OP_SINGLE_ECDH_USE" , UINT64T2NUM (SSL_OP_SINGLE_ECDH_USE ));
32593269 /* Deprecated in OpenSSL 1.1.0. */
3260- rb_define_const (mSSL , "OP_SINGLE_DH_USE" , ULONG2NUM (SSL_OP_SINGLE_DH_USE ));
3270+ rb_define_const (mSSL , "OP_SINGLE_DH_USE" , UINT64T2NUM (SSL_OP_SINGLE_DH_USE ));
32613271 /* Deprecated in OpenSSL 1.0.1k and 1.0.2. */
3262- rb_define_const (mSSL , "OP_EPHEMERAL_RSA" , ULONG2NUM (SSL_OP_EPHEMERAL_RSA ));
3272+ rb_define_const (mSSL , "OP_EPHEMERAL_RSA" , UINT64T2NUM (SSL_OP_EPHEMERAL_RSA ));
32633273 /* Deprecated in OpenSSL 1.1.0. */
3264- rb_define_const (mSSL , "OP_NO_SSLv2" , ULONG2NUM (SSL_OP_NO_SSLv2 ));
3274+ rb_define_const (mSSL , "OP_NO_SSLv2" , UINT64T2NUM (SSL_OP_NO_SSLv2 ));
32653275 /* Deprecated in OpenSSL 1.0.1. */
3266- rb_define_const (mSSL , "OP_PKCS1_CHECK_1" , ULONG2NUM (SSL_OP_PKCS1_CHECK_1 ));
3276+ rb_define_const (mSSL , "OP_PKCS1_CHECK_1" , UINT64T2NUM (SSL_OP_PKCS1_CHECK_1 ));
32673277 /* Deprecated in OpenSSL 1.0.1. */
3268- rb_define_const (mSSL , "OP_PKCS1_CHECK_2" , ULONG2NUM (SSL_OP_PKCS1_CHECK_2 ));
3278+ rb_define_const (mSSL , "OP_PKCS1_CHECK_2" , UINT64T2NUM (SSL_OP_PKCS1_CHECK_2 ));
32693279 /* Deprecated in OpenSSL 1.1.0. */
3270- rb_define_const (mSSL , "OP_NETSCAPE_CA_DN_BUG" , ULONG2NUM (SSL_OP_NETSCAPE_CA_DN_BUG ));
3280+ rb_define_const (mSSL , "OP_NETSCAPE_CA_DN_BUG" , UINT64T2NUM (SSL_OP_NETSCAPE_CA_DN_BUG ));
32713281 /* Deprecated in OpenSSL 1.1.0. */
3272- rb_define_const (mSSL , "OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG" , ULONG2NUM (SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG ));
3282+ rb_define_const (mSSL , "OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG" , UINT64T2NUM (SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG ));
32733283
32743284
32753285 /*
0 commit comments