From 999016eb3c9613985cc68527f2e4f7edfb165b06 Mon Sep 17 00:00:00 2001 From: Illya Petrov Date: Sat, 5 Feb 2022 21:11:12 +0100 Subject: [PATCH 1/2] Add cmp certfetch to remote box --- README.md | 21 ++++++++ agent.js | 23 +++++++-- lib/frame/client.js | 17 ++++++- lib/frame/daemon.js | 6 +++ package-lock.json | 117 ++++++++++++++++++++++++++++++-------------- package.json | 2 +- 6 files changed, 142 insertions(+), 44 deletions(-) diff --git a/README.md b/README.md index a245e42..930ff94 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,27 @@ Example commandline for privatbank keys: --no-tax \ --tsp all +## Certificate discovery + +For key-6.dat files you also have an option to let agent download certificates from CA server. JKS files don't need this, as certificates are part of jks file itself: + + node index.js --sign \ + --key Key-6.dat:password \ + --cert-fetch http://acskidd.gov.ua/services/cmp/ \ + --cert-fetch http://czo.gov.ua/services/cmp/ \ + --input text.pdf --output text.pdf.p7s \ + --no-tax \ + --tsp all + +Notice, that cert-fetch can be passed more then once, in this case all mentioned URLs will be called in parallel. If you don't know the url of CMP service, you can let jkurwa guess cmp server urls from CA bundle. Please note, that all urls are being queried sequentially in order they are found in CA bundle and loading CA bundle takes some CPU time. Example: + + node index.js --sign \ + --key Key-6.dat:password \ + --cert-fetch \ + --ca_path CACertificates.3322cbdc.p7b \ + --input text.pdf --output text.pdf.p7s \ + --no-tax \ + --tsp all ## Write detached signature diff --git a/agent.js b/agent.js index bc2f7df..5cf8b90 100644 --- a/agent.js +++ b/agent.js @@ -145,6 +145,10 @@ async function do_sc( cert_rcrypt = Certificate.from_asn1(buf).as_pem(); shouldCrypt = true; } + if (!box.keys[0].cert) { + error('No certificate loaded for key 0, use --cert filename or --cert-fetch url'); + return; + } const ipn_ext = box.keys[0].cert.extension.ipn; const subject = box.keys[0].cert.subject; @@ -292,7 +296,7 @@ async function do_parse(inputF, outputF, box, tsp, ocsp) { } }); - if (isErr === false) { + if (isErr === false && outputF !== null) { await output(outputF, textinfo.content, isWin); } @@ -328,6 +332,17 @@ async function main(argv, setIo) { box = await get_local_box(argv.key, argv.cert, argv.ca_path); } + let certFetch = argv['cert-fetch']; + if (certFetch) { + let urls = []; + if (typeof certFetch === 'string') { + urls = [certFetch]; + } else if (Array.isArray(certFetch)) { + urls = certFetch; + } + await box.findCertsCmp(urls); + } + if (argv.sign || argv.crypt) { if (argv.crypt === true && !argv.recipient_cert) { return error( @@ -356,10 +371,10 @@ async function main(argv, setIo) { ); } - if (argv.decrypt) { + if (argv.decrypt || argv.verify) { ret = await do_parse( - argv.input, - argv.output, + argv.input || argv.decrypt || argv.verify, + argv.verify ? null : argv.output, box, tsp_arg(argv.tsp), argv.ocsp diff --git a/lib/frame/client.js b/lib/frame/client.js index aed988a..17ead91 100644 --- a/lib/frame/client.js +++ b/lib/frame/client.js @@ -26,7 +26,7 @@ var connect = function (opts) { }; var RemoteBox = function (cb) { - this.readyCb = cb; + this.readyCB = cb; this.sock = connect({ connected: this.haveLink.bind(this), data: this.haveData.bind(this), @@ -46,7 +46,7 @@ RemoteBox.prototype.haveData = function(contents, type) { }); } if (type === 'printstr' && contents.op === 'READY') { - this.readyCb(this); + this.readyCB(this); } if (type === 'printstr' && contents.op === 'META') { data = this._data; @@ -58,11 +58,16 @@ RemoteBox.prototype.haveData = function(contents, type) { delete this._data; this.rpipeCB(data); } + if (type === 'printstr' && contents.op === 'RCMP') { + this.frame.send({op: 'INFO'}); + } if (type === 'printstr' && contents.op === 'ERROR') { if(contents.code === 'EPIPE') { this.rpipeCB({error: true}); } else if (contents.code === 'EUNWRAP') { this.unwrapCB({error: true}); + } else if (contents.code === 'ECMP') { + this.cmpCB({error: true}); } } @@ -89,6 +94,14 @@ RemoteBox.prototype.unwrap = function(content, content2, opts) { }); }; +RemoteBox.prototype.findCertsCmp = function(urls) { + return new Promise(resolve=> { + this.frame.send({ op: 'CMP', urls }); + this.readyCB = resolve; + this.cmpCB = resolve; + }); +} + var remoteBox = function(cb) { var box = new RemoteBox(cb); }; diff --git a/lib/frame/daemon.js b/lib/frame/daemon.js index 8d155a7..d260a8f 100644 --- a/lib/frame/daemon.js +++ b/lib/frame/daemon.js @@ -163,6 +163,12 @@ var start = function (opts) { }; }); frame.send({ op: "CLEAR", keys }); + } else if (contents.op === 'CMP') { + box.findCertsCmp(contents.urls).then((number)=> { + frame.send({ op: 'RCMP', number }); + }, ()=> { + frame.send({ op: 'ERROR', code: 'ECMP'}); + }); } else if (!box) { frame.send({ op: "ERROR", code: "ENOENT", bid: contents.bid }); } else { diff --git a/package-lock.json b/package-lock.json index 8ab7b4b..daff4cf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1932,24 +1932,6 @@ "safer-buffer": "~2.1.0" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==" - } - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -2226,11 +2208,6 @@ "file-uri-to-path": "1.0.0" } }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==" - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4037,7 +4014,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "invariant": { "version": "2.2.4", @@ -6125,22 +6103,92 @@ } }, "jkurwa": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/jkurwa/-/jkurwa-1.12.0.tgz", - "integrity": "sha512-0EZGKiB2992imXkWOWFFDeRsCNIO07v0GBzNm6gtDswZZAnC1m+SIyMX9Hm186grtFjZgI9kmDqjN/xYdpmZPQ==", + "version": "file:../jkurwa", "requires": { "asn1.js": ">= 0.4.0", "bn.js": ">= 0.14", "buffer": ">= 3.0", "jksreader": "^1.0.0", "js-lzma": "0.x" + }, + "dependencies": { + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "jksreader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/jksreader/-/jksreader-1.0.0.tgz", + "integrity": "sha512-fSZ64WyfAXHoaE3J5opHh7DSCL3Kfy3CzRkLX2Kz9kmHUa8DrnrQKPhBgi2mapGu7SUwuzgCw/xPtGzZj4pWgQ==", + "requires": { + "js-sha1": "^0.6.0" + } + }, + "js-lzma": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/js-lzma/-/js-lzma-0.1.0.tgz", + "integrity": "sha1-eQ1yE3skRrYfP/TQEilOXSH4PeM=" + }, + "js-sha1": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", + "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + } } }, - "js-lzma": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/js-lzma/-/js-lzma-0.1.0.tgz", - "integrity": "sha1-eQ1yE3skRrYfP/TQEilOXSH4PeM=" - }, "js-sha1": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", @@ -6407,11 +6455,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", diff --git a/package.json b/package.json index e0321ed..6b5d21b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "encoding": "^0.1.12", "gost89": "^0.1.11", "jksreader": "^1.0.0", - "jkurwa": "^1.12.0", + "jkurwa": "^1.14.0", "yargs": "1.3.x" } } From a777c0487bf36b6296c7e2c2d893b9dcd33c0e73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Feb 2022 14:38:53 +0000 Subject: [PATCH 2/2] Bump ini from 1.3.5 to 1.3.8 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8) --- updated-dependencies: - dependency-name: ini dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 130 ++++++++++++++++------------------------------ 1 file changed, 44 insertions(+), 86 deletions(-) diff --git a/package-lock.json b/package-lock.json index daff4cf..84ad897 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1932,6 +1932,24 @@ "safer-buffer": "~2.1.0" } }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -2208,6 +2226,11 @@ "file-uri-to-path": "1.0.0" } }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -3381,12 +3404,6 @@ "dev": true, "optional": true }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, @@ -4014,8 +4031,14 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "optional": true }, "invariant": { "version": "2.2.4", @@ -6103,92 +6126,22 @@ } }, "jkurwa": { - "version": "file:../jkurwa", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/jkurwa/-/jkurwa-1.14.0.tgz", + "integrity": "sha512-vUrj+xse/VFu4EqKvVKVgzOnX7UanDhYOq5UaI8MHJlQizAEzd/pGkzn4Q50Hq+lr7joVWX32RCEoyRnpQabrg==", "requires": { "asn1.js": ">= 0.4.0", "bn.js": ">= 0.14", "buffer": ">= 3.0", "jksreader": "^1.0.0", "js-lzma": "0.x" - }, - "dependencies": { - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - } - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" - }, - "bn.js": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", - "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "jksreader": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/jksreader/-/jksreader-1.0.0.tgz", - "integrity": "sha512-fSZ64WyfAXHoaE3J5opHh7DSCL3Kfy3CzRkLX2Kz9kmHUa8DrnrQKPhBgi2mapGu7SUwuzgCw/xPtGzZj4pWgQ==", - "requires": { - "js-sha1": "^0.6.0" - } - }, - "js-lzma": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/js-lzma/-/js-lzma-0.1.0.tgz", - "integrity": "sha1-eQ1yE3skRrYfP/TQEilOXSH4PeM=" - }, - "js-sha1": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", - "integrity": "sha512-01gwBFreYydzmU9BmZxpVk6svJJHrVxEN3IOiGl6VO93bVKYETJ0sIth6DASI6mIFdt7NmfX9UiByRzsYHGU9w==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - } } }, + "js-lzma": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/js-lzma/-/js-lzma-0.1.0.tgz", + "integrity": "sha1-eQ1yE3skRrYfP/TQEilOXSH4PeM=" + }, "js-sha1": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/js-sha1/-/js-sha1-0.6.0.tgz", @@ -6455,6 +6408,11 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",