sshkey 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 James Miller
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ = sshkey
2
+
3
+ Generate private/public SSH keys using Ruby without the `ssh-keygen` system command.
4
+
5
+ gem install sshkey
6
+
7
+ Currently requires Ruby 1.9.
8
+
9
+ == Usage
10
+
11
+ Generate an SSH Keypair with foo@bar.com as the comment - providing a comment is optional
12
+
13
+ k = SSHKey.generate(:comment => "foo@bar.com")
14
+
15
+ Return an SSHKey object from an existing RSA Private Key (provided as a string)
16
+
17
+ k = SSHKey.new(File.read("~/.ssh/id_rsa"), :comment => "foo@bar.com")
18
+
19
+ Both of these will return an SSHKey object with the following methods:
20
+
21
+ # Returns an OpenSSL::PKey::RSA key object
22
+ # See http://www.ruby-doc.org/stdlib/libdoc/openssl/rdoc/classes/OpenSSL/PKey/RSA.html
23
+ k.key_object
24
+ # => -----BEGIN RSA PRIVATE KEY-----\nMIIEowI
25
+
26
+ # Returns the RSA Private Key as a string
27
+ k.rsa_private_key
28
+ # => "-----BEGIN RSA PRIVATE KEY-----\nMIIEowI"
29
+
30
+ # Returns the RSA Public Key as a string
31
+ k.rsa_public_key
32
+ # => "-----BEGIN RSA PUBLIC KEY-----\nMIIBCg"
33
+
34
+ # Returns the SSH Public Key as a string
35
+ k.ssh_public_key
36
+ # => "ssh-rsa AAAAB3NzaC1yc2EA...."
37
+
38
+ # Returns the comment as a string
39
+ k.comment
40
+ # => "foo@bar.com"
41
+
42
+ == Copyright
43
+
44
+ Copyright (c) 2011 James Miller
@@ -3,18 +3,18 @@ require 'base64'
3
3
 
4
4
  class SSHKey
5
5
 
6
- def self.generate(comment)
7
- SSHKey.new(OpenSSL::PKey::RSA.generate(2048), comment)
6
+ def self.generate(options = {})
7
+ SSHKey.new(OpenSSL::PKey::RSA.generate(2048).to_pem, options)
8
8
  end
9
9
 
10
10
  attr_reader :key_object, :comment, :rsa_private_key, :rsa_public_key, :ssh_public_key
11
11
 
12
- def initialize(key_object, comment)
13
- @key_object = key_object
14
- @comment = comment
15
- @rsa_private_key = key_object.to_pem
16
- @rsa_public_key = key_object.public_key.to_pem
17
- @ssh_public_key = ["ssh-rsa", Base64.strict_encode64(ssh_public_key_conversion), @comment].join(" ")
12
+ def initialize(private_key, options = {})
13
+ @key_object = OpenSSL::PKey::RSA.new(private_key)
14
+ @comment = options[:comment] || ""
15
+ @rsa_private_key = @key_object.to_pem
16
+ @rsa_public_key = @key_object.public_key.to_pem
17
+ @ssh_public_key = ["ssh-rsa", Base64.strict_encode64(ssh_public_key_conversion), @comment].join(" ").strip
18
18
  end
19
19
 
20
20
  private
@@ -1,3 +1,3 @@
1
1
  class SSHKey
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -67,14 +67,15 @@ EOF
67
67
  FINGERPRINT = "2a:89:84:c9:29:05:d1:f8:49:79:1c:ba:73:99:eb:af"
68
68
 
69
69
  def setup
70
- @key1 = SSHKey.new(OpenSSL::PKey::RSA.new(SSH_PRIVATE_KEY1), "me@example.com")
71
- @key2 = SSHKey.new(OpenSSL::PKey::RSA.new(SSH_PRIVATE_KEY2), "me@example.com")
70
+ @key1 = SSHKey.new(SSH_PRIVATE_KEY1, :comment => "me@example.com")
71
+ @key2 = SSHKey.new(SSH_PRIVATE_KEY2, :comment => "me@example.com")
72
+ @key_without_comment = SSHKey.new(SSH_PRIVATE_KEY1)
72
73
  end
73
74
 
74
75
  def test_private_key1
75
76
  assert_equal SSH_PRIVATE_KEY1, @key1.rsa_private_key
76
77
  end
77
-
78
+
78
79
  def test_private_key2
79
80
  assert_equal SSH_PRIVATE_KEY2, @key2.rsa_private_key
80
81
  end
@@ -82,7 +83,7 @@ EOF
82
83
  def test_ssh_public_key_decoded1
83
84
  assert_equal Base64.strict_decode64(SSH_PUBLIC_KEY1), @key1.send(:ssh_public_key_conversion)
84
85
  end
85
-
86
+
86
87
  def test_ssh_public_key_decoded2
87
88
  assert_equal Base64.strict_decode64(SSH_PUBLIC_KEY2), @key2.send(:ssh_public_key_conversion)
88
89
  end
@@ -90,16 +91,18 @@ EOF
90
91
  def test_ssh_public_key_encoded1
91
92
  assert_equal SSH_PUBLIC_KEY1, Base64.strict_encode64(@key1.send(:ssh_public_key_conversion))
92
93
  end
93
-
94
+
94
95
  def test_ssh_public_key_encoded2
95
96
  assert_equal SSH_PUBLIC_KEY2, Base64.strict_encode64(@key2.send(:ssh_public_key_conversion))
96
97
  end
97
-
98
+
98
99
  def test_ssh_public_key_output
99
- expected1 = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArfTA/lKVR84IMc9ZzXOCHr8DVtR8hzWuEVHF6KElavRHlk14g0SZu3m908Ejm/XF3EfNHjX9wN+62IMA0QBxkBMFCuLF+U/oeUs0NoDdAEKxjj4n6lq6Ss8aLct+anMy7D1jwvOLbcwV54w1d5JDdlZVdZ6AvHm9otwJq6rNpDgdmXY4HgC2nM9csFpuy0cDpL6fdJx9lcNL2RnkRC4+RMsIB+PxDw0j3vDi04dYLBXMGYjyeGH+mIFpL3PTPXGXwL2XDYXZ2H4SQX6bOoKmazTXq6QXuEB665njh1GxXldoIMcSshoJL0hrk3WrTOG22N2CQA+IfHgrXJ+A+QUzKQ== me@example.com"
100
- expected2 = "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxl6TpN7uFiY/JZ8qDnD7UrxDP+ABeh2PVg8Du1LEgXNk0+YWCeP5S6oHklqaWeDlbmAs1oHsBwCMAVpMa5tgONOLvz4JgwgkiqQEbKR8ofWJ+LADUElvqRVGmGiNEMLI6GJWeneL4sjmbb8d6U+M53c6iWG0si9XE5m7teBQSsCl0Tk3qMIkQGw5zpJeCXjZ8KpJhIJRYgexFkGgPlYRV+UYIhxpUW90t0Ra5i6JOFYwq98k5S/6SJIZQ/A9F4JNzwLw3eVxZj0yVHWxkGz1+TyELNY1kOyMxnZaqSfGzSQJTrnIXpdweVHuYh1LtOgedRQhCyiELeSMGwio1vRPKw== me@example.com"
100
+ expected1 = "ssh-rsa #{SSH_PUBLIC_KEY1} me@example.com"
101
+ expected2 = "ssh-rsa #{SSH_PUBLIC_KEY2} me@example.com"
102
+ expected3 = "ssh-rsa #{SSH_PUBLIC_KEY1}"
101
103
  assert_equal expected1, @key1.ssh_public_key
102
104
  assert_equal expected2, @key2.ssh_public_key
105
+ assert_equal expected3, @key_without_comment.ssh_public_key
103
106
  end
104
107
 
105
108
  def test_exponent
@@ -115,7 +118,9 @@ EOF
115
118
  def test_to_byte_array
116
119
  ba1 = @key1.send(:to_byte_array, 35)
117
120
  ba2 = @key1.send(:to_byte_array, 65537)
121
+ ba3 = [0, 1, 255, 256, -1, -128, -256].map{|i| @key1.send(:to_byte_array, i)}
118
122
  assert_equal [35], ba1
119
123
  assert_equal [1, 0, 1], ba2
124
+ assert_equal [[0], [1], [0, 255], [1, 0], [255], [128], [255, 0]], ba3
120
125
  end
121
126
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: sshkey
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.0.0
5
+ version: 1.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - James Miller
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-12 00:00:00 -08:00
13
+ date: 2011-03-12 23:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies: []
16
16
 
@@ -26,6 +26,8 @@ extra_rdoc_files: []
26
26
  files:
27
27
  - .gitignore
28
28
  - Gemfile
29
+ - LICENSE
30
+ - README.rdoc
29
31
  - Rakefile
30
32
  - lib/sshkey.rb
31
33
  - lib/sshkey/version.rb
@@ -55,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
55
57
  requirements: []
56
58
 
57
59
  rubyforge_project: sshkey
58
- rubygems_version: 1.5.1
60
+ rubygems_version: 1.6.2
59
61
  signing_key:
60
62
  specification_version: 3
61
63
  summary: SSH private/public key generator in Ruby