putty-key 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|