putty-key 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/CHANGES.md +16 -0
  5. data/Gemfile +0 -6
  6. data/LICENSE +1 -1
  7. data/README.md +32 -6
  8. data/Rakefile +24 -0
  9. data/lib/putty/key.rb +6 -6
  10. data/lib/putty/key/argon2_params.rb +101 -0
  11. data/lib/putty/key/error.rb +17 -0
  12. data/lib/putty/key/libargon2.rb +54 -0
  13. data/lib/putty/key/ppk.rb +469 -103
  14. data/lib/putty/key/util.rb +10 -10
  15. data/lib/putty/key/version.rb +1 -1
  16. data/putty-key.gemspec +11 -2
  17. data/test/argon2_params_test.rb +144 -0
  18. data/test/fixtures/{dss-1024-encrypted.ppk → dss-1024-encrypted-format-2.ppk} +17 -17
  19. data/test/fixtures/dss-1024-encrypted-format-3.ppk +22 -0
  20. data/test/fixtures/{dss-1024.ppk → dss-1024-format-2.ppk} +17 -17
  21. data/test/fixtures/dss-1024-format-3.ppk +17 -0
  22. data/test/fixtures/{ecdsa-sha2-nistp256-encrypted.ppk → ecdsa-sha2-nistp256-encrypted-format-2.ppk} +10 -10
  23. data/test/fixtures/ecdsa-sha2-nistp256-encrypted-format-3.ppk +15 -0
  24. data/test/fixtures/{ecdsa-sha2-nistp256.ppk → ecdsa-sha2-nistp256-format-2.ppk} +10 -10
  25. data/test/fixtures/ecdsa-sha2-nistp256-format-3.ppk +10 -0
  26. data/test/fixtures/{ecdsa-sha2-nistp384-encrypted.ppk → ecdsa-sha2-nistp384-encrypted-format-2.ppk} +11 -11
  27. data/test/fixtures/ecdsa-sha2-nistp384-encrypted-format-3.ppk +16 -0
  28. data/test/fixtures/{ecdsa-sha2-nistp384.ppk → ecdsa-sha2-nistp384-format-2.ppk} +11 -11
  29. data/test/fixtures/ecdsa-sha2-nistp384-format-3.ppk +11 -0
  30. data/test/fixtures/{ecdsa-sha2-nistp521-encrypted.ppk → ecdsa-sha2-nistp521-encrypted-format-2.ppk} +12 -12
  31. data/test/fixtures/ecdsa-sha2-nistp521-encrypted-format-3.ppk +17 -0
  32. data/test/fixtures/{ecdsa-sha2-nistp521.ppk → ecdsa-sha2-nistp521-format-2.ppk} +12 -12
  33. data/test/fixtures/ecdsa-sha2-nistp521-format-3.ppk +12 -0
  34. data/test/fixtures/{rsa-2048-encrypted.ppk → rsa-2048-encrypted-format-2.ppk} +26 -26
  35. data/test/fixtures/rsa-2048-encrypted-format-3.ppk +31 -0
  36. data/test/fixtures/{rsa-2048.ppk → rsa-2048-format-2.ppk} +26 -26
  37. data/test/fixtures/rsa-2048-format-3.ppk +26 -0
  38. data/test/fixtures/test-blank-comment.ppk +11 -11
  39. data/test/fixtures/test-empty-blobs-encrypted.ppk +6 -0
  40. data/test/fixtures/test-empty-blobs.ppk +6 -0
  41. data/test/fixtures/{test-encrypted.ppk → test-encrypted-format-2.ppk} +11 -11
  42. data/test/fixtures/test-encrypted-format-3.ppk +16 -0
  43. data/test/fixtures/test-encrypted-type-d-format-3.ppk +16 -0
  44. data/test/fixtures/test-encrypted-type-i-format-3.ppk +16 -0
  45. data/test/fixtures/{test-unix-line-endings.ppk → test-format-2.ppk} +0 -0
  46. data/test/fixtures/test-format-3.ppk +11 -0
  47. data/test/fixtures/test-invalid-argon2-memory-for-libargon2.ppk +16 -0
  48. data/test/fixtures/test-invalid-argon2-memory-maximum.ppk +16 -0
  49. data/test/fixtures/test-invalid-argon2-memory.ppk +16 -0
  50. data/test/fixtures/test-invalid-argon2-parallelism-maximum.ppk +16 -0
  51. data/test/fixtures/test-invalid-argon2-parallelism.ppk +16 -0
  52. data/test/fixtures/test-invalid-argon2-passes-maximum.ppk +16 -0
  53. data/test/fixtures/test-invalid-argon2-passes.ppk +16 -0
  54. data/test/fixtures/test-invalid-argon2-salt.ppk +16 -0
  55. data/test/fixtures/test-invalid-blob-lines.ppk +11 -11
  56. data/test/fixtures/test-invalid-encryption-type.ppk +11 -11
  57. data/test/fixtures/test-invalid-format-1.ppk +11 -11
  58. data/test/fixtures/{test-invalid-format-3.ppk → test-invalid-format-4.ppk} +11 -11
  59. data/test/fixtures/test-invalid-key-derivation.ppk +16 -0
  60. data/test/fixtures/test-invalid-private-mac.ppk +11 -11
  61. data/test/fixtures/test-legacy-mac-line-endings.ppk +1 -0
  62. data/test/fixtures/test-missing-final-line-ending.ppk +11 -0
  63. data/test/fixtures/test-truncated.ppk +10 -10
  64. data/test/fixtures/{test.ppk → test-windows-line-endings.ppk} +0 -0
  65. data/test/openssl_test.rb +243 -53
  66. data/test/ppk_test.rb +325 -44
  67. metadata +73 -23
  68. metadata.gz.sig +0 -0
@@ -9,17 +9,17 @@ module PuTTY
9
9
  #
10
10
  # @private
11
11
  module Util
12
- # Encodes a list of values (String and OpenSSL::BN instances) according
13
- # to RFC 4251 section 5 (as strings and mpints).
12
+ # Encodes a list of values (`String` and `OpenSSL::BN` instances)
13
+ # according to RFC 4251 section 5 (as strings and mpints).
14
14
  #
15
- # No encoding conversion is performed on Strings.
15
+ # No encoding conversion is performed on `String` instances.
16
16
  #
17
- # @param [Array] values An Array of String and OpenSSL::BN instances to
18
- # be encoded.
17
+ # @param [Array] values An Array of `String` and `OpenSSL::BN` instances
18
+ # to be encoded.
19
19
  #
20
- # @return [String] A binary String containing the encoded values.
20
+ # @return [String] A binary `String` containing the encoded values.
21
21
  #
22
- # @raise NilValueError If a value is `nil`.
22
+ # @raise [NilValueError] If a value is `nil`.
23
23
  def self.ssh_pack(*values)
24
24
  return ''.b if values.empty?
25
25
 
@@ -62,11 +62,11 @@ module PuTTY
62
62
  # Decodes a string containing RFC 4251 section 5 encoded string and
63
63
  # mpint values.
64
64
  #
65
- # @param [String] encoded A binary {String} containing the encoded values.
66
- # @param [Array<Symbol>] spec An array consisting of :string or :mpint
65
+ # @param [String] encoded A binary `String` containing the encoded values.
66
+ # @param [Array<Symbol>] spec An array consisting of `:string` or `:mpint`
67
67
  # elements describing the contents of encoded.
68
68
  #
69
- # @return [Array] An array of decoded (binary) {String} and {OpenSSL::BN}
69
+ # @return [Array] An array of decoded (binary) `String` and `OpenSSL::BN`
70
70
  # instances.
71
71
  #
72
72
  # @raise [ArgumentError] If `encoded` is `nil`.
@@ -3,6 +3,6 @@
3
3
  module PuTTY
4
4
  module Key
5
5
  # The PuTTY::Key version number.
6
- VERSION = '1.0.1'
6
+ VERSION = '1.1.0'
7
7
  end
8
8
  end
data/putty-key.gemspec CHANGED
@@ -3,9 +3,9 @@ require File.expand_path(File.join('..', 'lib', 'putty', 'key', 'version'), __FI
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'putty-key'
5
5
  s.version = PuTTY::Key::VERSION
6
- s.summary = 'Reads and writes PuTTY private key (.ppk) files. Refines OpenSSL::PKey to allow key conversion.'
6
+ s.summary = 'PuTTY private key (.ppk) library. Supports reading and writing with a refinement to OpenSSL::PKey to allow key conversion.'
7
7
  s.description = <<-EOF
8
- PuTTY::Key is a pure-Ruby implementation of the PuTTY private key (ppk) format,
8
+ PuTTY::Key is a Ruby implementation of the PuTTY private key (ppk) format,
9
9
  handling reading and writing .ppk files. It includes a refinement to Ruby's
10
10
  OpenSSL library to add support for converting DSA, EC and RSA private keys to
11
11
  and from PuTTY private key files. This allows OpenSSH ecdsa, ssh-dss and ssh-rsa
@@ -15,6 +15,13 @@ private keys to be converted to and from PuTTY's private key format.
15
15
  s.email = 'phil.ross@gmail.com'
16
16
  s.homepage = 'https://github.com/philr/putty-key'
17
17
  s.license = 'MIT'
18
+ s.metadata = {
19
+ 'bug_tracker_uri' => 'https://github.com/philr/putty-key/issues',
20
+ 'changelog_uri' => 'https://github.com/philr/putty-key/blob/master/CHANGES.md',
21
+ 'documentation_uri' => "https://rubydoc.info/gems/#{s.name}/#{s.version}",
22
+ 'homepage_uri' => s.homepage,
23
+ 'source_code_uri' => "https://github.com/philr/putty-key/tree/v#{s.version}"
24
+ }
18
25
  s.files = %w(CHANGES.md Gemfile LICENSE README.md Rakefile putty-key.gemspec .yardopts) +
19
26
  Dir['lib/**/*.rb'] +
20
27
  Dir['test/**/*.rb'] +
@@ -26,4 +33,6 @@ private keys to be converted to and from PuTTY's private key format.
26
33
  '--markup' << 'markdown'
27
34
  s.extra_rdoc_files = ['CHANGES.md', 'LICENSE', 'README.md']
28
35
  s.required_ruby_version = '>= 2.1.0'
36
+ s.add_runtime_dependency 'ffi', '~> 1.0'
37
+ s.requirements = ['libargon2 to handle format 3 .ppk files']
29
38
  end
@@ -0,0 +1,144 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'test_helper'
4
+
5
+ class Argon2ParamsTest < Minitest::Test
6
+ [:d, :i, :id].each do |type|
7
+ define_method("test_valid_type_#{type}") do
8
+ params = PuTTY::Key::Argon2Params.new(type: type)
9
+ assert_equal(type, params.type)
10
+ end
11
+ end
12
+
13
+ [nil, :x, 'd'].each do |type|
14
+ define_method("test_invalid_type_#{type.class.name.downcase}_#{type || 'nil'}") do
15
+ assert_raises(ArgumentError) { PuTTY::Key::Argon2Params.new(type: type) }
16
+ end
17
+ end
18
+
19
+ [0, 1024, 16384, 2**32].each do |memory|
20
+ define_method("test_valid_memory_#{memory}") do
21
+ params = PuTTY::Key::Argon2Params.new(memory: memory)
22
+ assert_equal(memory, params.memory)
23
+ end
24
+ end
25
+
26
+ [-1, 2**32 + 1, 1024.1, '1024', nil].each do |memory|
27
+ define_method("test_invalid_memory_#{memory.class.name.downcase}_#{memory}") do
28
+ assert_raises(ArgumentError) { PuTTY::Key::Argon2Params.new(memory: memory) }
29
+ end
30
+ end
31
+
32
+ [nil, 0, 10, 2**32].each do |passes|
33
+ define_method("test_valid_passes_#{passes || 'nil'}") do
34
+ params = PuTTY::Key::Argon2Params.new(passes: passes)
35
+ if passes
36
+ assert_equal(passes, params.passes)
37
+ else
38
+ assert_nil(params.passes)
39
+ end
40
+ end
41
+ end
42
+
43
+ [-1, 2**32 + 1, 1.1, '1'].each do |passes|
44
+ define_method("test_invalid_passes_#{passes.class.name.downcase}_#{passes}") do
45
+ assert_raises(ArgumentError) { PuTTY::Key::Argon2Params.new(passes: passes) }
46
+ end
47
+ end
48
+
49
+ [0, 2, 2**32].each do |parallelism|
50
+ define_method("test_valid_parallelism_#{parallelism}") do
51
+ params = PuTTY::Key::Argon2Params.new(parallelism: parallelism)
52
+ assert_equal(parallelism, params.parallelism)
53
+ end
54
+ end
55
+
56
+ [nil, -1, 2**32 + 1, 2.1, '2'].each do |parallelism|
57
+ define_method("test_invalid_parallelism_#{parallelism.class.name.downcase}_#{parallelism || 'nil'}") do
58
+ assert_raises(ArgumentError) { PuTTY::Key::Argon2Params.new(parallelism: parallelism) }
59
+ end
60
+ end
61
+
62
+ [nil, '', "\x00".b, 'salt'].each do |salt|
63
+ define_method("test_valid_salt_#{salt || 'nil'}") do
64
+ params = PuTTY::Key::Argon2Params.new(salt: salt)
65
+ if salt
66
+ assert_equal(salt, params.salt)
67
+ else
68
+ assert_nil(params.salt)
69
+ end
70
+ end
71
+ end
72
+
73
+ [0, :salt].each do |salt|
74
+ define_method("test_invalid_salt_#{salt.class.name.downcase}_#{salt}") do
75
+ assert_raises(ArgumentError) { PuTTY::Key::Argon2Params.new(salt: salt) }
76
+ end
77
+ end
78
+
79
+ [0, 200, 200.1, Rational(2001, 1)].each do |desired_time|
80
+ define_method("test_valid_desired_time_#{desired_time.class.name.downcase}_#{desired_time}") do
81
+ params = PuTTY::Key::Argon2Params.new(desired_time: desired_time)
82
+ assert_equal(desired_time, params.desired_time)
83
+ end
84
+ end
85
+
86
+ [nil, -1, -0.1, Rational(-1, 10), '0'].each do |desired_time|
87
+ define_method("test_invalid_desired_time_#{desired_time.class.name.downcase}_#{desired_time || 'nil'}") do
88
+ assert_raises(ArgumentError) { PuTTY::Key::Argon2Params.new(desired_time: desired_time) }
89
+ end
90
+ end
91
+
92
+ def test_complete_with_equivalent_passes_and_salt
93
+ params = PuTTY::Key::Argon2Params.new(passes: 10, salt: 'test_salt')
94
+ assert_same(params, params.complete(10, 'test_salt'.dup))
95
+ end
96
+
97
+ def test_complete_with_equivalent_passes_and_different_salt
98
+ params = PuTTY::Key::Argon2Params.new(passes: 10, salt: nil)
99
+ complete_params = params.complete(10, 'test_salt')
100
+ refute_same(params, complete_params)
101
+ assert_equal(10, complete_params.passes)
102
+ assert_equal('test_salt', complete_params.salt)
103
+ end
104
+
105
+ def test_complete_with_different_passes_and_equivalent_salt
106
+ params = PuTTY::Key::Argon2Params.new(passes: nil, salt: 'test_salt')
107
+ complete_params = params.complete(10, 'test_salt'.dup)
108
+ refute_same(params, complete_params)
109
+ assert_equal(10, complete_params.passes)
110
+ assert_equal('test_salt', complete_params.salt)
111
+ end
112
+
113
+ def test_complete_with_different_passes_and_salt
114
+ params = PuTTY::Key::Argon2Params.new(passes: nil, salt: nil)
115
+ complete_params = params.complete(10, 'test_salt')
116
+ refute_same(params, complete_params)
117
+ assert_equal(10, complete_params.passes)
118
+ assert_equal('test_salt', complete_params.salt)
119
+ end
120
+
121
+ def test_complete_copies_other_properties
122
+ params = PuTTY::Key::Argon2Params.new(type: :d, memory: 8193, parallelism: 3, passes: nil, salt: nil, desired_time: 123)
123
+ complete_params = params.complete(10, 'test_salt')
124
+ refute_same(params, complete_params)
125
+ assert_equal(:d, complete_params.type)
126
+ assert_equal(8193, complete_params.memory)
127
+ assert_equal(3, complete_params.parallelism)
128
+ assert_equal(123, complete_params.desired_time)
129
+ end
130
+
131
+ [nil, -1, 2**32 + 1, 1.1, '1'].each do |passes|
132
+ define_method("test_complete_with_invalid_passes_#{passes.class.name.downcase}_#{passes || 'nil'}") do
133
+ params = PuTTY::Key::Argon2Params.new(passes: nil, salt: nil)
134
+ assert_raises(ArgumentError) { params.complete(passes, 'test_salt') }
135
+ end
136
+ end
137
+
138
+ [nil, 0, :test_salt].each do |salt|
139
+ define_method("test_complete_with_invalid_salt_#{salt.class.name.downcase}_#{salt || 'nil'}") do
140
+ params = PuTTY::Key::Argon2Params.new(passes: nil, salt: nil)
141
+ assert_raises(ArgumentError) { params.complete(10, salt) }
142
+ end
143
+ end
144
+ end
@@ -1,17 +1,17 @@
1
- PuTTY-User-Key-File-2: ssh-dss
2
- Encryption: aes256-cbc
3
- Comment: 1024 bit DSS key
4
- Public-Lines: 10
5
- AAAAB3NzaC1kc3MAAACBAL+4+EeuubcbNP48XJONq1SgPngZFjDKu+MiDCMDNtzw
6
- bqsGDIRTolPKYs9toCRMyJBOv2p4wAKY7EweNT5ka110gaxmZ1LGsCIBOPiF6lvI
7
- Iqidqi6S0boZVmjb4WA5DW5qu8XMAJIxGHuqrBOSVesRp6A1MROYpR0qQsXq/HOJ
8
- AAAAFQDIvmNb+BUDk9eq82asXwWS9rcq5wAAAIAx6uiaV2jauJa0fisi3p8VIayo
9
- 8EAVLIyjDg8cRzEtE5Fagdq1n1gQd0EJvYVwwsEdacLxA/VI1DqzyPb9cj8THqKi
10
- b36itdWrSzKYVY5TAvdKYOLcYlRbT51c9Bu+SqPOHQFAgS38YzbZfoar5oevnLyk
11
- nhDgnlogrMk/OkUZoQAAAIEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+D
12
- JmrOFcmFqN/XtxYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70
13
- tg1y39Z46MsFdGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1
14
- UeI=
15
- Private-Lines: 1
16
- f/XUfRLYdOG1yxjJbggfTkODkvUl1PaUrKrkgltN9n8=
17
- Private-MAC: a2fd21e9a1e9dd7eeebbad996ae73e4d4eff72e9
1
+ PuTTY-User-Key-File-2: ssh-dss
2
+ Encryption: aes256-cbc
3
+ Comment: 1024 bit DSS key
4
+ Public-Lines: 10
5
+ AAAAB3NzaC1kc3MAAACBAL+4+EeuubcbNP48XJONq1SgPngZFjDKu+MiDCMDNtzw
6
+ bqsGDIRTolPKYs9toCRMyJBOv2p4wAKY7EweNT5ka110gaxmZ1LGsCIBOPiF6lvI
7
+ Iqidqi6S0boZVmjb4WA5DW5qu8XMAJIxGHuqrBOSVesRp6A1MROYpR0qQsXq/HOJ
8
+ AAAAFQDIvmNb+BUDk9eq82asXwWS9rcq5wAAAIAx6uiaV2jauJa0fisi3p8VIayo
9
+ 8EAVLIyjDg8cRzEtE5Fagdq1n1gQd0EJvYVwwsEdacLxA/VI1DqzyPb9cj8THqKi
10
+ b36itdWrSzKYVY5TAvdKYOLcYlRbT51c9Bu+SqPOHQFAgS38YzbZfoar5oevnLyk
11
+ nhDgnlogrMk/OkUZoQAAAIEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+D
12
+ JmrOFcmFqN/XtxYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70
13
+ tg1y39Z46MsFdGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1
14
+ UeI=
15
+ Private-Lines: 1
16
+ f/XUfRLYdOG1yxjJbggfTkODkvUl1PaUrKrkgltN9n8=
17
+ Private-MAC: a2fd21e9a1e9dd7eeebbad996ae73e4d4eff72e9
@@ -0,0 +1,22 @@
1
+ PuTTY-User-Key-File-3: ssh-dss
2
+ Encryption: aes256-cbc
3
+ Comment: 1024 bit DSS key
4
+ Public-Lines: 10
5
+ AAAAB3NzaC1kc3MAAACBAL+4+EeuubcbNP48XJONq1SgPngZFjDKu+MiDCMDNtzw
6
+ bqsGDIRTolPKYs9toCRMyJBOv2p4wAKY7EweNT5ka110gaxmZ1LGsCIBOPiF6lvI
7
+ Iqidqi6S0boZVmjb4WA5DW5qu8XMAJIxGHuqrBOSVesRp6A1MROYpR0qQsXq/HOJ
8
+ AAAAFQDIvmNb+BUDk9eq82asXwWS9rcq5wAAAIAx6uiaV2jauJa0fisi3p8VIayo
9
+ 8EAVLIyjDg8cRzEtE5Fagdq1n1gQd0EJvYVwwsEdacLxA/VI1DqzyPb9cj8THqKi
10
+ b36itdWrSzKYVY5TAvdKYOLcYlRbT51c9Bu+SqPOHQFAgS38YzbZfoar5oevnLyk
11
+ nhDgnlogrMk/OkUZoQAAAIEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+D
12
+ JmrOFcmFqN/XtxYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70
13
+ tg1y39Z46MsFdGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1
14
+ UeI=
15
+ Key-Derivation: Argon2id
16
+ Argon2-Memory: 8192
17
+ Argon2-Passes: 13
18
+ Argon2-Parallelism: 1
19
+ Argon2-Salt: 1a215742bf63ed4eefed21dd07683640
20
+ Private-Lines: 1
21
+ D+Otg+Te1dxaORdPq2bfnEsb6W9ot5ZOkfj0ykzUcFE=
22
+ Private-MAC: ed2b5d6a2a1c097bd8224848ee10f4aad6f8c467c80c6e9f5f58cff6ee6347ad
@@ -1,17 +1,17 @@
1
- PuTTY-User-Key-File-2: ssh-dss
2
- Encryption: none
3
- Comment: 1024 bit DSS key
4
- Public-Lines: 10
5
- AAAAB3NzaC1kc3MAAACBAL+4+EeuubcbNP48XJONq1SgPngZFjDKu+MiDCMDNtzw
6
- bqsGDIRTolPKYs9toCRMyJBOv2p4wAKY7EweNT5ka110gaxmZ1LGsCIBOPiF6lvI
7
- Iqidqi6S0boZVmjb4WA5DW5qu8XMAJIxGHuqrBOSVesRp6A1MROYpR0qQsXq/HOJ
8
- AAAAFQDIvmNb+BUDk9eq82asXwWS9rcq5wAAAIAx6uiaV2jauJa0fisi3p8VIayo
9
- 8EAVLIyjDg8cRzEtE5Fagdq1n1gQd0EJvYVwwsEdacLxA/VI1DqzyPb9cj8THqKi
10
- b36itdWrSzKYVY5TAvdKYOLcYlRbT51c9Bu+SqPOHQFAgS38YzbZfoar5oevnLyk
11
- nhDgnlogrMk/OkUZoQAAAIEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+D
12
- JmrOFcmFqN/XtxYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70
13
- tg1y39Z46MsFdGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1
14
- UeI=
15
- Private-Lines: 1
16
- AAAAFQCl3JfIKDbnArDjCLHs6372hyeAPA==
17
- Private-MAC: 08a095e136062f3005386f26c6aea1e00d72cad5
1
+ PuTTY-User-Key-File-2: ssh-dss
2
+ Encryption: none
3
+ Comment: 1024 bit DSS key
4
+ Public-Lines: 10
5
+ AAAAB3NzaC1kc3MAAACBAL+4+EeuubcbNP48XJONq1SgPngZFjDKu+MiDCMDNtzw
6
+ bqsGDIRTolPKYs9toCRMyJBOv2p4wAKY7EweNT5ka110gaxmZ1LGsCIBOPiF6lvI
7
+ Iqidqi6S0boZVmjb4WA5DW5qu8XMAJIxGHuqrBOSVesRp6A1MROYpR0qQsXq/HOJ
8
+ AAAAFQDIvmNb+BUDk9eq82asXwWS9rcq5wAAAIAx6uiaV2jauJa0fisi3p8VIayo
9
+ 8EAVLIyjDg8cRzEtE5Fagdq1n1gQd0EJvYVwwsEdacLxA/VI1DqzyPb9cj8THqKi
10
+ b36itdWrSzKYVY5TAvdKYOLcYlRbT51c9Bu+SqPOHQFAgS38YzbZfoar5oevnLyk
11
+ nhDgnlogrMk/OkUZoQAAAIEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+D
12
+ JmrOFcmFqN/XtxYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70
13
+ tg1y39Z46MsFdGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1
14
+ UeI=
15
+ Private-Lines: 1
16
+ AAAAFQCl3JfIKDbnArDjCLHs6372hyeAPA==
17
+ Private-MAC: 08a095e136062f3005386f26c6aea1e00d72cad5
@@ -0,0 +1,17 @@
1
+ PuTTY-User-Key-File-3: ssh-dss
2
+ Encryption: none
3
+ Comment: 1024 bit DSS key
4
+ Public-Lines: 10
5
+ AAAAB3NzaC1kc3MAAACBAL+4+EeuubcbNP48XJONq1SgPngZFjDKu+MiDCMDNtzw
6
+ bqsGDIRTolPKYs9toCRMyJBOv2p4wAKY7EweNT5ka110gaxmZ1LGsCIBOPiF6lvI
7
+ Iqidqi6S0boZVmjb4WA5DW5qu8XMAJIxGHuqrBOSVesRp6A1MROYpR0qQsXq/HOJ
8
+ AAAAFQDIvmNb+BUDk9eq82asXwWS9rcq5wAAAIAx6uiaV2jauJa0fisi3p8VIayo
9
+ 8EAVLIyjDg8cRzEtE5Fagdq1n1gQd0EJvYVwwsEdacLxA/VI1DqzyPb9cj8THqKi
10
+ b36itdWrSzKYVY5TAvdKYOLcYlRbT51c9Bu+SqPOHQFAgS38YzbZfoar5oevnLyk
11
+ nhDgnlogrMk/OkUZoQAAAIEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+D
12
+ JmrOFcmFqN/XtxYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70
13
+ tg1y39Z46MsFdGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1
14
+ UeI=
15
+ Private-Lines: 1
16
+ AAAAFQCl3JfIKDbnArDjCLHs6372hyeAPA==
17
+ Private-MAC: 25f8c1ddd55ec9194ee1fe55147f78159f2e5c22bd9b309a86f54a19922af5e8
@@ -1,10 +1,10 @@
1
- PuTTY-User-Key-File-2: ecdsa-sha2-nistp256
2
- Encryption: aes256-cbc
3
- Comment: ECDSA NIST P-256 Key
4
- Public-Lines: 3
5
- AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ3DddjuXAE
6
- JBGEdbNJMuQ6J4ygr3Y6T6i7lSYSilJx+bpS2G2CBDywgH/tRCTEKEWDfuDMWIBD
7
- 8CFx/Ll+GYI=
8
- Private-Lines: 1
9
- gxt0kaX6X+MtVMSrtEY2jRhqohF8BfXkGgnjPIesEfg52oI2hBWScmzPa1oeSq3S
10
- Private-MAC: 26ae5e506735b389f7c3d39b291e01b4183442a6
1
+ PuTTY-User-Key-File-2: ecdsa-sha2-nistp256
2
+ Encryption: aes256-cbc
3
+ Comment: ECDSA NIST P-256 Key
4
+ Public-Lines: 3
5
+ AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ3DddjuXAE
6
+ JBGEdbNJMuQ6J4ygr3Y6T6i7lSYSilJx+bpS2G2CBDywgH/tRCTEKEWDfuDMWIBD
7
+ 8CFx/Ll+GYI=
8
+ Private-Lines: 1
9
+ gxt0kaX6X+MtVMSrtEY2jRhqohF8BfXkGgnjPIesEfg52oI2hBWScmzPa1oeSq3S
10
+ Private-MAC: 26ae5e506735b389f7c3d39b291e01b4183442a6
@@ -0,0 +1,15 @@
1
+ PuTTY-User-Key-File-3: ecdsa-sha2-nistp256
2
+ Encryption: aes256-cbc
3
+ Comment: ECDSA NIST P-256 Key
4
+ Public-Lines: 3
5
+ AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ3DddjuXAE
6
+ JBGEdbNJMuQ6J4ygr3Y6T6i7lSYSilJx+bpS2G2CBDywgH/tRCTEKEWDfuDMWIBD
7
+ 8CFx/Ll+GYI=
8
+ Key-Derivation: Argon2i
9
+ Argon2-Memory: 4096
10
+ Argon2-Passes: 12
11
+ Argon2-Parallelism: 1
12
+ Argon2-Salt: ba8364f0da7d8133bbd5f7396ac280f8
13
+ Private-Lines: 1
14
+ lZhLuHaK0KjpxVQJJZSmNYp9KtwwGkvweG+MGx5LuSW1kkN31cIgZg0Rj7D0jAkI
15
+ Private-MAC: 9fb375da27b65d80784def1f42cef85ec2ecb26d82b0decda3294513bb6b90b6
@@ -1,10 +1,10 @@
1
- PuTTY-User-Key-File-2: ecdsa-sha2-nistp256
2
- Encryption: none
3
- Comment: ECDSA NIST P-256 Key
4
- Public-Lines: 3
5
- AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ3DddjuXAE
6
- JBGEdbNJMuQ6J4ygr3Y6T6i7lSYSilJx+bpS2G2CBDywgH/tRCTEKEWDfuDMWIBD
7
- 8CFx/Ll+GYI=
8
- Private-Lines: 1
9
- AAAAIQDS3drCgiIvmEaupDgGw6aEy8rRVlBqL/QgdQQhJrrlQw==
10
- Private-MAC: fa55024b8a317064ff3502192181a8a30ae2ceb2
1
+ PuTTY-User-Key-File-2: ecdsa-sha2-nistp256
2
+ Encryption: none
3
+ Comment: ECDSA NIST P-256 Key
4
+ Public-Lines: 3
5
+ AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ3DddjuXAE
6
+ JBGEdbNJMuQ6J4ygr3Y6T6i7lSYSilJx+bpS2G2CBDywgH/tRCTEKEWDfuDMWIBD
7
+ 8CFx/Ll+GYI=
8
+ Private-Lines: 1
9
+ AAAAIQDS3drCgiIvmEaupDgGw6aEy8rRVlBqL/QgdQQhJrrlQw==
10
+ Private-MAC: fa55024b8a317064ff3502192181a8a30ae2ceb2
@@ -0,0 +1,10 @@
1
+ PuTTY-User-Key-File-3: ecdsa-sha2-nistp256
2
+ Encryption: none
3
+ Comment: ECDSA NIST P-256 Key
4
+ Public-Lines: 3
5
+ AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCQ3DddjuXAE
6
+ JBGEdbNJMuQ6J4ygr3Y6T6i7lSYSilJx+bpS2G2CBDywgH/tRCTEKEWDfuDMWIBD
7
+ 8CFx/Ll+GYI=
8
+ Private-Lines: 1
9
+ AAAAIQDS3drCgiIvmEaupDgGw6aEy8rRVlBqL/QgdQQhJrrlQw==
10
+ Private-MAC: cceda1593184fd6f4a395fa48ffea3ccae62bb4e91146aaf855772eeb57e5bd4
@@ -1,11 +1,11 @@
1
- PuTTY-User-Key-File-2: ecdsa-sha2-nistp384
2
- Encryption: aes256-cbc
3
- Comment: ECDSA NIST P-384 Key
4
- Public-Lines: 3
5
- AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBGVcWqtNFCVp
6
- X/65SBYMlSuHi++wFIcl4iXp9rp6pAGfxK4Z1IZhBmKARMbIAWbWvZX5Gho/fJjJ
7
- WwrQOsV9hVjYsfL6icBDOc/GFxq7mPxYq7ZJfypvsa6sAXRcPX4OjQ==
8
- Private-Lines: 2
9
- DhMmJHbWO+eRtFTcVfM5thmsDO/AagTQQBAaePyPWoxdFZp8mHf5UvIxoXcz2MpA
10
- wBu0qnCC+XxxPkR8+t0GpA==
11
- Private-MAC: 3e2e02a07089bf0302e76ee43a3da89eb0571fb8
1
+ PuTTY-User-Key-File-2: ecdsa-sha2-nistp384
2
+ Encryption: aes256-cbc
3
+ Comment: ECDSA NIST P-384 Key
4
+ Public-Lines: 3
5
+ AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBGVcWqtNFCVp
6
+ X/65SBYMlSuHi++wFIcl4iXp9rp6pAGfxK4Z1IZhBmKARMbIAWbWvZX5Gho/fJjJ
7
+ WwrQOsV9hVjYsfL6icBDOc/GFxq7mPxYq7ZJfypvsa6sAXRcPX4OjQ==
8
+ Private-Lines: 2
9
+ DhMmJHbWO+eRtFTcVfM5thmsDO/AagTQQBAaePyPWoxdFZp8mHf5UvIxoXcz2MpA
10
+ wBu0qnCC+XxxPkR8+t0GpA==
11
+ Private-MAC: 3e2e02a07089bf0302e76ee43a3da89eb0571fb8
@@ -0,0 +1,16 @@
1
+ PuTTY-User-Key-File-3: ecdsa-sha2-nistp384
2
+ Encryption: aes256-cbc
3
+ Comment: ECDSA NIST P-384 Key
4
+ Public-Lines: 3
5
+ AAAAE2VjZHNhLXNoYTItbmlzdHAzODQAAAAIbmlzdHAzODQAAABhBGVcWqtNFCVp
6
+ X/65SBYMlSuHi++wFIcl4iXp9rp6pAGfxK4Z1IZhBmKARMbIAWbWvZX5Gho/fJjJ
7
+ WwrQOsV9hVjYsfL6icBDOc/GFxq7mPxYq7ZJfypvsa6sAXRcPX4OjQ==
8
+ Key-Derivation: Argon2i
9
+ Argon2-Memory: 8192
10
+ Argon2-Passes: 6
11
+ Argon2-Parallelism: 2
12
+ Argon2-Salt: 0ee1393b17b1c6a7792f13cb805e4956
13
+ Private-Lines: 2
14
+ gy8VqXnJwq7OBoWk7LdGDUAldchjlZwf0f3uoO5Xj8QcUse1s++rRWZURw5zaae7
15
+ wBRYd9WRb3FVYc+OmD2o7A==
16
+ Private-MAC: 546adb19cc580f2ec72ba46cd12bab512328e01f34eac38ed38c4225a4700563