mirror of
https://github.com/S2-/minifyfromhtml.git
synced 2025-08-03 20:30:04 +02:00
update node modules
This commit is contained in:
22
node_modules/sshpk/lib/formats/auto.js
generated
vendored
22
node_modules/sshpk/lib/formats/auto.js
generated
vendored
@@ -1,4 +1,4 @@
|
||||
// Copyright 2015 Joyent, Inc.
|
||||
// Copyright 2018 Joyent, Inc.
|
||||
|
||||
module.exports = {
|
||||
read: read,
|
||||
@@ -6,6 +6,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
var PrivateKey = require('../private-key');
|
||||
@@ -14,6 +15,7 @@ var pem = require('./pem');
|
||||
var ssh = require('./ssh');
|
||||
var rfc4253 = require('./rfc4253');
|
||||
var dnssec = require('./dnssec');
|
||||
var putty = require('./putty');
|
||||
|
||||
var DNSSEC_PRIVKEY_HEADER_PREFIX = 'Private-key-format: v1';
|
||||
|
||||
@@ -25,15 +27,19 @@ function read(buf, options) {
|
||||
return (ssh.read(buf, options));
|
||||
if (buf.match(/^\s*ecdsa-/))
|
||||
return (ssh.read(buf, options));
|
||||
if (buf.match(/^putty-user-key-file-2:/i))
|
||||
return (putty.read(buf, options));
|
||||
if (findDNSSECHeader(buf))
|
||||
return (dnssec.read(buf, options));
|
||||
buf = new Buffer(buf, 'binary');
|
||||
buf = Buffer.from(buf, 'binary');
|
||||
} else {
|
||||
assert.buffer(buf);
|
||||
if (findPEMHeader(buf))
|
||||
return (pem.read(buf, options));
|
||||
if (findSSHHeader(buf))
|
||||
return (ssh.read(buf, options));
|
||||
if (findPuTTYHeader(buf))
|
||||
return (putty.read(buf, options));
|
||||
if (findDNSSECHeader(buf))
|
||||
return (dnssec.read(buf, options));
|
||||
}
|
||||
@@ -42,6 +48,18 @@ function read(buf, options) {
|
||||
throw (new Error('Failed to auto-detect format of key'));
|
||||
}
|
||||
|
||||
function findPuTTYHeader(buf) {
|
||||
var offset = 0;
|
||||
while (offset < buf.length &&
|
||||
(buf[offset] === 32 || buf[offset] === 10 || buf[offset] === 9))
|
||||
++offset;
|
||||
if (offset + 22 <= buf.length &&
|
||||
buf.slice(offset, offset + 22).toString('ascii').toLowerCase() ===
|
||||
'putty-user-key-file-2:')
|
||||
return (true);
|
||||
return (false);
|
||||
}
|
||||
|
||||
function findSSHHeader(buf) {
|
||||
var offset = 0;
|
||||
while (offset < buf.length &&
|
||||
|
15
node_modules/sshpk/lib/formats/dnssec.js
generated
vendored
15
node_modules/sshpk/lib/formats/dnssec.js
generated
vendored
@@ -6,6 +6,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var Key = require('../key');
|
||||
var PrivateKey = require('../private-key');
|
||||
var utils = require('../utils');
|
||||
@@ -66,7 +67,7 @@ function readRFC3110(keyString) {
|
||||
if (!supportedAlgosById[algorithm])
|
||||
throw (new Error('Unsupported algorithm: ' + algorithm));
|
||||
var base64key = elems.slice(6, elems.length).join();
|
||||
var keyBuffer = new Buffer(base64key, 'base64');
|
||||
var keyBuffer = Buffer.from(base64key, 'base64');
|
||||
if (supportedAlgosById[algorithm].match(/^RSA-/)) {
|
||||
// join the rest of the body into a single base64-blob
|
||||
var publicExponentLen = keyBuffer.readUInt8(0);
|
||||
@@ -101,7 +102,7 @@ function readRFC3110(keyString) {
|
||||
curve: curve,
|
||||
size: size,
|
||||
parts: [
|
||||
{name: 'curve', data: new Buffer(curve) },
|
||||
{name: 'curve', data: Buffer.from(curve) },
|
||||
{name: 'Q', data: utils.ecNormalize(keyBuffer) }
|
||||
]
|
||||
};
|
||||
@@ -112,7 +113,7 @@ function readRFC3110(keyString) {
|
||||
}
|
||||
|
||||
function elementToBuf(e) {
|
||||
return (new Buffer(e.split(' ')[1], 'base64'));
|
||||
return (Buffer.from(e.split(' ')[1], 'base64'));
|
||||
}
|
||||
|
||||
function readDNSSECRSAPrivateKey(elements) {
|
||||
@@ -161,7 +162,7 @@ function readDNSSECPrivateKey(alg, elements) {
|
||||
}
|
||||
if (supportedAlgosById[alg] === 'ECDSA-P384-SHA384' ||
|
||||
supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {
|
||||
var d = new Buffer(elements[0].split(' ')[1], 'base64');
|
||||
var d = Buffer.from(elements[0].split(' ')[1], 'base64');
|
||||
var curve = 'nistp384';
|
||||
var size = 384;
|
||||
if (supportedAlgosById[alg] === 'ECDSA-P256-SHA256') {
|
||||
@@ -176,7 +177,7 @@ function readDNSSECPrivateKey(alg, elements) {
|
||||
curve: curve,
|
||||
size: size,
|
||||
parts: [
|
||||
{name: 'curve', data: new Buffer(curve) },
|
||||
{name: 'curve', data: Buffer.from(curve) },
|
||||
{name: 'd', data: d },
|
||||
{name: 'Q', data: Q }
|
||||
]
|
||||
@@ -237,7 +238,7 @@ function writeRSA(key, options) {
|
||||
out += 'Created: ' + dnssecTimestamp(timestamp) + '\n';
|
||||
out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n';
|
||||
out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n';
|
||||
return (new Buffer(out, 'ascii'));
|
||||
return (Buffer.from(out, 'ascii'));
|
||||
}
|
||||
|
||||
function writeECDSA(key, options) {
|
||||
@@ -260,7 +261,7 @@ function writeECDSA(key, options) {
|
||||
out += 'Publish: ' + dnssecTimestamp(timestamp) + '\n';
|
||||
out += 'Activate: ' + dnssecTimestamp(timestamp) + '\n';
|
||||
|
||||
return (new Buffer(out, 'ascii'));
|
||||
return (Buffer.from(out, 'ascii'));
|
||||
}
|
||||
|
||||
function write(key, options) {
|
||||
|
52
node_modules/sshpk/lib/formats/openssh-cert.js
generated
vendored
52
node_modules/sshpk/lib/formats/openssh-cert.js
generated
vendored
@@ -15,6 +15,7 @@ module.exports = {
|
||||
var assert = require('assert-plus');
|
||||
var SSHBuffer = require('../ssh-buffer');
|
||||
var crypto = require('crypto');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var Key = require('../key');
|
||||
var PrivateKey = require('../private-key');
|
||||
@@ -50,7 +51,7 @@ function read(buf, options) {
|
||||
var algo = parts[0];
|
||||
var data = parts[1];
|
||||
|
||||
data = new Buffer(data, 'base64');
|
||||
data = Buffer.from(data, 'base64');
|
||||
return (fromBuffer(data, algo));
|
||||
}
|
||||
|
||||
@@ -121,8 +122,23 @@ function fromBuffer(data, algo, partial) {
|
||||
cert.validFrom = int64ToDate(sshbuf.readInt64());
|
||||
cert.validUntil = int64ToDate(sshbuf.readInt64());
|
||||
|
||||
cert.signatures.openssh.critical = sshbuf.readBuffer();
|
||||
cert.signatures.openssh.exts = sshbuf.readBuffer();
|
||||
var exts = [];
|
||||
var extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });
|
||||
var ext;
|
||||
while (!extbuf.atEnd()) {
|
||||
ext = { critical: true };
|
||||
ext.name = extbuf.readString();
|
||||
ext.data = extbuf.readBuffer();
|
||||
exts.push(ext);
|
||||
}
|
||||
extbuf = new SSHBuffer({ buffer: sshbuf.readBuffer() });
|
||||
while (!extbuf.atEnd()) {
|
||||
ext = { critical: false };
|
||||
ext.name = extbuf.readString();
|
||||
ext.data = extbuf.readBuffer();
|
||||
exts.push(ext);
|
||||
}
|
||||
cert.signatures.openssh.exts = exts;
|
||||
|
||||
/* reserved */
|
||||
sshbuf.readBuffer();
|
||||
@@ -164,7 +180,7 @@ function dateToInt64(date) {
|
||||
var i = Math.round(date.getTime() / 1000);
|
||||
var upper = Math.floor(i / 4294967296);
|
||||
var lower = Math.floor(i % 4294967296);
|
||||
var buf = new Buffer(8);
|
||||
var buf = Buffer.alloc(8);
|
||||
buf.writeUInt32BE(upper, 0);
|
||||
buf.writeUInt32BE(lower, 4);
|
||||
return (buf);
|
||||
@@ -277,16 +293,30 @@ function toBuffer(cert, noSig) {
|
||||
buf.writeInt64(dateToInt64(cert.validFrom));
|
||||
buf.writeInt64(dateToInt64(cert.validUntil));
|
||||
|
||||
if (sig.critical === undefined)
|
||||
sig.critical = new Buffer(0);
|
||||
buf.writeBuffer(sig.critical);
|
||||
var exts = sig.exts;
|
||||
if (exts === undefined)
|
||||
exts = [];
|
||||
|
||||
if (sig.exts === undefined)
|
||||
sig.exts = new Buffer(0);
|
||||
buf.writeBuffer(sig.exts);
|
||||
var extbuf = new SSHBuffer({});
|
||||
exts.forEach(function (ext) {
|
||||
if (ext.critical !== true)
|
||||
return;
|
||||
extbuf.writeString(ext.name);
|
||||
extbuf.writeBuffer(ext.data);
|
||||
});
|
||||
buf.writeBuffer(extbuf.toBuffer());
|
||||
|
||||
extbuf = new SSHBuffer({});
|
||||
exts.forEach(function (ext) {
|
||||
if (ext.critical === true)
|
||||
return;
|
||||
extbuf.writeString(ext.name);
|
||||
extbuf.writeBuffer(ext.data);
|
||||
});
|
||||
buf.writeBuffer(extbuf.toBuffer());
|
||||
|
||||
/* reserved */
|
||||
buf.writeBuffer(new Buffer(0));
|
||||
buf.writeBuffer(Buffer.alloc(0));
|
||||
|
||||
sub = rfc4253.write(cert.issuerKey);
|
||||
buf.writeBuffer(sub);
|
||||
|
123
node_modules/sshpk/lib/formats/pem.js
generated
vendored
123
node_modules/sshpk/lib/formats/pem.js
generated
vendored
@@ -1,4 +1,4 @@
|
||||
// Copyright 2015 Joyent, Inc.
|
||||
// Copyright 2018 Joyent, Inc.
|
||||
|
||||
module.exports = {
|
||||
read: read,
|
||||
@@ -8,6 +8,7 @@ module.exports = {
|
||||
var assert = require('assert-plus');
|
||||
var asn1 = require('asn1');
|
||||
var crypto = require('crypto');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
@@ -20,6 +21,29 @@ var rfc4253 = require('./rfc4253');
|
||||
|
||||
var errors = require('../errors');
|
||||
|
||||
var OID_PBES2 = '1.2.840.113549.1.5.13';
|
||||
var OID_PBKDF2 = '1.2.840.113549.1.5.12';
|
||||
|
||||
var OID_TO_CIPHER = {
|
||||
'1.2.840.113549.3.7': '3des-cbc',
|
||||
'2.16.840.1.101.3.4.1.2': 'aes128-cbc',
|
||||
'2.16.840.1.101.3.4.1.42': 'aes256-cbc'
|
||||
};
|
||||
var CIPHER_TO_OID = {};
|
||||
Object.keys(OID_TO_CIPHER).forEach(function (k) {
|
||||
CIPHER_TO_OID[OID_TO_CIPHER[k]] = k;
|
||||
});
|
||||
|
||||
var OID_TO_HASH = {
|
||||
'1.2.840.113549.2.7': 'sha1',
|
||||
'1.2.840.113549.2.9': 'sha256',
|
||||
'1.2.840.113549.2.11': 'sha512'
|
||||
};
|
||||
var HASH_TO_OID = {};
|
||||
Object.keys(OID_TO_HASH).forEach(function (k) {
|
||||
HASH_TO_OID[OID_TO_HASH[k]] = k;
|
||||
});
|
||||
|
||||
/*
|
||||
* For reading we support both PKCS#1 and PKCS#8. If we find a private key,
|
||||
* we just take the public component of it and use that.
|
||||
@@ -31,14 +55,22 @@ function read(buf, options, forceType) {
|
||||
buf = buf.toString('ascii');
|
||||
}
|
||||
|
||||
var lines = buf.trim().split('\n');
|
||||
var lines = buf.trim().split(/[\r\n]+/g);
|
||||
|
||||
var m = lines[0].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
|
||||
var m;
|
||||
var si = -1;
|
||||
while (!m && si < lines.length) {
|
||||
m = lines[++si].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*BEGIN ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
|
||||
}
|
||||
assert.ok(m, 'invalid PEM header');
|
||||
|
||||
var m2 = lines[lines.length - 1].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
|
||||
var m2;
|
||||
var ei = lines.length;
|
||||
while (!m2 && ei > 0) {
|
||||
m2 = lines[--ei].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*END ([A-Z0-9][A-Za-z0-9]+ )?(PUBLIC|PRIVATE) KEY[ ]*[-]+/);
|
||||
}
|
||||
assert.ok(m2, 'invalid PEM footer');
|
||||
|
||||
/* Begin and end banners must match key type */
|
||||
@@ -52,6 +84,8 @@ function read(buf, options, forceType) {
|
||||
alg = m[1].trim();
|
||||
}
|
||||
|
||||
lines = lines.slice(si, ei + 1);
|
||||
|
||||
var headers = {};
|
||||
while (true) {
|
||||
lines = lines.slice(1);
|
||||
@@ -62,12 +96,16 @@ function read(buf, options, forceType) {
|
||||
headers[m[1].toLowerCase()] = m[2];
|
||||
}
|
||||
|
||||
/* Chop off the first and last lines */
|
||||
lines = lines.slice(0, -1).join('');
|
||||
buf = Buffer.from(lines, 'base64');
|
||||
|
||||
var cipher, key, iv;
|
||||
if (headers['proc-type']) {
|
||||
var parts = headers['proc-type'].split(',');
|
||||
if (parts[0] === '4' && parts[1] === 'ENCRYPTED') {
|
||||
if (typeof (options.passphrase) === 'string') {
|
||||
options.passphrase = new Buffer(
|
||||
options.passphrase = Buffer.from(
|
||||
options.passphrase, 'utf-8');
|
||||
}
|
||||
if (!Buffer.isBuffer(options.passphrase)) {
|
||||
@@ -77,16 +115,77 @@ function read(buf, options, forceType) {
|
||||
parts = headers['dek-info'].split(',');
|
||||
assert.ok(parts.length === 2);
|
||||
cipher = parts[0].toLowerCase();
|
||||
iv = new Buffer(parts[1], 'hex');
|
||||
iv = Buffer.from(parts[1], 'hex');
|
||||
key = utils.opensslKeyDeriv(cipher, iv,
|
||||
options.passphrase, 1).key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Chop off the first and last lines */
|
||||
lines = lines.slice(0, -1).join('');
|
||||
buf = new Buffer(lines, 'base64');
|
||||
if (alg && alg.toLowerCase() === 'encrypted') {
|
||||
var eder = new asn1.BerReader(buf);
|
||||
var pbesEnd;
|
||||
eder.readSequence();
|
||||
|
||||
eder.readSequence();
|
||||
pbesEnd = eder.offset + eder.length;
|
||||
|
||||
var method = eder.readOID();
|
||||
if (method !== OID_PBES2) {
|
||||
throw (new Error('Unsupported PEM/PKCS8 encryption ' +
|
||||
'scheme: ' + method));
|
||||
}
|
||||
|
||||
eder.readSequence(); /* PBES2-params */
|
||||
|
||||
eder.readSequence(); /* keyDerivationFunc */
|
||||
var kdfEnd = eder.offset + eder.length;
|
||||
var kdfOid = eder.readOID();
|
||||
if (kdfOid !== OID_PBKDF2)
|
||||
throw (new Error('Unsupported PBES2 KDF: ' + kdfOid));
|
||||
eder.readSequence();
|
||||
var salt = eder.readString(asn1.Ber.OctetString, true);
|
||||
var iterations = eder.readInt();
|
||||
var hashAlg = 'sha1';
|
||||
if (eder.offset < kdfEnd) {
|
||||
eder.readSequence();
|
||||
var hashAlgOid = eder.readOID();
|
||||
hashAlg = OID_TO_HASH[hashAlgOid];
|
||||
if (hashAlg === undefined) {
|
||||
throw (new Error('Unsupported PBKDF2 hash: ' +
|
||||
hashAlgOid));
|
||||
}
|
||||
}
|
||||
eder._offset = kdfEnd;
|
||||
|
||||
eder.readSequence(); /* encryptionScheme */
|
||||
var cipherOid = eder.readOID();
|
||||
cipher = OID_TO_CIPHER[cipherOid];
|
||||
if (cipher === undefined) {
|
||||
throw (new Error('Unsupported PBES2 cipher: ' +
|
||||
cipherOid));
|
||||
}
|
||||
iv = eder.readString(asn1.Ber.OctetString, true);
|
||||
|
||||
eder._offset = pbesEnd;
|
||||
buf = eder.readString(asn1.Ber.OctetString, true);
|
||||
|
||||
if (typeof (options.passphrase) === 'string') {
|
||||
options.passphrase = Buffer.from(
|
||||
options.passphrase, 'utf-8');
|
||||
}
|
||||
if (!Buffer.isBuffer(options.passphrase)) {
|
||||
throw (new errors.KeyEncryptedError(
|
||||
options.filename, 'PEM'));
|
||||
}
|
||||
|
||||
var cinfo = utils.opensshCipherInfo(cipher);
|
||||
|
||||
cipher = cinfo.opensslName;
|
||||
key = utils.pbkdf2(hashAlg, salt, iterations, cinfo.keySize,
|
||||
options.passphrase);
|
||||
alg = undefined;
|
||||
}
|
||||
|
||||
if (cipher && key && iv) {
|
||||
var cipherStream = crypto.createDecipheriv(cipher, key, iv);
|
||||
@@ -174,7 +273,7 @@ function write(key, options, type) {
|
||||
var tmp = der.buffer.toString('base64');
|
||||
var len = tmp.length + (tmp.length / 64) +
|
||||
18 + 16 + header.length*2 + 10;
|
||||
var buf = new Buffer(len);
|
||||
var buf = Buffer.alloc(len);
|
||||
var o = 0;
|
||||
o += buf.write('-----BEGIN ' + header + '-----\n', o);
|
||||
for (var i = 0; i < tmp.length; ) {
|
||||
|
17
node_modules/sshpk/lib/formats/pkcs1.js
generated
vendored
17
node_modules/sshpk/lib/formats/pkcs1.js
generated
vendored
@@ -9,6 +9,7 @@ module.exports = {
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var asn1 = require('asn1');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
|
||||
@@ -209,7 +210,7 @@ function readPkcs1ECDSAPublic(der) {
|
||||
var key = {
|
||||
type: 'ecdsa',
|
||||
parts: [
|
||||
{ name: 'curve', data: new Buffer(curve) },
|
||||
{ name: 'curve', data: Buffer.from(curve) },
|
||||
{ name: 'Q', data: Q }
|
||||
]
|
||||
};
|
||||
@@ -235,7 +236,7 @@ function readPkcs1ECDSAPrivate(der) {
|
||||
var key = {
|
||||
type: 'ecdsa',
|
||||
parts: [
|
||||
{ name: 'curve', data: new Buffer(curve) },
|
||||
{ name: 'curve', data: Buffer.from(curve) },
|
||||
{ name: 'Q', data: Q },
|
||||
{ name: 'd', data: d }
|
||||
]
|
||||
@@ -285,8 +286,7 @@ function writePkcs1RSAPublic(der, key) {
|
||||
}
|
||||
|
||||
function writePkcs1RSAPrivate(der, key) {
|
||||
var ver = new Buffer(1);
|
||||
ver[0] = 0;
|
||||
var ver = Buffer.from([0]);
|
||||
der.writeBuffer(ver, asn1.Ber.Integer);
|
||||
|
||||
der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
|
||||
@@ -302,8 +302,7 @@ function writePkcs1RSAPrivate(der, key) {
|
||||
}
|
||||
|
||||
function writePkcs1DSAPrivate(der, key) {
|
||||
var ver = new Buffer(1);
|
||||
ver[0] = 0;
|
||||
var ver = Buffer.from([0]);
|
||||
der.writeBuffer(ver, asn1.Ber.Integer);
|
||||
|
||||
der.writeBuffer(key.part.p.data, asn1.Ber.Integer);
|
||||
@@ -336,8 +335,7 @@ function writePkcs1ECDSAPublic(der, key) {
|
||||
}
|
||||
|
||||
function writePkcs1ECDSAPrivate(der, key) {
|
||||
var ver = new Buffer(1);
|
||||
ver[0] = 1;
|
||||
var ver = Buffer.from([1]);
|
||||
der.writeBuffer(ver, asn1.Ber.Integer);
|
||||
|
||||
der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);
|
||||
@@ -356,8 +354,7 @@ function writePkcs1ECDSAPrivate(der, key) {
|
||||
}
|
||||
|
||||
function writePkcs1EdDSAPrivate(der, key) {
|
||||
var ver = new Buffer(1);
|
||||
ver[0] = 1;
|
||||
var ver = Buffer.from([1]);
|
||||
der.writeBuffer(ver, asn1.Ber.Integer);
|
||||
|
||||
der.writeBuffer(key.part.k.data, asn1.Ber.OctetString);
|
||||
|
47
node_modules/sshpk/lib/formats/pkcs8.js
generated
vendored
47
node_modules/sshpk/lib/formats/pkcs8.js
generated
vendored
@@ -1,10 +1,11 @@
|
||||
// Copyright 2015 Joyent, Inc.
|
||||
// Copyright 2018 Joyent, Inc.
|
||||
|
||||
module.exports = {
|
||||
read: read,
|
||||
readPkcs8: readPkcs8,
|
||||
write: write,
|
||||
writePkcs8: writePkcs8,
|
||||
pkcs8ToBuffer: pkcs8ToBuffer,
|
||||
|
||||
readECDSACurve: readECDSACurve,
|
||||
writeECDSACurve: writeECDSACurve
|
||||
@@ -12,6 +13,7 @@ module.exports = {
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var asn1 = require('asn1');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
@@ -299,15 +301,27 @@ function readPkcs8ECDSAPrivate(der) {
|
||||
assert.equal(version[0], 1, 'unknown version of ECDSA key');
|
||||
|
||||
var d = der.readString(asn1.Ber.OctetString, true);
|
||||
der.readSequence(0xa1);
|
||||
var Q;
|
||||
|
||||
var Q = der.readString(asn1.Ber.BitString, true);
|
||||
Q = utils.ecNormalize(Q);
|
||||
if (der.peek() == 0xa0) {
|
||||
der.readSequence(0xa0);
|
||||
der._offset += der.length;
|
||||
}
|
||||
if (der.peek() == 0xa1) {
|
||||
der.readSequence(0xa1);
|
||||
Q = der.readString(asn1.Ber.BitString, true);
|
||||
Q = utils.ecNormalize(Q);
|
||||
}
|
||||
|
||||
if (Q === undefined) {
|
||||
var pub = utils.publicFromPrivateECDSA(curveName, d);
|
||||
Q = pub.part.Q.data;
|
||||
}
|
||||
|
||||
var key = {
|
||||
type: 'ecdsa',
|
||||
parts: [
|
||||
{ name: 'curve', data: new Buffer(curveName) },
|
||||
{ name: 'curve', data: Buffer.from(curveName) },
|
||||
{ name: 'Q', data: Q },
|
||||
{ name: 'd', data: d }
|
||||
]
|
||||
@@ -326,7 +340,7 @@ function readPkcs8ECDSAPublic(der) {
|
||||
var key = {
|
||||
type: 'ecdsa',
|
||||
parts: [
|
||||
{ name: 'curve', data: new Buffer(curveName) },
|
||||
{ name: 'curve', data: Buffer.from(curveName) },
|
||||
{ name: 'Q', data: Q }
|
||||
]
|
||||
};
|
||||
@@ -411,12 +425,17 @@ function readPkcs8X25519Private(der) {
|
||||
return (new PrivateKey(key));
|
||||
}
|
||||
|
||||
function pkcs8ToBuffer(key) {
|
||||
var der = new asn1.BerWriter();
|
||||
writePkcs8(der, key);
|
||||
return (der.buffer);
|
||||
}
|
||||
|
||||
function writePkcs8(der, key) {
|
||||
der.startSequence();
|
||||
|
||||
if (PrivateKey.isPrivateKey(key)) {
|
||||
var sillyInt = new Buffer(1);
|
||||
sillyInt[0] = 0x0;
|
||||
var sillyInt = Buffer.from([0]);
|
||||
der.writeBuffer(sillyInt, asn1.Ber.Integer);
|
||||
}
|
||||
|
||||
@@ -464,8 +483,7 @@ function writePkcs8RSAPrivate(key, der) {
|
||||
der.startSequence(asn1.Ber.OctetString);
|
||||
der.startSequence();
|
||||
|
||||
var version = new Buffer(1);
|
||||
version[0] = 0;
|
||||
var version = Buffer.from([0]);
|
||||
der.writeBuffer(version, asn1.Ber.Integer);
|
||||
|
||||
der.writeBuffer(key.part.n.data, asn1.Ber.Integer);
|
||||
@@ -536,8 +554,7 @@ function writeECDSACurve(key, der) {
|
||||
// ECParameters sequence
|
||||
der.startSequence();
|
||||
|
||||
var version = new Buffer(1);
|
||||
version.writeUInt8(1, 0);
|
||||
var version = Buffer.from([1]);
|
||||
der.writeBuffer(version, asn1.Ber.Integer);
|
||||
|
||||
// FieldID sequence
|
||||
@@ -560,8 +577,7 @@ function writeECDSACurve(key, der) {
|
||||
der.writeBuffer(curve.n, asn1.Ber.Integer);
|
||||
var h = curve.h;
|
||||
if (!h) {
|
||||
h = new Buffer(1);
|
||||
h[0] = 1;
|
||||
h = Buffer.from([1]);
|
||||
}
|
||||
der.writeBuffer(h, asn1.Ber.Integer);
|
||||
|
||||
@@ -585,8 +601,7 @@ function writePkcs8ECDSAPrivate(key, der) {
|
||||
der.startSequence(asn1.Ber.OctetString);
|
||||
der.startSequence();
|
||||
|
||||
var version = new Buffer(1);
|
||||
version[0] = 1;
|
||||
var version = Buffer.from([1]);
|
||||
der.writeBuffer(version, asn1.Ber.Integer);
|
||||
|
||||
der.writeBuffer(key.part.d.data, asn1.Ber.OctetString);
|
||||
|
99
node_modules/sshpk/lib/formats/putty.js
generated
vendored
Normal file
99
node_modules/sshpk/lib/formats/putty.js
generated
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
// Copyright 2018 Joyent, Inc.
|
||||
|
||||
module.exports = {
|
||||
read: read,
|
||||
write: write
|
||||
};
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var rfc4253 = require('./rfc4253');
|
||||
var Key = require('../key');
|
||||
|
||||
var errors = require('../errors');
|
||||
|
||||
function read(buf, options) {
|
||||
var lines = buf.toString('ascii').split(/[\r\n]+/);
|
||||
var found = false;
|
||||
var parts;
|
||||
var si = 0;
|
||||
while (si < lines.length) {
|
||||
parts = splitHeader(lines[si++]);
|
||||
if (parts &&
|
||||
parts[0].toLowerCase() === 'putty-user-key-file-2') {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!found) {
|
||||
throw (new Error('No PuTTY format first line found'));
|
||||
}
|
||||
var alg = parts[1];
|
||||
|
||||
parts = splitHeader(lines[si++]);
|
||||
assert.equal(parts[0].toLowerCase(), 'encryption');
|
||||
|
||||
parts = splitHeader(lines[si++]);
|
||||
assert.equal(parts[0].toLowerCase(), 'comment');
|
||||
var comment = parts[1];
|
||||
|
||||
parts = splitHeader(lines[si++]);
|
||||
assert.equal(parts[0].toLowerCase(), 'public-lines');
|
||||
var publicLines = parseInt(parts[1], 10);
|
||||
if (!isFinite(publicLines) || publicLines < 0 ||
|
||||
publicLines > lines.length) {
|
||||
throw (new Error('Invalid public-lines count'));
|
||||
}
|
||||
|
||||
var publicBuf = Buffer.from(
|
||||
lines.slice(si, si + publicLines).join(''), 'base64');
|
||||
var keyType = rfc4253.algToKeyType(alg);
|
||||
var key = rfc4253.read(publicBuf);
|
||||
if (key.type !== keyType) {
|
||||
throw (new Error('Outer key algorithm mismatch'));
|
||||
}
|
||||
key.comment = comment;
|
||||
return (key);
|
||||
}
|
||||
|
||||
function splitHeader(line) {
|
||||
var idx = line.indexOf(':');
|
||||
if (idx === -1)
|
||||
return (null);
|
||||
var header = line.slice(0, idx);
|
||||
++idx;
|
||||
while (line[idx] === ' ')
|
||||
++idx;
|
||||
var rest = line.slice(idx);
|
||||
return ([header, rest]);
|
||||
}
|
||||
|
||||
function write(key, options) {
|
||||
assert.object(key);
|
||||
if (!Key.isKey(key))
|
||||
throw (new Error('Must be a public key'));
|
||||
|
||||
var alg = rfc4253.keyTypeToAlg(key);
|
||||
var buf = rfc4253.write(key);
|
||||
var comment = key.comment || '';
|
||||
|
||||
var b64 = buf.toString('base64');
|
||||
var lines = wrap(b64, 64);
|
||||
|
||||
lines.unshift('Public-Lines: ' + lines.length);
|
||||
lines.unshift('Comment: ' + comment);
|
||||
lines.unshift('Encryption: none');
|
||||
lines.unshift('PuTTY-User-Key-File-2: ' + alg);
|
||||
|
||||
return (Buffer.from(lines.join('\n') + '\n'));
|
||||
}
|
||||
|
||||
function wrap(txt, len) {
|
||||
var lines = [];
|
||||
var pos = 0;
|
||||
while (pos < txt.length) {
|
||||
lines.push(txt.slice(pos, pos + 64));
|
||||
pos += 64;
|
||||
}
|
||||
return (lines);
|
||||
}
|
3
node_modules/sshpk/lib/formats/rfc4253.js
generated
vendored
3
node_modules/sshpk/lib/formats/rfc4253.js
generated
vendored
@@ -14,6 +14,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
@@ -54,7 +55,7 @@ function keyTypeToAlg(key) {
|
||||
|
||||
function read(partial, type, buf, options) {
|
||||
if (typeof (buf) === 'string')
|
||||
buf = new Buffer(buf);
|
||||
buf = Buffer.from(buf);
|
||||
assert.buffer(buf, 'buf');
|
||||
|
||||
var key = {};
|
||||
|
13
node_modules/sshpk/lib/formats/ssh-private.js
generated
vendored
13
node_modules/sshpk/lib/formats/ssh-private.js
generated
vendored
@@ -8,6 +8,7 @@ module.exports = {
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var asn1 = require('asn1');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
var crypto = require('crypto');
|
||||
@@ -70,7 +71,7 @@ function readSSHPrivate(type, buf, options) {
|
||||
}
|
||||
|
||||
if (typeof (options.passphrase) === 'string') {
|
||||
options.passphrase = new Buffer(options.passphrase,
|
||||
options.passphrase = Buffer.from(options.passphrase,
|
||||
'utf-8');
|
||||
}
|
||||
if (!Buffer.isBuffer(options.passphrase)) {
|
||||
@@ -88,7 +89,7 @@ function readSSHPrivate(type, buf, options) {
|
||||
throw (new Error('bcrypt_pbkdf function returned ' +
|
||||
'failure, parameters invalid'));
|
||||
}
|
||||
out = new Buffer(out);
|
||||
out = Buffer.from(out);
|
||||
var ckey = out.slice(0, cinf.keySize);
|
||||
var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);
|
||||
var cipherStream = crypto.createDecipheriv(cinf.opensslName,
|
||||
@@ -142,13 +143,13 @@ function write(key, options) {
|
||||
|
||||
var cipher = 'none';
|
||||
var kdf = 'none';
|
||||
var kdfopts = new Buffer(0);
|
||||
var kdfopts = Buffer.alloc(0);
|
||||
var cinf = { blockSize: 8 };
|
||||
var passphrase;
|
||||
if (options !== undefined) {
|
||||
passphrase = options.passphrase;
|
||||
if (typeof (passphrase) === 'string')
|
||||
passphrase = new Buffer(passphrase, 'utf-8');
|
||||
passphrase = Buffer.from(passphrase, 'utf-8');
|
||||
if (passphrase !== undefined) {
|
||||
assert.buffer(passphrase, 'options.passphrase');
|
||||
assert.optionalString(options.cipher, 'options.cipher');
|
||||
@@ -199,7 +200,7 @@ function write(key, options) {
|
||||
throw (new Error('bcrypt_pbkdf function returned ' +
|
||||
'failure, parameters invalid'));
|
||||
}
|
||||
out = new Buffer(out);
|
||||
out = Buffer.from(out);
|
||||
var ckey = out.slice(0, cinf.keySize);
|
||||
var iv = out.slice(cinf.keySize, cinf.keySize + cinf.blockSize);
|
||||
|
||||
@@ -244,7 +245,7 @@ function write(key, options) {
|
||||
var tmp = buf.toString('base64');
|
||||
var len = tmp.length + (tmp.length / 70) +
|
||||
18 + 16 + header.length*2 + 10;
|
||||
buf = new Buffer(len);
|
||||
buf = Buffer.alloc(len);
|
||||
var o = 0;
|
||||
o += buf.write('-----BEGIN ' + header + '-----\n', o);
|
||||
for (var i = 0; i < tmp.length; ) {
|
||||
|
7
node_modules/sshpk/lib/formats/ssh.js
generated
vendored
7
node_modules/sshpk/lib/formats/ssh.js
generated
vendored
@@ -6,6 +6,7 @@ module.exports = {
|
||||
};
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var rfc4253 = require('./rfc4253');
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
@@ -31,7 +32,7 @@ function read(buf, options) {
|
||||
assert.ok(m, 'key must match regex');
|
||||
|
||||
var type = rfc4253.algToKeyType(m[1]);
|
||||
var kbuf = new Buffer(m[2], 'base64');
|
||||
var kbuf = Buffer.from(m[2], 'base64');
|
||||
|
||||
/*
|
||||
* This is a bit tricky. If we managed to parse the key and locate the
|
||||
@@ -50,7 +51,7 @@ function read(buf, options) {
|
||||
} catch (e) {
|
||||
m = trimmed.match(SSHKEY_RE2);
|
||||
assert.ok(m, 'key must match regex');
|
||||
kbuf = new Buffer(m[2], 'base64');
|
||||
kbuf = Buffer.from(m[2], 'base64');
|
||||
key = rfc4253.readInternal(ret, 'public', kbuf);
|
||||
}
|
||||
} else {
|
||||
@@ -110,5 +111,5 @@ function write(key, options) {
|
||||
if (key.comment)
|
||||
parts.push(key.comment);
|
||||
|
||||
return (new Buffer(parts.join(' ')));
|
||||
return (Buffer.from(parts.join(' ')));
|
||||
}
|
||||
|
23
node_modules/sshpk/lib/formats/x509-pem.js
generated
vendored
23
node_modules/sshpk/lib/formats/x509-pem.js
generated
vendored
@@ -11,6 +11,7 @@ module.exports = {
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var asn1 = require('asn1');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
@@ -28,14 +29,24 @@ function read(buf, options) {
|
||||
|
||||
var lines = buf.trim().split(/[\r\n]+/g);
|
||||
|
||||
var m = lines[0].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);
|
||||
var m;
|
||||
var si = -1;
|
||||
while (!m && si < lines.length) {
|
||||
m = lines[++si].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*BEGIN CERTIFICATE[ ]*[-]+/);
|
||||
}
|
||||
assert.ok(m, 'invalid PEM header');
|
||||
|
||||
var m2 = lines[lines.length - 1].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*END CERTIFICATE[ ]*[-]+/);
|
||||
var m2;
|
||||
var ei = lines.length;
|
||||
while (!m2 && ei > 0) {
|
||||
m2 = lines[--ei].match(/*JSSTYLED*/
|
||||
/[-]+[ ]*END CERTIFICATE[ ]*[-]+/);
|
||||
}
|
||||
assert.ok(m2, 'invalid PEM footer');
|
||||
|
||||
lines = lines.slice(si, ei + 1);
|
||||
|
||||
var headers = {};
|
||||
while (true) {
|
||||
lines = lines.slice(1);
|
||||
@@ -48,7 +59,7 @@ function read(buf, options) {
|
||||
|
||||
/* Chop off the first and last lines */
|
||||
lines = lines.slice(0, -1).join('');
|
||||
buf = new Buffer(lines, 'base64');
|
||||
buf = Buffer.from(lines, 'base64');
|
||||
|
||||
return (x509.read(buf, options));
|
||||
}
|
||||
@@ -60,7 +71,7 @@ function write(cert, options) {
|
||||
var tmp = dbuf.toString('base64');
|
||||
var len = tmp.length + (tmp.length / 64) +
|
||||
18 + 16 + header.length*2 + 10;
|
||||
var buf = new Buffer(len);
|
||||
var buf = Buffer.alloc(len);
|
||||
var o = 0;
|
||||
o += buf.write('-----BEGIN ' + header + '-----\n', o);
|
||||
for (var i = 0; i < tmp.length; ) {
|
||||
|
41
node_modules/sshpk/lib/formats/x509.js
generated
vendored
41
node_modules/sshpk/lib/formats/x509.js
generated
vendored
@@ -10,6 +10,7 @@ module.exports = {
|
||||
|
||||
var assert = require('assert-plus');
|
||||
var asn1 = require('asn1');
|
||||
var Buffer = require('safer-buffer').Buffer;
|
||||
var algs = require('../algs');
|
||||
var utils = require('../utils');
|
||||
var Key = require('../key');
|
||||
@@ -89,7 +90,7 @@ var EXTS = {
|
||||
|
||||
function read(buf, options) {
|
||||
if (typeof (buf) === 'string') {
|
||||
buf = new Buffer(buf, 'binary');
|
||||
buf = Buffer.from(buf, 'binary');
|
||||
}
|
||||
assert.buffer(buf, 'buf');
|
||||
|
||||
@@ -202,6 +203,14 @@ function readDate(der) {
|
||||
}
|
||||
}
|
||||
|
||||
function writeDate(der, date) {
|
||||
if (date.getUTCFullYear() >= 2050 || date.getUTCFullYear() < 1950) {
|
||||
der.writeString(dateToGTime(date), asn1.Ber.GeneralizedTime);
|
||||
} else {
|
||||
der.writeString(dateToUTCTime(date), asn1.Ber.UTCTime);
|
||||
}
|
||||
}
|
||||
|
||||
/* RFC5280, section 4.2.1.6 (GeneralName type) */
|
||||
var ALTNAME = {
|
||||
OtherName: Local(0),
|
||||
@@ -241,7 +250,8 @@ function readExtension(cert, buf, der) {
|
||||
var extId = der.readOID();
|
||||
var id;
|
||||
var sig = cert.signatures.x509;
|
||||
sig.extras.exts = [];
|
||||
if (!sig.extras.exts)
|
||||
sig.extras.exts = [];
|
||||
|
||||
var critical;
|
||||
if (der.peek() === asn1.Ber.Boolean)
|
||||
@@ -413,9 +423,11 @@ function gTimeToDate(t) {
|
||||
return (d);
|
||||
}
|
||||
|
||||
function zeroPad(n) {
|
||||
function zeroPad(n, m) {
|
||||
if (m === undefined)
|
||||
m = 2;
|
||||
var s = '' + n;
|
||||
while (s.length < 2)
|
||||
while (s.length < m)
|
||||
s = '0' + s;
|
||||
return (s);
|
||||
}
|
||||
@@ -432,6 +444,18 @@ function dateToUTCTime(d) {
|
||||
return (s);
|
||||
}
|
||||
|
||||
function dateToGTime(d) {
|
||||
var s = '';
|
||||
s += zeroPad(d.getUTCFullYear(), 4);
|
||||
s += zeroPad(d.getUTCMonth() + 1);
|
||||
s += zeroPad(d.getUTCDate());
|
||||
s += zeroPad(d.getUTCHours());
|
||||
s += zeroPad(d.getUTCMinutes());
|
||||
s += zeroPad(d.getUTCSeconds());
|
||||
s += 'Z';
|
||||
return (s);
|
||||
}
|
||||
|
||||
function sign(cert, key) {
|
||||
if (cert.signatures.x509 === undefined)
|
||||
cert.signatures.x509 = {};
|
||||
@@ -500,7 +524,7 @@ function write(cert, options) {
|
||||
der.endSequence();
|
||||
|
||||
var sigData = sig.signature.toBuffer('asn1');
|
||||
var data = new Buffer(sigData.length + 1);
|
||||
var data = Buffer.alloc(sigData.length + 1);
|
||||
data[0] = 0;
|
||||
sigData.copy(data, 1);
|
||||
der.writeBuffer(data, asn1.Ber.BitString);
|
||||
@@ -530,8 +554,8 @@ function writeTBSCert(cert, der) {
|
||||
cert.issuer.toAsn1(der);
|
||||
|
||||
der.startSequence();
|
||||
der.writeString(dateToUTCTime(cert.validFrom), asn1.Ber.UTCTime);
|
||||
der.writeString(dateToUTCTime(cert.validUntil), asn1.Ber.UTCTime);
|
||||
writeDate(der, cert.validFrom);
|
||||
writeDate(der, cert.validUntil);
|
||||
der.endSequence();
|
||||
|
||||
var subject = cert.subjects[0];
|
||||
@@ -710,8 +734,7 @@ function writeBitField(setBits, bitIndex) {
|
||||
var bitLen = bitIndex.length;
|
||||
var blen = Math.ceil(bitLen / 8);
|
||||
var unused = blen * 8 - bitLen;
|
||||
var bits = new Buffer(1 + blen);
|
||||
bits.fill(0);
|
||||
var bits = Buffer.alloc(1 + blen); // zero-filled
|
||||
bits[0] = unused;
|
||||
for (var i = 0; i < bitLen; ++i) {
|
||||
var byteN = 1 + Math.floor(i / 8);
|
||||
|
Reference in New Issue
Block a user