gibberish 0.0.1 → 0.0.2

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/.gitignore ADDED
@@ -0,0 +1 @@
1
+ *.gem
data/README.markdown CHANGED
@@ -37,6 +37,11 @@ Defaults to 256 bit digest
37
37
  Gibberish::HMAC("key", "some data")
38
38
  #=> 521677c580722c5c52fa15d978e8656341c4f3c5
39
39
 
40
- ## PKI
41
-
42
- Coming soon
40
+ ## RSA
41
+
42
+ k = Gibberish::RSA.generate_keypair(1024)
43
+ cipher = Gibberish::RSA.new(k.public_key, k.private_key)
44
+ enc = cipher.encrypt("Some data")
45
+ # Defaults to Base64 output
46
+ #=> "JKm98wKyJljqmpx7kP8ZsdeXiShllEMcRHVnjUjc4ecyYK/doKAkVTLho1Gp\ng697qrljyClF0AcIH+XZmeF/TrqYUuCEUyhOD6OL1bs5dn8vFQefS5KdaC5Y\ndLADvh3mSfE/w/gs4vaf/OtbZNBeSl6ROCZasWTfRewp4n1RDmE=\n"
47
+ dec = cipher.decrypt(enc)
data/lib/gibberish.rb CHANGED
@@ -3,3 +3,4 @@ require 'base64'
3
3
  require 'gibberish/aes'
4
4
  require 'gibberish/digest'
5
5
  require 'gibberish/hmac'
6
+ require 'gibberish/rsa'
@@ -0,0 +1,52 @@
1
+ module Gibberish
2
+ class RSA
3
+
4
+ class KeyPair
5
+ def self.generate(bits=2048)
6
+ self.new(OpenSSL::PKey::RSA.generate(bits))
7
+ end
8
+
9
+ def initialize(key)
10
+ @key = key
11
+ end
12
+
13
+ def public_key
14
+ @key.public_key
15
+ end
16
+
17
+ def private_key
18
+ @key.to_pem
19
+ end
20
+
21
+ end
22
+
23
+ def RSA.generate_keypair(bits=2048)
24
+ KeyPair.generate(bits)
25
+ end
26
+
27
+ # Expects a public key at the minumum
28
+ #
29
+ def initialize(public_key, private_key=nil)
30
+ @pub_key = OpenSSL::PKey::RSA.new(public_key)
31
+ @priv_key = OpenSSL::PKey::RSA.new(private_key)
32
+ end
33
+
34
+ def encrypt(data, opts={})
35
+ enc = @pub_key.public_encrypt(data)
36
+ if opts[:binary]
37
+ enc
38
+ else
39
+ Base64.encode64(enc)
40
+ end
41
+ end
42
+
43
+ def decrypt(data, opts={})
44
+ raise "No private key set!" unless @priv_key
45
+ unless opts[:binary]
46
+ data = Base64.decode64(data)
47
+ end
48
+ @priv_key.private_decrypt(data)
49
+ end
50
+ end
51
+
52
+ end
@@ -1,3 +1,3 @@
1
1
  module Gibberish
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/spec/rsa_spec.rb ADDED
@@ -0,0 +1,43 @@
1
+ require 'spec_helper'
2
+
3
+ describe "RSA key generation" do
4
+ it "should generate a key" do
5
+ keypair = Gibberish::RSA.generate_keypair
6
+ keypair.should be_instance_of(Gibberish::RSA::KeyPair)
7
+ end
8
+
9
+ it "should generate a key with custom bits" do
10
+ keypair = Gibberish::RSA.generate_keypair(1024)
11
+ keypair.should be_instance_of(Gibberish::RSA::KeyPair)
12
+ end
13
+
14
+ it "should answer to public and private key methods" do
15
+ keypair = Gibberish::RSA.generate_keypair(1024)
16
+ keypair.should be_instance_of(Gibberish::RSA::KeyPair)
17
+ keypair.public_key.should_not be_nil
18
+ keypair.private_key.should_not be_nil
19
+ end
20
+
21
+ end
22
+
23
+ describe "RSA" do
24
+ before do
25
+ k = Gibberish::RSA.generate_keypair(1024)
26
+ @cipher = Gibberish::RSA.new(k.public_key, k.private_key)
27
+ @pub_cipher = Gibberish::RSA.new(k.public_key, k.private_key)
28
+ end
29
+
30
+ it "should encrypt/decrypt with a keypair" do
31
+ encrypted = @cipher.encrypt("Some data")
32
+ p encrypted
33
+ decrypted = @cipher.decrypt(encrypted)
34
+ encrypted.should match(/^[a-zA-Z0-9\+\\\n=]+$/) # Be base64
35
+ decrypted.should eql("Some data")
36
+ end
37
+
38
+ it "should work without private key" do
39
+ enc = @pub_cipher.encrypt("Some data")
40
+ enc.should_not be_nil
41
+ end
42
+
43
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gibberish
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- version: 0.0.1
9
+ - 2
10
+ version: 0.0.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mark Percival
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-28 00:00:00 -07:00
18
+ date: 2011-03-29 00:00:00 -07:00
19
19
  default_executable:
20
20
  dependencies: []
21
21
 
@@ -29,6 +29,7 @@ extensions: []
29
29
  extra_rdoc_files: []
30
30
 
31
31
  files:
32
+ - .gitignore
32
33
  - Gemfile
33
34
  - Gemfile.lock
34
35
  - README.markdown
@@ -37,10 +38,12 @@ files:
37
38
  - lib/gibberish/aes.rb
38
39
  - lib/gibberish/digest.rb
39
40
  - lib/gibberish/hmac.rb
41
+ - lib/gibberish/rsa.rb
40
42
  - lib/gibberish/version.rb
41
43
  - spec/aes_spec.rb
42
44
  - spec/digest_spec.rb
43
45
  - spec/hmac_spec.rb
46
+ - spec/rsa_spec.rb
44
47
  - spec/spec_helper.rb
45
48
  has_rdoc: true
46
49
  homepage: http://github.com/mdp/gibberish
@@ -80,4 +83,5 @@ test_files:
80
83
  - spec/aes_spec.rb
81
84
  - spec/digest_spec.rb
82
85
  - spec/hmac_spec.rb
86
+ - spec/rsa_spec.rb
83
87
  - spec/spec_helper.rb