openssl_pkcs8_pure 0.0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.coveralls.yml +1 -0
- data/.gitignore +19 -0
- data/.travis.yml +27 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +17 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +37 -0
- data/lib/openssl_pkcs8_pure.rb +79 -0
- data/openssl_pkcs8_pure.gemspec +26 -0
- data/spec/openssl_pkcs8_pure_spec.rb +50 -0
- data/spec/spec_helper.rb +18 -0
- data/spec/spec_keys.txt +48 -0
- metadata +102 -0
checksums.yaml
ADDED
@@ -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
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
@@ -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
|
data/CHANGELOG.md
ADDED
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
|
data/LICENSE.txt
ADDED
@@ -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.
|
data/README.md
ADDED
@@ -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.
|
data/Rakefile
ADDED
@@ -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
|
+
}
|
data/spec/spec_helper.rb
ADDED
@@ -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')
|
data/spec/spec_keys.txt
ADDED
@@ -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
|