[MacRuby-devel] [macruby] #104: Problem with OpenSSL using MacRuby's internal conversion to and from NSData

macruby ruby-noreply at macosforge.org
Tue Jul 22 06:02:16 PDT 2008


#104: Problem with OpenSSL using MacRuby's internal conversion to and from NSData
--------------------------------+-------------------------------------------
 Reporter:  rich at infoether.com  |       Owner:  lsansonetti at apple.com
     Type:  defect              |      Status:  new                  
 Priority:  blocker             |   Milestone:                       
Component:  MacRuby             |    Keywords:                       
--------------------------------+-------------------------------------------
 This code will reproduce the problem:

 require 'openssl'
 require 'digest/sha1'

 CRYPT = "aes256"
 password = 'test'
 gen_key = OpenSSL::Cipher::Cipher.new(CRYPT)
 gen_key.encrypt
 key_crypt = OpenSSL::Cipher::Cipher.new(CRYPT)
 key_crypt.encrypt
 key_crypt.key = Digest::SHA1.hexdigest(password+CRYPT)[2,32]
 key =
 key_crypt.update("KEY_"+OpenSSL::Random.random_bytes(key_crypt.key_len))
 key << key_crypt.final

 #comment out next line and it works
 File.open("tmp.key", "wb") {|f| f.write(key)}

 key_decrypt = OpenSSL::Cipher::Cipher.new(CRYPT)
 key_decrypt.decrypt
 key_decrypt.key = Digest::SHA1.hexdigest(password+CRYPT)[2,32]
 db_key = key_decrypt.update(key)
 db_key << key_decrypt.final

 If you take out that file write operation, then this code will run.  You
 leave it in and you get block_length error.

 I believe that has to do with internally converting objects to NSData when
 treated as binary.  It still says the class is NSCFString but something is
 happening to it.

-- 
Ticket URL: <https://www.macruby.org/trac/ticket/104>
macruby <http://macruby.org/>


More information about the MacRuby-devel mailing list