require 'crypt/rijndael'
require 'base64'
require 'ruby-aes/aes'
require 'openssl'
# Modify Crypt::Rijndael lib to accept an IV
module Crypt
class Rijndael
def vector() @vector; end
alias orig_initialize initialize
def initialize(key, vector, keyBits = 256, blockBits = 128)
@vector = vector
orig_initialize(key, keyBits, blockBits)
end
alias orig_generate_initialization_vector generate_initialization_vector
def generate_initialization_vector( *p )
@vector || orig_generate_initialization_vector( *p )
end
def iv_length() block_size; end
end
end
def test_crypt_encryption
key = '0123456789abcdef0123456789abcdef'
rijndael = Crypt::Rijndael.new( key, 128, 128 )
raise Base64.encode64( rijndael.encrypt_string( 'abcdef' ) )
# returns 'F2wpWlldcZPQlfHOBWZatk8Zq9XNHMRJiB0vC04rZEE='
end
def test_openssl_encryption
key = '0123456789abcdef0123456789abcdef'
alg = "AES-256-CBC"
iv = 'abcdefghijklmnop'
aes = OpenSSL::Cipher::Cipher.new(alg)
aes.encrypt
aes.key = key
aes.iv = iv
out = aes.update('abcdef')
out << aes.final
raise Base64.encode64(out)
# returns 'jQeE5X55BSwJQav1VV w1g=='
end
def test_aes_encryption
key = '0123456789abcdef0123456789abcdef'
iv = 'abcdefghijklmnop'
raise Base64.encode64( Aes.encrypt_buffer(128, 'CBC', key, iv, 'abcdef') )
# returns 'fa3taon6wtaPGQ4KgmLrCQ=='
end