module CiderCi::OpenSession::Encryptor

Public Instance Methods

decrypt(secret, encrypted_message) click to toggle source
# File lib/cider_ci/open_session/encryptor.rb, line 12
def decrypt(secret, encrypted_message)
  iv, encrypted_data, sig = encrypted_message.split('~').map { |m| decode(m) }
  CiderCi::OpenSession::Signature.validate! sig, secret, encrypted_data
  cipher = create_cipher :decrypt, secret
  cipher.iv = iv
  decrypted_data = cipher.update(encrypted_data)
  decrypted_data << cipher.final
  JSON.parse(decrypted_data)
end
encrypt(secret, message_object) click to toggle source
# File lib/cider_ci/open_session/encryptor.rb, line 22
def encrypt(secret, message_object)
  cipher = create_cipher :encrypt, secret
  iv = cipher.random_iv
  encrypted_data = cipher.update(message_object.to_json)
  encrypted_data << cipher.final
  sig = CiderCi::OpenSession::Signature.create secret, encrypted_data
  "#{encode iv}~#{encode encrypted_data}~#{encode sig}"
end

Private Instance Methods

create_cipher(mode, secret) click to toggle source
# File lib/cider_ci/open_session/encryptor.rb, line 33
def create_cipher(mode, secret)
  OpenSSL::Cipher::Cipher.new('aes-256-cbc').tap do |c|
    c.send mode
    c.key = Digest::SHA256.digest(secret)
  end
end