66if defined? ( OpenSSL )
77
88class OpenSSL ::OSSL < OpenSSL ::SSLTestCase
9- def test_secure_compare
10- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "a" ) }
11- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "aa" ) }
9+ def test_fixed_length_secure_compare
10+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "a" ) }
11+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "aa" ) }
1212
13- assert OpenSSL . secure_compare ( "aaa" , "aaa" )
14- assert OpenSSL . secure_compare (
13+ assert OpenSSL . fixed_length_secure_compare ( "aaa" , "aaa" )
14+ assert OpenSSL . fixed_length_secure_compare (
1515 OpenSSL ::Digest ::SHA256 . digest ( "aaa" ) , OpenSSL ::Digest ::SHA256 . digest ( "aaa" )
1616 )
1717
18- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "aaaa" ) }
19- refute OpenSSL . secure_compare ( "aaa" , "baa" )
20- refute OpenSSL . secure_compare ( "aaa" , "aba" )
21- refute OpenSSL . secure_compare ( "aaa" , "aab" )
22- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "aaab" ) }
23- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "b" ) }
24- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "bb" ) }
25- refute OpenSSL . secure_compare ( "aaa" , "bbb" )
26- assert_raises ( ArgumentError ) { OpenSSL . secure_compare ( "aaa" , "bbbb" ) }
18+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "aaaa" ) }
19+ refute OpenSSL . fixed_length_secure_compare ( "aaa" , "baa" )
20+ refute OpenSSL . fixed_length_secure_compare ( "aaa" , "aba" )
21+ refute OpenSSL . fixed_length_secure_compare ( "aaa" , "aab" )
22+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "aaab" ) }
23+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "b" ) }
24+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "bb" ) }
25+ refute OpenSSL . fixed_length_secure_compare ( "aaa" , "bbb" )
26+ assert_raises ( ArgumentError ) { OpenSSL . fixed_length_secure_compare ( "aaa" , "bbbb" ) }
2727 end
2828
2929 def test_memcmp_timing
30- # Ensure using secure_compare takes almost exactly the same amount of time to compare two different strings.
30+ # Ensure using fixed_length_secure_compare takes almost exactly the same amount of time to compare two different strings.
3131 # Regular string comparison will short-circuit on the first non-matching character, failing this test.
3232 # NOTE: this test may be susceptible to noise if the system running the tests is otherwise under load.
3333 a = "x" * 512_000
@@ -36,9 +36,9 @@ def test_memcmp_timing
3636 a = "#{ a } x"
3737
3838 n = 10_000
39- a_b_time = Benchmark . measure { n . times { OpenSSL . secure_compare ( a , b ) } } . real
40- a_c_time = Benchmark . measure { n . times { OpenSSL . secure_compare ( a , c ) } } . real
41- assert_in_delta ( a_b_time , a_c_time , 1 , "secure_compare timing test failed" )
39+ a_b_time = Benchmark . measure { n . times { OpenSSL . fixed_length_secure_compare ( a , b ) } } . real
40+ a_c_time = Benchmark . measure { n . times { OpenSSL . fixed_length_secure_compare ( a , c ) } } . real
41+ assert_in_delta ( a_b_time , a_c_time , 1 , "fixed_length_secure_compare timing test failed" )
4242 end
4343end
4444
0 commit comments