Module: Cerebus

Defined in:
lib/cerebus.rb

Constant Summary collapse

VERSION =
"0.0.3"

Class Method Summary collapse

Class Method Details

.decrypt(incoming, key_filename, passphrase) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/cerebus.rb', line 35

def Cerebus.decrypt(incoming, key_filename, passphrase)
  data           = StringIO.new(incoming)
  encrypted_key  = [data.read(512)].pack("H*")
  encrypted_data = [data.read].pack("H*")
  decrypted_key  = Cerebus.decrypt_rsa(encrypted_key, key_filename, passphrase)
  decrypted_data = Cerebus.decrypt_blowfish(encrypted_data, decrypted_key)
end

.decrypt_blowfish(data, key) ⇒ Object



11
12
13
14
15
# File 'lib/cerebus.rb', line 11

def Cerebus.decrypt_blowfish(data, key)
  cipher     = OpenSSL::Cipher::Cipher.new('bf-cbc').decrypt
  cipher.key = Digest::MD5.digest key.to_s
  cipher.update(data) << cipher.final
end

.decrypt_rsa(data, key_filename, passphrase) ⇒ Object



16
17
18
19
# File 'lib/cerebus.rb', line 16

def Cerebus.decrypt_rsa(data, key_filename, passphrase)
  opri       = OpenSSL::PKey::RSA.new( File.read(key_filename), passphrase )
  opri.private_decrypt data
end

.encrypt(data, key_filename) ⇒ Object



29
30
31
32
33
34
# File 'lib/cerebus.rb', line 29

def Cerebus.encrypt(data, key_filename)
  key            = Cerebus.make_key
  encrypted_key  = Cerebus.encrypt_rsa(key, key_filename).unpack("H*")[0]
  encrypted_data = Cerebus.encrypt_blowfish(data, key).unpack("H*")[0]
  (encrypted_key.to_s + encrypted_data.to_s)
end

.encrypt_blowfish(data, key) ⇒ Object



20
21
22
23
24
# File 'lib/cerebus.rb', line 20

def Cerebus.encrypt_blowfish(data, key)
  cipher     = OpenSSL::Cipher::Cipher.new('bf-cbc').encrypt
  cipher.key = Digest::MD5.digest key
  cipher.update(data) << cipher.final
end

.encrypt_rsa(data, key_filename) ⇒ Object



25
26
27
28
# File 'lib/cerebus.rb', line 25

def Cerebus.encrypt_rsa(data, key_filename)
  opri       = OpenSSL::PKey::RSA.new File.read key_filename
  opri.public_encrypt data
end

.make_keyObject



8
9
10
# File 'lib/cerebus.rb', line 8

def Cerebus.make_key
  OpenSSL::Random.random_bytes(56)
end