Class: Decrypt
- Inherits:
-
Object
- Object
- Decrypt
- Defined in:
- lib/decrypt.rb
Class Method Summary collapse
- .aes_decrypt(data, key, iv) ⇒ Object
- .base64_decode(base64_encoded_string) ⇒ Object
- .decrypt_pbkdf2(master_password, data, iterations) ⇒ Object
- .decrypt_ssl(master_key, validation) ⇒ Object
- .derive_openssl(key, content_salt) ⇒ Object
- .derive_pbkdf2(password, salt, iterations) ⇒ Object
Class Method Details
.aes_decrypt(data, key, iv) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/decrypt.rb', line 11 def self.aes_decrypt(data, key, iv) decipher = OpenSSL::Cipher::AES.new(128, :CBC) decipher.decrypt decipher.key = key decipher.iv = iv begin plain = decipher.update(data) plain << decipher.final rescue OpenSSL::Cipher::CipherError nil end end |
.base64_decode(base64_encoded_string) ⇒ Object
4 5 6 7 8 9 |
# File 'lib/decrypt.rb', line 4 def self.base64_decode(base64_encoded_string) decoded_data = base64_encoded_string.unpack('m')[0] salt = decoded_data[8..15] data = decoded_data[16..decoded_data.length-1] {salt: salt, data: data} end |
.decrypt_pbkdf2(master_password, data, iterations) ⇒ Object
42 43 44 45 46 |
# File 'lib/decrypt.rb', line 42 def self.decrypt_pbkdf2(master_password, data, iterations) encrypted = base64_decode(data) key_and_iv = derive_pbkdf2(master_password, encrypted[:salt], iterations) aes_decrypt(encrypted[:data], key_and_iv[:key], key_and_iv[:iv]) end |
.decrypt_ssl(master_key, validation) ⇒ Object
48 49 50 51 52 |
# File 'lib/decrypt.rb', line 48 def self.decrypt_ssl(master_key, validation) encrypted = base64_decode(validation) key_and_iv = derive_openssl(master_key, encrypted[:salt]) aes_decrypt(encrypted[:data], key_and_iv[:key], key_and_iv[:iv]) end |
.derive_openssl(key, content_salt) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/decrypt.rb', line 29 def self.derive_openssl(key, content_salt) key = key[0,1024] key_and_iv = "" prev = "" while key_and_iv.length < 32 do prev = Digest::MD5.digest(prev + key + content_salt) key_and_iv << prev end {key: key_and_iv[0,16], iv: key_and_iv[16..-1]} end |
.derive_pbkdf2(password, salt, iterations) ⇒ Object
24 25 26 27 |
# File 'lib/decrypt.rb', line 24 def self.derive_pbkdf2(password, salt, iterations) key_and_iv = OpenSSL::PKCS5.pbkdf2_hmac_sha1(password, salt, iterations, 32) {key: key_and_iv[0,16], iv: key_and_iv[16..-1]} end |