module ConnectClient::Security

Public Class Methods

bin_to_hex(binary_string) click to toggle source
# File lib/connect_client/security/filtered_key_generation.rb, line 33
def self.bin_to_hex(binary_string)
  binary_string.unpack("H*").first.to_s.upcase
end
generate_filtered_key(key_json, master_key) click to toggle source
# File lib/connect_client/security/filtered_key_generation.rb, line 5
def self.generate_filtered_key(key_json, master_key)
  key = master_key
  key = Digest::SHA256.digest(key) if(key.kind_of?(String) && 32 != key.bytesize)
  aes = OpenSSL::Cipher.new('AES-256-CBC')
  iv = aes.random_iv
  aes.encrypt
  aes.key = key
  aes.iv = iv
  encrypted = aes.update(key_json) + aes.final

  "#{bin_to_hex(iv)}-#{bin_to_hex(encrypted)}"
end
generate_key_json(filtered_key, master_key) click to toggle source
# File lib/connect_client/security/filtered_key_generation.rb, line 18
def self.generate_key_json(filtered_key, master_key)
  iv_and_data = filtered_key.split('-')      
  iv = hex_to_bin(iv_and_data[0])
  encrypted_key_json = hex_to_bin(iv_and_data[1])

  key = master_key
  key = Digest::SHA256.digest(key) if(key.kind_of?(String) && 32 != key.bytesize)
  iv = Digest::MD5.digest(iv) if(iv.kind_of?(String) && 16 != iv.bytesize)
  aes = OpenSSL::Cipher.new('AES-256-CBC')      
  aes.decrypt
  aes.key = key
  aes.iv = iv
  aes.update(encrypted_key_json) + aes.final
end
hex_to_bin(hex_string) click to toggle source
# File lib/connect_client/security/filtered_key_generation.rb, line 37
def self.hex_to_bin(hex_string)
  hex_string.scan(/../).map { |x| x.hex }.pack('c*')
end