ejson 0.4.0 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d196aa010f463d032df01e73e296fee007ab032d
4
- data.tar.gz: 22256d7a3eb5779e059f94f6d709a78dff3f2aba
3
+ metadata.gz: edf2ad7b024d89456d694953b6710bd2e6d41761
4
+ data.tar.gz: 2ea3452b0e34fb1401a078f1cee4b81e0b595ce4
5
5
  SHA512:
6
- metadata.gz: 0145e7b10b201d63dad67d8ead58debf9c294364070721ab9c0fb481bd5aa4bc96ab0e279945315bb54481cd6806bfec440c8a105768aa3065b286cac66d72e6
7
- data.tar.gz: ffc080d94d6fb9bcd353c0195ff83de2c92d75a544ff774aac1fddaa0859e6d989e362d1192cbfdc16db2764ddc1d54f06a758931f2f19a95805381c41f9572f
6
+ metadata.gz: e7801843e1f8e78e796f43ef8fe4131131351e27777c3aacd66cbba110aafc58a60268c43d91849df3b4d92356940a8493a416f638145730bac4466a92f432c8
7
+ data.tar.gz: 3c59e675ea9276bf587eb174cb1f62210917683f89ca3d676dd38674bb092404140f5d80034283a6fb127d6e6baffd9cb01069c7fcda0dccd69130d9d8d6d6ef
data/bin/ejson CHANGED
@@ -1,4 +1,14 @@
1
1
  #!/usr/bin/env ruby
2
+ platform = `uname -sm`
2
3
 
3
- require 'ejson/cli'
4
- EJSON::CLI.start
4
+ dir = case platform
5
+ when /^Darwin/ ; "darwin-amd64"
6
+ when /^Linux.*64/ ; "linux-amd64"
7
+ else
8
+ puts "Ejson is not supported on your platform."
9
+ end
10
+
11
+ bindir = File.expand_path("../../build/#{dir}", __FILE__)
12
+ ENV['PATH'] = "#{bindir}:#{ENV['PATH']}"
13
+ ENV['MANPATH'] = File.expand_path("../../man", __FILE__)
14
+ exec "ejson", *ARGV
Binary file
Binary file
data/ejson.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
3
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'ejson/version'
2
+ require File.expand_path('../lib/ejson/version', __FILE__)
3
+
4
+ files = File.read("MANIFEST").lines.map(&:chomp)
5
5
 
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "ejson"
@@ -13,11 +13,8 @@ Gem::Specification.new do |spec|
13
13
  spec.homepage = "https://github.com/Shopify/ejson"
14
14
  spec.license = "MIT"
15
15
 
16
- spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
+ spec.files = files
17
+ spec.executables = ["ejson"]
18
+ spec.test_files = []
19
19
  spec.require_paths = ["lib"]
20
-
21
- spec.add_runtime_dependency "thor", "~> 0.18"
22
- spec.add_development_dependency "rake", "~> 10.3.2"
23
20
  end
data/lib/ejson/version.rb CHANGED
@@ -1,3 +1,3 @@
1
- class EJSON
2
- VERSION = "0.4.0"
1
+ module EJSON
2
+ VERSION = "1.0.0.rc1"
3
3
  end
Binary file
Binary file
Binary file
Binary file
Binary file
metadata CHANGED
@@ -1,43 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ejson
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Burke Libbey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-17 00:00:00.000000000 Z
12
- dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: thor
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - "~>"
18
- - !ruby/object:Gem::Version
19
- version: '0.18'
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - "~>"
25
- - !ruby/object:Gem::Version
26
- version: '0.18'
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 10.3.2
34
- type: :development
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 10.3.2
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
+ dependencies: []
41
13
  description: Secret management by encrypting values in a JSON hash with a public/private
42
14
  keypair
43
15
  email:
@@ -47,20 +19,17 @@ executables:
47
19
  extensions: []
48
20
  extra_rdoc_files: []
49
21
  files:
50
- - ".gitignore"
51
- - Gemfile
52
22
  - LICENSE.txt
53
- - README.md
54
- - Rakefile
55
23
  - bin/ejson
24
+ - build/darwin-amd64/ejson
25
+ - build/linux-amd64/ejson
56
26
  - ejson.gemspec
57
- - lib/ejson.rb
58
- - lib/ejson/cli.rb
59
- - lib/ejson/encryption.rb
60
27
  - lib/ejson/version.rb
61
- - test/ejson_test.rb
62
- - test/privatekey.pem
63
- - test/publickey.pem
28
+ - man/man1/ejson-decrypt.1.gz
29
+ - man/man1/ejson-encrypt.1.gz
30
+ - man/man1/ejson-keygen.1.gz
31
+ - man/man1/ejson.1.gz
32
+ - man/man5/ejson.5.gz
64
33
  homepage: https://github.com/Shopify/ejson
65
34
  licenses:
66
35
  - MIT
@@ -76,16 +45,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
76
45
  version: '0'
77
46
  required_rubygems_version: !ruby/object:Gem::Requirement
78
47
  requirements:
79
- - - ">="
48
+ - - ">"
80
49
  - !ruby/object:Gem::Version
81
- version: '0'
50
+ version: 1.3.1
82
51
  requirements: []
83
52
  rubyforge_project:
84
53
  rubygems_version: 2.2.2
85
54
  signing_key:
86
55
  specification_version: 4
87
56
  summary: Asymmetric keywise encryption for JSON
88
- test_files:
89
- - test/ejson_test.rb
90
- - test/privatekey.pem
91
- - test/publickey.pem
57
+ test_files: []
data/.gitignore DELETED
@@ -1,17 +0,0 @@
1
- *.gem
2
- *.rbc
3
- .bundle
4
- .config
5
- .yardoc
6
- Gemfile.lock
7
- InstalledFiles
8
- _yardoc
9
- coverage
10
- doc/
11
- lib/bundler/man
12
- pkg
13
- rdoc
14
- spec/reports
15
- test/tmp
16
- test/version_tmp
17
- tmp
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in ejson.gemspec
4
- gemspec
data/README.md DELETED
@@ -1,61 +0,0 @@
1
- # EJSON
2
-
3
- EJSON is a small library to manage encrypted secrets using PKCS7 (asymmetric)
4
- encryption. It provides a simple command interface to manage and update secrets
5
- in a JSON file where keys are cleartext and values are encrypted.
6
-
7
- ## Installation
8
-
9
- It's on rubygems. Just `gem install ejson` or add it to your `Gemfile`.
10
-
11
- ## Usage
12
-
13
- #### 1) Create a `secrets.ejson`:
14
-
15
- echo '{"a": "b"}' > config/secrets.production.ejson
16
-
17
- Keys in this file will remain in cleartext, while values will all be encrypted.
18
- It can be arbitrarily nested.
19
-
20
- #### 2) Encrypt the file:
21
-
22
- ejson
23
-
24
- This updates `config/secrets.ejson` in place, encrypting any newly-added or
25
- modified values that are not yet encrypted. `ejson` is short-hand for `ejson encrypt`.
26
-
27
- By default, it uses a public key that you won't be able to decrypt (and
28
- shouldn't use because we *can* decrypt it!). You can use your own by following
29
- the "Custom keypair" directions below. Feel free to fork the gem to reference
30
- your own keypair by default.
31
-
32
- #### 3) Decrypt the file:
33
-
34
- ejson decrypt -k ~/.keys/ejson.priv.pem -p config/ejson.pub.pem secrets.production.ejson > secrets.production.json
35
- # OR
36
- ejson decrypt -i -k ~/.keys/ejson.priv.pem -p config/ejson.pub.pem secrets.production.ejson
37
-
38
- Unlike encrypt, decrypt doesn't update the file in-place; it prints the
39
- decrypted contents to stdout. It also requires access to the private key
40
- created in step 1. By default, the secrets will be decrypted to stdout,
41
- but passing the `-i` flag causes them to be overwritten to the input file.
42
-
43
- #### See `ejson help` for more information.
44
-
45
- ## Custom keypair:
46
-
47
- We use a single keypair internally; the default public key is fetched from S3
48
- on each run. However, you can generate your own keypair like so:
49
-
50
- openssl req -x509 -nodes -days 100000 -newkey rsa:2048 -keyout privatekey.pem -out publickey.pem -subj '/'
51
-
52
- `publickey.pem` and `privatekey.pem` are created. Move `privatekey.pem`
53
- somewhere more private, and move `publickey.pem` somewhere more public.
54
-
55
- Then you can encrypt like:
56
-
57
- ejson encrypt -p publickey.pem secrets.ejson
58
-
59
- If you'd like to fork the gem to reference your own public key, that
60
- information lives around line 10 of `lib/ejson/cli.rb`.
61
-
data/Rakefile DELETED
@@ -1,7 +0,0 @@
1
- require "bundler/gem_tasks"
2
-
3
- task default: :test
4
-
5
- task :test do
6
- exec "ruby -I./lib test/ejson_test.rb"
7
- end
data/lib/ejson/cli.rb DELETED
@@ -1,94 +0,0 @@
1
- require 'thor'
2
- require 'json'
3
- require 'ejson'
4
- require 'net/http'
5
-
6
- class EJSON
7
-
8
- class CLI < Thor
9
- class_option "privkey", type: :string, aliases: "-k", desc: "Path to PKCS7 private key in PEM format"
10
- class_option "pubkey", type: :string, aliases: "-p", desc: "Path or URL to PKCS7 public key in PEM format", default: "https://s3.amazonaws.com/shopify-ops/ejson-publickey.pem"
11
-
12
- default_task :encrypt
13
-
14
- desc "decrypt [file]", "decrypt some data from file to stdout"
15
- method_option :out, type: :string, default: false, aliases: "-o", desc: "Write to a file rather than stdout"
16
- def decrypt(file)
17
- ciphertext = File.read(file)
18
- ej = EJSON.new(pubkey, options[:privkey])
19
- output = JSON.pretty_generate(ej.load(ciphertext).decrypt_all)
20
- if options[:out]
21
- File.open(options[:out], "w") { |f| f.puts output }
22
- puts "Wrote #{output.size} bytes to #{options[:out]}"
23
- else
24
- puts output
25
- end
26
- rescue EJSON::Encryption::PrivateKeyMissing => e
27
- fatal("can't decrypt data without private key (specify path with -k)", e)
28
- rescue EJSON::Encryption::ExpectedEncryptedString => e
29
- fatal("can't decrypt data with cleartext strings (use ejson recrypt first)", e)
30
- end
31
-
32
- desc "encrypt [file=**/*.ejson]", "encrypt an ejson file in place (encrypt any unencrypted values)"
33
- def encrypt(file="**/*.ejson")
34
- ej = EJSON.new(pubkey)
35
- fpaths = Dir.glob(file)
36
- if fpaths.empty?
37
- fatal("no ejson files found!", nil)
38
- end
39
- fpaths.each do |fpath|
40
- data = ej.load(File.read(fpath))
41
- dump = data.dump
42
- File.open(fpath, "w") { |f| f.puts dump }
43
- puts "Wrote #{dump.size+1} bytes to #{fpath}"
44
- end
45
- rescue OpenSSL::X509::CertificateError => e
46
- fatal("invalid certificate", e)
47
- end
48
-
49
- desc "version", "show version information"
50
- def version
51
- require 'ejson/version'
52
- puts "ejson version #{EJSON::VERSION}"
53
- end
54
-
55
- private
56
-
57
- def fatal(str, err=str)
58
- raise err if defined?(Minitest)
59
- msg = $stderr.tty? ? "\x1b[31m#{str}\x1b[0m" : str
60
- $stderr.puts msg
61
- exit 1
62
- end
63
-
64
- def get_input(file)
65
- return File.read(file) if file
66
- $stdin.read
67
- end
68
-
69
- def pubkey
70
- @pubkey ||= _pubkey
71
- end
72
-
73
- def _pubkey
74
- if options[:pubkey] =~ %r{https://}
75
- uri = URI.parse(options[:pubkey])
76
- http = Net::HTTP.new(uri.host, uri.port)
77
- http.use_ssl = true
78
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
79
- req = Net::HTTP::Get.new(URI.parse(options[:pubkey]).request_uri)
80
- resp = http.request(req)
81
- resp.value # raises on code >399
82
- f = Tempfile.new("pubkey")
83
- f.write resp.body
84
- f.close
85
- at_exit { f.unlink }
86
- f.path
87
- else
88
- options[:pubkey]
89
- end
90
- end
91
-
92
- end
93
- end
94
-
@@ -1,62 +0,0 @@
1
- require 'openssl'
2
- require 'base64'
3
-
4
- class EJSON
5
-
6
- class Encryption
7
- PrivateKeyMissing = Class.new(StandardError)
8
- ExpectedEncryptedString = Class.new(StandardError)
9
-
10
- def initialize(public_key, private_key)
11
- @public_key_x509 = load_public_key(public_key)
12
- if private_key
13
- @private_key_rsa = load_private_key(private_key)
14
- end
15
- end
16
-
17
- ENCRYPTED = /\AENC\[(.*)\]\n*\z/m
18
-
19
- def load(str)
20
- if str =~ ENCRYPTED
21
- decrypt_string($1)
22
- else
23
- raise ExpectedEncryptedString
24
- end
25
- end
26
-
27
- def dump(str)
28
- if str =~ ENCRYPTED
29
- str
30
- else
31
- "ENC[#{encrypt_string(str)}]"
32
- end
33
- end
34
-
35
- private
36
-
37
- def encrypt_string(plaintext)
38
- cipher = OpenSSL::Cipher::AES.new(256, :CBC)
39
- bin = OpenSSL::PKCS7.encrypt([@public_key_x509], plaintext, cipher, OpenSSL::PKCS7::BINARY).to_der
40
- Base64.encode64(bin).tr("\n",'')
41
- end
42
-
43
- def decrypt_string(ciphertext)
44
- raise PrivateKeyMissing unless @private_key_rsa
45
- bin = Base64.decode64(ciphertext)
46
- pkcs7 = OpenSSL::PKCS7.new(bin)
47
- pkcs7.decrypt(@private_key_rsa, @public_key_x509)
48
- end
49
-
50
- def load_public_key(public_key)
51
- OpenSSL::X509::Certificate.new(get_pem(public_key))
52
- end
53
-
54
- def load_private_key(private_key)
55
- OpenSSL::PKey::RSA.new(get_pem(private_key))
56
- end
57
-
58
- def get_pem(string)
59
- string =~ /^-----BEGIN/ ? string : File.read(string)
60
- end
61
- end
62
- end
data/lib/ejson.rb DELETED
@@ -1,81 +0,0 @@
1
- require 'json'
2
- require 'forwardable'
3
- require 'ejson/encryption'
4
-
5
- class EJSON
6
- extend Forwardable
7
- def_delegators :@encryption, :load_string, :dump_string
8
-
9
- def initialize(public_key, private_key = nil)
10
- @encryption = Encryption.new(public_key, private_key)
11
- end
12
-
13
- def load(json_text)
14
- Data.new(JSON.load(json_text), @encryption)
15
- end
16
-
17
- def serializer
18
- @serializer ||= Serializer.new(@encryption)
19
- end
20
-
21
- class Serializer
22
-
23
- def initialize(encryption)
24
- @encryption = encryption
25
- end
26
-
27
- def dump(data)
28
- data = Data.new(data, @encryption) unless data.is_a?(Data)
29
- data.dump
30
- end
31
-
32
- def load(data)
33
- Data.new(JSON.parse(data), @encryption).decrypt_all
34
- end
35
-
36
- end
37
-
38
- class Data
39
- extend Forwardable
40
- def_delegators :@data, :[]=
41
-
42
- attr_reader :encryption
43
- def initialize(data, encryption)
44
- @data, @encryption = data, encryption
45
- end
46
-
47
- def dump
48
- JSON.pretty_generate(encrypt_all(@data))
49
- end
50
-
51
- def encrypt_all(data=@data)
52
- case data
53
- when Hash
54
- Hash[ data.map { |k,v| [k, encrypt_all(v)] } ]
55
- when Array
56
- data.map { |d| encrypt_all(d) }
57
- when String
58
- encryption.dump(data)
59
- else
60
- data
61
- end
62
- end
63
-
64
- def decrypt_all(data=@data)
65
- case data
66
- when Hash
67
- Hash[ data.map { |k,v| [k, decrypt_all(v)] } ]
68
- when Array
69
- data.map { |d| decrypt_all(d) }
70
- when String
71
- encryption.load(data)
72
- else
73
- data
74
- end
75
- end
76
-
77
- end
78
-
79
- end
80
-
81
-
data/test/ejson_test.rb DELETED
@@ -1,124 +0,0 @@
1
- require 'minitest/autorun'
2
- require 'tempfile'
3
-
4
- require 'ejson/cli'
5
-
6
- class CLITest < Minitest::Unit::TestCase
7
-
8
- def test_ejson
9
- f = Tempfile.new("encrypt")
10
-
11
- f.puts JSON.dump({a: "b"})
12
- f.close
13
-
14
- encrypt f.path
15
-
16
- first_run = JSON.load(File.read(f.path))
17
- assert_match(/\AENC\[MIIB.*\]\z/, first_run["a"])
18
-
19
- File.open(f.path, "w") { |f2|
20
- f2.puts JSON.dump(first_run.merge({new_key: "new_value"}))
21
- }
22
-
23
- encrypt f.path
24
-
25
- second_run = JSON.load(File.read(f.path))
26
-
27
- assert_equal first_run["a"], second_run["a"]
28
- assert_match(/\AENC\[MIIB.*\]\z/, second_run["new_key"])
29
-
30
- val = JSON.parse(decrypt(f.path))
31
- assert_equal({"a" => "b", "new_key" => "new_value"}, val)
32
- ensure
33
- File.unlink(f.path)
34
- end
35
-
36
- def test_inplace
37
- f = Tempfile.new("encrypt")
38
-
39
- f.puts JSON.dump({a: "b"})
40
- f.close
41
-
42
- runcli "encrypt", "-p", pubkey, f.path
43
- encrypted = JSON.load(File.read(f.path))
44
- assert_match(/\AENC\[MIIB.*\]\z/, encrypted["a"])
45
-
46
- runcli "decrypt", "-o", f.path, "-p", pubkey, "-k", privkey, f.path
47
- decrypted = JSON.load(File.read(f.path))
48
- refute_match(/\AENC\[MIIB.*\]\z/, decrypted["a"])
49
- ensure
50
- File.unlink(f.path)
51
- end
52
-
53
- def test_default_key_exists
54
- f = Tempfile.new("encrypt")
55
-
56
- f.puts JSON.dump({a: "b"})
57
- f.close
58
-
59
- runcli "encrypt", f.path # no pubkey specified
60
-
61
- first_run = JSON.load(File.read(f.path))
62
- # We don't have the decryption key to this, and it may change over time,
63
- # so just make sure it was encrypted.
64
- assert_match(/\AENC\[MIIB.*\]\z/, first_run["a"])
65
- ensure
66
- File.unlink(f.path)
67
- end
68
-
69
- def test_library_is_picky
70
- f = Tempfile.new("decrypt")
71
- f.puts JSON.dump({a: "b"})
72
- f.close
73
- assert_raises(EJSON::Encryption::ExpectedEncryptedString) {
74
- decrypt(f.path)
75
- }
76
- ensure
77
- File.unlink(f.path)
78
- end
79
-
80
- def test_key_strings
81
- public_key = File.read(pubkey)
82
- private_key = File.read(privkey)
83
-
84
- @enc = EJSON::Encryption.new(public_key, private_key)
85
-
86
- assert_equal public_key, @enc.instance_variable_get(:@public_key_x509).to_s
87
- assert_equal private_key, @enc.instance_variable_get(:@private_key_rsa).to_s
88
- end
89
-
90
- def test_serializer_api
91
- serializer = EJSON.new(pubkey, privkey).serializer
92
- data = {'foo' => 'bar'}
93
-
94
- assert_equal data, serializer.load(serializer.dump(data))
95
- end
96
-
97
- def test_serializer_safety
98
- serializer = EJSON.new(pubkey, privkey).serializer
99
- refute serializer.dump('foo' => 'bar').include?('bar')
100
- end
101
-
102
- private
103
-
104
- def encrypt(path)
105
- runcli "encrypt", "-p", pubkey, path
106
- end
107
-
108
- def decrypt(path)
109
- runcli "decrypt", "-p", pubkey, "-k", privkey, path
110
- end
111
-
112
- def runcli(*args)
113
- sio = StringIO.new
114
- _stdout, $stdout = $stdout, sio
115
- EJSON::CLI.start(args)
116
- sio.string.chomp
117
- ensure
118
- $stdout = _stdout
119
- end
120
-
121
- def pubkey ; File.expand_path("../publickey.pem", __FILE__); end
122
- def privkey ; File.expand_path("../privatekey.pem", __FILE__); end
123
-
124
- end
data/test/privatekey.pem DELETED
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEogIBAAKCAQEAunMnKCNM9NRDvaANZ3wSBTM7EA4fl3ix/QjwCp3k118n7+Jf
3
- 1DpdBAjqbx0jWVUZHjKan4t4ZHkCTKW4BXGzdEWVkFebYtYdxCm9DAiHFV53RscI
4
- gVmzrxxpC8Lxa7RApam1iGPK7TXXlkMe+2d3Jij1hZdCHCYT48/DDBRtIEcXCZRg
5
- nFkoSuvGbGwMBCxVhLTnvveIF5IgBV3la3vPJFfY62Hafuinpsy/hL4108pbrQcq
6
- oiyb3OgflTe6JrBmA29qqWoCLAW+6XRgcHsOUfTYiBx6XFHQ42SfzQhu+FY57a38
7
- Q3TkZLOb6abE6t5lsBqnJoE+dL/2WjLkhxQ/jQIDAQABAoIBAErqjBg/nuNdCt79
8
- mYU0QBVg0WGRGzaEo5fVaIYLjXDQZj6oCfM/hDJj1rbQ0WxKmi4dDS4AH17XlInx
9
- qHBfkEiu0PrPiLr857bzQme8YXK/o1OIE63NujopQzgbm1+4bKVj/HISDu6jTL2u
10
- uJsxpplpqcWE0mZ3ElTeHTQUXQizdz12DPn5vgXvtVS0yFFBErE7aAKorRRFoLPq
11
- OcajLIMODMo6huUAJW7uYR6PT6uwbt3Phc+VLQtdXpCCfLtDJK427G/5uJ/2vnY/
12
- rLVWConeNZcUDWRuc34agiXA4yjErXdKXJ/yiEdz2pKtAerf+N9VCoIBLBala3oL
13
- 2BeMYY0CgYEA848omruvavfp4dJimdEHj0yTsFFggGHefoJWHG8Cvgyv9avISiAk
14
- T5gB01pSjpTTGL+Ba2aeSPKgKZcGNjp/F5xzeZzuP2tMxT8bs2FR3y9tGmLnhvF8
15
- JkKtlHilrGLt4pWh9eF+jiLDDmJE1N3fCU8TtIva+a/M60ZORA5ZSrcCgYEAw/k3
16
- sJs72xhUhjrNdpzww5dpHYxmoOxhCTyKG1H0r4sQ0Jv9w4K3mrphp/WRygA2LylO
17
- iCEc+56JJ6l4A6rdSFyV+YRtcdU7TKi9sarMDVBttqWsDkr/bnIIHE+QQhsScEBH
18
- e7rHE+1NP5rPfDB7ibBJ3QCOCpjHbkhUGAZIU9sCgYBa176RWAepoiY98DaOoIRt
19
- UmaTkQapW9ec4Ag2OsGPGTRYMWZXH33rogqsRjgcri2+QU+IO5I2KyjJ2maau17D
20
- 87quVXYXeXH87/jpAxeCYzIScWlhz5g6vQv5ILbKgWuw45axGxYU9apDJyv9KXQT
21
- CMeUw8U88/E+n855W9C6KQKBgGtfKU7+zl2tR+o/X4FEXXmchIAnA7fZqxTHcZek
22
- YJ6pX+4b+X5cKUKCKa0/k8AMO6O9SwS0t894vgbYCCRiQlk6OQV7tAcxYAsRTNWC
23
- Ecidr27p+IngN3EI0z7HrO87K/AKl9/HpvlZBAD8Tf/qBFWdG+sVOb2+lU3sHP8I
24
- uioPAoGAVWyvmQsABl3ydPrvVl4zk3AHm3Bnouy1vM1RchQzXp6OD/u5mNGJ37Ks
25
- zIgipj/z9xf4J3ii5w0Qnxusq9Zy/6xKO1pgIEhiJUAYcm5jHGC51n7Y+d1NUPe1
26
- gnJAzuwmvbefN800tmZJtWv7dWSc7whoFsdR1rNwrlZXUoNJzPk=
27
- -----END RSA PRIVATE KEY-----
data/test/publickey.pem DELETED
@@ -1,18 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIC5jCCAc6gAwIBAgIJAKY1nRwN7afeMA0GCSqGSIb3DQEBBQUAMAAwIBcNMTQw
3
- MzE0MTc1ODQzWhgPMjI4NzEyMjgxNzU4NDNaMAAwggEiMA0GCSqGSIb3DQEBAQUA
4
- A4IBDwAwggEKAoIBAQC6cycoI0z01EO9oA1nfBIFMzsQDh+XeLH9CPAKneTXXyfv
5
- 4l/UOl0ECOpvHSNZVRkeMpqfi3hkeQJMpbgFcbN0RZWQV5ti1h3EKb0MCIcVXndG
6
- xwiBWbOvHGkLwvFrtEClqbWIY8rtNdeWQx77Z3cmKPWFl0IcJhPjz8MMFG0gRxcJ
7
- lGCcWShK68ZsbAwELFWEtOe+94gXkiAFXeVre88kV9jrYdp+6KemzL+EvjXTylut
8
- ByqiLJvc6B+VN7omsGYDb2qpagIsBb7pdGBwew5R9NiIHHpcUdDjZJ/NCG74Vjnt
9
- rfxDdORks5vppsTq3mWwGqcmgT50v/ZaMuSHFD+NAgMBAAGjYTBfMB0GA1UdDgQW
10
- BBTzh5Sf8+voPm2ZI6iHFQ+gItYb6zAwBgNVHSMEKTAngBTzh5Sf8+voPm2ZI6iH
11
- FQ+gItYb66EEpAIwAIIJAKY1nRwN7afeMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
12
- AQEFBQADggEBACr61pBSpsz931OUztFcDjm07u+vatM5XE5qAH18BZeKbXzCRz4j
13
- 9cAEYIYrtBdJZj3RLDzKB3Hn38BeuXebb4UlbzPJwIj1klHKH90Nwl84XWBCJqPX
14
- rsGv7C5EOLAR1w/hxT+K2JC2LDJz9hkuDU1hjX1MeRpnJwXzPbHBQvgYb4lIgaOb
15
- ikSlcTpkdG5fGafanyZwxDeQsy4tHAUP/jRQ4/Xzkzp0GzuX+v9d+2FXJLyoh6vJ
16
- Fze3kL1+RH13Fn5NkdTAHpkX9AX0BuLKWslY3I/lusn3x9kPxVQTmTF2WQTVdKDg
17
- FDvqWYvyLcuiWcfNUdy3EOpKLBKyyan3DZ8=
18
- -----END CERTIFICATE-----