lib/parsel.rb in parsel-0.2.0 vs lib/parsel.rb in parsel-0.3.0
- old
+ new
@@ -4,24 +4,49 @@
require 'parsel/marshal'
require 'parsel/json'
require 'parsel/version'
module Parsel
- def self.encrypt(key, data)
- encode cipher(:encrypt, key, data)
+ DEFAULT_IV = 'f89209ffcdd1a225'.freeze
+ CIPHER = 'AES-256-CBC'.freeze
+
+ def self.default_iv=(iv)
+ @default_iv = iv
end
- def self.decrypt(key, data)
- cipher(:decrypt, key, decode(data))
+ def self.default_iv
+ @default_iv
+ end
+
+ self.default_iv = DEFAULT_IV
+
+ def self.encrypt(*args)
+ encode cipher(:encrypt, *expand_args(args))
+ end
+
+ def self.decrypt(*args)
+ key, iv, data = expand_args(args)
+ cipher(:decrypt, key, iv, decode(data))
rescue Exception
false
end
+ def self.expand_args(args)
+ if args.size == 2
+ iv = default_iv
+ key, data = args
+ else
+ key, iv, data = args
+ end
+
+ [key, iv, data]
+ end
+
private
- def self.cipher(mode, key, data)
- cipher = OpenSSL::Cipher.new('AES-256-CBC').public_send(mode)
+ def self.cipher(mode, key, iv, data)
+ cipher = OpenSSL::Cipher.new(CIPHER).public_send(mode)
cipher.key = Digest::SHA256.digest(key)
- cipher.iv = 'f89209ffcdd1a225'
+ cipher.iv = iv
cipher.update(data) + cipher.final
end
def self.encode(data)
Base64.encode64(data).gsub(/\n/, '')