Sha256: fced1f529979d0eb6e5d5dc475fea13f0c3625c99bd04442bd4d644743f783bd
Contents?: true
Size: 1.32 KB
Versions: 1
Compression:
Stored size: 1.32 KB
Contents
require 'base64' require 'openssl' require 'gooddata/crypto/version' module Gooddata module Crypto class << self # encrypts data with the given key. returns a binary data with the # unhashed random iv in the first 16 bytes def encrypt(data, key) cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc') cipher.encrypt cipher.key = key = Digest::SHA256.digest(key) random_iv = cipher.random_iv cipher.iv = Digest::SHA256.digest(random_iv + key)[0..15] encrypted = cipher.update(data) encrypted << cipher.final # add unhashed iv to front of encrypted data Base64.encode64(random_iv + encrypted) end def decrypt(database64, key) return '' if key.nil? || key.empty? data = Base64.decode64(database64) cipher = OpenSSL::Cipher::Cipher.new('aes-256-cbc') cipher.decrypt cipher.key = cipher_key = Digest::SHA256.digest(key) random_iv = data[0..15] # extract iv from first 16 bytes data = data[16..data.size - 1] cipher.iv = Digest::SHA256.digest(random_iv + cipher_key)[0..15] begin decrypted = cipher.update(data) decrypted << cipher.final rescue puts 'Error' return nil end decrypted end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
gooddata-crypto-0.1.0 | lib/gooddata/crypto.rb |