openssl_pkcs8_pure 0.0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 426aed5ceace29df7aaa9d2c3d1b310aa84979b7
4
+ data.tar.gz: 72f09cc19f9665dae7b6307cf75d522017728d0c
5
+ SHA512:
6
+ metadata.gz: d74b3f6a992ed5c24f43c5b8206d90c108f0a9ecc4e12e112670851b1ed7d386bcf3808713c6cbc1c57b801c0e3806601add814035a3b9aac28705831cc91937
7
+ data.tar.gz: b6e45f41f429425410eed5a0fb971200efb5f15d518abadb22353bee4ecb4f3509d5a7dc9e4b2cfbecf90bff67a9c8ace65c72d1d06cb35f7132d5e3e5ac4b88
@@ -0,0 +1 @@
1
+ service_name: travis-ci
@@ -0,0 +1,19 @@
1
+ .DS_Store
2
+
3
+ *.gem
4
+ *.rbc
5
+ .bundle
6
+ .config
7
+ .yardoc
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
19
+ Gemfile.lock
@@ -0,0 +1,27 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - ree
5
+ - 1.9.2
6
+ - 1.9.3
7
+ - 2.0.0
8
+ - 2.1.0
9
+ - 2.1.7
10
+ - 2.2.0
11
+ - 2.2.3
12
+ - ruby-head
13
+ - jruby-18mode
14
+ - jruby-19mode
15
+ - jruby-20mode
16
+ - jruby-21mode
17
+ - jruby-head
18
+ - rbx-2
19
+ matrix:
20
+ allow_failures:
21
+ - rvm: ruby-head
22
+ - rvm: jruby-head
23
+ - rvm: jruby-18mode
24
+ - rvm: jruby-19mode
25
+ - rvm: jruby-20mode
26
+ - rvm: jruby-21mode
27
+ - rvm: rbx-2
@@ -0,0 +1,4 @@
1
+ # ChangeLog
2
+
3
+ ## 0.0.0.1 (2017 Mar 2)
4
+ - First release.
data/Gemfile ADDED
@@ -0,0 +1,17 @@
1
+ source "http://rubygems.org"
2
+
3
+ platforms :rbx do
4
+ gem 'rubysl'
5
+ end
6
+
7
+ group :development, :test do
8
+ if RUBY_VERSION<'1.9'
9
+ gem 'mime-types', '~> 1.0'
10
+ gem 'rest-client', '~> 1.6.0'
11
+ end
12
+ gem 'bundler', '>= 1.0'
13
+ gem 'rake'
14
+ gem 'rspec'
15
+ gem 'simplecov'
16
+ gem 'coveralls', :require => false
17
+ end
@@ -0,0 +1,21 @@
1
+ - Copyright (c) 2017, T. Yamada
2
+
3
+ Redistribution and use in source and binary forms, with or without
4
+ modification, are permitted provided that the following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this
7
+ list of conditions and the following disclaimer.
8
+ 2. Redistributions in binary form must reproduce the above copyright notice,
9
+ this list of conditions and the following disclaimer in the documentation
10
+ and/or other materials provided with the distribution.
11
+
12
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
13
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
14
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
16
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
17
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
18
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
19
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
20
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,39 @@
1
+ # openssl_pkcs8_pure
2
+ - Add `OpenSSL::PKey::DSA#to_pem_pkcs8`, `OpenSSL::PKey::RSA#to_pem_pkcs8`, `OpenSSL::PKey::EC#to_pem_pkcs8`.
3
+ - There used to be an attempt [openssl_pkcs8](https://github.com/twg/openssl_pkcs8), but it was over in incomplete form...
4
+ - This openssl_pkcs8_pure is written in Ruby (I say "pure"), so it will not have incompatibility...
5
+
6
+ [![Build Status](https://travis-ci.org/cielavenir/openssl_pkcs8_pure.png)](https://travis-ci.org/cielavenir/openssl_pkcs8_pure) [![Code Climate](https://codeclimate.com/github/cielavenir/openssl_pkcs8_pure.png)](https://codeclimate.com/github/cielavenir/openssl_pkcs8_pure) [![Coverage Status](https://coveralls.io/repos/cielavenir/openssl_pkcs8_pure/badge.png)](https://coveralls.io/r/cielavenir/openssl_pkcs8_pure)
7
+
8
+ ## Supported Ruby versions
9
+ * Ruby 1.8.7 or later
10
+ * jruby
11
+ * rubinius
12
+ * (Possibly) ironruby / macruby / topaz etc
13
+
14
+ ## Caveats
15
+ * Passphrase is not supported yet.
16
+ * On Ruby 1.8, the output PEM's Base64 folding is different from original openssl.
17
+
18
+ ## Binary distribution
19
+ * https://rubygems.org/gems/openssl_pkcs8_pure
20
+
21
+ ## Install
22
+ * gem install openssl_pkcs8_pure
23
+
24
+ ## Usage
25
+ * Please check spec/openssl_pkcs8_pure.spec as an example.
26
+ * Also you can refer to ctouch/zip.rb (the first motivation is that Chrome WebStore only accepts PKCS8 key).
27
+
28
+ ## Contributing to openssl_pkcs8_pure
29
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
30
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
31
+ * Fork the project.
32
+ * Start a feature/bugfix branch.
33
+ * Commit and push until you are happy with your contribution.
34
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
35
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
36
+
37
+ ## Copyright
38
+ Copyright (c) 2017 T. Yamada under Ruby License (2-clause BSDL or Artistic).
39
+ See LICENSE.txt for further details.
@@ -0,0 +1,37 @@
1
+ require 'bundler/gem_tasks'
2
+
3
+ ### below are copied from jeweler ###
4
+
5
+ require 'rake'
6
+ # Clean up after gem building
7
+ require 'rake/clean'
8
+ CLEAN.include('pkg/*.gem')
9
+ CLOBBER.include('coverage')
10
+
11
+ require 'rspec/core'
12
+ require 'rspec/core/rake_task'
13
+ RSpec::Core::RakeTask.new(:spec) do |spec|
14
+ spec.pattern = FileList['spec/**/*_spec.rb']
15
+ end
16
+
17
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
18
+ spec.pattern = 'spec/**/*_spec.rb'
19
+ spec.rcov = true
20
+ end
21
+
22
+ task :default => :spec
23
+
24
+ begin
25
+ require 'rdoc/task'
26
+ Rake::RDocTask.new do |rdoc|
27
+ rdoc.rdoc_dir = 'rdoc'
28
+ rdoc.title = 'openssl_pkcs8_pure'
29
+ rdoc.main = 'README.md'
30
+ rdoc.rdoc_files.include('README.*')
31
+ rdoc.rdoc_files.include('LICENSE.*')
32
+ rdoc.rdoc_files.include('CHANGELOG.*')
33
+ rdoc.rdoc_files.include('lib/**/*.rb')
34
+ end
35
+ rescue Exception #LoadError # Thus rdoc generation is limited to Ruby 1.9.3+...
36
+ #Ruby 1.9.2 gives another Exception. I cannot limit to LoadError...
37
+ end
@@ -0,0 +1,79 @@
1
+ # openssl_pkcs8_pure: Output OpenSSL private key in PKCS8 format written with pure Ruby
2
+ #
3
+ # Copyright (c) 2017, T. Yamada under Ruby License (2-clause BSDL or Artistic).
4
+ #
5
+ # Check LICENSE terms.
6
+ #
7
+ # Note: MIT License is also applicable if that compresses LICENSE file.
8
+
9
+ require 'openssl'
10
+ require 'base64'
11
+
12
+ # See http://ruby-doc.org/stdlib/libdoc/openssl/rdoc/OpenSSL/PKey/DSA.html
13
+ class OpenSSL::PKey::DSA
14
+ # Returns DSA (private) key in PKCS#8 DER format.
15
+ def to_der_pkcs8
16
+ #if public, just use x509 default output
17
+ return to_der if !private?
18
+ asn1=OpenSSL::ASN1.decode(to_der).to_a
19
+ OpenSSL::ASN1::Sequence([
20
+ OpenSSL::ASN1::Integer(0),
21
+ OpenSSL::ASN1::Sequence([
22
+ OpenSSL::ASN1::ObjectId("DSA"),
23
+ OpenSSL::ASN1::Sequence([asn1[1],asn1[2],asn1[3]])
24
+ ]),
25
+ OpenSSL::ASN1::OctetString(asn1[5].to_der)
26
+ ]).to_der
27
+ end
28
+ # Returns DSA (private) key in PKCS#8 PEM format.
29
+ def to_pem_pkcs8
30
+ return to_pem if !private?
31
+ body=RUBY_VERSION<'1.9' ? Base64.encode64(to_der_pkcs8) : Base64.strict_encode64(to_der_pkcs8).chars.each_slice(64).map(&:join).join("\n")+"\n"
32
+ "-----BEGIN PRIVATE KEY-----\n"+body+"-----END PRIVATE KEY-----\n"
33
+ end
34
+ end
35
+
36
+ # See http://ruby-doc.org/stdlib/libdoc/openssl/rdoc/OpenSSL/PKey/RSA.html
37
+ class OpenSSL::PKey::RSA
38
+ # Returns RSA (private) key in PKCS#8 DER format.
39
+ def to_der_pkcs8
40
+ #if public, just use x509 default output
41
+ return to_der if !private?
42
+ OpenSSL::ASN1::Sequence([
43
+ OpenSSL::ASN1::Integer(0),
44
+ OpenSSL::ASN1::Sequence([OpenSSL::ASN1::ObjectId("rsaEncryption"),OpenSSL::ASN1::Null(nil)]),
45
+ OpenSSL::ASN1::OctetString(to_der)
46
+ ]).to_der
47
+ end
48
+ # Returns RSA (private) key in PKCS#8 PEM format.
49
+ def to_pem_pkcs8
50
+ return to_pem if !private?
51
+ body=RUBY_VERSION<'1.9' ? Base64.encode64(to_der_pkcs8) : Base64.strict_encode64(to_der_pkcs8).chars.each_slice(64).map(&:join).join("\n")+"\n"
52
+ "-----BEGIN PRIVATE KEY-----\n"+body+"-----END PRIVATE KEY-----\n"
53
+ end
54
+ end
55
+
56
+ # See http://ruby-doc.org/stdlib/libdoc/openssl/rdoc/OpenSSL/PKey/EC.html
57
+ class OpenSSL::PKey::EC
58
+ # Returns EC (private) key in PKCS#8 DER format.
59
+ def to_der_pkcs8
60
+ #[todo] OpenSSL::PKey::EC#public_key does not respond to to_pem
61
+ #return to_der if !private?
62
+ asn1=OpenSSL::ASN1.decode(to_der).to_a
63
+ #curve_name=asn1[2].value[0].value
64
+ curve_name=group.curve_name
65
+ asn1.delete_at(2)
66
+ asn1=OpenSSL::ASN1::Sequence(asn1)
67
+ OpenSSL::ASN1::Sequence([
68
+ OpenSSL::ASN1::Integer(0),
69
+ OpenSSL::ASN1::Sequence([OpenSSL::ASN1::ObjectId("id-ecPublicKey"),OpenSSL::ASN1::ObjectId(curve_name)]),
70
+ OpenSSL::ASN1::OctetString(asn1.to_der)
71
+ ]).to_der
72
+ end
73
+ # Returns EC (private) key in PKCS#8 PEM format.
74
+ def to_pem_pkcs8
75
+ #return to_pem if !private?
76
+ body=RUBY_VERSION<'1.9' ? Base64.encode64(to_der_pkcs8) : Base64.strict_encode64(to_der_pkcs8).chars.each_slice(64).map(&:join).join("\n")+"\n"
77
+ "-----BEGIN PRIVATE KEY-----\n"+body+"-----END PRIVATE KEY-----\n"
78
+ end
79
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "openssl_pkcs8_pure"
5
+ spec.version = "0.0.0.1"
6
+ spec.authors = ["cielavenir"]
7
+ spec.email = ["cielartisan@gmail.com"]
8
+ spec.description = "OpenSSL::PKey::[DSA/RSA/EC]#to_pem_pkcs8 written in Ruby"
9
+ spec.summary = "OpenSSL::PKey::[DSA/RSA/EC]#to_pem_pkcs8 written in Ruby"
10
+ spec.homepage = "http://github.com/cielavenir/openssl_pkcs8_pure"
11
+ spec.license = "Ruby License (2-clause BSDL or Artistic)"
12
+
13
+ spec.files = `git ls-files`.split($/) + [
14
+ "LICENSE.txt",
15
+ "README.md",
16
+ "CHANGELOG.md",
17
+ ]
18
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
19
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
+
21
+ spec.require_paths = ["lib"]
22
+
23
+ spec.add_development_dependency "bundler", ">= 1.0"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec"
26
+ end
@@ -0,0 +1,50 @@
1
+ require File.expand_path(File.dirname(__FILE__)+'/spec_helper')
2
+
3
+ def getarchive(f)
4
+ arc={}
5
+ seq=''
6
+ line=f.gets
7
+ line.chomp!
8
+ name=line[1..-1]
9
+ while line=f.gets
10
+ line.chomp!
11
+ if line[0,1]=='>'
12
+ arc[name]=seq
13
+ seq=''
14
+ name=line[1..-1]
15
+ else
16
+ seq+=line+"\n"
17
+ end
18
+ end
19
+ arc[name]=seq
20
+ arc
21
+ end
22
+
23
+ #spec_keys.txt: fasta-like editable text archive
24
+ arc=File.open(File.expand_path(File.dirname(__FILE__)+'/spec_keys.txt')){|f|getarchive(f)}
25
+
26
+ ['DSA','RSA','EC'].each{|type|
27
+ describe "OpenSSL::PKey::"+type do
28
+ klass=OpenSSL::PKey.const_get(type)
29
+ it "reads PKCS1 key" do
30
+ klass.new(arc[type+'_PKCS1']).is_a?(klass).should be true
31
+ end
32
+ it "converts PKCS1 to PKCS8" do
33
+ pending 'PEM Line fold is different on Ruby 1.8' if RUBY_VERSION<'1.9'
34
+ pkcs8=klass.new(arc[type+'_PKCS1']).to_pem_pkcs8
35
+ pkcs8.should eq arc[type+'_PKCS8']
36
+ klass.new(pkcs8).is_a?(klass).should be true
37
+ end
38
+ if RUBY_VERSION>='1.9'&&ENV['OPENSSL']
39
+ it "converts PKCS1 to correct PKCS8" do
40
+ pkcs8=klass.new(arc[type+'_PKCS1']).to_pem_pkcs8
41
+ pkcs8_io=IO.popen(ENV['OPENSSL']+' pkcs8 -topk8 -nocrypt','r+b'){|io|
42
+ io.puts arc[type+'_PKCS1']
43
+ io.close_write
44
+ io.read
45
+ }
46
+ pkcs8.should eq pkcs8_io
47
+ end
48
+ end
49
+ end
50
+ }
@@ -0,0 +1,18 @@
1
+ require 'rspec'
2
+ RSpec.configure{|config|
3
+ config.color=true
4
+ }
5
+
6
+ if !defined?(RUBY_ENGINE)||RUBY_ENGINE=='ruby'
7
+ require 'simplecov'
8
+ require 'coveralls'
9
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
10
+ SimpleCov::Formatter::HTMLFormatter,
11
+ Coveralls::SimpleCov::Formatter
12
+ ]
13
+ SimpleCov.start do
14
+ add_filter 'spec'
15
+ end
16
+ end
17
+
18
+ require File.expand_path(File.dirname(__FILE__)+'/../lib/openssl_pkcs8_pure')
@@ -0,0 +1,48 @@
1
+ >DSA_PKCS1
2
+ -----BEGIN DSA PRIVATE KEY-----
3
+ MIH3AgEAAkEAscT3hm7HicX9VhumQbsUQzT9TbfxXPD0h6iu3JCyszW9l1JPlDMS
4
+ bX83QRcFbk05VeHDeNsQSs6tCWt1Dnp30QIVAPjyOsiYrwensikFyI34NzQzJsXP
5
+ AkAMS1ID8P5GlkWGU0U17Ajnm2+m1yJaF9iNchpR4ZL0jPjnbrFD5nH6UlTgQ+Tq
6
+ JxJr/+b1iOGSBjDY5K4ta9WaAkA8/y/AcfV51omuRlyVROb4GPl8am1ZN5U2NgXJ
7
+ vdOeccjSTylf63N7cEQEBVhkQNl96xGX8w8H/UsIupBPWCDJAhRew81kK+aTpNVH
8
+ xM6EDU/NJwuoQw==
9
+ -----END DSA PRIVATE KEY-----
10
+ >DSA_PKCS8
11
+ -----BEGIN PRIVATE KEY-----
12
+ MIHGAgEAMIGoBgcqhkjOOAQBMIGcAkEAscT3hm7HicX9VhumQbsUQzT9TbfxXPD0
13
+ h6iu3JCyszW9l1JPlDMSbX83QRcFbk05VeHDeNsQSs6tCWt1Dnp30QIVAPjyOsiY
14
+ rwensikFyI34NzQzJsXPAkAMS1ID8P5GlkWGU0U17Ajnm2+m1yJaF9iNchpR4ZL0
15
+ jPjnbrFD5nH6UlTgQ+TqJxJr/+b1iOGSBjDY5K4ta9WaBBYCFF7DzWQr5pOk1UfE
16
+ zoQNT80nC6hD
17
+ -----END PRIVATE KEY-----
18
+ >RSA_PKCS1
19
+ -----BEGIN RSA PRIVATE KEY-----
20
+ MIIBOwIBAAJBALGYSCj7lUf6ahUUTAAXdJYNGvDNdgvnXZZD+Rz98ARFecyCem8j
21
+ OjoLO1kNLEKhL/vZQ61++ShCnOX/KQCSNBkCAwEAAQJAbtwOf3a8sxfATLRE1PHP
22
+ VzOLE7JN9BRTOU/pG43w29iwWYdhrShoBW/X8LrpAhkTID7koe+NzmvJt2ifDVZu
23
+ eQIhANydQVT9rhdfezGp7R8SLJTyo0h7YfHyDA5tgQAiJcxTAiEAzhSWCthIVirZ
24
+ V/0T2cuU8y9x5h1mQbVVVKrqLRY1EGMCIQCW+f9l3J2xXSR/3lxqMRPVcx+PUPC8
25
+ lPrvPL1VjAj2BQIhAKYCm2QdGxie5/sjmiwm/dRxcfWH1Wo1Y4oTLRYo/5I1AiBg
26
+ EQyL5G3fKkJxAA+ludJJ63cZpk6tUVB83+GSCG3/iA==
27
+ -----END RSA PRIVATE KEY-----
28
+ >RSA_PKCS8
29
+ -----BEGIN PRIVATE KEY-----
30
+ MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAsZhIKPuVR/pqFRRM
31
+ ABd0lg0a8M12C+ddlkP5HP3wBEV5zIJ6byM6Ogs7WQ0sQqEv+9lDrX75KEKc5f8p
32
+ AJI0GQIDAQABAkBu3A5/dryzF8BMtETU8c9XM4sTsk30FFM5T+kbjfDb2LBZh2Gt
33
+ KGgFb9fwuukCGRMgPuSh743Oa8m3aJ8NVm55AiEA3J1BVP2uF197MantHxIslPKj
34
+ SHth8fIMDm2BACIlzFMCIQDOFJYK2EhWKtlX/RPZy5TzL3HmHWZBtVVUquotFjUQ
35
+ YwIhAJb5/2XcnbFdJH/eXGoxE9VzH49Q8LyU+u88vVWMCPYFAiEApgKbZB0bGJ7n
36
+ +yOaLCb91HFx9YfVajVjihMtFij/kjUCIGARDIvkbd8qQnEAD6W50knrdxmmTq1R
37
+ UHzf4ZIIbf+I
38
+ -----END PRIVATE KEY-----
39
+ >EC_PKCS1
40
+ -----BEGIN EC PRIVATE KEY-----
41
+ MD4CAQEEDhIwr8BkcC4o3dXj4U5OoAcGBSuBBAAHoSADHgAEuT1oRhSZ+OIC2Fn2
42
+ fmoBbrViVTkSuv/xrlxXyQ==
43
+ -----END EC PRIVATE KEY-----
44
+ >EC_PKCS8
45
+ -----BEGIN PRIVATE KEY-----
46
+ ME4CAQAwEAYHKoZIzj0CAQYFK4EEAAcENzA1AgEBBA4SMK/AZHAuKN3V4+FOTqEg
47
+ Ax4ABLk9aEYUmfjiAthZ9n5qAW61YlU5Err/8a5cV8k=
48
+ -----END PRIVATE KEY-----
metadata ADDED
@@ -0,0 +1,102 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: openssl_pkcs8_pure
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - cielavenir
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-03-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: OpenSSL::PKey::[DSA/RSA/EC]#to_pem_pkcs8 written in Ruby
56
+ email:
57
+ - cielartisan@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".coveralls.yml"
63
+ - ".gitignore"
64
+ - ".travis.yml"
65
+ - CHANGELOG.md
66
+ - Gemfile
67
+ - LICENSE.txt
68
+ - README.md
69
+ - Rakefile
70
+ - lib/openssl_pkcs8_pure.rb
71
+ - openssl_pkcs8_pure.gemspec
72
+ - spec/openssl_pkcs8_pure_spec.rb
73
+ - spec/spec_helper.rb
74
+ - spec/spec_keys.txt
75
+ homepage: http://github.com/cielavenir/openssl_pkcs8_pure
76
+ licenses:
77
+ - Ruby License (2-clause BSDL or Artistic)
78
+ metadata: {}
79
+ post_install_message:
80
+ rdoc_options: []
81
+ require_paths:
82
+ - lib
83
+ required_ruby_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ requirements: []
94
+ rubyforge_project:
95
+ rubygems_version: 2.0.14.1
96
+ signing_key:
97
+ specification_version: 4
98
+ summary: OpenSSL::PKey::[DSA/RSA/EC]#to_pem_pkcs8 written in Ruby
99
+ test_files:
100
+ - spec/openssl_pkcs8_pure_spec.rb
101
+ - spec/spec_helper.rb
102
+ - spec/spec_keys.txt