Issue #15309 has been updated by jeremyevans0 (Jeremy Evans).

Status changed from Assigned to Closed

This is because `encrypt` is called after `key`, which goes against the documentation.  It is not specific to ECB. This is fixed by https://github.com/ruby/openssl/pull/263, which raises an exception for this broken code instead of silently failing.

----------------------------------------
Bug #15309: ECB is broken
https://bugs.ruby-lang.org/issues/15309#change-80213

* Author: sevk (kk kk)
* Status: Closed
* Priority: Normal
* Assignee: rhenium (Kazuki Yamaguchi)
* Target version: 
* ruby -v: ruby 2.0 2.2 2.3 2.4 2.5 2.6
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
~~~ ruby
#!/usr/bin/env ruby                                                                         
require 'openssl'

# AES-128 ECB mode test vectors
KEY        = ["2b7e151628aed2a6abf7158809cf4f3c"].pack("H*")
PLAINTEXT  = ["6bc1bee22e409f96e93d7e117393172a"].pack("H*")
CIPHERTEXT = ["3ad77bb40d7a3660a89ecaf32466ef97"].pack("H*")

cipher = OpenSSL::Cipher::Cipher.new("aes-128-ecb")
cipher.key = KEY
cipher.padding = 0 # Padding is enabled by default o_O

puts "test encrypt : "
cipher.encrypt
ciphertext = cipher.update(PLAINTEXT) << cipher.final

if ciphertext == CIPHERTEXT
  puts "OK!"
else
  puts "FAILED!"
end

puts "test decrypt : "
cipher.reset
cipher.decrypt
plaintext = cipher.update(CIPHERTEXT) << cipher.final

if plaintext == PLAINTEXT
  puts "OK!"
else
  puts "FAILED!"
end

~~~




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>