password_list_generator 0.4.4 → 0.4.5

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14ec229ec1b4d16718129820ccfb099e31f902f4
4
- data.tar.gz: fa5fe3f5e8b9be74f2c6fbc0518e043daf6f2dcd
3
+ metadata.gz: 9bdd1cef551224b9ebf74dec8a0821d389944a07
4
+ data.tar.gz: 40baf3adb4abbce4ffcab230ca45d7dee295ce2c
5
5
  SHA512:
6
- metadata.gz: b6341b42a9d6e4cd2e23444265e2e2bfac502e065f4171bf4decf154c2bdfa7fcaaf9539d17d7aa57295c84af6e464914f0874b3d761c8029b0e786bebe2bdca
7
- data.tar.gz: ac0133d4ad4b8007336ba30f7d427f0c879460aeb3a07c2c08143fea72fde33ba6b95a774c4dd49eb1a725780dfec60a9a8d771ff66c21eb5bccb787e8c3e9c4
6
+ metadata.gz: 09525abe4be43b69596b119a294e388ad262a2dac5777bbd7667365803795fb9488566f5ca6fda1e331ced6e534e02854e3c7d88833c84d142157699105242c9
7
+ data.tar.gz: a7837d70e510f2a5772534759ada21100efd9d9bcda39a8a4c0774e306d2551abfced25b1d959319db8a3461456d03002be08ce396ce3531b7fb21843a04274d
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
+ /.DS_Store
1
2
  /password_list_generator*.gem
2
3
  /password.txt
3
4
  /coverage/
data/Guardfile CHANGED
@@ -9,8 +9,8 @@ guard :minitest do
9
9
 
10
10
  # with Minitest::Spec
11
11
  watch(%r{^spec/(.*)_spec\.rb})
12
+ watch(%r{^lib/password_list_generator/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
12
13
  watch(%r{^lib/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
13
- watch(%r{^lib/password_generator/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
14
14
  watch(%r{^bin/pwgen}) { |m| "spec/lib/pwgen_spec.rb" }
15
15
  watch(%r{^spec/spec_helper\.rb}) { 'spec' }
16
16
  end
data/README.md CHANGED
@@ -9,22 +9,29 @@ PasswordListGenerator
9
9
 
10
10
  ## Description
11
11
 
12
- Generate a list of passwords from the command line
12
+ Generate a list of passwords from the command line. The complexity of the password can be passed in through the CLI.
13
13
 
14
14
  ## Installation
15
15
 
16
- gem install password_list_generator
16
+ PasswordListGenerator is cryptographically signed. To be sure the gem you install hasn't been tampered with:
17
+
18
+ Add my public key (if you haven't already) as a trusted certificate gem
19
+
20
+ > gem cert --add <(curl -Ls https://raw.github.com/stephaneliu/password_generator/master/certs/stephaneliu_gem.pem)
21
+ > gem install password_list_generator -P HighSecurity.
22
+
23
+ Warning: This may cause installation to fail if non-signed depenedent gems are also being installed.
17
24
 
18
25
  ## Usage
19
26
 
20
- > pwgen
21
- > pwgen -h --> see more options
27
+ > pwgen
28
+ > pwgen -h # see more options
22
29
 
23
30
  ## Contributing
24
31
 
25
32
  1. Fork it
26
33
  2. Create your feature branch (`git checkout -b my-awesomie-feature`)
27
- 3. Commit your changes (`git commit -am 'Add some awesome feature'`)
34
+ 3. Commit your changes (`git commit -am 'My some awesome feature'`)
28
35
  4. Push to branch (`git push origin my-awesome-feature`)
29
36
  5. Create a new Pull Request
30
37
 
data/bin/pwgen CHANGED
@@ -91,17 +91,23 @@ end
91
91
 
92
92
  opts.parse!
93
93
 
94
- passwords = PasswordListGenerator::Generator.new(options).generate
95
- file = options.output_file
96
-
97
- system "echo ' ' > #{file} \n\n"
98
- system "echo 'Generated passwords meet the following requirements: ' >> #{file}"
99
- system "echo 'Must have at least one lower case alphabetic character (a - z)' >> #{file}"
100
- system "echo 'Must have at least one special character (!@#\$\%^&*())' >> #{file}" if options.symbol
101
- system "echo 'Must have at least one numeric character (0 -9)' >> #{file}" if options.numeric
102
- system "echo 'Must have at least one upper case alphabetic character (A - Z)' >> #{file}" if options.uppercase
103
- system "echo 'Must have at least #{options.min} characters' >> #{file}"
104
- system "echo 'Must have no more than #{options.max} characters' >> #{file}"
105
- system "echo ' ' >> #{file}"
106
- system "echo '" + passwords.map(&:to_s).join("\n\n") + "' >> #{file}"
107
- puts "#{options.count} random passwords were generated into #{file}"
94
+ begin
95
+ passwords = PasswordListGenerator::Generator.new(options).generate
96
+
97
+ file = options.output_file
98
+
99
+ system "echo ' ' > #{file} \n\n"
100
+ system "echo 'Generated passwords meet the following requirements: ' >> #{file}"
101
+ system "echo 'Must have at least one lower case alphabetic character (a - z)' >> #{file}"
102
+ system "echo 'Must have at least one special character (!@#\$\%^&*())' >> #{file}" if options.symbol
103
+ system "echo 'Must have at least one numeric character (0 -9)' >> #{file}" if options.numeric
104
+ system "echo 'Must have at least one upper case alphabetic character (A - Z)' >> #{file}" if options.uppercase
105
+ system "echo 'Must have at least #{options.min} characters' >> #{file}"
106
+ system "echo 'Must have no more than #{options.max} characters' >> #{file}"
107
+ system "echo ' ' >> #{file}"
108
+ system "echo '" + passwords.map(&:to_s).join("\n\n") + "' >> #{file}"
109
+ puts "#{options.count} random passwords were generated into #{file}"
110
+ rescue Exception => e
111
+ puts e
112
+ puts "Try viewing options with pwgen -h"
113
+ end
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDYDCCAkigAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQ0wCwYDVQQDDARzbGl1
3
+ MRUwEwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
4
+ MTQwMzAzMjEzMjU3WhcNMTUwMzAzMjEzMjU3WjA7MQ0wCwYDVQQDDARzbGl1MRUw
5
+ EwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
6
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDETtQzkz09Tm54FFE1ECRs8VQsEJPE
7
+ 3p5x9K43lDOWv/QObMkwGAoRJc2iAJ59OUOeM59vz8806BjeAqZ4pivtGViaZVYM
8
+ bvHUEALC9xwwSpAMAd6GpW1OMYHHYV0XeoqYKpOc9mCMqmI5PyewQIS1mxq4HlOz
9
+ iR+e2ABFa5Ugp3LbDbIDsuImhEdjjvVX72GRRYTQhHsluJZD/fcBK++2PDJE/zEy
10
+ ejqpmIMRaseISuUdIMl/2Y7ehO+oWhYXDRevJzU4GZVwpltInBSKNahaGIjmC1oY
11
+ dYtOy2EAdtl2kfRErNMOLKuayAcFDmm9ACGi4sD1cjKM6CPyATzaoheBAgMBAAGj
12
+ bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRu4/jxuld5bmHt
13
+ e5EtflKmkP5mkjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
14
+ gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAvGnJ2PRHBBJZ3eL2
15
+ J7YTL2CY2/tZCAZ160ljdv8wvzSbbW574KpBwEoAUN6NT06+sWt9Pz/dwrRHy5Np
16
+ 76/Gu27IsybQyzvvie8z+4DGeCpuK30KmtgS4KNffwt16iCU3I8iTNzAXJgSGIsG
17
+ 7PZhAmnHSo4QibVAaw7FWuRdk5CsaSz8yQJW74a7XO7c1aV1pjl7nKD7akT4auov
18
+ qFZM2+znLjNqWRtiu1wx/fTPEos6bi310efPBwbAOk1kALR5pY/mqPhx3wG51jfD
19
+ AjoDi8ANvA6BEjpDaK8BkRlQjTOYplmgVlohNURSqxIVo2tnsZyvW+Rl7RWIUVGt
20
+ ZaPiXQ==
21
+ -----END CERTIFICATE-----
@@ -9,28 +9,37 @@ module PasswordListGenerator
9
9
 
10
10
  def generate
11
11
  passwords = []
12
-
13
- 1.upto(config.count) do
14
- valid = false
15
-
16
- until valid
17
- random_size = (config.min..config.max).to_a.shuffle.first
18
- password = Password.new(random_string, config)
19
-
20
- if password.valid?
21
- passwords << password
22
- valid = true
23
- end
24
- end
25
- end
12
+ tries = 0
13
+
14
+ catch :no_valid_passwords do
15
+ 1.upto(config.count) do
16
+ tries = 0
17
+ valid = false
18
+
19
+ until valid
20
+ random_size = (config.min..config.max).to_a.shuffle.first
21
+ password = Password.new(random_string(random_size), config)
22
+
23
+ if password.valid?
24
+ passwords << password
25
+ valid = true
26
+ else
27
+ tries += 1
28
+ throw :no_valid_passwords if tries > 10
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ raise "There was a problem creating valid passwords." if tries > 10
26
35
 
27
36
  passwords
28
37
  end
29
38
 
30
39
  private
31
40
 
32
- def random_string
33
- (1..random_size).map {characters_set[random_number]}.join
41
+ def random_string(size)
42
+ (1..size).map {characters_set[random_number]}.join
34
43
  end
35
44
 
36
45
  def random_number
@@ -1,3 +1,3 @@
1
1
  module PasswordListGenerator
2
- VERSION="0.4.4"
2
+ VERSION="0.4.5"
3
3
  end
@@ -12,12 +12,11 @@ Gem::Specification.new do |gem|
12
12
  gem.homepage = 'https://github.com/stephaneliu/password_generator'
13
13
  # gem s.date = '2013-10-24'
14
14
  gem.files = `git ls-files`.split($/)
15
- puts "exe: #{gem.files.grep(%r{^bin/}).map {|f| File.basename(f)}}"
16
15
  gem.executables = gem.files.grep(%r{^bin/}).map {|f| File.basename(f)}
17
16
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
17
  gem.require_paths = ['lib']
19
- gem.cert_chain = ['certs/stephaneliu.pem']
20
- gem.signing_key = File.expand_path("~/.ssh/gem-private_key.pem") if $0 =~ /gem\z/
18
+ gem.cert_chain = ['certs/stephaneliu_gem.pem']
19
+ gem.signing_key = File.expand_path("~/.ssh/stephaneliu_private_gem.pem") if $0 =~ /gem\z/
21
20
 
22
21
  gem.add_development_dependency 'simplecov', '>= 0.7'
23
22
  gem.add_development_dependency 'coveralls', '>= 0.7.0'
@@ -0,0 +1,86 @@
1
+ require_relative 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ describe PasswordListGenerator::Generator do
5
+
6
+ describe 'initialization' do
7
+ it 'should build_characters_set' do
8
+ config = OpenStruct.new
9
+ generator = PasswordListGenerator::Generator.new(config)
10
+ generator.characters_set.wont_equal nil
11
+ end
12
+
13
+ it 'character_set should have uppercase' do
14
+ config = OpenStruct.new(uppercase: true)
15
+ generator = PasswordListGenerator::Generator.new(config)
16
+ generator.characters_set.find {|char| /[A-Z]/ === char}.nil?.must_equal false
17
+
18
+ config = OpenStruct.new(uppercase: false)
19
+ generator = PasswordListGenerator::Generator.new(config)
20
+ generator.characters_set.find {|char| /[A-Z]/ === char}.nil?.must_equal true
21
+ end
22
+
23
+ it 'character_set should have numeric' do
24
+ config = OpenStruct.new(numeric: true)
25
+ generator = PasswordListGenerator::Generator.new(config)
26
+ generator.characters_set.find {|char| /\d/ === char}.nil?.must_equal false
27
+
28
+ config = OpenStruct.new(numeric: false)
29
+ generator = PasswordListGenerator::Generator.new(config)
30
+ generator.characters_set.find {|char| /\d/ === char}.nil?.must_equal true
31
+ end
32
+
33
+ it 'character_set should have symbol when configured' do
34
+ config = OpenStruct.new(symbol: true)
35
+ generator = PasswordListGenerator::Generator.new(config)
36
+ generator.characters_set.find {|char| /\W/ === char}.nil?.must_equal false
37
+
38
+ config = OpenStruct.new(symbol: false)
39
+ generator = PasswordListGenerator::Generator.new(config)
40
+ generator.characters_set.find {|char| /\W/ === char}.nil?.must_equal true
41
+ end
42
+
43
+ it 'should not include ambiguous characters' do
44
+ config = OpenStruct.new(uppercase: true, numeric: true)
45
+ generator = PasswordListGenerator::Generator.new(config)
46
+ ambiguous = %w(i o 0 1 l 0 I)
47
+
48
+ generator.characters_set.any? {|char| ambiguous.include? char}.must_equal false
49
+ end
50
+ end
51
+
52
+ describe '.generate' do
53
+ it "should generate the correct number of passwords" do
54
+ count = 10
55
+ config = OpenStruct.new(count: count, min: 5, max: 10)
56
+ generator = PasswordListGenerator::Generator.new(config)
57
+
58
+ generator.generate.size.must_equal count
59
+ end
60
+
61
+ it "should be random" do
62
+ config = OpenStruct.new(count: 100, min: 5, max: 10)
63
+ invalid_password = PasswordListGenerator::Password.new("a", config)
64
+ generator = PasswordListGenerator::Generator.new(config)
65
+ passwords = generator.generate
66
+
67
+ passwords.each do |password|
68
+ passwords.select {|pw| pw == password}.size.must_equal 1
69
+ end
70
+ end
71
+
72
+ it "should be deterministic" do
73
+ config = OpenStruct.new(count: 2, min: 5, max: 10)
74
+ invalid_password = PasswordListGenerator::Password.new("a", config)
75
+ generator = PasswordListGenerator::Generator.new(config)
76
+
77
+ PasswordListGenerator::Password.stub :new, invalid_password do
78
+ begin
79
+ passwords = generator.generate
80
+ rescue Exception => e
81
+ passwords.must_equal nil
82
+ end
83
+ end
84
+ end
85
+ end
86
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: password_list_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.4
4
+ version: 0.4.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stephane Liu
@@ -12,25 +12,25 @@ cert_chain:
12
12
  -----BEGIN CERTIFICATE-----
13
13
  MIIDYDCCAkigAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQ0wCwYDVQQDDARzbGl1
14
14
  MRUwEwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
15
- MTMxMTIxMDgyMjMwWhcNMTQxMTIxMDgyMjMwWjA7MQ0wCwYDVQQDDARzbGl1MRUw
15
+ MTQwMzAzMjEzMjU3WhcNMTUwMzAzMjEzMjU3WjA7MQ0wCwYDVQQDDARzbGl1MRUw
16
16
  EwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
17
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1PHip2Oa8Pf42ovmPUgAZ2Gv1hTOi
18
- 4ZJBdq/6PUNBAmFTHhBvToRW++y5fvBzOTg1YkDHF51l7vcGbqpuKDBleY7COiPD
19
- nR+KUQQ+rRD26XRdtlOacGo3ZjRBJ0aDBV6PITMRda7HQijXZ3rVS2j7gb+YoQDw
20
- 5I68sZEsjX9/a6C3Ac0Ax4MBZL172KSLzaKCTjdvrftdQm4lWQ1hpouKYjXNtNIO
21
- +JSVMszCbZFXVq9O21cer/AHaB49eCQ0Pyd10vhGRs70I0usdrPtN4XbIeOK1lgi
22
- JIjQ/4nHXjo2KCwW0+dt1YwJUI/7AT75v94O5aCbb24ENZPko/gn7PbLAgMBAAGj
23
- bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBT/tqKs2lU2i9D1
24
- RjjQsbYTk0DAmjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
25
- gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEALD94EwV7vOWz3tq0
26
- KITiDYO/0U7e9MW80gR7QBH+20sBmY4ONEmk1IuY490LePQAneHuvMyQRxK4i81b
27
- +v0HUVLvCxtyZIUeluQaSPt76USpyQzrxV+WCisT4Ckw0yi/04h+UKDyc7Zf4mok
28
- 0tmihH5qdrq9+tHI/QC981zw2cZeWfr74Wek3mUzHZm9Z+Jou38kyd/hDSUaRJpn
29
- aC0qBC/AkPKtDcdl1OF4l5sjq5/aTCRVW7uXJ2G7YRWrGdqgiKEC5YmEFuxT/wVK
30
- u4D3Um/AnYRhXT9ydJk2pcbzNsb30/ojfrqf3rTrJRfXv1/JYpDOfqFBOrMYkuw1
31
- nE3D5g==
17
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDETtQzkz09Tm54FFE1ECRs8VQsEJPE
18
+ 3p5x9K43lDOWv/QObMkwGAoRJc2iAJ59OUOeM59vz8806BjeAqZ4pivtGViaZVYM
19
+ bvHUEALC9xwwSpAMAd6GpW1OMYHHYV0XeoqYKpOc9mCMqmI5PyewQIS1mxq4HlOz
20
+ iR+e2ABFa5Ugp3LbDbIDsuImhEdjjvVX72GRRYTQhHsluJZD/fcBK++2PDJE/zEy
21
+ ejqpmIMRaseISuUdIMl/2Y7ehO+oWhYXDRevJzU4GZVwpltInBSKNahaGIjmC1oY
22
+ dYtOy2EAdtl2kfRErNMOLKuayAcFDmm9ACGi4sD1cjKM6CPyATzaoheBAgMBAAGj
23
+ bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRu4/jxuld5bmHt
24
+ e5EtflKmkP5mkjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
25
+ gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEAvGnJ2PRHBBJZ3eL2
26
+ J7YTL2CY2/tZCAZ160ljdv8wvzSbbW574KpBwEoAUN6NT06+sWt9Pz/dwrRHy5Np
27
+ 76/Gu27IsybQyzvvie8z+4DGeCpuK30KmtgS4KNffwt16iCU3I8iTNzAXJgSGIsG
28
+ 7PZhAmnHSo4QibVAaw7FWuRdk5CsaSz8yQJW74a7XO7c1aV1pjl7nKD7akT4auov
29
+ qFZM2+znLjNqWRtiu1wx/fTPEos6bi310efPBwbAOk1kALR5pY/mqPhx3wG51jfD
30
+ AjoDi8ANvA6BEjpDaK8BkRlQjTOYplmgVlohNURSqxIVo2tnsZyvW+Rl7RWIUVGt
31
+ ZaPiXQ==
32
32
  -----END CERTIFICATE-----
33
- date: 2013-11-21 00:00:00.000000000 Z
33
+ date: 2014-03-03 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: simplecov
@@ -78,12 +78,13 @@ files:
78
78
  - README.md
79
79
  - Rakefile
80
80
  - bin/pwgen
81
- - certs/stephaneliu.pem
81
+ - certs/stephaneliu_gem.pem
82
82
  - lib/password_list_generator.rb
83
83
  - lib/password_list_generator/generator.rb
84
84
  - lib/password_list_generator/password.rb
85
85
  - lib/password_list_generator/version.rb
86
86
  - password_list_generator.gemspec
87
+ - spec/generator_spec.rb
87
88
  - spec/password_spec.rb
88
89
  - spec/spec_helper.rb
89
90
  homepage: https://github.com/stephaneliu/password_generator
@@ -106,10 +107,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
106
107
  version: '0'
107
108
  requirements: []
108
109
  rubyforge_project:
109
- rubygems_version: 2.1.10
110
+ rubygems_version: 2.1.11
110
111
  signing_key:
111
112
  specification_version: 4
112
113
  summary: Generate list of passwords easily from command line
113
114
  test_files:
115
+ - spec/generator_spec.rb
114
116
  - spec/password_spec.rb
115
117
  - spec/spec_helper.rb
metadata.gz.sig CHANGED
Binary file
@@ -1,21 +0,0 @@
1
- -----BEGIN CERTIFICATE-----
2
- MIIDYDCCAkigAwIBAgIBATANBgkqhkiG9w0BAQUFADA7MQ0wCwYDVQQDDARzbGl1
3
- MRUwEwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcN
4
- MTMxMTIxMDgyMjMwWhcNMTQxMTIxMDgyMjMwWjA7MQ0wCwYDVQQDDARzbGl1MRUw
5
- EwYKCZImiZPyLGQBGRYFc2psaXUxEzARBgoJkiaJk/IsZAEZFgNjb20wggEiMA0G
6
- CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1PHip2Oa8Pf42ovmPUgAZ2Gv1hTOi
7
- 4ZJBdq/6PUNBAmFTHhBvToRW++y5fvBzOTg1YkDHF51l7vcGbqpuKDBleY7COiPD
8
- nR+KUQQ+rRD26XRdtlOacGo3ZjRBJ0aDBV6PITMRda7HQijXZ3rVS2j7gb+YoQDw
9
- 5I68sZEsjX9/a6C3Ac0Ax4MBZL172KSLzaKCTjdvrftdQm4lWQ1hpouKYjXNtNIO
10
- +JSVMszCbZFXVq9O21cer/AHaB49eCQ0Pyd10vhGRs70I0usdrPtN4XbIeOK1lgi
11
- JIjQ/4nHXjo2KCwW0+dt1YwJUI/7AT75v94O5aCbb24ENZPko/gn7PbLAgMBAAGj
12
- bzBtMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBT/tqKs2lU2i9D1
13
- RjjQsbYTk0DAmjAZBgNVHREEEjAQgQ5zbGl1QHNqbGl1LmNvbTAZBgNVHRIEEjAQ
14
- gQ5zbGl1QHNqbGl1LmNvbTANBgkqhkiG9w0BAQUFAAOCAQEALD94EwV7vOWz3tq0
15
- KITiDYO/0U7e9MW80gR7QBH+20sBmY4ONEmk1IuY490LePQAneHuvMyQRxK4i81b
16
- +v0HUVLvCxtyZIUeluQaSPt76USpyQzrxV+WCisT4Ckw0yi/04h+UKDyc7Zf4mok
17
- 0tmihH5qdrq9+tHI/QC981zw2cZeWfr74Wek3mUzHZm9Z+Jou38kyd/hDSUaRJpn
18
- aC0qBC/AkPKtDcdl1OF4l5sjq5/aTCRVW7uXJ2G7YRWrGdqgiKEC5YmEFuxT/wVK
19
- u4D3Um/AnYRhXT9ydJk2pcbzNsb30/ojfrqf3rTrJRfXv1/JYpDOfqFBOrMYkuw1
20
- nE3D5g==
21
- -----END CERTIFICATE-----