Skip to content

Commit

Permalink
node-sshpk#27 PuTTY private key support (#76)
Browse files Browse the repository at this point in the history
Reviewed by: Alex Wilson
Reviewed by: Brian Bennett
  • Loading branch information
Eugeny committed Jan 6, 2022
1 parent 85f3c4e commit 1da5a87
Show file tree
Hide file tree
Showing 15 changed files with 338 additions and 80 deletions.
102 changes: 98 additions & 4 deletions lib/formats/putty.js
Expand Up @@ -9,20 +9,30 @@ var assert = require('assert-plus');
var Buffer = require('safer-buffer').Buffer;
var rfc4253 = require('./rfc4253');
var Key = require('../key');
var SSHBuffer = require('../ssh-buffer');
var crypto = require('crypto');
var PrivateKey = require('../private-key');

var errors = require('../errors');

// https://tartarus.org/~simon/putty-prerel-snapshots/htmldoc/AppendixC.html
function read(buf, options) {
var lines = buf.toString('ascii').split(/[\r\n]+/);
var found = false;
var parts;
var si = 0;
var formatVersion;
while (si < lines.length) {
parts = splitHeader(lines[si++]);
if (parts &&
parts[0].toLowerCase() === 'putty-user-key-file-2') {
found = true;
break;
if (parts) {
formatVersion = {
'putty-user-key-file-2': 2,
'putty-user-key-file-3': 3,
}[parts[0].toLowerCase()]
if (formatVersion) {
found = true;
break;
}
}
}
if (!found) {
Expand All @@ -32,6 +42,7 @@ function read(buf, options) {

parts = splitHeader(lines[si++]);
assert.equal(parts[0].toLowerCase(), 'encryption');
var encryption = parts[1];

parts = splitHeader(lines[si++]);
assert.equal(parts[0].toLowerCase(), 'comment');
Expand All @@ -52,10 +63,93 @@ function read(buf, options) {
if (key.type !== keyType) {
throw (new Error('Outer key algorithm mismatch'));
}

si += publicLines;
if (lines[si]) {
parts = splitHeader(lines[si++]);
assert.equal(parts[0].toLowerCase(), 'private-lines');
var privateLines = parseInt(parts[1], 10);
if (!isFinite(privateLines) || privateLines < 0 ||
privateLines > lines.length) {
throw (new Error('Invalid private-lines count'));
}

var privateBuf = Buffer.from(
lines.slice(si, si + privateLines).join(''), 'base64');

if (encryption !== 'none' && formatVersion === 3) {
throw new Error('Encrypted keys arenot supported for PuTTY format version 3');
}

if (encryption === 'aes256-cbc') {
if (!options.passphrase) {
throw (new errors.KeyEncryptedError(
options.filename, 'PEM'));
}

var iv = Buffer.alloc(16, 0);
var decipher = crypto.createDecipheriv(
'aes-256-cbc',
derivePPK2EncryptionKey(options.passphrase),
iv);
decipher.setAutoPadding(false);
privateBuf = Buffer.concat([
decipher.update(privateBuf), decipher.final()]);
}

key = new PrivateKey(key);
if (key.type !== keyType) {
throw (new Error('Outer key algorithm mismatch'));
}

var sshbuf = new SSHBuffer({buffer: privateBuf});
var privateKeyParts;
if (alg === 'ssh-dss') {
privateKeyParts = [ {
name: 'x',
data: sshbuf.readBuffer()
}];
} else if (alg === 'ssh-rsa') {
privateKeyParts = [
{ name: 'd', data: sshbuf.readBuffer() },
{ name: 'p', data: sshbuf.readBuffer() },
{ name: 'q', data: sshbuf.readBuffer() },
{ name: 'iqmp', data: sshbuf.readBuffer() }
];
} else if (alg.startsWith('ecdsa-sha2-nistp')) {
privateKeyParts = [ {
name: 'd', data: sshbuf.readBuffer()
} ];
} else if (alg === 'ssh-ed25519') {
privateKeyParts = [ {
name: 'k', data: sshbuf.readBuffer()
} ];
} else {
throw new Error('Unsupported PPK key type: ' + alg);
}

key = new PrivateKey({
type: key.type,
parts: key.parts.concat(privateKeyParts)
});
}

key.comment = comment;
return (key);
}

function derivePPK2EncryptionKey(passphrase) {
var hash1 = crypto.createHash('sha1').update(Buffer.concat([
Buffer.from([0, 0, 0, 0]),
Buffer.from(passphrase)
])).digest();
var hash2 = crypto.createHash('sha1').update(Buffer.concat([
Buffer.from([0, 0, 0, 1]),
Buffer.from(passphrase)
])).digest();
return (Buffer.concat([hash1, hash2]).slice(0, 32));
}

function splitHeader(line) {
var idx = line.indexOf(':');
if (idx === -1)
Expand Down
1 change: 1 addition & 0 deletions lib/private-key.js
Expand Up @@ -33,6 +33,7 @@ formats['ssh-private'] = require('./formats/ssh-private');
formats['openssh'] = formats['ssh-private'];
formats['ssh'] = formats['ssh-private'];
formats['dnssec'] = require('./formats/dnssec');
formats['putty'] = require('./formats/putty');

function PrivateKey(opts) {
assert.object(opts, 'options');
Expand Down
20 changes: 20 additions & 0 deletions test/assets/dsa-ppk
@@ -0,0 +1,20 @@
-----BEGIN DSA PRIVATE KEY-----
MIIDPQIBAAKCAQEAm6ofqHnQBzlOXYK2o0o9eZi1YtmHksmdRefKAYpsIvO/OwMP
6fLva+9TkUMdgu+B2n0w2vdbh1Qo1QtwRAiq9CKwY1iuK2CfciytvuYsKfLVTsgw
sy4eXb8d4BSrBStvRVkAKjFVqIcXKBBejr30vVDFK0rN3bIZaTilXAdE66wuW19u
mrFT9tiXKkTxPy2rnOrHE6qcgzD6EbfnWBqXOE3YSBzgOezoPExqkQX35cfVJdVI
zX1iS/iJv7VJnr+4kf0zlcT80JGmjEAv17O/tSbcX88xV7R6t4hBsEuqAYhEWKob
YtlJk66bS6FRpahwSNAcdx9flNCfxkygkk/GywIVAOTwYoGm15HYZFDWNnPwJCWv
i92FAoIBAGyuCYSkZY693yb/2/hMdfrwsX/bNeqBz1Eu+uUlwPEjt/hgA5evvLQA
D+EkRbeUI/k7bmzl+VDOzWQ7z9CbbAbeKz/rFg/kkxXhhyatsRJuGUGYdiQIaaKI
51fk71crGzUVfgaQqpN5bE++ub0lJccKFhoNFjRBqesRXyfklTvYTx1BxCrhVf3r
d5px4mDlM2v6UeCSLb6IEBscJgGzbRuuIeRoKYbSAxc2VnLHZMrvRUMVMu13sQPv
gfWpPWR3spsv+bPqXAxtkd7fpxuRll0wJZLSao8oJgdy1XG8X3q+l6grQv2hqoGk
XJUxPpvnkm30gCYMaqCd17UUrjRBjRkCggEAeCoNAd5nqIRV9sTXtxfcFb2o6VVT
rCXt/MQ3CnK5SxDa/gEOhU8y6IwyE9Y7CN6i8ta/Qt4KZcanXS5ciOT+bGT5Y2qx
HKgx8CcWv/J/GKROMxaEwaLvwT8qvI6Jv/x+3/+KwufaHA1w5ObOHL+UCaHzSuLK
pPRWAbWc2GOZtyfMasmwA5tKzdRJ9VTjS4lVKKOI32AV70hhk7wHIBeRZgrxUw+N
ZnlH5HWKZf2mWemPHhxsglKIczosCmg10vEVuFvIVzeSieV7y6/X/HIsAsjE6IMm
RZDiU9h5rb9FJLrdgGgn6P8XIjJ7e3+P21EL0mi63sRQFQHfLEwA8F3UgQIUJ2Qi
WkIsuhpeOTgyMLX2FWXPHZk=
-----END DSA PRIVATE KEY-----
1 change: 0 additions & 1 deletion test/assets/dsa-ppk.pub

This file was deleted.

38 changes: 19 additions & 19 deletions test/assets/dsa-pub.ppk
@@ -1,22 +1,22 @@
PuTTY-User-Key-File-2: ssh-dss
Encryption: none
Comment: dsa-key-20170331
Comment: dsa-key-20210515
Public-Lines: 18
AAAAB3NzaC1kc3MAAAEBALPLp37KKWyxxCtV085ozT7tY1zQimFhPvD+rPO4SSfH
quoRM/szwOXAqyavqYggajNyzSN/x5+gLu4p2iTmS0jC0Nf2FB5tyqxBKsrubmhV
MZpK+dBLm2V7NTE6fJpGRmpTNCKWPOfdZP7wF0w8oRNaTz1ILjNlXh06zXrp4FU+
wv0ums1PemF5Ff7u77vzkxXDsYFOO+btgAFEO8oTBapG1H0ZkcvTzIStCY6SnbzD
ggPtaqasKLjh4zocvdR9M4E1IIFtMaFSZx19w6ccpzAFD7dqTqNVavSN2SzSzcjM
eEdaLiSceof8qu5IcLdrofuQ0ltCVKNFrMm9pZK2kvUAAAAVANmWKeGafd0C0vAg
GthSALs1q/q1AAABAQCtHTj9zydZ2VDhHxrge+WeSF/Ix0zUknwDo7luJGgSTb/B
Zg42W+RIsWo+qFeK6XEzuaqlXIOL7ekBFkDvwOGt1l13T6YF4xH1XvjKg4+YP/U+
QMqgiv/+eBodmm14vZqDUD37C1JXMr/vJ+6xDYlvJwwUdmBUcU0PMyw70YHEtWeG
uzXbvMDsKLztXQrYJqzjKX7pyf0x2Rj3g7/HSdIssP32Da2lflNs0VPqCWjsG1bD
iU8oqdOHhekfM+khqvVNIxmI/6nW/Izax/8ORv0QSmPxFp0FmTaRtNFInLDnOnsh
XHf5h9+eC4vLmDs2P/65FLfS5WfQMABPTdifsLG6AAABAQCeT7XwWZ5+OMoGYgh2
WeTAmHCykXnhnuH0LvyRoeuJq+oX3QJyU/I5L71mjQ1eCqMa/7RYZ3J2ct34ZQ7q
iJzgbUgPvKuFuRgf12gn7cCc97Mu/Fo/Mjm0iisYigAR/QbT5uIpIASr5z8JxdNa
EgEzhwP3o3+YviXXwEAbN36ZBwLp54MODbz+n5xGqG9avE5i4VCOkP5Q3ng6nnn+
kelyaIHsWd498YJEQcs0eKaYlux03/D0hD/q6HLVtob6qjUN7xo0xFcYKQBzkBz0
CgQ/CvgfKFOrS8Z/EdS6d6dFB8yKvEXygRPdE9MSepPlfy1d9Vvys8k2fs+Ny72w
gg5I
AAAAB3NzaC1kc3MAAAEBAJuqH6h50Ac5Tl2CtqNKPXmYtWLZh5LJnUXnygGKbCLz
vzsDD+ny72vvU5FDHYLvgdp9MNr3W4dUKNULcEQIqvQisGNYritgn3Isrb7mLCny
1U7IMLMuHl2/HeAUqwUrb0VZACoxVaiHFygQXo699L1QxStKzd2yGWk4pVwHROus
LltfbpqxU/bYlypE8T8tq5zqxxOqnIMw+hG351galzhN2Egc4Dns6DxMapEF9+XH
1SXVSM19Ykv4ib+1SZ6/uJH9M5XE/NCRpoxAL9ezv7Um3F/PMVe0ereIQbBLqgGI
RFiqG2LZSZOum0uhUaWocEjQHHcfX5TQn8ZMoJJPxssAAAAVAOTwYoGm15HYZFDW
NnPwJCWvi92FAAABAGyuCYSkZY693yb/2/hMdfrwsX/bNeqBz1Eu+uUlwPEjt/hg
A5evvLQAD+EkRbeUI/k7bmzl+VDOzWQ7z9CbbAbeKz/rFg/kkxXhhyatsRJuGUGY
diQIaaKI51fk71crGzUVfgaQqpN5bE++ub0lJccKFhoNFjRBqesRXyfklTvYTx1B
xCrhVf3rd5px4mDlM2v6UeCSLb6IEBscJgGzbRuuIeRoKYbSAxc2VnLHZMrvRUMV
Mu13sQPvgfWpPWR3spsv+bPqXAxtkd7fpxuRll0wJZLSao8oJgdy1XG8X3q+l6gr
Qv2hqoGkXJUxPpvnkm30gCYMaqCd17UUrjRBjRkAAAEAeCoNAd5nqIRV9sTXtxfc
Fb2o6VVTrCXt/MQ3CnK5SxDa/gEOhU8y6IwyE9Y7CN6i8ta/Qt4KZcanXS5ciOT+
bGT5Y2qxHKgx8CcWv/J/GKROMxaEwaLvwT8qvI6Jv/x+3/+KwufaHA1w5ObOHL+U
CaHzSuLKpPRWAbWc2GOZtyfMasmwA5tKzdRJ9VTjS4lVKKOI32AV70hhk7wHIBeR
ZgrxUw+NZnlH5HWKZf2mWemPHhxsglKIczosCmg10vEVuFvIVzeSieV7y6/X/HIs
AsjE6IMmRZDiU9h5rb9FJLrdgGgn6P8XIjJ7e3+P21EL0mi63sRQFQHfLEwA8F3U
gQ==
42 changes: 21 additions & 21 deletions test/assets/dsa.ppk
@@ -1,25 +1,25 @@
PuTTY-User-Key-File-2: ssh-dss
Encryption: aes256-cbc
Comment: dsa-key-20170331
Comment: dsa-key-20210515
Public-Lines: 18
AAAAB3NzaC1kc3MAAAEBALPLp37KKWyxxCtV085ozT7tY1zQimFhPvD+rPO4SSfH
quoRM/szwOXAqyavqYggajNyzSN/x5+gLu4p2iTmS0jC0Nf2FB5tyqxBKsrubmhV
MZpK+dBLm2V7NTE6fJpGRmpTNCKWPOfdZP7wF0w8oRNaTz1ILjNlXh06zXrp4FU+
wv0ums1PemF5Ff7u77vzkxXDsYFOO+btgAFEO8oTBapG1H0ZkcvTzIStCY6SnbzD
ggPtaqasKLjh4zocvdR9M4E1IIFtMaFSZx19w6ccpzAFD7dqTqNVavSN2SzSzcjM
eEdaLiSceof8qu5IcLdrofuQ0ltCVKNFrMm9pZK2kvUAAAAVANmWKeGafd0C0vAg
GthSALs1q/q1AAABAQCtHTj9zydZ2VDhHxrge+WeSF/Ix0zUknwDo7luJGgSTb/B
Zg42W+RIsWo+qFeK6XEzuaqlXIOL7ekBFkDvwOGt1l13T6YF4xH1XvjKg4+YP/U+
QMqgiv/+eBodmm14vZqDUD37C1JXMr/vJ+6xDYlvJwwUdmBUcU0PMyw70YHEtWeG
uzXbvMDsKLztXQrYJqzjKX7pyf0x2Rj3g7/HSdIssP32Da2lflNs0VPqCWjsG1bD
iU8oqdOHhekfM+khqvVNIxmI/6nW/Izax/8ORv0QSmPxFp0FmTaRtNFInLDnOnsh
XHf5h9+eC4vLmDs2P/65FLfS5WfQMABPTdifsLG6AAABAQCeT7XwWZ5+OMoGYgh2
WeTAmHCykXnhnuH0LvyRoeuJq+oX3QJyU/I5L71mjQ1eCqMa/7RYZ3J2ct34ZQ7q
iJzgbUgPvKuFuRgf12gn7cCc97Mu/Fo/Mjm0iisYigAR/QbT5uIpIASr5z8JxdNa
EgEzhwP3o3+YviXXwEAbN36ZBwLp54MODbz+n5xGqG9avE5i4VCOkP5Q3ng6nnn+
kelyaIHsWd498YJEQcs0eKaYlux03/D0hD/q6HLVtob6qjUN7xo0xFcYKQBzkBz0
CgQ/CvgfKFOrS8Z/EdS6d6dFB8yKvEXygRPdE9MSepPlfy1d9Vvys8k2fs+Ny72w
gg5I
AAAAB3NzaC1kc3MAAAEBAJuqH6h50Ac5Tl2CtqNKPXmYtWLZh5LJnUXnygGKbCLz
vzsDD+ny72vvU5FDHYLvgdp9MNr3W4dUKNULcEQIqvQisGNYritgn3Isrb7mLCny
1U7IMLMuHl2/HeAUqwUrb0VZACoxVaiHFygQXo699L1QxStKzd2yGWk4pVwHROus
LltfbpqxU/bYlypE8T8tq5zqxxOqnIMw+hG351galzhN2Egc4Dns6DxMapEF9+XH
1SXVSM19Ykv4ib+1SZ6/uJH9M5XE/NCRpoxAL9ezv7Um3F/PMVe0ereIQbBLqgGI
RFiqG2LZSZOum0uhUaWocEjQHHcfX5TQn8ZMoJJPxssAAAAVAOTwYoGm15HYZFDW
NnPwJCWvi92FAAABAGyuCYSkZY693yb/2/hMdfrwsX/bNeqBz1Eu+uUlwPEjt/hg
A5evvLQAD+EkRbeUI/k7bmzl+VDOzWQ7z9CbbAbeKz/rFg/kkxXhhyatsRJuGUGY
diQIaaKI51fk71crGzUVfgaQqpN5bE++ub0lJccKFhoNFjRBqesRXyfklTvYTx1B
xCrhVf3rd5px4mDlM2v6UeCSLb6IEBscJgGzbRuuIeRoKYbSAxc2VnLHZMrvRUMV
Mu13sQPvgfWpPWR3spsv+bPqXAxtkd7fpxuRll0wJZLSao8oJgdy1XG8X3q+l6gr
Qv2hqoGkXJUxPpvnkm30gCYMaqCd17UUrjRBjRkAAAEAeCoNAd5nqIRV9sTXtxfc
Fb2o6VVTrCXt/MQ3CnK5SxDa/gEOhU8y6IwyE9Y7CN6i8ta/Qt4KZcanXS5ciOT+
bGT5Y2qxHKgx8CcWv/J/GKROMxaEwaLvwT8qvI6Jv/x+3/+KwufaHA1w5ObOHL+U
CaHzSuLKpPRWAbWc2GOZtyfMasmwA5tKzdRJ9VTjS4lVKKOI32AV70hhk7wHIBeR
ZgrxUw+NZnlH5HWKZf2mWemPHhxsglKIczosCmg10vEVuFvIVzeSieV7y6/X/HIs
AsjE6IMmRZDiU9h5rb9FJLrdgGgn6P8XIjJ7e3+P21EL0mi63sRQFQHfLEwA8F3U
gQ==
Private-Lines: 1
KSl/bN/cgkBjVRhd91zBbTlSPNqRwQJ5xDF4qrehUtQ=
Private-MAC: 3ab460bd517d8f4747f837a37710f88ad95be6ea
ony1aHwujzT0bx1MCaH55NpCy6K/L+/rKAeb5CBF/D4=
Private-MAC: 0e1508506fff981e5042d029429bfcb5765e80ba
5 changes: 5 additions & 0 deletions test/assets/ecdsa-ppk
@@ -0,0 +1,5 @@
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIH6319TQpT2OtWoyurNrC8t8RTMnKGkuF7Hg+iRAHaO5oAoGCCqGSM49
AwEHoUQDQgAEKK8I4bJpFBon3SvTLM+ZMnXZIHgUHluna7SQP/XlrwGkNweyjUYg
iMHJjYbrnkdH1BeQ4MaZNM8yFVmnhQoLAw==
-----END EC PRIVATE KEY-----
10 changes: 10 additions & 0 deletions test/assets/ecdsa.ppk
@@ -0,0 +1,10 @@
PuTTY-User-Key-File-2: ecdsa-sha2-nistp256
Encryption: aes256-cbc
Comment: ecdsa-key-20210515
Public-Lines: 3
AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCivCOGyaRQa
J90r0yzPmTJ12SB4FB5bp2u0kD/15a8BpDcHso1GIIjByY2G655HR9QXkODGmTTP
MhVZp4UKCwM=
Private-Lines: 1
MW4fcSm+yRUR/19z3GrDV0dbjweegsEoWNIswwALYas8sV0l4S2k+b41qXuflP9N
Private-MAC: 18146097d09025727b6facc1102aae201bd18364
4 changes: 4 additions & 0 deletions test/assets/ed25519-ppk
@@ -0,0 +1,4 @@
-----BEGIN EdDSA PRIVATE KEY-----
MFECAQEEIJ4V2rGkAcGHBQnspmDrWJ9yncXAhJRi4NeE2FsQb0xMoAUGAytlcKEj
AyEAVMkgHj6fUvLKiElOBtIMY27CldSJoLaTy0gmKs9rbIM=
-----END EdDSA PRIVATE KEY-----
9 changes: 9 additions & 0 deletions test/assets/ed25519.ppk
@@ -0,0 +1,9 @@
PuTTY-User-Key-File-2: ssh-ed25519
Encryption: aes256-cbc
Comment: ed25519-key-20210515
Public-Lines: 2
AAAAC3NzaC1lZDI1NTE5AAAAIFTJIB4+n1LyyohJTgbSDGNuwpXUiaC2k8tIJirP
a2yD
Private-Lines: 1
Sth4e+fEa1lawlgah31ocn4Imf2pnocHG7jArPG2UxWNwmm7lUYm/SLfb5spucPt
Private-MAC: aeec318aa251a446fb1d6f18d6288a264f3d0b41
26 changes: 26 additions & 0 deletions test/assets/ppk3
@@ -0,0 +1,26 @@
PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: rsa-key-20211214
Public-Lines: 6
AAAAB3NzaC1yc2EAAAADAQABAAABAQCQWPBUsyVmi5vl8myEQ91IP2JroWP1N2NR
xvFeIcGgtPSwq/7MIq2Vis8s2JlpBjFY2aDDGSlrWrh4Ryqs9NnvueLgeWjgD8wv
3qnYgv4pdu6k7HLrE5J22vQ6M8tFjpPDAVS+mfFIe9+RutO1eimhuh824ErTPKPT
LdBrheuZpUIaWl45Kd529V6CO0+b0/U/7zVfC/uKcHxDZ4RK2AkKOYMROb93B0qY
6n4t0tjkzFDJvqgMa7FoIwLkczyGSbpmKh39pvoMOyQB50WFSXbPuNscubGcOJAa
1SARXLLQh6UB9AiJqt+bk6r4OQyiXeKkk5u9lXNnxk1aMQQW46hh
Private-Lines: 14
AAABACnnyA2u3ILCsQW2tU5IrWsWC6qXdf9wjwLksJnVTvMq1YacyCHXR3GMlMy+
LPtScu0KcSNyoJWsBrXUY01G4CY6XuUwGgRCUdLr338duE+tWWbDxjD8w56BvjlP
ZAnTdI4+Sq3y3xtd6u/RvziGOKPc9sblopNknWLngARXIqi94TVawRHNyrnCNNn2
gWfi62ZxY2rLOHD5hJv2xFh84eNEdf94nnWkbaJ/aZmR6d8VdBcJCiK/60CgKYlO
ZuRHdEC3QCqa/S1Ya8m9egT90jUf6vmxb/GkK4Y0VigVLFdtaT7cJ8W6gbCmTaa2
4iax3M6y9AR2sQLpNNhB1gf3oAEAAACBAO04zQFxbgozu7m58RIc87pm8NeQ5UmF
hCV/K8Ja9QpUzztmoouo6r43itW+6DWmIYLqjlcV7zK6W4aTQ4/fSREiDHPhG7wG
NloXL+jsyAuu7FqfQVKVbh8aIg4uvKpg+nUV+YYgOKcucriKMwdpP8dy1D2Ti5jn
rVZNfmCAtLLhAAAAgQCbxhO4l2rtzodMnwSTyt3s17D5PPXPKSU03cDFsAnSYo2K
6q7pVxMBPYqo4KWlhM4fN0ByY3kobFc2cAbLbck+x12C559LJr9RP3DHUQ9oxjB5
JhYLgjN1JFS3dc7THi1nTM+NO0OQuytbeY+aNJ+UXW0zRtK/bwiGpsdGiFslgQAA
AIAeH7hALcDaAiZs0Jsb4/39zuGlb27r+KesxkYgIy7DaAOvQyZaT3X0JrAwqRqs
UJl+AS39VpL7XQFIbICJyhPbHHO3IGCUKhOz0BCqpHjnn9/ViRuNnrr1UTgDS0qc
tw/JH+KlK94nGmMEjBUUJpXJqjAXR7x8feoTqjtvijQtjA==
Private-MAC: a172468747b16c488815cb90b4359fe61d262c9a9329f60cabf6763deb638d8e
22 changes: 22 additions & 0 deletions test/assets/ppk3.pem
@@ -0,0 +1,22 @@
-----BEGIN RSA PRIVATE KEY-----
MIIDogIBAAKCAQEAkFjwVLMlZoub5fJshEPdSD9ia6Fj9TdjUcbxXiHBoLT0sKv+
zCKtlYrPLNiZaQYxWNmgwxkpa1q4eEcqrPTZ77ni4Hlo4A/ML96p2IL+KXbupOxy
6xOSdtr0OjPLRY6TwwFUvpnxSHvfkbrTtXopobofNuBK0zyj0y3Qa4XrmaVCGlpe
OSnedvVegjtPm9P1P+81Xwv7inB8Q2eEStgJCjmDETm/dwdKmOp+LdLY5MxQyb6o
DGuxaCMC5HM8hkm6Ziod/ab6DDskAedFhUl2z7jbHLmxnDiQGtUgEVyy0IelAfQI
iarfm5Oq+DkMol3ipJObvZVzZ8ZNWjEEFuOoYQIDAQABAoIBACnnyA2u3ILCsQW2
tU5IrWsWC6qXdf9wjwLksJnVTvMq1YacyCHXR3GMlMy+LPtScu0KcSNyoJWsBrXU
Y01G4CY6XuUwGgRCUdLr338duE+tWWbDxjD8w56BvjlPZAnTdI4+Sq3y3xtd6u/R
vziGOKPc9sblopNknWLngARXIqi94TVawRHNyrnCNNn2gWfi62ZxY2rLOHD5hJv2
xFh84eNEdf94nnWkbaJ/aZmR6d8VdBcJCiK/60CgKYlOZuRHdEC3QCqa/S1Ya8m9
egT90jUf6vmxb/GkK4Y0VigVLFdtaT7cJ8W6gbCmTaa24iax3M6y9AR2sQLpNNhB
1gf3oAECgYEA7TjNAXFuCjO7ubnxEhzzumbw15DlSYWEJX8rwlr1ClTPO2aii6jq
vjeK1b7oNaYhguqOVxXvMrpbhpNDj99JESIMc+EbvAY2Whcv6OzIC67sWp9BUpVu
HxoiDi68qmD6dRX5hiA4py5yuIozB2k/x3LUPZOLmOetVk1+YIC0suECgYEAm8YT
uJdq7c6HTJ8Ek8rd7New+Tz1zyklNN3AxbAJ0mKNiuqu6VcTAT2KqOClpYTOHzdA
cmN5KGxXNnAGy23JPsddguefSya/UT9wx1EPaMYweSYWC4IzdSRUt3XO0x4tZ0zP
jTtDkLsrW3mPmjSflF1tM0bSv28IhqbHRohbJYECAQACAQACgYAeH7hALcDaAiZs
0Jsb4/39zuGlb27r+KesxkYgIy7DaAOvQyZaT3X0JrAwqRqsUJl+AS39VpL7XQFI
bICJyhPbHHO3IGCUKhOz0BCqpHjnn9/ViRuNnrr1UTgDS0qctw/JH+KlK94nGmME
jBUUJpXJqjAXR7x8feoTqjtvijQtjA==
-----END RSA PRIVATE KEY-----
22 changes: 22 additions & 0 deletions test/assets/rsa-ppk
@@ -0,0 +1,22 @@
-----BEGIN RSA PRIVATE KEY-----
MIIDogIBAAKCAQEAzCyvaBRhKzRC/Hpi+OnF+7oCw98gJolGQ4lDfKGBMkrtNU16
AtL9FfgiQA+f84kpt8YVfYGXhvPDPOAjnZADac3KYdHniWfV3/m9qZomkRTf4jIa
cOICnDqiVMsqAIOYrB1rfDyp5bm9bGuY+w/mpgAWKfmXwbnjNvD95345WkvD+Jlr
VduMrr1ovQYApmmhj5HFkC5XNVJLjklqHlOJzwyWUlrk6ROx+75Ufv+4wBz3Gf0l
iRPjUQesoCutI+RheUDfRbI58UtXIXMJAUUwMHWt2Rc0LjK+lrwmoMN/WRt8GfX4
Cj/TSnVHI/QcyH06kD+v1Sdt/8kJlOmARWmyyQIBJQKCAQEApYwD19ksMN5EJqhr
7GqE2fDD+MLAHz7fBlOegLpNFAVmYpHYjKsSZNcHA4JKVsI9gD++ZcMFPPz/KnCL
lIKa+9dKJczJkgEp898/1Z+U5FYdT54+874roURMRMBnPq/jkni4A94o48cIShIN
VfE3jYOHl6fHJ3QgAwiWhFiBh3pAcNe6xcUyhHP8E6fTNVXaXBlgY5xYQ42VybyQ
4ogEYIxwwhdTey4a/3MGVGS7YIj3j/JPiiKD2JRrxrydhG1ox2P8iypGp2gIFzZb
NOWjqFZl2i8/kEn4P8vwLpP6iMBOkgpC59tghSo4/u8kt8h6cXDptnJKX0vDN210
8q0drQKBgQDwcB2N+948I0Oaueqwa4oJadIFZw21Hr/3EO3oxiKOysjVnfN7TZOx
PhWIdiJI7SpfJRMtMKfyUPaDiZaeKxgvx2wedNg6J7OTlNX2tTV+T7Bt0YWspyq5
a1UWi1fAOLL43ZkuzancRt8kO0D33n1Ic2r1E+yqJ3TCsYTv0OYm6QKBgQDZY7YQ
mUXWgbeOlYgQAaBgK6Bz8op5fv1O83t5Ud6PN9rPPH3X+wtn+hJmXINVho3vKcen
UDBOY+KkKgHEKs3KET/WJTbs6g7sxVF/rPR5GbAGrayW/73bh2MBdZMbM3tViD8Q
UdQzLCZUFK5Vfsz0sw28pHqbUbsaY0yAOCWA4QIBAAIBAAKBgQCzZULNTlJ0NJ9q
1Z29r4jVTgyNIg/VMhYKEqSyM4tDGvUJqKc5AIe+AMKKa4Hgx7A/t+S+zr0P9Os/
bfcqQM3SlqRmKcwY1pcliuyYDnGkajHl2bDnImFl/fq7wwlCoUfaqoK/v8kXh4vi
MG9gMnV0xuW+DUQ/m7Ag5QhnMuNREg==
-----END RSA PRIVATE KEY-----

0 comments on commit 1da5a87

Please sign in to comment.