class Snowden::Crypto

@api private

Attributes

cipher_spec[R]
iv[R]
key[R]
padding_size[R]

Public Class Methods

new(args) click to toggle source
# File lib/snowden/crypto.rb, line 6
def initialize(args)
  @key          = args.fetch(:key)
  @iv           = args.fetch(:iv)
  @cipher_spec  = args.fetch(:cipher_spec)
  @padding_size = args.fetch(:padding_size)
end

Public Instance Methods

decrypt(data) click to toggle source
# File lib/snowden/crypto.rb, line 13
def decrypt(data)
  cipher(:decrypt, data)
end
encrypt(data) click to toggle source
# File lib/snowden/crypto.rb, line 17
def encrypt(data)
  cipher(:encrypt, data)
end
padded_decrypt(data) click to toggle source
# File lib/snowden/crypto.rb, line 25
def padded_decrypt(data)
  decrypt(data)[padding_size..-1]
end
padded_encrypt(data) click to toggle source
# File lib/snowden/crypto.rb, line 21
def padded_encrypt(data)
  encrypt(OpenSSL::Random.random_bytes(padding_size) + data)
end

Private Instance Methods

cipher(mode, data) click to toggle source
# File lib/snowden/crypto.rb, line 33
def cipher(mode, data)
  c = symmetric_cipher
  c.public_send(mode)
  c.key = key
  c.iv  = iv

  c.update(data) + c.final
end
symmetric_cipher() click to toggle source
# File lib/snowden/crypto.rb, line 42
def symmetric_cipher
  OpenSSL::Cipher::Cipher.new(cipher_spec)
end