cerebus 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in cerebus.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # Cerebus
2
+
3
+ ## Summary
4
+
5
+ This is a simple library which wraps openssl to provide a (hopefully)
6
+ secure encryption system for arbitrary strings. The aim was to remove
7
+ all the hard stuff and make it blindingly easy to encrypt and decrypt
8
+ strings. Of course, this doesn't mean you can ignore basic crypographic
9
+ best practices. If you store all your keys insecurely then you might as
10
+ well use rot13.
11
+
12
+ ## Examples
13
+
14
+ For regular ruby:
15
+
16
+ ```
17
+ require 'cerebus'
18
+ cleartext = 'It is a secret to everybody!'
19
+ encrypted = Cerebus.encrypt cleartext, 'test/keys/public.pem'
20
+ ```
21
+
22
+ For rails it's the same, just first add it to the Gemfile and bundle install to get openssl.
23
+
24
+ ## Making Keys
25
+
26
+ You can generate some new keys with the included `make_keys.sh` script.
27
+ Be sure to use a good passphrase and keep your private.pem file stored
28
+ safely (whatever that means for the application in question.)
29
+
30
+ ## Bugs
31
+
32
+ Please fix them and send me a pull request. Or create an issue. Or email
33
+ me at jonathan (a.t) blazingdev , com.
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/cerebus.gemspec ADDED
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'cerebus'
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "cerebus"
7
+ s.version = Cerebus::VERSION
8
+ s.summary = "Simple and secure RSA/Blowfish encryption."
9
+ s.description = "An ecryption library which wraps openssl to give users an easy interface to encrypt any file using a publc and private key."
10
+ s.authors = ["Jonathan Jeffus"]
11
+ s.email = 'jonathan@blazingdev.com'
12
+ s.homepage = 'http://github.com/jjeffus/cerebus'
13
+ s.rubyforge_project = "cerebus"
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
+ s.require_paths = ["lib"]
18
+ s.add_runtime_dependency "openssl"
19
+ end
data/decrypt.rb ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require './lib/cerebus.rb'
4
+
5
+ crypted = File.open("final.txt", "r").read
6
+ cleartext = Cerebus.decrypt crypted, 'test/keys/private.pem', 'test'
7
+ puts cleartext
data/encrypt.rb ADDED
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require './lib/cerebus.rb'
4
+
5
+ cleartext = <<CLEARTEXT
6
+ It is a secret to everybody!
7
+ CLEARTEXT
8
+
9
+ out = Cerebus.encrypt cleartext, 'test/keys/public.pem'
10
+ puts out
11
+
12
+ File.open("final.txt", "w").write out
data/lib/cerebus.rb ADDED
@@ -0,0 +1,42 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'openssl'
4
+
5
+ module Cerebus
6
+ VERSION = "0.0.1"
7
+
8
+ def Cerebus.make_key
9
+ OpenSSL::Random.random_bytes(56)
10
+ end
11
+ def Cerebus.decrypt_blowfish(data, key)
12
+ cipher = OpenSSL::Cipher::Cipher.new('bf-cbc').decrypt
13
+ cipher.key = Digest::MD5.digest key.to_s
14
+ cipher.update(data) << cipher.final
15
+ end
16
+ def Cerebus.decrypt_rsa(data, key_filename, passphrase)
17
+ opri = OpenSSL::PKey::RSA.new( File.read(key_filename), passphrase )
18
+ opri.private_decrypt data
19
+ end
20
+ def Cerebus.encrypt_blowfish(data, key)
21
+ cipher = OpenSSL::Cipher::Cipher.new('bf-cbc').encrypt
22
+ cipher.key = Digest::MD5.digest key
23
+ cipher.update(data) << cipher.final
24
+ end
25
+ def Cerebus.encrypt_rsa(data, key_filename)
26
+ opri = OpenSSL::PKey::RSA.new File.read key_filename
27
+ opri.public_encrypt data
28
+ end
29
+ def Cerebus.encrypt(data, key_filename)
30
+ key = Cerebus.make_key
31
+ encrypted_key = Cerebus.encrypt_rsa(key, key_filename).unpack("H*")[0]
32
+ encrypted_data = Cerebus.encrypt_blowfish(data, key).unpack("H*")[0]
33
+ (encrypted_key.to_s + encrypted_data.to_s)
34
+ end
35
+ def Cerebus.decrypt(incoming, key_filename, passphrase)
36
+ data = StringIO.new(incoming)
37
+ encrypted_key = [data.read(512)].pack("H*")
38
+ encrypted_data = [data.read].pack("H*")
39
+ decrypted_key = Cerebus.decrypt_rsa(encrypted_key, key_filename, passphrase)
40
+ decrypted_data = Cerebus.decrypt_blowfish(encrypted_data, decrypted_key)
41
+ end
42
+ end
data/make_keys.sh ADDED
@@ -0,0 +1,5 @@
1
+ # This just documents how to make private/public keypairs that work with
2
+ # the library. Just run it, enter a passphrase and remember it!
3
+
4
+ openssl genrsa -des3 -out private.pem 2048
5
+ openssl rsa -in private.pem -pubout -out public.pem
@@ -0,0 +1,50 @@
1
+ require_relative '../lib/cerebus'
2
+ require 'rspec'
3
+
4
+ describe Cerebus do
5
+ KEY = '01234567890123456789012345678901234567890123456789012345'
6
+ TEXT = 'It is a secret to everybody!'
7
+ CRYPTED = 'c7829fcbf4ae6ff33a22576863f3170a6526e3ab8c786412b8250efc41e4771f'
8
+ PUBLIC = 'keys/public.pem'
9
+ PRIVATE = 'keys/private.pem'
10
+ PHRASE = 'test'
11
+
12
+ describe :make_key do
13
+ it "should return a key that's 56 bytes long" do
14
+ Cerebus.make_key.length.should eq(56)
15
+ end
16
+ end
17
+
18
+ describe :encrypt_blowfix do
19
+ it "should encrypt to the cipher data" do
20
+ Cerebus.encrypt_blowfish(TEXT, KEY).unpack("H*")[0].should eq(CRYPTED)
21
+ end
22
+ end
23
+
24
+ describe :decrypt_blowfix do
25
+ it "should decrypt to the clear text" do
26
+ Cerebus.decrypt_blowfish([CRYPTED].pack("H*"), KEY).should eq(TEXT)
27
+ end
28
+ end
29
+
30
+ describe :rsa do
31
+ it "should be reversible" do
32
+ encrypted = Cerebus.encrypt_rsa(KEY, PUBLIC)
33
+ decrypted = Cerebus.decrypt_rsa(encrypted, PRIVATE, PHRASE)
34
+ decrypted.should eq(KEY)
35
+ end
36
+ end
37
+
38
+ describe :round_trip do
39
+ it 'should encrypt and decrypt small strings' do
40
+ encrypted = Cerebus.encrypt('small', PUBLIC)
41
+ decrypted = Cerebus.decrypt(encrypted, PRIVATE, PHRASE)
42
+ decrypted.should eq('small')
43
+ end
44
+ it 'should encrypt and decrypt big strings' do
45
+ encrypted = Cerebus.encrypt( TEXT*100, PUBLIC)
46
+ decrypted = Cerebus.decrypt(encrypted, PRIVATE, PHRASE)
47
+ decrypted.should eq(TEXT*100)
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,30 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ Proc-Type: 4,ENCRYPTED
3
+ DEK-Info: DES-EDE3-CBC,2AF2AB7CCA8363EC
4
+
5
+ dpPIoXzeTqOdLU8jdDdrNlNF8BeSXXgXJraIi1Dh25hiisIJQDL6tupez8rzNgca
6
+ bKi7gL/31ac72PEM2jofuvIYLUGz1OHy4/+7e93gTS0cYP3tBPxIci7KXVhaCSKO
7
+ 3pzBrxrdv2Ngck438MyIYqSMZD6SJggMt+IAztlGFfPMC76QS83+ghy2/njQ/dAK
8
+ 0218Ul+PBs2LTTkcAO/ZAkfw7WsGajiSfs+EhlKDIZx9VC+wYvE8E/23tawp/8vd
9
+ XbsyBYK3awL61t/Et4qnzDTfFDSBkjPHLo9FoDgzutXBaL9xn3GrlxAgRnoE8ls2
10
+ 6qAcZC5YO8ytKUPZ7ZdUaOeZdepENqMu/cDM9GV1F/SvUGfPUasjq8/ixu9pBmly
11
+ SADVZKFYD1OcULESm7BL9nc8QlIRGm3nTPBj3vmvMrPn7t3Fv+nbDo0C6JgjhZ9O
12
+ utJ4rMs8sGSMsJpgz2oFNpFB6Y5XnGtRTBszj9oczHmjvrwkC57arQcvZogEUzkQ
13
+ +g+9HzGfSl0praHtMlAEljd6cYJR/OhHK9pa27GSxsk3x5dmJNpryEIo4jCmpSGs
14
+ 7o9J2cfAvxsjhCPmyb3R0+BAX9k9WgzG8VQJ3xfNBHJ83/Nr83AgC4UQmQCmrYTZ
15
+ Tb+2rH+w9gT098BHfrUCk50PsrFsenmzGhdJSjW2p+sEttuAzHh8573WErtbdZNf
16
+ ZEjLdHJAOn3NoBL4Gi6N4gjkh2S6HMjqyONOqEZjhFS2ixdmepVpgvdQUY57dH4O
17
+ y58mZd18A/2WOSN05VPCXFwDmQhTBqdM7yn3bdnsgXkRYfoQoobSLHZDiTcRBZWh
18
+ gZETJGBt5WfDfSrQobaYBxnFSDhCOJWeYK5B0iQd4bltZINjcAaGGtHhuZ7vp9qw
19
+ sHwoDzKcWM6GEeAv6QZYiCnbIrzciCap+X8vk+CfDToZOA81SmMP1F5G+iC1QIeC
20
+ +o9ez/LNbO5AfmPPJS0iWuM39LT5MDE62auYEOucs/b5ZVnjozbwXyT6HCV78C4E
21
+ KfXsdcNgytZ3BEEEyPO92P6zu92vKcz+HLcnNBmYDke0YG55XXj0E7XwUOUp5oAU
22
+ B7+ViL1e4gKyPT7U+OvevJxkzgudo5lzQ6fBcCfhCfN758M+Dae/XzMjMPLeEJlI
23
+ 0V0j7dTui1dUK2Y+Nev2swvIH35vZI16s6u6RKDG/4KlbgBKa9FAWuuTkQ58h5yk
24
+ rr6V/6eoq+/9nUVqq5TuBqA/bLYiXzn9wmlTb8uioLLOmDHPYhnliNax6lQwwIUt
25
+ LtxZIi0M7UM/YFUP1U7//iSZRUt0wOTA98kev1AMsut7hDhpaAgk7QyU1Z0g+RSg
26
+ 9HptRtv5RkBl07sqWA+27l0U1fwtQqiutwN1aObBMtDMSaNa1iR8jGiBBrfQDTb1
27
+ jBDjFapCX56LngQiYPbnEwFsyoRDwN42PJj5/j5+MLOAJ+35eDuZ+fZ3nlatAaAq
28
+ Dx80uerocIPXDtZKuGj81XpXxX2fb6BQs5gegbFSIQ3gziUdGmG70lyq3jnnu+V0
29
+ 598qaU0xJgqzOkmIfd5ZAyevM2ODh8lB6JGpz8gKOPY7D8hedF8V3zESKTZMfLsj
30
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,9 @@
1
+ -----BEGIN PUBLIC KEY-----
2
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1sZD3Va4p69oHJtDJpro
3
+ 3wq08AK+lck4Hoemp32HuY0WxhqJnzW15geAhxbf0GTHJkaO3XPKBC5NIwHPruOr
4
+ Xx/04EPImUeS/c8xQxd1wS9aF+aQYVt7yPe5Xd5949eDok6mf2R9ntZP8f/DOOI7
5
+ BtNNsTwTYA7zWQJ9T9NY9B1MAFfHU2SAa5YmKwxqwnbDVvf2rXau7zw3/xgUodWY
6
+ dYruxlwjYdkIFTxevxw1MlCt3g9i7IXlxjbzo22+meRmxM8X1pJFpNWbF3CnlS3d
7
+ shIsStJcimdIAcNnyQIm4D4cJx6C26NBge3XtOPvEsx+b+Qdo2teDMYnANQbBu9a
8
+ WQIDAQAB
9
+ -----END PUBLIC KEY-----
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cerebus
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jonathan Jeffus
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-04-15 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: openssl
16
+ requirement: &70344342031260 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70344342031260
25
+ description: An ecryption library which wraps openssl to give users an easy interface
26
+ to encrypt any file using a publc and private key.
27
+ email: jonathan@blazingdev.com
28
+ executables: []
29
+ extensions: []
30
+ extra_rdoc_files: []
31
+ files:
32
+ - Gemfile
33
+ - README.md
34
+ - Rakefile
35
+ - cerebus.gemspec
36
+ - decrypt.rb
37
+ - encrypt.rb
38
+ - lib/cerebus.rb
39
+ - make_keys.sh
40
+ - test/cerebus_spec.rb
41
+ - test/keys/private.pem
42
+ - test/keys/public.pem
43
+ homepage: http://github.com/jjeffus/cerebus
44
+ licenses: []
45
+ post_install_message:
46
+ rdoc_options: []
47
+ require_paths:
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ! '>='
59
+ - !ruby/object:Gem::Version
60
+ version: '0'
61
+ requirements: []
62
+ rubyforge_project: cerebus
63
+ rubygems_version: 1.8.17
64
+ signing_key:
65
+ specification_version: 3
66
+ summary: Simple and secure RSA/Blowfish encryption.
67
+ test_files:
68
+ - test/cerebus_spec.rb
69
+ - test/keys/private.pem
70
+ - test/keys/public.pem