From: merch-redmine@... Date: 2019-07-29T22:37:58+00:00 Subject: [ruby-core:94002] [Ruby master Bug#15309] ECB is broken 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: