lib/aes.rb in aes-0.3.0 vs lib/aes.rb in aes-0.4.0

- old
+ new

@@ -1,130 +1,3 @@ require 'openssl' require 'base64' - -class AES - class << self - # Encrypts the plain_text with the provided key - def encrypt(key, plain_text, opts={}) - AES.new(key,opts).encrypt(plain_text) - end - # Decrypts the cipher_text with the provided key - def decrypt(key, cipher_text, opts={}) - AES.new(key,opts).decrypt(cipher_text) - end - # Generates a random key of the specified length in bits - # Default output is - def key(length=256,format=:plain) - key = AES.new("").random_key(256) - case format - when :base_64 - Base64.encode64(key) - else - key - end - end - end - - attr :options - attr :key - attr :cipher - attr :cipher_text - attr :plain_text - - def initialize(key, opts={}) - merge_options opts - @key = key - self - end - - # Encrypts - def encrypt(plain_text) - @plain_text = plain_text - _setup(:encrypt) - case @options[:format] - when :base_64 - @cipher_text = b64_e(_iv) << "$" << b64_e(_encrypt) - else - @cipher_text = [_iv, _encrypt] - end - @cipher_text - end - - # Decrypts - def decrypt(cipher_text) - @cipher_text = cipher_text - _setup(:decrypt) - case @options[:format] - when :base_64 - ctext = b64_d(@cipher_text) - else - ctext = @cipher_text - end - @cipher.iv = ctext[0] - @plain_text = @cipher.update(ctext[1]) + @cipher.final - end - - # Generate a random initialization vector - def random_iv - _setup(:encrypt) - _iv - end - - # Generate a random key - def random_key(length=256) - _random_seed.unpack('H*')[0][0..((length/8)-1)] - #Digest::SHA256.digest(_random_seed)[0..(length / 8)] - end - - private - - # Generates a random seed value - def _random_seed(size=32) - if defined? OpenSSL::Random - return OpenSSL::Random.random_bytes(size) - else - chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a - (1..size).collect{|a| chars[rand(chars.size)] }.join - end - end - - # Un-Base64's the IV and CipherText - # Returns an array containing the IV, and CipherText - def b64_d(data) - iv_ctext = [] - data.split('$').each do |part| - iv_ctext << Base64.decode64(part) - end - iv_ctext - end - - # Base64 Encodes a string - def b64_e(data) - Base64.encode64(data).chomp - end - - # Generates and returns a random initialization vector - def _iv - @cipher.random_iv - end - - # Encrypts @plain_text - def _encrypt - @cipher.update(@plain_text) + @cipher.final - end - - # Merge init options with defaults - def merge_options(opts) - @options = { - :format => :base_64, - :cipher => "AES-256-CBC" - }.merge! opts - end - - # Create a new cipher using the cipher type specified - def _setup(action) - @cipher = OpenSSL::Cipher::Cipher.new(@options[:cipher]) - # Toggles encryption mode - @cipher.send(action) - @cipher.key = @key.unpack('a2'*32).map{|x| x.hex}.pack('c'*32) - end -end \ No newline at end of file +require 'aes/aes'