From ace8121d0e62d6e67025e0849e9652ad6917af15 Mon Sep 17 00:00:00 2001 From: n1073645 Date: Mon, 6 Jan 2020 08:53:51 +0000 Subject: [PATCH 1/4] Update dependencies. --- package-lock.json | 132 +++++++++++++++++++++++----------------------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index e41e4fff01..a619380d80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7118,28 +7118,28 @@ "dependencies": { "abbrev": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "resolved": false, "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "resolved": false, "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "aproba": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "resolved": false, "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "resolved": false, "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "optional": true, @@ -7150,14 +7150,14 @@ }, "balanced-match": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "resolved": false, "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "resolved": false, "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, @@ -7168,42 +7168,42 @@ }, "chownr": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", + "resolved": false, "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "resolved": false, "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "resolved": false, "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "resolved": false, "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "resolved": false, "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "dev": true, "optional": true, @@ -7213,28 +7213,28 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "resolved": false, "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "resolved": false, "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "resolved": false, "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "fs-minipass": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", + "resolved": false, "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", "dev": true, "optional": true, @@ -7244,14 +7244,14 @@ }, "fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "resolved": false, "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "resolved": false, "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, @@ -7268,7 +7268,7 @@ }, "glob": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "resolved": false, "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", "dev": true, "optional": true, @@ -7283,14 +7283,14 @@ }, "has-unicode": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "resolved": false, "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "resolved": false, "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "optional": true, @@ -7300,7 +7300,7 @@ }, "ignore-walk": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", + "resolved": false, "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, @@ -7310,7 +7310,7 @@ }, "inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "resolved": false, "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "optional": true, @@ -7321,21 +7321,21 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "resolved": false, "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true }, "ini": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "resolved": false, "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "resolved": false, "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, @@ -7345,14 +7345,14 @@ }, "isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "resolved": false, "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "resolved": false, "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, @@ -7362,14 +7362,14 @@ }, "minimist": { "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "resolved": false, "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "optional": true }, "minipass": { "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", + "resolved": false, "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", "dev": true, "optional": true, @@ -7380,7 +7380,7 @@ }, "minizlib": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", + "resolved": false, "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", "dev": true, "optional": true, @@ -7390,7 +7390,7 @@ }, "mkdirp": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": false, "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", "dev": true, "optional": true, @@ -7400,14 +7400,14 @@ }, "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "resolved": false, "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true, "optional": true }, "needle": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", + "resolved": false, "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", "dev": true, "optional": true, @@ -7419,7 +7419,7 @@ }, "node-pre-gyp": { "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", + "resolved": false, "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", "dev": true, "optional": true, @@ -7438,7 +7438,7 @@ }, "nopt": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", + "resolved": false, "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, @@ -7449,14 +7449,14 @@ }, "npm-bundled": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", + "resolved": false, "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", + "resolved": false, "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", "dev": true, "optional": true, @@ -7467,7 +7467,7 @@ }, "npmlog": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "resolved": false, "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, @@ -7480,21 +7480,21 @@ }, "number-is-nan": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "resolved": false, "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "resolved": false, "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "resolved": false, "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, @@ -7504,21 +7504,21 @@ }, "os-homedir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "resolved": false, "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "resolved": false, "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "resolved": false, "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, @@ -7529,21 +7529,21 @@ }, "path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "resolved": false, "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "resolved": false, "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "resolved": false, "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "optional": true, @@ -7556,7 +7556,7 @@ "dependencies": { "minimist": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": false, "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true, "optional": true @@ -7565,7 +7565,7 @@ }, "readable-stream": { "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "resolved": false, "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, @@ -7581,7 +7581,7 @@ }, "rimraf": { "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "resolved": false, "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "optional": true, @@ -7591,49 +7591,49 @@ }, "safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "resolved": false, "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "resolved": false, "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "resolved": false, "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", + "resolved": false, "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "resolved": false, "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "resolved": false, "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string-width": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "resolved": false, "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, @@ -7645,7 +7645,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": false, "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, @@ -7655,7 +7655,7 @@ }, "strip-ansi": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "resolved": false, "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, @@ -7665,14 +7665,14 @@ }, "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "resolved": false, "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "tar": { "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", + "resolved": false, "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", "dev": true, "optional": true, @@ -7688,14 +7688,14 @@ }, "util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "resolved": false, "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "resolved": false, "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "optional": true, @@ -7705,14 +7705,14 @@ }, "wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "resolved": false, "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true }, "yallist": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", + "resolved": false, "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", "dev": true, "optional": true From d0954fc3baf0e6064f8740b0344de6d47d48424d Mon Sep 17 00:00:00 2001 From: n1073645 Date: Wed, 29 Jan 2020 16:05:14 +0000 Subject: [PATCH 2/4] Hill Cipher Encode/Decode added. --- src/core/config/Categories.json | 2 + src/core/lib/HillCipher.mjs | 229 +++++++++++++++++++++++ src/core/operations/HillCipherDecode.mjs | 55 ++++++ src/core/operations/HillCipherEncode.mjs | 59 ++++++ 4 files changed, 345 insertions(+) create mode 100644 src/core/lib/HillCipher.mjs create mode 100644 src/core/operations/HillCipherDecode.mjs create mode 100644 src/core/operations/HillCipherEncode.mjs diff --git a/src/core/config/Categories.json b/src/core/config/Categories.json index 53ca796def..024dac1400 100755 --- a/src/core/config/Categories.json +++ b/src/core/config/Categories.json @@ -95,6 +95,8 @@ "Affine Cipher Decode", "A1Z26 Cipher Encode", "A1Z26 Cipher Decode", + "Hill Cipher Encode", + "Hill Cipher Decode", "Atbash Cipher", "Substitute", "Derive PBKDF2 key", diff --git a/src/core/lib/HillCipher.mjs b/src/core/lib/HillCipher.mjs new file mode 100644 index 0000000000..65564d288f --- /dev/null +++ b/src/core/lib/HillCipher.mjs @@ -0,0 +1,229 @@ +/** + * @author n1073645 [n1073645@gmail.com] + * @copyright Crown Copyright 2020 + * @license Apache-2.0 + */ + +import OperationError from "../errors/OperationError.mjs"; +let N = 0; + +/** + * Generates a matrix from a string. Depending on the strings purpose it populates it differently. + * + * @param {string} theString + * @param {boolean} keyflag + * @returns {object} + */ +function genMatix(theString, keyflag=false) { + const matrix = new Array(N).fill(0).map(() => new Array(N).fill(-1)); + let count = 0; + + // Loop over string and put it into a matrix. + for (let i = 0; i < theString.length; i++) { + if (i % N === 0 && i) + count++; + if (keyflag) + matrix[count][i%N] = theString.charCodeAt(i) - 97; + else + matrix[i%N][count] = theString.charCodeAt(i) - 97; + } + return matrix; +} + +/** + * Gets the cofactor matrix of a matrix. + * + * @param {object} matrix + * @param {number} p + * @param {number} q + * @param {number} size + * @returns {object} + */ +function getCofactor(matrix, p, q, size) { + const temp = new Array(size).fill(0).map(() => new Array(size).fill(-1)); + let i = 0, j = 0; + + // Loop through all rows and columns, copying into the cofactor matrix. + for (let row = 0; row < size; row++) + for (let col = 0; col < size; col++) + if (row !== p && col !== q) { + temp[i][j++] = matrix[row][col]; + + // Reset loop counters. + if (j === size - 1) { + j = 0; + i++; + } + } + return temp; +} + +/** + * Calculates the determinant from a matrix. + * + * @param {object} matrix + * @param {number} size + * @returns {number} + */ +function determinant (matrix, size) { + let D = 0; + if (size === 1) + return matrix[0][0]; + let sign = 1; + + // Loop through top row of matrix calculating the determinant with an alternating sign. + for (let f = 0; f < size; f++) { + const temp = getCofactor(matrix, 0, f, size); + D += sign * matrix[0][f] * determinant(temp, size-1); + sign *= -1; + } + return D; +} + +/** + * Calculates the adjoint matrix from a matrix. + * + * @param {object} matrix + * @returns {object} + */ +function adjoint(matrix) { + if (N === 1) + return [[1]]; + let sign = 1; + const adj = new Array(N); + + // Calculates the adjugate matrix which is the transpose of the cofactor. + for (let i = 0; i < N; i++) { + adj[i] = new Array(N); + for (let j = 0; j< N; j++) { + const temp = getCofactor(matrix, i, j, N); + sign = ((i + j) % 2 === 0) ? 1 : -1; + adj[i][j] = sign * (determinant(temp, N - 1)); + } + } + return adj; +} + +/** + * Calculates the modular multiplicative inverse of the determinant. + * + * @param {number} det + * @param {number} base + * @returns {number} + */ +function inverseDeterminant(det, base=26) { + + // This brute forces all the possible numbers that may result in a zero remainder. + for (let i = 0; i < 26; i++) { + if ((base * i + 1) % det === 0) + return Math.floor((base * i + 1) / det); + } + return null; +} + +/** + * Calculates an inverse matrix from a matrix. + * + * @param {object} matrix + * @returns {object} + */ +function inverse(matrix) { + let det = determinant(matrix, N); + det = det - (Math.floor(det/26) * 26); + + // Calculates the modular multiplicative inverse of the determinant. + det = inverseDeterminant(det); + if (det === 0) + throw new OperationError("Key matrix has a determinant of 0."); + const adj = adjoint(matrix); + const inverse = new Array(N); + + // Multiply all values in the matrix by the new determinant. + for (let i = 0; i < N; i++) { + inverse[i] = new Array(N); + for (let j = 0; j < N; j++) { + const temp = (det * adj[j][i]); + inverse[i][j] = temp - (Math.floor(temp/26) * 26); + } + } + return inverse; +} + +/** + * Multiplies two matrices together. + * + * @param {object} matrix1 + * @param {object} matrix2 + * @returns {object} + */ +function multiply(matrix1, matrix2) { + const result = new Array(matrix2.length).fill(0).map(() => new Array(matrix2[0].length).fill(0)); + + // Loop through the columns and rows of the matrices multiplying them together. + for (let i = 0; i < matrix1.length; i++) + for (let j = 0; j < matrix2[0].length; j++) { + for (let k = 0; k < matrix2.length; k++) + result[i][j] += matrix1[i][k] * matrix2[k][j]; + result[i][j] = String.fromCharCode(97 + (result[i][j] % 26)); + } + return result; +} + +/** + * Converts a matrix into a string. + * + * @param {object} matrix + * @returns {string} + */ +function join(matrix) { + let result = ""; + + // Join values of a matrix together into a string. + for (let i = 0; i < matrix[0].length; i++) + for (let j = 0; j < matrix.length; j++) + result += matrix[j][i]; + return result; +} + +/** + * Encodes the plaintext using a key. + * + * @param {string} plaintext + * @param {string} key + * @returns {string} + */ +export function encode(plaintext, key) { + + // Don't trust users, calculate the size of the key matrix manually. + N = Math.ceil(Math.sqrt(key.length)); + + // Generate matrix representation of the key. + const keyMatrix = genMatix(key, true); + + // Generate matrix representation of the plaintext. + const plaintextMatrix = genMatix(plaintext); + + return join(multiply(keyMatrix, plaintextMatrix)); +} + +/** + * Decodes the ciphertext using a key. + * + * @param {string} ciphertext + * @param {string} key + * @returns {string} + */ +export function decode(ciphertext, key) { + + // Don't trust users, calculate the size of the key matrix manually. + N = Math.ceil(Math.sqrt(key.length)); + + // Generate matrix representation of the key. + const keyMatrix = inverse(genMatix(key, true)); + + // Generate matrix representation of the plaintext. + const ciphertextMatrix = genMatix(ciphertext); + + return join(multiply(keyMatrix, ciphertextMatrix)); + +} diff --git a/src/core/operations/HillCipherDecode.mjs b/src/core/operations/HillCipherDecode.mjs new file mode 100644 index 0000000000..97a38c134c --- /dev/null +++ b/src/core/operations/HillCipherDecode.mjs @@ -0,0 +1,55 @@ +/** + * @author n1073645 [n1073645@gmail.com] + * @copyright Crown Copyright 2020 + * @license Apache-2.0 + */ + +import Operation from "../Operation.mjs"; +import * as HillCipher from "../lib/HillCipher.mjs"; + +/** + * Hill Cipher Decode operation + */ +class HillCipherDecode extends Operation { + + /** + * HillCipherDecode constructor + */ + constructor() { + super(); + + this.name = "Hill Cipher Decode"; + this.module = "Crypto"; + this.description = ""; + this.infoURL = ""; + this.inputType = "string"; + this.outputType = "string"; + this.args = [ + { + name: "Key", + type: "string", + value: "" + } + ]; + } + + /** + * @param {string} input + * @param {Object[]} args + * @returns {string} + */ + run(input, args) { + const key = args[0].toLowerCase(); + input = input.toLowerCase(); + if (input.length === 0 || key.length === 0) + return ""; + + while (input.indexOf(" ") !== -1) + input = input.replace(" ", ""); + + return HillCipher.decode(input, key); + } + +} + +export default HillCipherDecode; diff --git a/src/core/operations/HillCipherEncode.mjs b/src/core/operations/HillCipherEncode.mjs new file mode 100644 index 0000000000..87fcb72e44 --- /dev/null +++ b/src/core/operations/HillCipherEncode.mjs @@ -0,0 +1,59 @@ +/** + * @author n1073645 [n1073645@gmail.com] + * @copyright Crown Copyright 2020 + * @license Apache-2.0 + */ + +import Operation from "../Operation.mjs"; +import * as HillCipher from "../lib/HillCipher.mjs"; + +/** + * Hill Cipher Encode operation + */ +class HillCipherEncode extends Operation { + + /** + * HillCipherEncode constructor + */ + constructor() { + super(); + + this.name = "Hill Cipher Encode"; + this.module = "Crypto"; + this.description = ""; + this.infoURL = ""; + this.inputType = "string"; + this.outputType = "string"; + this.args = [ + { + name: "Key", + type: "string", + value: "" + } + ]; + } + + /** + * @param {string} input + * @param {Object[]} args + * @returns {string} + */ + run(input, args) { + + const key = args[0].toLowerCase(); + input = input.toLowerCase(); + + // The algorithm has to have a non-empty input and a non-empty key. + if (input.length === 0 || key.length === 0) + return ""; + + // Remove spaces from input. + while (input.indexOf(" ") !== -1) + input = input.replace(" ", ""); + + return HillCipher.encode(input, key); + } + +} + +export default HillCipherEncode; From f46d9414cfc87a7679dae79bac02faf9705bf536 Mon Sep 17 00:00:00 2001 From: n1073645 Date: Thu, 30 Jan 2020 09:57:14 +0000 Subject: [PATCH 3/4] Spelling corrections. --- src/core/lib/HillCipher.mjs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/lib/HillCipher.mjs b/src/core/lib/HillCipher.mjs index 65564d288f..0bc41eb880 100644 --- a/src/core/lib/HillCipher.mjs +++ b/src/core/lib/HillCipher.mjs @@ -14,7 +14,7 @@ let N = 0; * @param {boolean} keyflag * @returns {object} */ -function genMatix(theString, keyflag=false) { +function genMatrix(theString, keyflag=false) { const matrix = new Array(N).fill(0).map(() => new Array(N).fill(-1)); let count = 0; @@ -198,10 +198,10 @@ export function encode(plaintext, key) { N = Math.ceil(Math.sqrt(key.length)); // Generate matrix representation of the key. - const keyMatrix = genMatix(key, true); + const keyMatrix = genMatrix(key, true); // Generate matrix representation of the plaintext. - const plaintextMatrix = genMatix(plaintext); + const plaintextMatrix = genMatrix(plaintext); return join(multiply(keyMatrix, plaintextMatrix)); } @@ -219,10 +219,10 @@ export function decode(ciphertext, key) { N = Math.ceil(Math.sqrt(key.length)); // Generate matrix representation of the key. - const keyMatrix = inverse(genMatix(key, true)); + const keyMatrix = inverse(genMatrix(key, true)); // Generate matrix representation of the plaintext. - const ciphertextMatrix = genMatix(ciphertext); + const ciphertextMatrix = genMatrix(ciphertext); return join(multiply(keyMatrix, ciphertextMatrix)); From 34cd4af5f5205f1d28fa0b98c0a8c127b0c3c869 Mon Sep 17 00:00:00 2001 From: n1073645 Date: Fri, 14 Feb 2020 10:46:29 +0000 Subject: [PATCH 4/4] Hill Cipher tests and info added --- src/core/lib/HillCipher.mjs | 8 ++++ src/core/operations/HillCipherDecode.mjs | 10 +++-- src/core/operations/HillCipherEncode.mjs | 9 +++-- tests/operations/index.mjs | 1 + tests/operations/tests/HillCipher.mjs | 47 ++++++++++++++++++++++++ 5 files changed, 69 insertions(+), 6 deletions(-) create mode 100644 tests/operations/tests/HillCipher.mjs diff --git a/src/core/lib/HillCipher.mjs b/src/core/lib/HillCipher.mjs index 0bc41eb880..3d91cb9bc4 100644 --- a/src/core/lib/HillCipher.mjs +++ b/src/core/lib/HillCipher.mjs @@ -203,6 +203,14 @@ export function encode(plaintext, key) { // Generate matrix representation of the plaintext. const plaintextMatrix = genMatrix(plaintext); + const det = determinant(keyMatrix, N); + + if ((det % 2 === 0) || (det % 13 === 0)) + throw new OperationError("Determinant has common factors with the modular base."); + + if (det === 0) + throw new OperationError("Determinant is 0"); + return join(multiply(keyMatrix, plaintextMatrix)); } diff --git a/src/core/operations/HillCipherDecode.mjs b/src/core/operations/HillCipherDecode.mjs index 97a38c134c..a46292b1cc 100644 --- a/src/core/operations/HillCipherDecode.mjs +++ b/src/core/operations/HillCipherDecode.mjs @@ -20,8 +20,8 @@ class HillCipherDecode extends Operation { this.name = "Hill Cipher Decode"; this.module = "Crypto"; - this.description = ""; - this.infoURL = ""; + this.description = "The Hill cipher is a polygraphic substitution cipher based on linear algebra. Invented by Lester S. Hill in 1929, it was the first polygraphic cipher in which it was practical (though barely) to operate on more than three symbols at once."; + this.infoURL = "https://wikipedia.org/wiki/Hill_cipher"; this.inputType = "string"; this.outputType = "string"; this.args = [ @@ -39,7 +39,7 @@ class HillCipherDecode extends Operation { * @returns {string} */ run(input, args) { - const key = args[0].toLowerCase(); + let key = args[0].toLowerCase(); input = input.toLowerCase(); if (input.length === 0 || key.length === 0) return ""; @@ -47,6 +47,10 @@ class HillCipherDecode extends Operation { while (input.indexOf(" ") !== -1) input = input.replace(" ", ""); + while (key.indexOf(" ") !== -1) + key = key.replace(" ", ""); + + return HillCipher.decode(input, key); } diff --git a/src/core/operations/HillCipherEncode.mjs b/src/core/operations/HillCipherEncode.mjs index 87fcb72e44..08fb1c7ee7 100644 --- a/src/core/operations/HillCipherEncode.mjs +++ b/src/core/operations/HillCipherEncode.mjs @@ -20,8 +20,8 @@ class HillCipherEncode extends Operation { this.name = "Hill Cipher Encode"; this.module = "Crypto"; - this.description = ""; - this.infoURL = ""; + this.description = "The Hill cipher is a polygraphic substitution cipher based on linear algebra. Invented by Lester S. Hill in 1929, it was the first polygraphic cipher in which it was practical (though barely) to operate on more than three symbols at once."; + this.infoURL = "https://wikipedia.org/wiki/Hill_cipher"; this.inputType = "string"; this.outputType = "string"; this.args = [ @@ -40,7 +40,7 @@ class HillCipherEncode extends Operation { */ run(input, args) { - const key = args[0].toLowerCase(); + let key = args[0].toLowerCase(); input = input.toLowerCase(); // The algorithm has to have a non-empty input and a non-empty key. @@ -51,6 +51,9 @@ class HillCipherEncode extends Operation { while (input.indexOf(" ") !== -1) input = input.replace(" ", ""); + while (key.indexOf(" ") !== -1) + key = key.replace(" ", ""); + return HillCipher.encode(input, key); } diff --git a/tests/operations/index.mjs b/tests/operations/index.mjs index bf44041415..3f519724bc 100644 --- a/tests/operations/index.mjs +++ b/tests/operations/index.mjs @@ -96,6 +96,7 @@ import "./tests/DefangIP.mjs"; import "./tests/ParseUDP.mjs"; import "./tests/AvroToJSON.mjs"; import "./tests/Lorenz.mjs"; +import "./tests/HillCipher.mjs"; // Cannot test operations that use the File type yet diff --git a/tests/operations/tests/HillCipher.mjs b/tests/operations/tests/HillCipher.mjs new file mode 100644 index 0000000000..0cac47c3c7 --- /dev/null +++ b/tests/operations/tests/HillCipher.mjs @@ -0,0 +1,47 @@ +/** + * HillCipher tests + * + * @author n1073645 [n1073645@gmail.com] + * @copyright Crown Copyright 2020 + * @license Apache-2.0 + */ +import TestRegister from "../../lib/TestRegister.mjs"; + +TestRegister.addTests([ + { + name: "Hill Cipher Encode", + input: "Hello World", + expectedOutput: "tutrquwdnv", + recipeConfig: [ + { "op": "Hill Cipher Encode", + "args": ["Test"] } + ] + }, + { + name: "Hill Cipher Decode", + input: "tutrquwdnv", + expectedOutput: "helloworld", + recipeConfig: [ + { "op": "Hill Cipher Decode", + "args": ["Test"] } + ] + }, + { + name: "Hill Cipher Bad Matrix", + input: "Hello World", + expectedOutput: "Determinant has common factors with the modular base.", + recipeConfig: [ + { "op": "Hill Cipher Encode", + "args": ["th"] } + ] + }, + { + name: "Hill Cipher Empty Key", + input: "Hello World", + expectedOutput: "", + recipeConfig: [ + { "op": "Hill Cipher Encode", + "args": [""] } + ] + } +]);