From c2c3a9ad88bc8fa7cbb54c10f11b1b9ee1f2e936 Mon Sep 17 00:00:00 2001 From: aldo Date: Tue, 4 Dec 2018 13:37:45 -0600 Subject: [PATCH] Refactor in AES class and adaptation to new mifiel standar --- lib/mifiel/crypto.rb | 15 ++++++------ lib/mifiel/crypto/aes.rb | 44 +++++++++++++--------------------- lib/mifiel/crypto/response.rb | 22 ++++++++--------- spec/mifiel/crypto/aes_spec.rb | 11 --------- 4 files changed, 36 insertions(+), 56 deletions(-) diff --git a/lib/mifiel/crypto.rb b/lib/mifiel/crypto.rb index 500f78b..31f9f06 100755 --- a/lib/mifiel/crypto.rb +++ b/lib/mifiel/crypto.rb @@ -1,17 +1,18 @@ -module Mifiel::Crypto - autoload :PBE, 'mifiel/crypto/pbe' - autoload :Response, 'mifiel/crypto/response' - autoload :AES, 'mifiel/crypto/aes' - autoload :ECIES, 'mifiel/crypto/ecies' +module Mifiel + module Crypto + autoload :PBE, 'mifiel/crypto/pbe' + autoload :Response, 'mifiel/crypto/response' + autoload :AES, 'mifiel/crypto/aes' + autoload :ECIES, 'mifiel/crypto/ecies' + end end class String def bth - self.unpack('H*').first + unpack('H*').first end def htb Array(self).pack('H*') end end - diff --git a/lib/mifiel/crypto/aes.rb b/lib/mifiel/crypto/aes.rb index ca44bec..1f155de 100755 --- a/lib/mifiel/crypto/aes.rb +++ b/lib/mifiel/crypto/aes.rb @@ -9,13 +9,15 @@ def self.random_iv(size = SIZE) OpenSSL::Random.random_bytes(size) end - def self.encrypt(args) - aes = Crypto::AES.new(args[:cipher] || CIPHER) + def self.encrypt(cipher: CIPHER, key: nil, iv: nil, data: nil) + aes = Mifiel::Crypto::AES.new(cipher) + args = { cipher: cipher, key: key, iv: iv, data: data } aes.encrypt(args) end - def self.decrypt(args) - aes = Crypto::AES.new(args[:cipher] || CIPHER) + def self.decrypt(cipher: CIPHER, key: nil, iv: nil, data: nil) + aes = Mifiel::Crypto::AES.new(cipher) + args = { cipher: cipher, key: key, iv: iv, data: data } aes.decrypt(args) end @@ -27,35 +29,23 @@ def initialize(cipher_type = CIPHER) end def random_iv(size = SIZE) - Crypto::AES.random_iv(size) + Mifiel::Crypto::AES.random_iv(size) end - def encrypt(args) - validate_args(args) - cipher.encrypt - cipher.key = args[:key] - cipher.iv = args[:iv] - encrypted_data = cipher.update(args[:data]) + cipher.final - Encrypted.new(encrypted_data) + def encrypt(key: nil, iv: nil, data: nil) + iv ||= random_iv + Encrypted.new(cipher_final(key, iv, data, action: :encrypt)) end - def decrypt(args) - validate_args(args) - cipher.decrypt - cipher.key = args[:key] - cipher.iv = args[:iv] - cipher.update(args[:data]) + cipher.final + def decrypt(key: nil, iv: nil, data: nil) + cipher_final(key, iv, data, action: :decrypt) end - private - - def validate_args(args) - keys = args.keys - require_args.each do |a| - unless keys.include?(a) - raise ArgumentError, "Expected keys #{require_args}" - end - end + def cipher_final(key, iv, message, action: :encrypt) + @cipher.send(action) + @cipher.iv = iv + @cipher.key = key + @cipher.update(message) + @cipher.final end end diff --git a/lib/mifiel/crypto/response.rb b/lib/mifiel/crypto/response.rb index 763eb1a..d9d5db0 100755 --- a/lib/mifiel/crypto/response.rb +++ b/lib/mifiel/crypto/response.rb @@ -1,19 +1,19 @@ module Mifiel module Crypto - class Response - attr_reader :data + class Response + attr_reader :data - def ==(other) - data == other.data - end + def ==(other) + data == other.data + end - def initialize(data) - @data = data - end + def initialize(data) + @data = data + end - def to_hex - data.unpack('H*').first + def to_hex + data.unpack('H*').first + end end end - end end diff --git a/spec/mifiel/crypto/aes_spec.rb b/spec/mifiel/crypto/aes_spec.rb index 2372d8b..1a38712 100755 --- a/spec/mifiel/crypto/aes_spec.rb +++ b/spec/mifiel/crypto/aes_spec.rb @@ -43,15 +43,4 @@ end end end - - describe '#AES bad' do - describe 'ArgumentError, sending wrong data to decrypt' do - args = { data: 'bad-data', iv: Mifiel::Crypto::AES.random_iv, key: 'this-aSecure-key' } - let(:expected_error) { "Expected keys #{Mifiel::Crypto::AES.new.require_args}" } - it 'should raise expected error' do - args = {} - expect { Mifiel::Crypto::AES.decrypt(args) }.to raise_error(ArgumentError, expected_error) - end - end - end end