putty-key 1.0.0
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 +7 -0
- checksums.yaml.gz.sig +3 -0
- data.tar.gz.sig +1 -0
- data/.yardopts +7 -0
- data/CHANGES.md +4 -0
- data/Gemfile +14 -0
- data/LICENSE +19 -0
- data/README.md +137 -0
- data/Rakefile +110 -0
- data/lib/putty/key.rb +25 -0
- data/lib/putty/key/error.rb +26 -0
- data/lib/putty/key/openssl.rb +182 -0
- data/lib/putty/key/ppk.rb +374 -0
- data/lib/putty/key/util.rb +128 -0
- data/lib/putty/key/version.rb +6 -0
- data/putty-key.gemspec +29 -0
- data/test/fixtures/dss-1024-encrypted.ppk +17 -0
- data/test/fixtures/dss-1024.pem +12 -0
- data/test/fixtures/dss-1024.ppk +17 -0
- data/test/fixtures/ecdsa-secp256k1.pem +5 -0
- data/test/fixtures/ecdsa-sha2-nistp256-encrypted.ppk +10 -0
- data/test/fixtures/ecdsa-sha2-nistp256.pem +5 -0
- data/test/fixtures/ecdsa-sha2-nistp256.ppk +10 -0
- data/test/fixtures/ecdsa-sha2-nistp384-encrypted.ppk +11 -0
- data/test/fixtures/ecdsa-sha2-nistp384.pem +6 -0
- data/test/fixtures/ecdsa-sha2-nistp384.ppk +11 -0
- data/test/fixtures/ecdsa-sha2-nistp521-encrypted.ppk +12 -0
- data/test/fixtures/ecdsa-sha2-nistp521.pem +7 -0
- data/test/fixtures/ecdsa-sha2-nistp521.ppk +12 -0
- data/test/fixtures/rsa-2048-encrypted.ppk +26 -0
- data/test/fixtures/rsa-2048.pem +27 -0
- data/test/fixtures/rsa-2048.ppk +26 -0
- data/test/fixtures/test-blank-comment.ppk +11 -0
- data/test/fixtures/test-encrypted.ppk +11 -0
- data/test/fixtures/test-invalid-blob-lines.ppk +11 -0
- data/test/fixtures/test-invalid-encryption-type.ppk +11 -0
- data/test/fixtures/test-invalid-format-1.ppk +11 -0
- data/test/fixtures/test-invalid-format-3.ppk +11 -0
- data/test/fixtures/test-invalid-private-mac.ppk +11 -0
- data/test/fixtures/test-truncated.ppk +10 -0
- data/test/fixtures/test-unix-line-endings.ppk +11 -0
- data/test/fixtures/test.ppk +11 -0
- data/test/openssl_test.rb +252 -0
- data/test/ppk_test.rb +247 -0
- data/test/test_helper.rb +81 -0
- data/test/util_test.rb +180 -0
- data/test/version_test.rb +7 -0
- metadata +124 -0
- metadata.gz.sig +0 -0
data/putty-key.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path(File.join('..', 'lib', 'putty', 'key', 'version'), __FILE__)
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'putty-key'
|
5
|
+
s.version = PuTTY::Key::VERSION
|
6
|
+
s.summary = 'Reads and writes PuTTY private key (.ppk) files. Refines OpenSSL::PKey to allow key conversion.'
|
7
|
+
s.description = <<-EOF
|
8
|
+
PuTTY::Key is a pure-Ruby implementation of the PuTTY private key (ppk) format,
|
9
|
+
handling reading and writing .ppk files. It includes a refinement to Ruby's
|
10
|
+
OpenSSL library to add support for converting DSA, EC and RSA private keys to
|
11
|
+
and from PuTTY private key files. This allows OpenSSH ecdsa, ssh-dss and ssh-rsa
|
12
|
+
private keys to be converted to and from PuTTY's private key format.
|
13
|
+
EOF
|
14
|
+
s.author = 'Philip Ross'
|
15
|
+
s.email = 'phil.ross@gmail.com'
|
16
|
+
s.homepage = 'https://github.com/philr/putty-key'
|
17
|
+
s.license = 'MIT'
|
18
|
+
s.files = %w(CHANGES.md Gemfile LICENSE README.md Rakefile putty-key.gemspec .yardopts) +
|
19
|
+
Dir['lib/**/*.rb'] +
|
20
|
+
Dir['test/**/*.rb'] +
|
21
|
+
Dir['test/fixtures/*']
|
22
|
+
s.platform = Gem::Platform::RUBY
|
23
|
+
s.require_path = 'lib'
|
24
|
+
s.rdoc_options << '--title' << 'PuTTY::Key' <<
|
25
|
+
'--main' << 'README.md' <<
|
26
|
+
'--markup' << 'markdown'
|
27
|
+
s.extra_rdoc_files = ['CHANGES.md', 'LICENSE', 'README.md']
|
28
|
+
s.required_ruby_version = '>= 2.1.0'
|
29
|
+
end
|
@@ -0,0 +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
|
@@ -0,0 +1,12 @@
|
|
1
|
+
-----BEGIN DSA PRIVATE KEY-----
|
2
|
+
MIIBvAIBAAKBgQC/uPhHrrm3GzT+PFyTjatUoD54GRYwyrvjIgwjAzbc8G6rBgyE
|
3
|
+
U6JTymLPbaAkTMiQTr9qeMACmOxMHjU+ZGtddIGsZmdSxrAiATj4hepbyCKonaou
|
4
|
+
ktG6GVZo2+FgOQ1uarvFzACSMRh7qqwTklXrEaegNTETmKUdKkLF6vxziQIVAMi+
|
5
|
+
Y1v4FQOT16rzZqxfBZL2tyrnAoGAMeromldo2riWtH4rIt6fFSGsqPBAFSyMow4P
|
6
|
+
HEcxLRORWoHatZ9YEHdBCb2FcMLBHWnC8QP1SNQ6s8j2/XI/Ex6iom9+orXVq0sy
|
7
|
+
mFWOUwL3SmDi3GJUW0+dXPQbvkqjzh0BQIEt/GM22X6Gq+aHr5y8pJ4Q4J5aIKzJ
|
8
|
+
PzpFGaECgYEAvBTb2ZdpeawFZ7kxY+n3whqjslqBPTZwZhoZI6+DJmrOFcmFqN/X
|
9
|
+
txYul2F8M05GigjRjM6onmDx73nUqoGuRINOqdKVuu4D9dB1vw70tg1y39Z46MsF
|
10
|
+
dGKWquy1C2+nm2//jxbEc/dAxOHL20pGA8lSG7NRlUfX4vpmpLw1UeICFQCl3JfI
|
11
|
+
KDbnArDjCLHs6372hyeAPA==
|
12
|
+
-----END DSA PRIVATE KEY-----
|
@@ -0,0 +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
|
@@ -0,0 +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
|
@@ -0,0 +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
|
@@ -0,0 +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
|
@@ -0,0 +1,6 @@
|
|
1
|
+
-----BEGIN EC PRIVATE KEY-----
|
2
|
+
MIGkAgEBBDDd4/iUv3slRIozZ7C5xoH0D9SYQCQ8k4oWQx5AYB2ZI3D+FHfGE7OP
|
3
|
+
hutQaprDANegBwYFK4EEACKhZANiAARlXFqrTRQlaV/+uUgWDJUrh4vvsBSHJeIl
|
4
|
+
6fa6eqQBn8SuGdSGYQZigETGyAFm1r2V+RoaP3yYyVsK0DrFfYVY2LHy+onAQznP
|
5
|
+
xhcau5j8WKu2SX8qb7GurAF0XD1+Do0=
|
6
|
+
-----END EC PRIVATE KEY-----
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: ecdsa-sha2-nistp384
|
2
|
+
Encryption: none
|
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
|
+
AAAAMQDd4/iUv3slRIozZ7C5xoH0D9SYQCQ8k4oWQx5AYB2ZI3D+FHfGE7OPhutQ
|
10
|
+
aprDANc=
|
11
|
+
Private-MAC: c0b0522f17c6039ab23ffd8f93a817ff4a4726e6
|
@@ -0,0 +1,12 @@
|
|
1
|
+
PuTTY-User-Key-File-2: ecdsa-sha2-nistp521
|
2
|
+
Encryption: aes256-cbc
|
3
|
+
Comment: ECDSA NIST P-521 Key
|
4
|
+
Public-Lines: 4
|
5
|
+
AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAENbRFAy4lK
|
6
|
+
C/5rByU7cvbu/ImvKFOhmFTny7UUiv1KBaRaX104i9HpFqSAntOT2/SQ0KDMJ9Dm
|
7
|
+
nLkDp8MfQRFeJwFtFnyvu/4faSO5S64ftLsRuEuOulaKEwQKl4ncNY0Zyjf9OjZq
|
8
|
+
ETY9r6SbRQuAtKeDsL7bXgRAv75++JVZV7NwAA==
|
9
|
+
Private-Lines: 2
|
10
|
+
TRdZJW1Ek+k/NGr1GMslLohx3zwJro6Izi291LQ0ItkH5enhPENcSkqWyTEHveNP
|
11
|
+
r4PZTP2SnFrUwuSDqQBjqL++GVDAV6sWE6qlIhFxrcA=
|
12
|
+
Private-MAC: 7e6a2b46dece1d1bf524fc372b285e1e8c96cbee
|
@@ -0,0 +1,7 @@
|
|
1
|
+
-----BEGIN EC PRIVATE KEY-----
|
2
|
+
MIHbAgEBBEGdsLUosFN7QpT9JYWH7BtxcUg73MFZJpc4P1aSOObYbyv2CE0iEs7i
|
3
|
+
eOORoIF6upoa/Sz1uXfdxhD7i8euiLa5AKAHBgUrgQQAI6GBiQOBhgAEAQ1tEUDL
|
4
|
+
iUoL/msHJTty9u78ia8oU6GYVOfLtRSK/UoFpFpfXTiL0ekWpICe05Pb9JDQoMwn
|
5
|
+
0OacuQOnwx9BEV4nAW0WfK+7/h9pI7lLrh+0uxG4S466VooTBAqXidw1jRnKN/06
|
6
|
+
NmoRNj2vpJtFC4C0p4OwvtteBEC/vn74lVlXs3AA
|
7
|
+
-----END EC PRIVATE KEY-----
|
@@ -0,0 +1,12 @@
|
|
1
|
+
PuTTY-User-Key-File-2: ecdsa-sha2-nistp521
|
2
|
+
Encryption: none
|
3
|
+
Comment: ECDSA NIST P-521 Key
|
4
|
+
Public-Lines: 4
|
5
|
+
AAAAE2VjZHNhLXNoYTItbmlzdHA1MjEAAAAIbmlzdHA1MjEAAACFBAENbRFAy4lK
|
6
|
+
C/5rByU7cvbu/ImvKFOhmFTny7UUiv1KBaRaX104i9HpFqSAntOT2/SQ0KDMJ9Dm
|
7
|
+
nLkDp8MfQRFeJwFtFnyvu/4faSO5S64ftLsRuEuOulaKEwQKl4ncNY0Zyjf9OjZq
|
8
|
+
ETY9r6SbRQuAtKeDsL7bXgRAv75++JVZV7NwAA==
|
9
|
+
Private-Lines: 2
|
10
|
+
AAAAQgCdsLUosFN7QpT9JYWH7BtxcUg73MFZJpc4P1aSOObYbyv2CE0iEs7ieOOR
|
11
|
+
oIF6upoa/Sz1uXfdxhD7i8euiLa5AA==
|
12
|
+
Private-MAC: 5bc82292bfaecfaaef3e189e7bcfccd9573b0488
|
@@ -0,0 +1,26 @@
|
|
1
|
+
PuTTY-User-Key-File-2: ssh-rsa
|
2
|
+
Encryption: aes256-cbc
|
3
|
+
Comment: 2048 bit RSA key
|
4
|
+
Public-Lines: 6
|
5
|
+
AAAAB3NzaC1yc2EAAAABJQAAAQEAhcwsATtpPNlaXcGwb1QRVgvRxGia+XOZLTJO
|
6
|
+
eLdTMvy18XPR6ExVxXvJEnllJKFLCpnBAo/I9z7lkNjXMS2s6HVSlp7kU79HfDE8
|
7
|
+
m5dwAh7xPl1t+ClJUBiXmwm11z/UznkPnmA3O7JNImhkZjWVUXTFVC/hLRRALdwb
|
8
|
+
GRz+vcKp6cHtkVmH5e4gRUf8E7T28uJhP7oonLpY1b2POpDChOGNT3PeSM68i8dp
|
9
|
+
4hjyhkI8OQD8Tmiuxw+e+vNw+dH9y9CjHwMdLC2sVpB2QXDrNc5zpp9Zth5LXHYh
|
10
|
+
lQVk3iuHlnyem5KgsuTL23+kJyK2OtpwOUb63mYiDzVbYPCw1Q==
|
11
|
+
Private-Lines: 14
|
12
|
+
Ph1M5YzOkAHx7SiNwS5gEREEEXfoAFfv+bOEoPVotv5tykXSAkg6F6eIRG4QrB7M
|
13
|
+
jXN1J2eA94qSxWvg4AuSrrDMKOP6hDIZ3RTo5omZW7iOxR9n19GvojGGqpy06HSh
|
14
|
+
E9Y1pvNBj8M5IchLQoEgCp8qnwpR3qnhEn9F981rGyYUVqC5SK2evLcMXpn3xYyk
|
15
|
+
FpPEm3aP6V6i+PFKTLwOyZDTwI69Po8dM5yVL7AK3twDLnPYwgmD+FpUG/x/UiTd
|
16
|
+
EWgX/txl7FtSmAOOYrY6Ible1I5RizAih+bWRBinEbJq0c/FjSaHFBmE4x0e18RS
|
17
|
+
mOw3VHrukY7R1R4UZnh+driNBmQm4RS/C9bIjInJEs3njCn2tY0OvlWT4PVLUkhy
|
18
|
+
XyJI5ezqAvQO6aiKxR1ELZU2qOejQi8Yu1DIgHzK6WafPkgrrsUeMQatT9JoZoVO
|
19
|
+
yGTBPfGAjALyDWT3pNP9bPIHa1/HzV6q/pbzlVFu8m1NV7pBr+i0qF5g+bUzSzsl
|
20
|
+
JJ5lfNY3dW46YLHJ5V1D7TAeQB9Hb4xXcZo39YB4eVBQYhjlNvmY4lhwX9OuxgQd
|
21
|
+
Oft5PeiUu/R64va+WaaGb0DxyrDC/ZCN71ZaBDLOpgg7HVpEcIbvsz3OUgJ2kDag
|
22
|
+
l6t/6+arO0F2golwnM4QDdZXpi07RgvqnQiN5ik1ruQvOymhI/pBkhoHHEvZMvuR
|
23
|
+
lviDAvcB90pUC5e5YDVja1kkheMbEiWGU+m6GQ7suCC81Y76qx0s49wp8NI5BTLX
|
24
|
+
KAjcXP2cjOyRR7hkhm+pP4lLIjTGqrQJkPTL+/sANgBUz8bAcJlBBitBFCdJNfYs
|
25
|
+
vCQcLIDMBts6cZzPtmGS4L/aBa2V+sOEY2Iy2nw3ON4GJkdbbCG5lK6pTAYJ/Ybk
|
26
|
+
Private-MAC: 6713a251801931475ec30fc04a56e46fcc3edc06
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEoQIBAAKCAQEAhcwsATtpPNlaXcGwb1QRVgvRxGia+XOZLTJOeLdTMvy18XPR
|
3
|
+
6ExVxXvJEnllJKFLCpnBAo/I9z7lkNjXMS2s6HVSlp7kU79HfDE8m5dwAh7xPl1t
|
4
|
+
+ClJUBiXmwm11z/UznkPnmA3O7JNImhkZjWVUXTFVC/hLRRALdwbGRz+vcKp6cHt
|
5
|
+
kVmH5e4gRUf8E7T28uJhP7oonLpY1b2POpDChOGNT3PeSM68i8dp4hjyhkI8OQD8
|
6
|
+
Tmiuxw+e+vNw+dH9y9CjHwMdLC2sVpB2QXDrNc5zpp9Zth5LXHYhlQVk3iuHlnye
|
7
|
+
m5KgsuTL23+kJyK2OtpwOUb63mYiDzVbYPCw1QIBJQKCAQBsfAgA/70clI51iEnd
|
8
|
+
ucjd+77WmgEdSPi83K5UCkN1cvRi6ElUkOuZM+8jvF/Ygsc5BwsygmuYCXvdOjHw
|
9
|
+
heYkQ3NlXjyW7h5JBVO8bPMIo3d+rJ5aglceWSD6Pzl+GBRUYihW5jqfGvJu7NvI
|
10
|
+
fnkRnPMF/U7KmsxA2/pLtqUIjssgjq56sn5LQU87b+j/QjSRe7Ekr9B/QqydvZy9
|
11
|
+
jOOQVH6DFtyCUc+OPqQ4UPrAGHbcS6s+vU0gaht+ZAoRMgvinTV5oVPkXocc7NuH
|
12
|
+
WUBzOGuZlpM9T2qWEFgz1dtKZlcW5g86NfShwJiiCBYJNRD6BJH1gDZhmMBuwp9I
|
13
|
+
hbytAoGBAOl/jfwpsVrKFgXMmdDbiBoYxHZulLiwyygU+hnOlYvAZ6nwYflUNkM5
|
14
|
+
M/nokPhzcfvIGMewcIpCTQdXOdP1grfTidaaPVE4EOdWzHWzCOjtfZwX+YnzTNxP
|
15
|
+
yQoh+wusgO6QvNNezK0WBFf6M0Adwi+qUGe1COmERpve/+uipEZ1AoGBAJKw+2+M
|
16
|
+
EE0UXONrG5zsSiSNFm4090Qbx6AgWZqCM9nWvFhoD0x2AF+8vaVvzsTQj/Ic8UfQ
|
17
|
+
lzRUP7n/T0xVgHuT/F/mOo8nQckGwgLe8WX+ejC3n01dmidTmO7u1+zecKUULJZS
|
18
|
+
2L1d6mJMqNFka+CPYkNvDt9ZOHa4q81tYzThAoGAfjccUPPxKigL53WDk32VrT3R
|
19
|
+
+tP9XOnxRhktPmHUS4qY5jy/VlcIkwop7t6TjTd74gtLqjXb97Uit9wfQiPX9Kmy
|
20
|
+
Snzi38tHaEqYCEUZkqnjCERPiNaKaT/iSqqVicUHbDKPlNlMCohxDPXyMH7J1JNp
|
21
|
+
u4RzhSTn5Y1MEKrxA30CgYBDZhKo330cfvo++dxBLkuUQNL0XYZdkDkgDt0Po5tI
|
22
|
+
aZTOrFoOX7r7jhHyEMbJIY4+zwcTKHzS2pnR/67QC5vlwIi2cLMfLbZxHsfXzjeP
|
23
|
+
uhx3P5w4TZnat7T4KIy48JSe38F1gAK33wrTN/qJuISXm9MzvWeyukpgD6jh2FAt
|
24
|
+
DQKBgQC/5RuZwGiLA6IBz/4Y5uutSOz9vGgoUJTd/6ee8pAUHnkbCoKMrSUBw7DU
|
25
|
+
aXtYdaP6zmls6eqP2X+k431Z9TfeyTLJ5BmeJYTguk//ITi6u9B5wUD/0eyBRhK1
|
26
|
+
t46BcED4Ib231qM2dFLelVyazF0C9ooSytfH6SAMLj/VD2jKYg==
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,26 @@
|
|
1
|
+
PuTTY-User-Key-File-2: ssh-rsa
|
2
|
+
Encryption: none
|
3
|
+
Comment: 2048 bit RSA key
|
4
|
+
Public-Lines: 6
|
5
|
+
AAAAB3NzaC1yc2EAAAABJQAAAQEAhcwsATtpPNlaXcGwb1QRVgvRxGia+XOZLTJO
|
6
|
+
eLdTMvy18XPR6ExVxXvJEnllJKFLCpnBAo/I9z7lkNjXMS2s6HVSlp7kU79HfDE8
|
7
|
+
m5dwAh7xPl1t+ClJUBiXmwm11z/UznkPnmA3O7JNImhkZjWVUXTFVC/hLRRALdwb
|
8
|
+
GRz+vcKp6cHtkVmH5e4gRUf8E7T28uJhP7oonLpY1b2POpDChOGNT3PeSM68i8dp
|
9
|
+
4hjyhkI8OQD8Tmiuxw+e+vNw+dH9y9CjHwMdLC2sVpB2QXDrNc5zpp9Zth5LXHYh
|
10
|
+
lQVk3iuHlnyem5KgsuTL23+kJyK2OtpwOUb63mYiDzVbYPCw1Q==
|
11
|
+
Private-Lines: 14
|
12
|
+
AAABAGx8CAD/vRyUjnWISd25yN37vtaaAR1I+LzcrlQKQ3Vy9GLoSVSQ65kz7yO8
|
13
|
+
X9iCxzkHCzKCa5gJe906MfCF5iRDc2VePJbuHkkFU7xs8wijd36snlqCVx5ZIPo/
|
14
|
+
OX4YFFRiKFbmOp8a8m7s28h+eRGc8wX9TsqazEDb+ku2pQiOyyCOrnqyfktBTztv
|
15
|
+
6P9CNJF7sSSv0H9CrJ29nL2M45BUfoMW3IJRz44+pDhQ+sAYdtxLqz69TSBqG35k
|
16
|
+
ChEyC+KdNXmhU+Rehxzs24dZQHM4a5mWkz1PapYQWDPV20pmVxbmDzo19KHAmKII
|
17
|
+
Fgk1EPoEkfWANmGYwG7Cn0iFvK0AAACBAOl/jfwpsVrKFgXMmdDbiBoYxHZulLiw
|
18
|
+
yygU+hnOlYvAZ6nwYflUNkM5M/nokPhzcfvIGMewcIpCTQdXOdP1grfTidaaPVE4
|
19
|
+
EOdWzHWzCOjtfZwX+YnzTNxPyQoh+wusgO6QvNNezK0WBFf6M0Adwi+qUGe1COmE
|
20
|
+
Rpve/+uipEZ1AAAAgQCSsPtvjBBNFFzjaxuc7EokjRZuNPdEG8egIFmagjPZ1rxY
|
21
|
+
aA9MdgBfvL2lb87E0I/yHPFH0Jc0VD+5/09MVYB7k/xf5jqPJ0HJBsIC3vFl/now
|
22
|
+
t59NXZonU5ju7tfs3nClFCyWUti9XepiTKjRZGvgj2JDbw7fWTh2uKvNbWM04QAA
|
23
|
+
AIEAv+UbmcBoiwOiAc/+GObrrUjs/bxoKFCU3f+nnvKQFB55GwqCjK0lAcOw1Gl7
|
24
|
+
WHWj+s5pbOnqj9l/pON9WfU33skyyeQZniWE4LpP/yE4urvQecFA/9HsgUYStbeO
|
25
|
+
gXBA+CG9t9ajNnRS3pVcmsxdAvaKEsrXx+kgDC4/1Q9oymI=
|
26
|
+
Private-MAC: 1121fbfa29150e2de19fb38ad23e0dc798897e57
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: none
|
3
|
+
Comment:
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: 5ac70efe792f98c8dbce691365f8730db87056af
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: aes256-cbc
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
UPH0kPARB9c5B/l+9h87cpgeOM8DV2Aq4dtmnXkfmJCT/FobQwH3j3pOzlUfyfWq
|
9
|
+
0vn0K0ijtguqf5k2iUQPAm9Htg/jIz6mQSlt64ywKmdjtwCzqABmIOxNLNlW/KpN
|
10
|
+
W178Ce6CrFYzStolWz1Lm6hYMs8Cr5eaWWQo/8Yr82U=
|
11
|
+
Private-MAC: f902208f2435849375143780bc8dfcc344e57a13
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: -2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: f3045e1abe1fd459117eec9d0eed18661b4274bb
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: camellia256-cbc
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
O4jfhfwamnLbbSs/DxTd+nZNFRcBC2XuPBD8VbSRNmLpx57FGVPiLvgYH5Ot8zhb
|
9
|
+
+90J6pY2hO6M2bQsQNoqMwDB0K/0bSG3ignWN4XKXJOofpmn2o8gBv7xfmJ++2Ni
|
10
|
+
qAdfPt1qZXIb7Yp4weFQiAWJ6m0ysDIS7Xnwv/uZLRc=
|
11
|
+
Private-MAC: 435b5081a0f34cee896e0783db15e9e832a9de31
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-1: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: f3045e1abe1fd459117eec9d0eed18661b4274bb
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-3: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: f3045e1abe1fd459117eec9d0eed18661b4274bb
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: a89e0b76bb00232fd21871875bcd319cff3116ea
|
@@ -0,0 +1,10 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: f3045e1abe1fd459117eec9d0eed18661b4274bb
|
@@ -0,0 +1,11 @@
|
|
1
|
+
PuTTY-User-Key-File-2: test
|
2
|
+
Encryption: none
|
3
|
+
Comment: This is a test ppk file
|
4
|
+
Public-Lines: 2
|
5
|
+
AAAABHRlc3QAAABKVGhpcyBpcyB0aGUgcHVibGljIGJsb2IgZnJvbSBhIHBwayBm
|
6
|
+
aWxlIGNyZWF0ZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMgb25seS4=
|
7
|
+
Private-Lines: 3
|
8
|
+
AAAAd1RoaXMgaXMgdGhlIHByaXZhdGUgYmxvYiBmcm9tIGEgcHBrIGZpbGUgY3Jl
|
9
|
+
YXRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LiBJdCBpcyBzbGlnaHRseSBs
|
10
|
+
b25nZXIgdGhhbiB0aGUgcHVibGljIGJsb2Iu
|
11
|
+
Private-MAC: f3045e1abe1fd459117eec9d0eed18661b4274bb
|
@@ -0,0 +1,252 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
if TEST_TYPE == :refinement
|
4
|
+
# JRuby 9.0.5.0 ignores the conditional and imports the refinements
|
5
|
+
# regardless. Use send to prevent this.
|
6
|
+
send(:using, PuTTY::Key)
|
7
|
+
end
|
8
|
+
|
9
|
+
class OpenSSLTest < Minitest::Test
|
10
|
+
def test_from_ppk_nil
|
11
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(nil) }
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_from_ppk_unsupported_algorithm
|
15
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('test.ppk'))
|
16
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_from_ppk_rsa
|
20
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('rsa-2048.ppk'))
|
21
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
22
|
+
assert_kind_of(OpenSSL::PKey::RSA, pkey)
|
23
|
+
assert_equal(load_fixture('rsa-2048.pem'), pkey.to_pem)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_from_ppk_rsa_encrypted
|
27
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('rsa-2048-encrypted.ppk'), 'Test Passphrase')
|
28
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
29
|
+
assert_kind_of(OpenSSL::PKey::RSA, pkey)
|
30
|
+
assert_equal(load_fixture('rsa-2048.pem'), pkey.to_pem)
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_from_ppk_dss
|
34
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('dss-1024.ppk'))
|
35
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
36
|
+
assert_kind_of(OpenSSL::PKey::DSA, pkey)
|
37
|
+
assert_equal(load_fixture('dss-1024.pem'), pkey.to_pem)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_from_ppk_dss_encrypted
|
41
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('dss-1024-encrypted.ppk'), 'Test Passphrase')
|
42
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
43
|
+
assert_kind_of(OpenSSL::PKey::DSA, pkey)
|
44
|
+
assert_equal(load_fixture('dss-1024.pem'), pkey.to_pem)
|
45
|
+
end
|
46
|
+
|
47
|
+
# jruby-openssl doesn't include an EC class (version 0.9.16)
|
48
|
+
if defined?(OpenSSL::PKey::EC)
|
49
|
+
def test_from_ppk_ecdsa_sha2_nistp256
|
50
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp256.ppk'))
|
51
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
52
|
+
assert_kind_of(OpenSSL::PKey::EC, pkey)
|
53
|
+
assert_equal(load_fixture('ecdsa-sha2-nistp256.pem'), pkey.to_pem)
|
54
|
+
end
|
55
|
+
|
56
|
+
def test_from_ppk_ecdsa_sha2_nistp256_encrypted
|
57
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp256-encrypted.ppk'), 'Test Passphrase')
|
58
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
59
|
+
assert_kind_of(OpenSSL::PKey::EC, pkey)
|
60
|
+
assert_equal(load_fixture('ecdsa-sha2-nistp256.pem'), pkey.to_pem)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_from_ppk_ecdsa_sha2_nistp384
|
64
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp384.ppk'))
|
65
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
66
|
+
assert_kind_of(OpenSSL::PKey::EC, pkey)
|
67
|
+
assert_equal(load_fixture('ecdsa-sha2-nistp384.pem'), pkey.to_pem)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_from_ppk_ecdsa_sha2_nistp384_encrypted
|
71
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp384-encrypted.ppk'), 'Test Passphrase')
|
72
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
73
|
+
assert_kind_of(OpenSSL::PKey::EC, pkey)
|
74
|
+
assert_equal(load_fixture('ecdsa-sha2-nistp384.pem'), pkey.to_pem)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_from_ppk_ecdsa_sha2_nistp521
|
78
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp521.ppk'))
|
79
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
80
|
+
assert_kind_of(OpenSSL::PKey::EC, pkey)
|
81
|
+
assert_equal(load_fixture('ecdsa-sha2-nistp521.pem'), pkey.to_pem)
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_from_ppk_ecdsa_sha2_nistp521_encrypted
|
85
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp521-encrypted.ppk'), 'Test Passphrase')
|
86
|
+
pkey = OpenSSL::PKey.from_ppk(ppk)
|
87
|
+
assert_kind_of(OpenSSL::PKey::EC, pkey)
|
88
|
+
assert_equal(load_fixture('ecdsa-sha2-nistp521.pem'), pkey.to_pem)
|
89
|
+
end
|
90
|
+
else
|
91
|
+
def test_from_ppk_ecdsa_sha2_nistp256
|
92
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp256.ppk'))
|
93
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_from_ppk_ecdsa_sha2_nistp256_encrypted
|
97
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp256-encrypted.ppk'), 'Test Passphrase')
|
98
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_from_ppk_ecdsa_sha2_nistp384
|
102
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp384.ppk'))
|
103
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_from_ppk_ecdsa_sha2_nistp384_encrypted
|
107
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp384-encrypted.ppk'), 'Test Passphrase')
|
108
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_from_ppk_ecdsa_sha2_nistp521
|
112
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp521.ppk'))
|
113
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
114
|
+
end
|
115
|
+
|
116
|
+
def test_from_ppk_ecdsa_sha2_nistp521_encrypted
|
117
|
+
ppk = PuTTY::Key::PPK.new(fixture_path('ecdsa-sha2-nistp521-encrypted.ppk'), 'Test Passphrase')
|
118
|
+
assert_raises(ArgumentError) { OpenSSL::PKey.from_ppk(ppk) }
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def pem_to_ppk(fixture, type = nil)
|
123
|
+
pem = load_fixture(fixture)
|
124
|
+
|
125
|
+
# Accessing OpenSSL::PKey::EC#public_key raises a warning when the key was
|
126
|
+
# loaded with OpenSSL::PKey.read(pem), but doesn't when instantiated with
|
127
|
+
# OpenSSL::PKey::EC.new(pem) (Ruby 2.3.0).
|
128
|
+
pkey = type ? type.new(pem) : OpenSSL::PKey.read(pem)
|
129
|
+
|
130
|
+
pkey.to_ppk.tap do |ppk|
|
131
|
+
assert_nil(ppk.comment)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def test_to_ppk_rsa
|
136
|
+
ppk = pem_to_ppk('rsa-2048.pem')
|
137
|
+
ppk.comment = '2048 bit RSA key'
|
138
|
+
temp_file_name do |file|
|
139
|
+
ppk.save(file)
|
140
|
+
assert_identical_to_fixture('rsa-2048.ppk', file)
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def test_to_ppk_rsa_encrypted
|
145
|
+
ppk = pem_to_ppk('rsa-2048.pem')
|
146
|
+
ppk.comment = '2048 bit RSA key'
|
147
|
+
temp_file_name do |file|
|
148
|
+
ppk.save(file, 'Test Passphrase')
|
149
|
+
assert_identical_to_fixture('rsa-2048-encrypted.ppk', file)
|
150
|
+
end
|
151
|
+
end
|
152
|
+
|
153
|
+
def test_to_ppk_rsa_uninitialized
|
154
|
+
pkey = OpenSSL::PKey::RSA.new
|
155
|
+
assert_raises(PuTTY::Key::InvalidStateError) { pkey.to_ppk }
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_to_ppk_dss
|
159
|
+
ppk = pem_to_ppk('dss-1024.pem')
|
160
|
+
ppk.comment = '1024 bit DSS key'
|
161
|
+
temp_file_name do |file|
|
162
|
+
ppk.save(file)
|
163
|
+
assert_identical_to_fixture('dss-1024.ppk', file)
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
167
|
+
def test_to_ppk_dss_encrypted
|
168
|
+
ppk = pem_to_ppk('dss-1024.pem')
|
169
|
+
ppk.comment = '1024 bit DSS key'
|
170
|
+
temp_file_name do |file|
|
171
|
+
ppk.save(file, 'Test Passphrase')
|
172
|
+
assert_identical_to_fixture('dss-1024-encrypted.ppk', file)
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
def test_to_ppk_dss_uninitialized
|
177
|
+
pkey = OpenSSL::PKey::DSA.new
|
178
|
+
assert_raises(PuTTY::Key::InvalidStateError) { pkey.to_ppk }
|
179
|
+
end
|
180
|
+
|
181
|
+
# jruby-openssl doesn't include an EC class (version 0.9.15)
|
182
|
+
if defined?(OpenSSL::PKey::EC)
|
183
|
+
def test_to_ppk_ecdsa_sha2_nistp256
|
184
|
+
ppk = pem_to_ppk('ecdsa-sha2-nistp256.pem', OpenSSL::PKey::EC)
|
185
|
+
ppk.comment = 'ECDSA NIST P-256 Key'
|
186
|
+
temp_file_name do |file|
|
187
|
+
ppk.save(file)
|
188
|
+
assert_identical_to_fixture('ecdsa-sha2-nistp256.ppk', file)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
def test_to_ppk_ecdsa_sha2_nistp256_encrypted
|
193
|
+
ppk = pem_to_ppk('ecdsa-sha2-nistp256.pem', OpenSSL::PKey::EC)
|
194
|
+
ppk.comment = 'ECDSA NIST P-256 Key'
|
195
|
+
temp_file_name do |file|
|
196
|
+
ppk.save(file, 'Test Passphrase')
|
197
|
+
assert_identical_to_fixture('ecdsa-sha2-nistp256-encrypted.ppk', file)
|
198
|
+
end
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_to_ppk_ecdsa_sha2_nistp384
|
202
|
+
ppk = pem_to_ppk('ecdsa-sha2-nistp384.pem', OpenSSL::PKey::EC)
|
203
|
+
ppk.comment = 'ECDSA NIST P-384 Key'
|
204
|
+
temp_file_name do |file|
|
205
|
+
ppk.save(file)
|
206
|
+
assert_identical_to_fixture('ecdsa-sha2-nistp384.ppk', file)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_to_ppk_ecdsa_sha2_nistp384_encrypted
|
211
|
+
ppk = pem_to_ppk('ecdsa-sha2-nistp384.pem', OpenSSL::PKey::EC)
|
212
|
+
ppk.comment = 'ECDSA NIST P-384 Key'
|
213
|
+
temp_file_name do |file|
|
214
|
+
ppk.save(file, 'Test Passphrase')
|
215
|
+
assert_identical_to_fixture('ecdsa-sha2-nistp384-encrypted.ppk', file)
|
216
|
+
end
|
217
|
+
end
|
218
|
+
|
219
|
+
def test_to_ppk_ecdsa_sha2_nistp521
|
220
|
+
ppk = pem_to_ppk('ecdsa-sha2-nistp521.pem', OpenSSL::PKey::EC)
|
221
|
+
ppk.comment = 'ECDSA NIST P-521 Key'
|
222
|
+
temp_file_name do |file|
|
223
|
+
ppk.save(file)
|
224
|
+
assert_identical_to_fixture('ecdsa-sha2-nistp521.ppk', file)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_to_ppk_ecdsa_sha2_nistp521_encrypted
|
229
|
+
ppk = pem_to_ppk('ecdsa-sha2-nistp521.pem', OpenSSL::PKey::EC)
|
230
|
+
ppk.comment = 'ECDSA NIST P-521 Key'
|
231
|
+
temp_file_name do |file|
|
232
|
+
ppk.save(file, 'Test Passphrase')
|
233
|
+
assert_identical_to_fixture('ecdsa-sha2-nistp521-encrypted.ppk', file)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_to_ppk_unsupported_ec_curve
|
238
|
+
pkey = OpenSSL::PKey::EC.new(load_fixture('ecdsa-secp256k1.pem'))
|
239
|
+
assert_raises(PuTTY::Key::UnsupportedCurveError) { pkey.to_ppk }
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_to_ppk_uninitialized_ec_key
|
243
|
+
pkey = OpenSSL::PKey::EC.new('prime256v1')
|
244
|
+
assert_raises(PuTTY::Key::InvalidStateError) { pkey.to_ppk }
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_to_ppk_uninitialized_ec_key_no_curve
|
248
|
+
pkey = OpenSSL::PKey::EC.new
|
249
|
+
assert_raises(PuTTY::Key::InvalidStateError) { pkey.to_ppk }
|
250
|
+
end
|
251
|
+
end
|
252
|
+
end
|