secure_string 1.3.0 → 1.3.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/README.rdoc +4 -1
- data/lib/securize_string/rsa_methods.rb +20 -0
- data/spec/rsa_methods_spec.rb +25 -0
- metadata +1 -1
data/README.rdoc
CHANGED
@@ -234,6 +234,9 @@ or directly via e-mail at:
|
|
234
234
|
mailto:jeff@paploo.net
|
235
235
|
|
236
236
|
= Version History
|
237
|
+
[1.3.1 - 2011-Jun-15] Added public key extraction from private keys.
|
238
|
+
* (FEATURE) Public keys can be extracted from private keys using either the
|
239
|
+
separate_keys class method or the extract_public_key instance method.
|
237
240
|
[1.3.0 - 2011-Jun-15] Ruby 1.8 compatibility.
|
238
241
|
* (FEATURE) Emulation urlsafe base64 encodings in ruby 1.8.
|
239
242
|
* (CHANGE) SecureString.new arguments changed to work with ruby 1.8.
|
@@ -274,7 +277,7 @@ mailto:jeff@paploo.net
|
|
274
277
|
* See what happens when including SecurizeString into an object that is not a String.
|
275
278
|
What are the expected root methods? +to_s+, <tt>self.new(string)</tt> are two
|
276
279
|
that I know of.
|
277
|
-
|
280
|
+
|
278
281
|
|
279
282
|
= License
|
280
283
|
|
@@ -32,6 +32,18 @@ module SecurizeString
|
|
32
32
|
return [private_key_obj, public_key_obj].map {|k| self.new( k.send(formatting_method) )}
|
33
33
|
end
|
34
34
|
|
35
|
+
# A convenience method for extracting the private, public keypair from
|
36
|
+
# a private key.
|
37
|
+
#
|
38
|
+
# Returns the same format as +rsa_keygen+, but takes the private key as
|
39
|
+
# a string as a first argument.
|
40
|
+
def separate_keys(pvt_key, format = :pem)
|
41
|
+
private_key_obj = OpenSSL::PKey::RSA.new(pvt_key.to_s)
|
42
|
+
public_key_obj = private_key_obj.public_key
|
43
|
+
formatting_method = (format == :der ? :to_der : :to_pem)
|
44
|
+
return [private_key_obj, public_key_obj].map {|k| self.new( k.send(formatting_method) )}
|
45
|
+
end
|
46
|
+
|
35
47
|
end
|
36
48
|
|
37
49
|
# Adds instance methods for OpenSSL::PKey::RSA support via inclusion of
|
@@ -94,6 +106,14 @@ module SecurizeString
|
|
94
106
|
return key.private?
|
95
107
|
end
|
96
108
|
|
109
|
+
# Interpret the contents of hte string asn a RSA private key, and extract
|
110
|
+
# the public key from it. If the contents are not a private key, then it
|
111
|
+
# will raise an exception.
|
112
|
+
def extract_public_key(format = :pem)
|
113
|
+
pvt, pub = self.class.separate_keys(self, format)
|
114
|
+
return pub
|
115
|
+
end
|
116
|
+
|
97
117
|
end
|
98
118
|
|
99
119
|
end
|
data/spec/rsa_methods_spec.rb
CHANGED
@@ -71,6 +71,31 @@ describe "SecureString" do
|
|
71
71
|
pub_key.private_rsa_key?.should be_false
|
72
72
|
end
|
73
73
|
|
74
|
+
it 'should be able to separate a private key into a public and private key' do
|
75
|
+
[:pem, :der].each do |format|
|
76
|
+
pvt_key, pub_key = SecureString.rsa_keygen(2048, format)
|
77
|
+
|
78
|
+
extracted_pvt_key, extracted_pub_key = SecureString.separate_keys(pvt_key.to_s, format)
|
79
|
+
|
80
|
+
extracted_pvt_key.should be_kind_of(SecureString)
|
81
|
+
extracted_pub_key.should be_kind_of(SecureString)
|
82
|
+
|
83
|
+
extracted_pvt_key.to_s.should == pvt_key.to_s
|
84
|
+
extracted_pub_key.to_s.should == pub_key.to_s
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should be able to extract the public key from a private key string' do
|
89
|
+
[:pem, :der].each do |format|
|
90
|
+
pvt_key, pub_key = SecureString.rsa_keygen(2048, format)
|
91
|
+
|
92
|
+
extracted_pub_key = pvt_key.extract_public_key(format)
|
93
|
+
|
94
|
+
extracted_pub_key.should be_kind_of(SecureString)
|
95
|
+
extracted_pub_key.to_s.should == pub_key.to_s
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
74
99
|
end
|
75
100
|
|
76
101
|
describe "Encryption" do
|