@@ -1569,6 +1569,95 @@ def test_tmp_dh_callback
15691569 end
15701570 end
15711571
1572+ def test_ciphersuites_method_tls_connection
1573+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1574+ if !tls13_supported? || !ssl_ctx . respond_to? ( :ciphersuites= )
1575+ pend 'TLS 1.3 not supported'
1576+ end
1577+
1578+ csuite = [ 'TLS_AES_128_GCM_SHA256' , 'TLSv1.3' , 128 , 128 ]
1579+ inputs = [ csuite [ 0 ] , [ csuite [ 0 ] ] , [ csuite ] ]
1580+
1581+ start_server do |port |
1582+ inputs . each do |input |
1583+ cli_ctx = OpenSSL ::SSL ::SSLContext . new
1584+ cli_ctx . min_version = cli_ctx . max_version = OpenSSL ::SSL ::TLS1_3_VERSION
1585+ cli_ctx . ciphersuites = input
1586+
1587+ server_connect ( port , cli_ctx ) do |ssl |
1588+ assert_equal ( 'TLSv1.3' , ssl . ssl_version )
1589+ assert_equal ( csuite [ 0 ] , ssl . cipher [ 0 ] )
1590+ ssl . puts ( 'abc' ) ; assert_equal ( "abc\n " , ssl . gets )
1591+ end
1592+ end
1593+ end
1594+ end
1595+
1596+ def test_ciphersuites_method_nil_argument
1597+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1598+ pend 'ciphersuites= method is missing' unless ssl_ctx . respond_to? ( :ciphersuites= )
1599+
1600+ assert_nothing_raised { ssl_ctx . ciphersuites = nil }
1601+ end
1602+
1603+ def test_ciphersuites_method_frozen_object
1604+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1605+ pend 'ciphersuites= method is missing' unless ssl_ctx . respond_to? ( :ciphersuites= )
1606+
1607+ ssl_ctx . freeze
1608+ assert_raise ( FrozenError ) { ssl_ctx . ciphersuites = 'TLS_AES_256_GCM_SHA384' }
1609+ end
1610+
1611+ def test_ciphersuites_method_bogus_csuite
1612+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1613+ pend 'ciphersuites= method is missing' unless ssl_ctx . respond_to? ( :ciphersuites= )
1614+
1615+ assert_raise_with_message (
1616+ OpenSSL ::SSL ::SSLError ,
1617+ /SSL_CTX_set_ciphersuites: no cipher match/i
1618+ ) { ssl_ctx . ciphersuites = 'BOGUS' }
1619+ end
1620+
1621+ def test_ciphers_method_tls_connection
1622+ csuite = [ 'ECDHE-RSA-AES256-GCM-SHA384' , 'TLSv1.2' , 256 , 256 ]
1623+ inputs = [ csuite [ 0 ] , [ csuite [ 0 ] ] , [ csuite ] ]
1624+
1625+ start_server do |port |
1626+ inputs . each do |input |
1627+ cli_ctx = OpenSSL ::SSL ::SSLContext . new
1628+ cli_ctx . min_version = cli_ctx . max_version = OpenSSL ::SSL ::TLS1_2_VERSION
1629+ cli_ctx . ciphers = input
1630+
1631+ server_connect ( port , cli_ctx ) do |ssl |
1632+ assert_equal ( 'TLSv1.2' , ssl . ssl_version )
1633+ assert_equal ( csuite [ 0 ] , ssl . cipher [ 0 ] )
1634+ ssl . puts ( 'abc' ) ; assert_equal ( "abc\n " , ssl . gets )
1635+ end
1636+ end
1637+ end
1638+ end
1639+
1640+ def test_ciphers_method_nil_argument
1641+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1642+ assert_nothing_raised { ssl_ctx . ciphers = nil }
1643+ end
1644+
1645+ def test_ciphers_method_frozen_object
1646+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1647+
1648+ ssl_ctx . freeze
1649+ assert_raise ( FrozenError ) { ssl_ctx . ciphers = 'ECDHE-RSA-AES128-SHA' }
1650+ end
1651+
1652+ def test_ciphers_method_bogus_csuite
1653+ ssl_ctx = OpenSSL ::SSL ::SSLContext . new
1654+
1655+ assert_raise_with_message (
1656+ OpenSSL ::SSL ::SSLError ,
1657+ /SSL_CTX_set_cipher_list: no cipher match/i
1658+ ) { ssl_ctx . ciphers = 'BOGUS' }
1659+ end
1660+
15721661 def test_connect_works_when_setting_dh_callback_to_nil
15731662 ctx_proc = -> ctx {
15741663 ctx . max_version = :TLS1_2
0 commit comments