1require_relative 'utils' 2 3class OpenSSL::TestEngine < Test::Unit::TestCase 4 5 def teardown 6 OpenSSL::Engine.cleanup # [ruby-core:40669] 7 assert_equal(0, OpenSSL::Engine.engines.size) 8 end 9 10 def test_engines_free # [ruby-dev:44173] 11 OpenSSL::Engine.load("openssl") 12 OpenSSL::Engine.engines 13 OpenSSL::Engine.engines 14 end 15 16 def test_openssl_engine_builtin 17 engine = OpenSSL::Engine.load("openssl") 18 assert_equal(true, engine) 19 assert_equal(1, OpenSSL::Engine.engines.size) 20 end 21 22 def test_openssl_engine_by_id_string 23 engine = get_engine 24 assert_not_nil(engine) 25 assert_equal(1, OpenSSL::Engine.engines.size) 26 end 27 28 def test_openssl_engine_id_name_inspect 29 engine = get_engine 30 assert_equal("openssl", engine.id) 31 assert_not_nil(engine.name) 32 assert_not_nil(engine.inspect) 33 end 34 35 def test_openssl_engine_digest_sha1 36 engine = get_engine 37 digest = engine.digest("SHA1") 38 assert_not_nil(digest) 39 data = "test" 40 assert_equal(OpenSSL::Digest::SHA1.digest(data), digest.digest(data)) 41 end 42 43 def test_openssl_engine_cipher_rc4 44 engine = get_engine 45 algo = "RC4" #AES is not supported by openssl Engine (<=1.0.0e) 46 data = "a" * 1000 47 key = OpenSSL::Random.random_bytes(16) 48 # suppress message from openssl Engine's RC4 cipher [ruby-core:41026] 49 err_back = $stderr.dup 50 $stderr.reopen(IO::NULL) 51 encrypted = crypt_data(data, key, :encrypt) { engine.cipher(algo) } 52 decrypted = crypt_data(encrypted, key, :decrypt) { OpenSSL::Cipher.new(algo) } 53 assert_equal(data, decrypted) 54 ensure 55 if err_back 56 $stderr.reopen(err_back) 57 err_back.close 58 end 59 end 60 61 private 62 63 def get_engine 64 OpenSSL::Engine.by_id("openssl") 65 end 66 67 def crypt_data(data, key, mode) 68 cipher = yield 69 cipher.send mode 70 cipher.key = key 71 cipher.update(data) + cipher.final 72 end 73 74end if defined?(OpenSSL) 75 76