From 09bae1f23afc782cc7f2c6f479cb4d0acfb6c649 Mon Sep 17 00:00:00 2001 From: arty Date: Fri, 20 Aug 2021 11:40:46 -0700 Subject: [PATCH] [RFC] Make credible test set in .spec files and get everything passing according to new bls api (#252) * Make credible test set in .spec files and get everything passing accoring to new bls api * oops needed this for the other test code --- js-bindings/CMakeLists.txt | 2 +- js-bindings/blsjs.d.ts | 4 +- js-bindings/package-lock.json | 1374 +++++++++++++----- js-bindings/package.json | 20 +- js-bindings/tests/ExtendedPrivateKey.spec.js | 40 - js-bindings/tests/ExtendedPublicKey.spec.js | 24 - js-bindings/tests/PrivateKey.spec.js | 131 +- js-bindings/tests/PublicKey.spec.js | 56 +- js-bindings/tests/Signature.spec.js | 271 ++-- js-bindings/tests/karma.conf.js | 41 +- js-bindings/tests/package.json | 7 - js-bindings/tests/test.js | 2 +- js-bindings/tests/typings.spec.ts | 225 +-- js-bindings/tests/webpack.config.js | 19 + js_test.sh | 3 +- 15 files changed, 1312 insertions(+), 907 deletions(-) delete mode 100644 js-bindings/tests/ExtendedPrivateKey.spec.js delete mode 100644 js-bindings/tests/ExtendedPublicKey.spec.js delete mode 100644 js-bindings/tests/package.json create mode 100644 js-bindings/tests/webpack.config.js diff --git a/js-bindings/CMakeLists.txt b/js-bindings/CMakeLists.txt index 930b4c675..460c8604b 100644 --- a/js-bindings/CMakeLists.txt +++ b/js-bindings/CMakeLists.txt @@ -25,7 +25,7 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/blsjs.d.ts blsjs.d.ts COPYONLY) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/README.md README.md COPYONLY) # Copy test files -file(GLOB JS_BINDINGS_TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/tests/ ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.js) +file(GLOB JS_BINDINGS_TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}/tests/ ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.js ${CMAKE_CURRENT_SOURCE_DIR}/tests/*.ts) foreach(file ${JS_BINDINGS_TESTS}) message(FILE ${file}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tests/${file} tests/${file} COPYONLY) diff --git a/js-bindings/blsjs.d.ts b/js-bindings/blsjs.d.ts index 110fefa6e..22e69d8e0 100644 --- a/js-bindings/blsjs.d.ts +++ b/js-bindings/blsjs.d.ts @@ -103,6 +103,4 @@ export interface ModuleInstance { Util: typeof Util; } -declare function createModule(options?: {}): Promise; - -export default createModule; +export default function createModule(options?: {}): Promise; diff --git a/js-bindings/package-lock.json b/js-bindings/package-lock.json index 9a4a3501a..9e8cfc731 100644 --- a/js-bindings/package-lock.json +++ b/js-bindings/package-lock.json @@ -11,15 +11,15 @@ "dev": true }, "@types/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-y7mImlc/rNkvCRmg8gC3/lj87S7pTUIJ6QGjwHR9WQJcFs+ZMTOaoPrkdFA/YdbuqVEmEbb5RdhVxMkAcgOnpg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", "dev": true }, "@types/cors": { - "version": "2.8.10", - "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.10.tgz", - "integrity": "sha512-C7srjHiVG3Ey1nR6d511dtDkCEjxuN9W1HWAEjGq8kpcwmNM6JJkpC0xvabM7BXTG2wDq8Eu33iH9aQKa7IvLQ==", + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", "dev": true }, "@types/eslint": { @@ -301,19 +301,53 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "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==", + "dev": true + } + } + }, + "assert": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.0.0.tgz", + "integrity": "sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==", + "dev": true, + "requires": { + "es6-object-assign": "^1.1.0", + "is-nan": "^1.2.1", + "object-is": "^1.0.1", + "util": "^0.12.0" + } + }, + "available-typed-arrays": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.4.tgz", + "integrity": "sha512-SA5mXJWrId1TaQjfxUYghbqQ/hYioKmLJvPJyDuYRtXXenFNMjj4hSSt1Cf1xsuXSXrtxrVC5Ot4eU6cOtBDdA==", "dev": true }, - "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { - "lodash": "^4.17.11" + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" } }, "babel-runtime": { @@ -324,6 +358,14 @@ "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" + }, + "dependencies": { + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "dev": true + } } }, "balanced-match": { @@ -338,24 +380,35 @@ "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, "base64id": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", "dev": true }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true }, + "binascii": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/binascii/-/binascii-0.0.2.tgz", + "integrity": "sha1-p/iogB28z4sXVrdD2qD+6eLZ4O4=" + }, + "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==", + "dev": true + }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -393,12 +446,96 @@ "fill-range": "^7.0.1" } }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, "browserslist": { "version": "4.16.6", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", @@ -412,18 +549,44 @@ "node-releases": "^1.1.71" } }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "caniuse-lite": { "version": "1.0.30001237", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001237.tgz", @@ -452,12 +615,50 @@ } } }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + } + } + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", "dev": true }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -536,6 +737,12 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -567,15 +774,9 @@ "dev": true }, "core-js": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.5.tgz", - "integrity": "sha512-klh/kDpwX8hryYL14M9w/xei6vrv6sE8gTHDG7/T/+SEovB/G4ejwcfE/CBzO6Edsu+OETZMZ3wcX/EjUkrl5A==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", "dev": true }, "cors": { @@ -588,13 +789,68 @@ "vary": "^1" } }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "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==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "array-find-index": "^1.0.1" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" } }, "custom-event": { @@ -603,15 +859,6 @@ "integrity": "sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU=", "dev": true }, - "d": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", - "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", - "dev": true, - "requires": { - "es5-ext": "^0.10.9" - } - }, "date-format": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", @@ -642,6 +889,16 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, "di": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", @@ -654,6 +911,25 @@ "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", "dev": true }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.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==", + "dev": true + } + } + }, "dom-serialize": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", @@ -678,18 +954,41 @@ "integrity": "sha512-2Tg+7jSl3oPxgsBsWKh5H83QazTkmWG/cnNwJplmyZc7KcN61+I10oUgaXSVk/NwfvN3BdkKDR4FYuRBQQ2v0A==", "dev": true }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "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==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", @@ -712,9 +1011,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -753,13 +1052,54 @@ "integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0=", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", "dev": true, "requires": { - "prr": "~1.0.1" + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + } } }, "es-module-lexer": { @@ -768,37 +1108,22 @@ "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, - "es5-ext": { - "version": "0.10.48", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.48.tgz", - "integrity": "sha512-CdRvPlX/24Mj5L4NVxTs4804sxiS2CjVprgCmrgoDkdmjdY4D+ySHa7K3jJf8R40dFg0tIm3z/dk326LrnuSGw==", + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.1", - "next-tick": "1" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "es6-object-assign": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es6-object-assign/-/es6-object-assign-1.1.0.tgz", + "integrity": "sha1-wsNYJlYkfDnqEHyx5mUrb58kUjw=", + "dev": true }, "escalade": { "version": "3.1.1", @@ -863,6 +1188,16 @@ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -923,6 +1258,12 @@ "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", "dev": true }, + "foreach": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz", + "integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=", + "dev": true + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -940,6 +1281,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -952,6 +1300,25 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", @@ -993,17 +1360,61 @@ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } }, "he": { "version": "1.2.0", @@ -1011,6 +1422,17 @@ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, "http-errors": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", @@ -1044,6 +1466,12 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1060,6 +1488,21 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1069,6 +1512,27 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true + }, "is-docker": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz", @@ -1087,27 +1551,117 @@ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, + "is-typed-array": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.5.tgz", + "integrity": "sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug==", "dev": true, "requires": { - "is-extglob": "^2.1.1" + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.2", + "es-abstract": "^1.18.0-next.2", + "foreach": "^2.0.5", + "has-symbols": "^1.0.1" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, "is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -1117,12 +1671,6 @@ "is-docker": "^2.0.0" } }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, "isbinaryfile": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.8.tgz", @@ -1167,23 +1715,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -1194,58 +1725,55 @@ } }, "karma": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.2.tgz", - "integrity": "sha512-fo4Wt0S99/8vylZMxNj4cBFyOBBnC1bewZ0QOlePij/2SZVWxqbyLeIddY13q6URa2EpLRW8ixvFRUMjkmo1bw==", + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.3.4.tgz", + "integrity": "sha512-hbhRogUYIulfkBTZT7xoPrCYhRBnBoqbbL4fszWD0ReFGUxU+LYBr3dwKdAluaDQ/ynT9/7C+Lf7pPNW4gSx4Q==", "dev": true, "requires": { "body-parser": "^1.19.0", "braces": "^3.0.2", - "chokidar": "^3.4.2", + "chokidar": "^3.5.1", "colors": "^1.4.0", "connect": "^3.7.0", "di": "^0.0.1", "dom-serialize": "^2.2.1", - "glob": "^7.1.6", - "graceful-fs": "^4.2.4", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", "http-proxy": "^1.18.1", - "isbinaryfile": "^4.0.6", - "lodash": "^4.17.19", - "log4js": "^6.2.1", - "mime": "^2.4.5", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.3.0", + "mime": "^2.5.2", "minimatch": "^3.0.4", "qjobs": "^1.2.0", "range-parser": "^1.2.1", "rimraf": "^3.0.2", "socket.io": "^3.1.0", "source-map": "^0.6.1", - "tmp": "0.2.1", - "ua-parser-js": "^0.7.23", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.28", "yargs": "^16.1.1" }, "dependencies": { - "chokidar": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.1.tgz", - "integrity": "sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw==", + "glob": { + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.3.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true }, "mime": { "version": "2.5.2", @@ -1253,30 +1781,6 @@ "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", "dev": true }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1303,18 +1807,26 @@ "minimist": "^1.2.3" } }, + "karma-mocha-reporter": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/karma-mocha-reporter/-/karma-mocha-reporter-2.2.5.tgz", + "integrity": "sha1-FRIAlejtgZGG5HoLAS8810GJVWA=", + "dev": true, + "requires": { + "chalk": "^2.1.0", + "log-symbols": "^2.1.0", + "strip-ansi": "^4.0.0" + } + }, "karma-webpack": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-3.0.5.tgz", - "integrity": "sha512-nRudGJWstvVuA6Tbju9tyGUfXTtI1UXMXoRHVmM2/78D0q6s/Ye2IC157PKNDC15PWFGR0mVIRtWLAdcfsRJoA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/karma-webpack/-/karma-webpack-5.0.0.tgz", + "integrity": "sha512-+54i/cd3/piZuP3dr54+NcFeKOPnys5QeM1IY+0SPASwrtHsliXUiCL50iW+K9WWA7RvamC4macvvQ86l3KtaA==", "dev": true, "requires": { - "async": "^2.0.0", - "babel-runtime": "^6.0.0", - "loader-utils": "^1.0.0", - "lodash": "^4.0.0", - "source-map": "^0.5.6", - "webpack-dev-middleware": "^2.0.6" + "glob": "^7.1.3", + "minimatch": "^3.0.4", + "webpack-merge": "^4.1.5" } }, "loader-runner": { @@ -1323,17 +1835,6 @@ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -1363,9 +1864,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -1379,24 +1880,15 @@ } } }, - "loglevelnext": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.5.tgz", - "integrity": "sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A==", - "dev": true, - "requires": { - "es6-symbol": "^3.1.1", - "object.assign": "^4.1.0" - } - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "media-typer": { @@ -1405,26 +1897,34 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "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==", + "dev": true + } + } + }, "mime": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.0.tgz", - "integrity": "sha512-ikBcWwyqXQSHKtciCcctu9YfPbFYZ4+gbHEmE0Q8jzcTYQg5dHCr3g2wwAZjPoJfQVXZq6KXAjpXOTf5/cjT7w==", + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz", + "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA=", "dev": true }, "mime-db": { @@ -1442,6 +1942,18 @@ "mime-db": "1.47.0" } }, + "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==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1584,13 +2096,6 @@ "path-exists": "^4.0.0" } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -1689,12 +2194,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "node-releases": { "version": "1.1.73", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", @@ -1713,24 +2212,28 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, - "object-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", - "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", "dev": true }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" } }, + "object-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", + "dev": true + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1758,35 +2261,83 @@ "yocto-queue": "^0.1.0" } }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "dev": true }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", "dev": true }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "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==", + "dev": true + } + } }, "punycode": { "version": "2.1.1", @@ -1815,10 +2366,20 @@ "safe-buffer": "^5.1.0" } }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", "dev": true }, "raw-body": { @@ -1834,24 +2395,29 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "picomatch": "^2.2.1" } }, "regenerator-runtime": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", - "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "version": "0.10.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true }, "require-directory": { @@ -1872,6 +2438,25 @@ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", "dev": true }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -1910,11 +2495,15 @@ "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } }, "socket.io": { "version": "3.1.2", @@ -1934,9 +2523,9 @@ }, "dependencies": { "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -1967,16 +2556,10 @@ "debug": "~4.3.1" }, "dependencies": { - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -1996,12 +2579,6 @@ "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", "dev": true }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, "source-map-support": { "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", @@ -2026,6 +2603,24 @@ "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", "dev": true }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } + } + }, "streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -2044,9 +2639,9 @@ "dev": true }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { "ms": "2.1.2" @@ -2070,13 +2665,41 @@ "strip-ansi": "^4.0.0" } }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "strip-ansi": { @@ -2165,17 +2788,6 @@ "dev": true, "requires": { "rimraf": "^3.0.0" - }, - "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } } }, "to-regex-range": { @@ -2215,6 +2827,26 @@ "integrity": "sha512-6Gurc1n//gjp9eQNXjD9O3M/sMwVtN5S8Lv9bvOYBfKfDNiIIhqiyi01vMBO45u4zkDE420w/e0se7Vs+sIg+g==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -2236,11 +2868,19 @@ "punycode": "^2.1.0" } }, - "url-join": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz", - "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=", - "dev": true + "util": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.4.tgz", + "integrity": "sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "safe-buffer": "^5.1.2", + "which-typed-array": "^1.1.2" + } }, "util-deprecate": { "version": "1.0.2", @@ -2254,12 +2894,6 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -2313,31 +2947,13 @@ "webpack-sources": "^2.3.0" } }, - "webpack-dev-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.6.tgz", - "integrity": "sha512-tj5LLD9r4tDuRIDa5Mu9lnY2qBBehAITv6A9irqXhw/HQquZgTx3BCd57zYbU2gMDnncA49ufK2qVQSbaKJwOw==", - "dev": true, - "requires": { - "loud-rejection": "^1.6.0", - "memory-fs": "~0.4.1", - "mime": "^2.1.0", - "path-is-absolute": "^1.0.0", - "range-parser": "^1.0.3", - "url-join": "^2.0.2", - "webpack-log": "^1.0.1" - } - }, - "webpack-log": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.2.0.tgz", - "integrity": "sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA==", + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", "dev": true, "requires": { - "chalk": "^2.1.0", - "log-symbols": "^2.1.0", - "loglevelnext": "^1.0.1", - "uuid": "^3.1.0" + "lodash": "^4.17.15" } }, "webpack-sources": { @@ -2367,6 +2983,42 @@ "isexe": "^2.0.0" } }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-typed-array": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.4.tgz", + "integrity": "sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.2", + "call-bind": "^1.0.0", + "es-abstract": "^1.18.0-next.1", + "foreach": "^2.0.5", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.1", + "is-typed-array": "^1.1.3" + }, + "dependencies": { + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + } + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/js-bindings/package.json b/js-bindings/package.json index edf01ba85..e8c5ee664 100644 --- a/js-bindings/package.json +++ b/js-bindings/package.json @@ -14,9 +14,9 @@ }, "scripts": { "test": "npm run test:node && npm run test:browser", - "test:typings": "tsc ./tests/typings.spec.ts", + "test:typings": "tsc --esModuleInterop ./tests/typings.spec.ts", "test:node": "npm run test:typings && mocha ./tests/*.spec.js", - "test:browser": "npm run test:typings && karma start ./tests/karma.conf.js --single-run" + "test:browser": "npm run test:typings && ./node_modules/.bin/karma start ./tests/karma.conf.js --single-run" }, "repository": { "type": "git", @@ -39,12 +39,24 @@ "devDependencies": { "@types/mocha": "^5.2.7", "@types/node": "^11.15.18", - "karma": "^6.3.2", + "assert": "^2.0.0", + "babel-polyfill": "^6.26.0", + "buffer": "^6.0.3", + "crypto-browserify": "^3.12.0", + "karma": "^6.3.4", "karma-firefox-launcher": "^1.3.0", "karma-mocha": "^2.0.1", - "karma-webpack": "^3.0.5", + "karma-mocha-reporter": "^2.2.5", + "karma-webpack": "^5.0.0", + "mime": "1.3.6", "mocha": "^8.4.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "stream-browserify": "^3.0.0", "typescript": "^3.6.5", "webpack": "^5.39.0" + }, + "dependencies": { + "binascii": "0.0.2" } } diff --git a/js-bindings/tests/ExtendedPrivateKey.spec.js b/js-bindings/tests/ExtendedPrivateKey.spec.js deleted file mode 100644 index 2c4fbdb33..000000000 --- a/js-bindings/tests/ExtendedPrivateKey.spec.js +++ /dev/null @@ -1,40 +0,0 @@ -const blsSignatures = require('..')(); -const assert = require('assert'); - -function getSeed() { - return Uint8Array.from([1, 50, 6, 244, 24, 199, 1, 25]); -} - -before((done) => { - blsSignatures.then(() => { - done(); - }); -}); - -describe('ExtendedPrivateKey', () => { - it('Should derive correctly', () => { - const {ExtendedPrivateKey} = blsSignatures; - - const seed = getSeed(); - const esk = ExtendedPrivateKey.fromSeed(seed); - assert.strictEqual(esk.getPublicKey().getFingerprint(), 0xa4700b27); - - let chainCode = esk.getChainCode().serialize(); - assert.strictEqual(Buffer.from(chainCode).toString('hex'), 'd8b12555b4cc5578951e4a7c80031e22019cc0dce168b3ed88115311b8feb1e3'); - - const esk77 = esk.privateChild(2147483725); - chainCode = esk77.getChainCode().serialize(); - assert.strictEqual(Buffer.from(chainCode).toString('hex'), 'f2c8e4269bb3e54f8179a5c6976d92ca14c3260dd729981e9d15f53049fd698b'); - assert.strictEqual(esk77.getPrivateKey().getPublicKey().getFingerprint(), 0xa8063dcf); - - assert.strictEqual(esk.privateChild(3) - .privateChild(17) - .getPublicKey() - .getFingerprint(), 0xff26a31f); - assert.strictEqual(esk.getExtendedPublicKey() - .publicChild(3) - .publicChild(17) - .getPublicKey() - .getFingerprint(), 0xff26a31f); - }); -}); diff --git a/js-bindings/tests/ExtendedPublicKey.spec.js b/js-bindings/tests/ExtendedPublicKey.spec.js deleted file mode 100644 index 9f2cd3ca4..000000000 --- a/js-bindings/tests/ExtendedPublicKey.spec.js +++ /dev/null @@ -1,24 +0,0 @@ -const blsSignatures = require('..')(); -const assert = require('assert'); - -before((done) => { - blsSignatures.then(() => { - done(); - }); -}); - -describe('ExtendedPublicKey', () => { - it('Should return correct data structures', () => { - const {ExtendedPrivateKey} = blsSignatures; - - const seed = Uint8Array.from([1, 50, 6, 244, 24, 199, 1, 0, 0, 0]); - const esk = ExtendedPrivateKey.fromSeed(seed); - const epk = esk.getExtendedPublicKey(); - - assert.strictEqual(Buffer.from(epk.getPublicKey().serialize()).toString('hex'), '13cfff346826510d1b60a5754c4e906d0696b21a43492b6681fb625ffa77e49c10fc06d7588cfc986431ba05bfece592'); - assert.strictEqual(Buffer.from(epk.getChainCode().serialize()).toString('hex'), '9728accd39f28f05077f224440e7f1781684e22855de41170ef2af0b75022083'); - - const sig1 = esk.getPrivateKey().sign(seed); - assert.strictEqual(Buffer.from(sig1.serialize()).toString('hex'), '916c053e48c7b8946b429175c53651e2532da6fa7d3d417667a7798322d8f32d6df85a428d0cb6e312fecd83386478a515bb3e6f94189c4447a428182e7daa8991b83c7fd4fcc18494d64da660d81cb639002413fb639517be689dea5bb31bde'); - }); -}); diff --git a/js-bindings/tests/PrivateKey.spec.js b/js-bindings/tests/PrivateKey.spec.js index e32711a3b..798069375 100644 --- a/js-bindings/tests/PrivateKey.spec.js +++ b/js-bindings/tests/PrivateKey.spec.js @@ -1,14 +1,10 @@ -const blsSignatures = require('..')(); +const blsSignaturesModule = require('..')(); const assert = require('assert'); const crypto = require('crypto'); +const {Buffer} = require('buffer'); -function getSeedAndFinferprint() { - return { - seed: Uint8Array.from([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), - fingerprint: 0xddad59bb - }; -} - +// Values lifted from test.js, which is ported from test.py and is a more +// primary source. function getPkSeed() { return Uint8Array.from([ 0, 50, 6, 244, 24, 199, 1, 25, 52, 88, 192, 19, 18, 12, 89, 6, 220, @@ -16,10 +12,21 @@ function getPkSeed() { ]); } +function getSeedAndFinferprint() { + var seedArray = getPkSeed(); + var seed = Buffer.from(seedArray); + return { + seed: seed, + fingerprint: 3146750013 + }; +} + function getPkBuffer() { return Uint8Array.from([ - 84, 61, 124, 70, 203, 191, 91, 170, 188, 74, 176, 22, 97, 250, 169, 26, - 105, 59, 39, 4, 246, 103, 227, 53, 133, 228, 214, 59, 165, 6, 158, 39 + 55, 112, 145, 240, 231, 40, 70, 59, + 194, 218, 125, 84, 108, 83, 185, 246, + 184, 29, 244, 161, 204, 26, 181, 191, + 41, 197, 144, 139, 113, 81, 163, 45 ]); } @@ -27,84 +34,67 @@ function getPkUint8Array() { return new Uint8Array(getPkBuffer()); } +let blsSignatures = null; before((done) => { - blsSignatures.then(() => { + blsSignaturesModule.then((mod) => { + blsSignatures = mod; done(); }); }); +function makehash(msg) { + return crypto + .createHash('sha256') + .update(msg) + .digest(); +} + describe('PrivateKey', () => { it('Should sign and verify', () => { - const {PrivateKey, AggregationInfo} = blsSignatures; + const {AugSchemeMPL, PrivateKey} = blsSignatures; const message1 = Uint8Array.from([1, 65, 254, 88, 90, 45, 22]); const seed = Uint8Array.from([28, 20, 102, 229, 1, 157]); - const sk1 = PrivateKey.fromSeed(seed); - const pk1 = sk1.getPublicKey(); - const sig1 = sk1.sign(message1); - - sig1.setAggregationInfo(AggregationInfo.fromMsg(pk1, message1)); - assert(sig1.verify()); - - const hash = crypto - .createHash('sha256') - .update(message1) - .digest(); - const sig2 = sk1.signPrehashed(hash); - sig2.setAggregationInfo(AggregationInfo.fromMsgHash(pk1, hash)); - assert.deepStrictEqual(sig1.serialize(), sig2.serialize()); - assert(sig2.verify()); + const sk1 = AugSchemeMPL.key_gen(getPkSeed()); + const pk1 = AugSchemeMPL.sk_to_g1(sk1); + const sig1 = AugSchemeMPL.sign(sk1, message1); + + assert(AugSchemeMPL.verify(pk1, message1, sig1)); }); describe('.fromSeed', () => { it('Should create a private key from a seed', () => { - const {PrivateKey} = blsSignatures; + const {AugSchemeMPL, PrivateKey} = blsSignatures; - const pk = PrivateKey.fromSeed(getPkSeed()); + const pk = AugSchemeMPL.key_gen(getPkSeed()); assert(pk instanceof PrivateKey); assert.deepStrictEqual(pk.serialize(), getPkBuffer()); }); }); + describe('.fromBytes', () => { it('Should create a private key from a Buffer', () => { - const {PrivateKey} = blsSignatures; + const {PrivateKey, Util} = blsSignatures; - const pk = PrivateKey.fromBytes(getPkBuffer(), false); + const pk = PrivateKey.from_bytes(getPkBuffer(), false); assert(pk instanceof PrivateKey); assert.deepStrictEqual(pk.serialize(), getPkBuffer()); }); it('Should create a private key from a Uint8Array', () => { - const {PrivateKey} = blsSignatures; + const {PrivateKey, Util} = blsSignatures; - const pk = PrivateKey.fromBytes(getPkUint8Array(), false); + const pk = PrivateKey.from_bytes(getPkUint8Array(), false); assert(pk instanceof PrivateKey); assert.deepStrictEqual(pk.serialize(), getPkBuffer()); }); }); - describe('.aggregate', () => { - it('Should aggregate private keys', () => { - const {PrivateKey} = blsSignatures; - - const privateKeys = [ - PrivateKey.fromSeed(Buffer.from([1, 2, 3])), - PrivateKey.fromSeed(Buffer.from([3, 4, 5])) - ]; - const publicKeys = [ - privateKeys[0].getPublicKey(), - privateKeys[1].getPublicKey() - ]; - const aggregatedKey = PrivateKey.aggregate(privateKeys, publicKeys); - assert(aggregatedKey instanceof PrivateKey); - }); - }); - describe('#serialize', () => { it('Should serialize key to a Buffer', () => { - const {PrivateKey} = blsSignatures; + const {AugSchemeMPL, PrivateKey} = blsSignatures; - const pk = PrivateKey.fromSeed(getPkSeed()); + const pk = AugSchemeMPL.key_gen(getPkSeed()); const serialized = pk.serialize(); assert(serialized instanceof Uint8Array); assert.deepStrictEqual(serialized, getPkBuffer()); @@ -113,41 +103,26 @@ describe('PrivateKey', () => { describe('#sign', () => { it('Should return a verifiable signature', () => { - const {PrivateKey, Signature} = blsSignatures; + const {AugSchemeMPL, PrivateKey, G2Element} = blsSignatures; const pk = PrivateKey.fromBytes(getPkBuffer(), false); + const pubkey = AugSchemeMPL.sk_to_g1(pk); const message = 'Hello world'; - const signature = pk.sign(Uint8Array.from(Buffer.from(message, 'utf8'))); - assert(signature instanceof Signature); - assert(signature.verify()); - }); - }); - - describe('#signPrehashed', () => { - it('Should sign a hash and return a signature', () => { - const {PrivateKey, Signature} = blsSignatures; - - const pk = PrivateKey.fromSeed(Uint8Array.from([1, 2, 3, 4, 5])); - const messageHash = Uint8Array.from(crypto - .createHash('sha256') - .update('Hello world') - .digest()); - const sig = pk.signPrehashed(messageHash); - const info = sig.getAggregationInfo(); - assert(sig instanceof Signature); - assert(sig.verify()); - assert.deepStrictEqual(info.getMessageHashes()[0], messageHash); + const messageBuffer = Uint8Array.from(Buffer.from(message, 'utf8')); + const signature = AugSchemeMPL.sign(pk, messageBuffer); + assert(signature instanceof G2Element); + assert(AugSchemeMPL.verify(pubkey, messageBuffer, signature)); }); }); describe('#getPublicKey', () => { it('Should return a public key with a verifiable fingerprint', () => { - const {PrivateKey, PublicKey} = blsSignatures; + const {AugSchemeMPL, PrivateKey, G1Element} = blsSignatures; - const pk = PrivateKey.fromSeed(getSeedAndFinferprint().seed); - const publicKey = pk.getPublicKey(); - assert(publicKey instanceof PublicKey); - assert.strictEqual(publicKey.getFingerprint(), getSeedAndFinferprint().fingerprint); + const pk = AugSchemeMPL.key_gen(getPkSeed()); + const publicKey = AugSchemeMPL.sk_to_g1(pk); + assert(publicKey instanceof G1Element); + assert.strictEqual(publicKey.get_fingerprint(), getSeedAndFinferprint().fingerprint); }); }); }); diff --git a/js-bindings/tests/PublicKey.spec.js b/js-bindings/tests/PublicKey.spec.js index 4737a9f4d..3effbbd98 100644 --- a/js-bindings/tests/PublicKey.spec.js +++ b/js-bindings/tests/PublicKey.spec.js @@ -1,61 +1,73 @@ -const blsSignatures = require('..')(); +const blsSignaturesModule = require('..')(); const assert = require('assert'); +const {Buffer} = require('buffer'); +// Value from test.js, ported from test.py +// Form of serialized public key requires first two bits 10 unless infinite, +// in which case 11 is required. +// (elements.cpp:49) function getPublicKeyFixtureHex() { - return '1790635de8740e9a6a6b15fb6b72f3a16afa0973d971979b6ba54761d6e2502c50db76f4d26143f05459a42cfd520d44'; + return '9790635de8740e9a6a6b15fb6b72f3a16afa0973d971979b6ba54761d6e2502c50db76f4d26143f05459a42cfd520d44'; } function getPublicKeyFixture() { return { buffer: Uint8Array.from(Buffer.from(getPublicKeyFixtureHex(), 'hex')), - fingerprint: 0xddad59bb - } + fingerprint: 0xa14c4f99 + }; } +// These values were adapted to fit the constraints in elements.cpp, namely to set +// the high bit of the first byte. function getPublicKeysHexes() { return [ - '02a8d2aaa6a5e2e08d4b8d406aaf0121a2fc2088ed12431e6b0663028da9ac5922c9ea91cde7dd74b7d795580acc7a61', - '056e742478d4e95e708b8ae0d487f94099b769cb7df4c674dc0c10fbbe7d175603d090ac6064aeeb249a00ba6b3d85eb' + '82a8d2aaa6a5e2e08d4b8d406aaf0121a2fc2088ed12431e6b0663028da9ac5922c9ea91cde7dd74b7d795580acc7a61', + '856e742478d4e95e708b8ae0d487f94099b769cb7df4c674dc0c10fbbe7d175603d090ac6064aeeb249a00ba6b3d85eb' ]; } function getPublicKeysArray() { return getPublicKeysHexes().map(hex => { return Uint8Array.from(Buffer.from(hex, 'hex')); - }) + }); } +let blsSignatures = null; before((done) => { - blsSignatures.then(() => { + blsSignaturesModule.then((mod) => { + blsSignatures = mod; done(); }); }); -describe('PublicKey', () => { - describe('.fromBytes', () => { +describe('G1Element', () => { + describe('.from_bytes', () => { it('Should create a public key from bytes', () => { - const {PublicKey} = blsSignatures; + const {G1Element, Util} = blsSignatures; - const pk = PublicKey.fromBytes(getPublicKeyFixture().buffer); - assert(pk instanceof PublicKey); + const pk = G1Element.from_bytes(getPublicKeyFixture().buffer); + assert(pk instanceof G1Element); }); }); describe('.aggregate', () => { it('Should aggregate keys if keys array contains more than one key', () => { - const {PublicKey} = blsSignatures; + const {G1Element} = blsSignatures; - const pks = getPublicKeysArray().map(buf => PublicKey.fromBytes(buf)); - const aggregatedKey = PublicKey.aggregate(pks); - assert(aggregatedKey instanceof PublicKey); + const pks = getPublicKeysArray().map(buf => G1Element.from_bytes(buf)); + let first_pk = pks[0]; + for (var i = 1; i < pks.length; i++) { + first_pk = first_pk.add(pks[i]); + } + assert(first_pk instanceof G1Element); }); }); describe('#serialize', () => { it('Should serialize key to the same buffer', () => { - const {PublicKey} = blsSignatures; + const {G1Element} = blsSignatures; - const pk = PublicKey.fromBytes(getPublicKeyFixture().buffer); + const pk = G1Element.from_bytes(getPublicKeyFixture().buffer); const serialized = pk.serialize(); assert.deepStrictEqual(Buffer.from(serialized).toString('hex'), getPublicKeyFixtureHex()); }); @@ -63,10 +75,10 @@ describe('PublicKey', () => { describe('getFingerprint', () => { it('Should get correct fingerprint', () => { - const {PublicKey} = blsSignatures; + const {G1Element} = blsSignatures; - const pk = PublicKey.fromBytes(getPublicKeyFixture().buffer); - const fingerprint = pk.getFingerprint(); + const pk = G1Element.from_bytes(getPublicKeyFixture().buffer); + const fingerprint = pk.get_fingerprint(); assert.strictEqual(fingerprint, getPublicKeyFixture().fingerprint); }); }); diff --git a/js-bindings/tests/Signature.spec.js b/js-bindings/tests/Signature.spec.js index 43afd13d8..555093bef 100644 --- a/js-bindings/tests/Signature.spec.js +++ b/js-bindings/tests/Signature.spec.js @@ -1,25 +1,28 @@ -const blsSignatures = require('..')(); +const blsSignaturesModule = require('..')(); const assert = require('assert'); -const {createHash} = require('crypto'); +const crypto = require('crypto'); +const {Buffer} = require('buffer'); +// Current format of signature taken from test.js, ported from test.py function getSignatureHex() { - return '006d0a8661db762a94be51be85efb1199f62dfc3f8fa8c9f003d02fdc69b281e689a54928b9adce98a8471a889c55af40c9bd7b7339c00f6f8bf871d132cfa5cf4e9b11f7ce05acafbb24c2db82b7f6193ee954f5167a2a46e3daecf4a007609'; + return '900d5223412ee471b42dbb8a6706de5f5eba4ca7e1a0fb6b3fa431f510b3e6d73c440748693d787e1a25c8bc4596f66b1130634f4b32e8e09f52f2c6a843b700cbb5aeadb8ab3456d002c143be68998573166e5979e6a48fcbb67ac8fd981f73'; } function getSignatureBytes() { return Uint8Array.from(Buffer.from(getSignatureHex(), 'hex')); } -function getAggregationInfo() { - return { - publicKeys: [Uint8Array.from(Buffer.from('02a8d2aaa6a5e2e08d4b8d406aaf0121a2fc2088ed12431e6b0663028da9ac5922c9ea91cde7dd74b7d795580acc7a61', 'hex'))], - messageHashes: [Uint8Array.from(Buffer.from('c7495fe7e1d49086a1966a2020e01b4f36ed71c456b6aa5e684ad6c3631890af', 'hex'))], - exponents: [Uint8Array.from(Buffer.from('01', 'hex'))] - }; +function makehash(msg) { + return crypto + .createHash('sha256') + .update(msg) + .digest(); } +var blsSignatures; before((done) => { - blsSignatures.then(() => { + blsSignaturesModule.then((mod) => { + blsSignatures = mod; done(); }); }); @@ -27,39 +30,35 @@ before((done) => { describe('Signature', () => { describe('Integration', () => { it('Should verify signatures', function () { - const {Signature, PublicKey, PrivateKey, AggregationInfo} = blsSignatures; + const {BasicSchemeMPL, G2Element, G1Element, PrivateKey} = blsSignatures; this.timeout(10000); const message = Uint8Array.from([100, 2, 254, 88, 90, 45, 23]); - const seed1 = Uint8Array.from([1, 2, 3, 4, 5]); - const seed2 = Uint8Array.from([3, 4, 5, 6, 7]); - const seed3 = Uint8Array.from([4, 5, 6, 7, 8]); + const seed1 = makehash(Uint8Array.from([1, 2, 3, 4, 5])); + const seed2 = makehash(Uint8Array.from([3, 4, 5, 6, 7])); + const seed3 = makehash(Uint8Array.from([4, 5, 6, 7, 8])); - const privateKey1 = PrivateKey.fromSeed(seed1); - const privateKey2 = PrivateKey.fromSeed(seed2); - const privateKey3 = PrivateKey.fromSeed(seed3); + const privateKey1 = BasicSchemeMPL.key_gen(seed1); + const privateKey2 = BasicSchemeMPL.key_gen(seed2); + const privateKey3 = BasicSchemeMPL.key_gen(seed3); - const publicKey1 = privateKey1.getPublicKey(); - const publicKey2 = privateKey2.getPublicKey(); - const publicKey3 = privateKey3.getPublicKey(); + const publicKey1 = BasicSchemeMPL.sk_to_g1(privateKey1); + const publicKey2 = BasicSchemeMPL.sk_to_g1(privateKey2); + const publicKey3 = BasicSchemeMPL.sk_to_g1(privateKey3); - const sig1 = privateKey1.sign(message); - const sig2 = privateKey2.sign(message); - const sig3 = privateKey3.sign(message); + const sig1 = BasicSchemeMPL.sign(privateKey1, message); + const sig2 = BasicSchemeMPL.sign(privateKey2, message); + const sig3 = BasicSchemeMPL.sign(privateKey3, message); - assert(sig1.verify(), 'Signature 1 is not verifiable'); - assert(sig2.verify(), 'Signature 2 is not verifiable'); - assert(sig3.verify(), 'Signature 3 is not verifiable'); + assert(BasicSchemeMPL.verify(publicKey1, message, sig1), 'Signature 1 is not verifiable'); + assert(BasicSchemeMPL.verify(publicKey2, message, sig2), 'Signature 2 is not verifiable'); + assert(BasicSchemeMPL.verify(publicKey3, message, sig3), 'Signature 3 is not verifiable'); - const aggregatedSignature = Signature.aggregateSigs([sig1, sig2, sig3]); - assert(aggregatedSignature.verify(), 'Aggregated sig is not verified'); + const aggregatedSignature = BasicSchemeMPL.aggregate([sig1, sig2, sig3]); + // PublicKey aggregate was replaced with G1Element add. + const aggregatedPubKey = publicKey1.add(publicKey2).add(publicKey3); - const aggregatedPubKey = PublicKey.aggregate([publicKey1, publicKey2, publicKey3]); - - const aggregationInfo = AggregationInfo.fromMsg(aggregatedPubKey, message); - - aggregatedSignature.setAggregationInfo(aggregationInfo); - assert(aggregatedSignature.verify()); + assert(BasicSchemeMPL.verify(aggregatedPubKey, message, aggregatedSignature)); privateKey1.delete(); privateKey2.delete(); @@ -69,57 +68,38 @@ describe('Signature', () => { sig3.delete(); aggregatedSignature.delete(); aggregatedPubKey.delete(); - aggregationInfo.delete(); }); }); describe('.fromBytes', () => { it('Should create verifiable signature from bytes', () => { - const {Signature} = blsSignatures; + const {AugSchemeMPL, G2Element, Util} = blsSignatures; + + const sig = G2Element.fromBytes(getSignatureBytes()); - const sig = Signature.fromBytes(getSignatureBytes()); assert.strictEqual(Buffer.from(sig.serialize()).toString('hex'), getSignatureHex()); // Since there is no aggregation info, it's impossible to verify sig - assert.strictEqual(sig.verify(), false); - - sig.delete(); - }); - }); - describe('.fromBytesAndAggregationInfo', () => { - it('Should create verifiable signature', () => { - const {Signature, PrivateKey} = blsSignatures; - - const pk = PrivateKey.fromSeed(Uint8Array.from([1, 2, 3, 4, 5])); - const sig = pk.sign(Uint8Array.from([100, 2, 254, 88, 90, 45, 23])); - const info = sig.getAggregationInfo(); - const restoredSig = Signature.fromBytesAndAggregationInfo( - sig.serialize(), - sig.getAggregationInfo() - ); - const restoredInfo = restoredSig.getAggregationInfo(); - assert(restoredSig instanceof Signature); - assert(restoredSig.verify()); - assert.deepStrictEqual(info.getPublicKeys()[0].serialize(), restoredInfo.getPublicKeys()[0].serialize()); - assert.deepStrictEqual(info.getMessageHashes()[0], restoredInfo.getMessageHashes()[0]); - assert.deepStrictEqual(info.getExponents()[0], restoredInfo.getExponents()[0]); + // This iteration of the library differs in that Signature objects + // aren't stateful and therefore can't be self-verified without a + // message and public key. - pk.delete(); sig.delete(); - info.delete(); - restoredSig.delete(); - restoredInfo.delete(); }); }); describe('.aggregateSigs', () => { it('Should aggregate signature', () => { - const {Signature, PrivateKey} = blsSignatures; + const {AugSchemeMPL, G2Element, PrivateKey} = blsSignatures; - const sk = PrivateKey.fromSeed(Uint8Array.from([1, 2, 3])); - const sig1 = sk.sign(Uint8Array.from([3, 4, 5])); - const sig2 = sk.sign(Uint8Array.from([6, 7, 8])); - const aggregatedSig = Signature.aggregateSigs([sig1, sig2]); - assert.strictEqual(aggregatedSig.verify(), true); + const sk = AugSchemeMPL.key_gen(makehash(Uint8Array.from([1, 2, 3]))); + const pk = AugSchemeMPL.sk_to_g1(sk); + const msg1 = Uint8Array.from([3, 4, 5]); + const msg2 = Uint8Array.from([6, 7, 8]); + const sig1 = AugSchemeMPL.sign(sk, msg1); + const sig2 = AugSchemeMPL.sign(sk, msg2); + const aggregatedSig = G2Element.aggregate_sigs([sig1, sig2]); + assert.strictEqual(AugSchemeMPL.aggregate_verify([pk, pk], [msg1, msg2], aggregatedSig), true); sk.delete(); + pk.delete(); sig1.delete(); sig2.delete(); aggregatedSig.delete(); @@ -127,142 +107,55 @@ describe('Signature', () => { }); describe('#serialize', () => { it('Should serialize signature to Buffer', () => { - const {Signature, PrivateKey} = blsSignatures; + const {AugSchemeMPL, G2Element, PrivateKey} = blsSignatures; - const pk = PrivateKey.fromSeed(Uint8Array.from([1, 2, 3, 4, 5])); - const sig = pk.sign(Uint8Array.from([100, 2, 254, 88, 90, 45, 23])); - assert(sig instanceof Signature); + const sk = AugSchemeMPL.key_gen(makehash(Uint8Array.from([1, 2, 3, 4, 5]))); + const sig = AugSchemeMPL.sign(sk, Uint8Array.from([100, 2, 254, 88, 90, 45, 23])); + assert(sig instanceof G2Element); assert.deepStrictEqual(Buffer.from(sig.serialize()).toString('hex'), getSignatureHex()); - pk.delete(); + sk.delete(); sig.delete(); }); }); describe('#verify', () => { it('Should return true if signature can be verified', () => { - const {Signature, PublicKey, AggregationInfo} = blsSignatures; - - const pks = getAggregationInfo().publicKeys.map(buf => PublicKey.fromBytes(buf)); - const sig = Signature.fromBytesAndAggregationInfo( - getSignatureBytes(), - AggregationInfo.fromBuffers( - pks, - getAggregationInfo().messageHashes, - getAggregationInfo().exponents - ) - ); - assert(sig.verify()); - - sig.delete(); - }); - it("Should return false if signature can't be verified", () => { - const {PublicKey, PrivateKey, AggregationInfo} = blsSignatures; - - const sk = PrivateKey.fromSeed(Buffer.from([1, 2, 3, 4, 5])); - const pks = getAggregationInfo().publicKeys.map(buf => PublicKey.fromBytes(buf)); - const sig = sk.sign(Uint8Array.from(Buffer.from('Message'))); - const info = AggregationInfo.fromBuffers( - pks, - getAggregationInfo().messageHashes, - getAggregationInfo().exponents - ); - sig.setAggregationInfo(info); - assert.strictEqual(sig.verify(), false); - - sk.delete(); - sig.delete(); - info.delete(); - }) - }); -}); - -describe('InsecureSignature', () => { - describe('.fromBytes', () => { - it('Should create sig from bytes', () => { - const {InsecureSignature} = blsSignatures; - - const sig = InsecureSignature.fromBytes(getSignatureBytes()); - assert(sig instanceof InsecureSignature); - - sig.delete(); - }); - }); - describe('.aggregate', () => { - it('Should aggregate signature', () => { - const {InsecureSignature, PrivateKey} = blsSignatures; - - const sk = PrivateKey.fromSeed(Uint8Array.from([1, 2, 3])); - const msg1 = Uint8Array.from([3, 4, 5]); - const msg2 = Uint8Array.from([6, 7, 8]); - const msg1Hash = Uint8Array.from(createHash('sha256').update(msg1).digest()); - const msg2Hash = Uint8Array.from(createHash('sha256').update(msg2).digest()); - - const sig1 = sk.signInsecure(msg1); - const sig2 = sk.signInsecure(msg2); - - const aggregatedSig = InsecureSignature.aggregate([sig1, sig2]); - - assert.strictEqual(aggregatedSig.verify([msg1Hash, msg2Hash], [sk.getPublicKey(), sk.getPublicKey()]), true); - - sk.delete(); + const {AugSchemeMPL, G2Element, G1Element} = blsSignatures; + + const message = Uint8Array.from(Buffer.from('Message')); + const seed1 = makehash(Buffer.from([1, 2, 3, 4, 5])); + const seed2 = makehash(Buffer.from([1, 2, 3, 4, 6])); + const sk1 = AugSchemeMPL.key_gen(seed1); + const sk2 = AugSchemeMPL.key_gen(seed2); + const pk1 = AugSchemeMPL.sk_to_g1(sk1); + const pk2 = AugSchemeMPL.sk_to_g1(sk2); + const sig1 = AugSchemeMPL.sign(sk1, message); + const sig2 = AugSchemeMPL.sign(sk2, message); + const sig = AugSchemeMPL.aggregate([sig1, sig2]); + + assert(AugSchemeMPL.aggregate_verify([pk1, pk2], [message, message], sig)); + + sk1.delete(); + sk2.delete(); + pk1.delete(); + pk2.delete(); sig1.delete(); sig2.delete(); - aggregatedSig.delete(); - }); - }); - describe('#verify', () => { - it('Should return true if signature can be verified', () => { - const {InsecureSignature, PublicKey} = blsSignatures; - - const sig = InsecureSignature.fromBytes(getSignatureBytes()); - const messageHashes = getAggregationInfo().messageHashes; - const pubKeys = getAggregationInfo().publicKeys.map(buf => PublicKey.fromBytes(buf)); - assert.strictEqual(sig.verify(messageHashes, pubKeys), true); - sig.delete(); }); it("Should return false if signature can't be verified", () => { - const {InsecureSignature, PrivateKey} = blsSignatures; + const {AugSchemeMPL, G1Element, PrivateKey} = blsSignatures; - const sig = InsecureSignature.fromBytes(getSignatureBytes()); - const messageHashes = getAggregationInfo().messageHashes; - const pubKeys = [PrivateKey.fromSeed(Uint8Array.from([6, 7, 8])).getPublicKey()]; - assert.strictEqual(sig.verify(messageHashes, pubKeys), false); - }) - }); - describe('#divideBy', () => { - it('Should divide signature', () => { - const {InsecureSignature, PrivateKey} = blsSignatures; - - const sk = PrivateKey.fromSeed(Uint8Array.from([1, 2, 3])); - const msg1 = Uint8Array.from([3, 4, 5]); - const msg2 = Uint8Array.from([6, 7, 8]); - - const sig1 = sk.signInsecure(msg1); - const sig2 = sk.signInsecure(msg2); - - const aggSig = InsecureSignature.aggregate([sig1, sig2]); - const dividedSig = aggSig.divideBy([sig2]); - - const sig1Hex = Buffer.from(sig1.serialize()).toString('hex'); - const dividedSigHex = Buffer.from(dividedSig.serialize()).toString('hex'); - assert.strictEqual(sig1Hex, dividedSigHex); + const message1 = Uint8Array.from(Buffer.from('Message')); + const message2 = Uint8Array.from(Buffer.from('Nessage')); + const seed = makehash(Buffer.from([1, 2, 3, 4, 5])); + const sk = AugSchemeMPL.key_gen(seed); + const pk = AugSchemeMPL.sk_to_g1(sk); + const sig = AugSchemeMPL.sign(sk, message1); + assert.strictEqual(AugSchemeMPL.verify(pk, message2, sig), false); sk.delete(); - sig1.delete(); - sig2.delete(); - aggSig.delete(); - dividedSig.delete(); - }); - }); - describe('#serialize', () => { - it('Should serialize the sig', () => { - const {InsecureSignature} = blsSignatures; - - const sig = InsecureSignature.fromBytes(getSignatureBytes()); - assert(sig instanceof InsecureSignature); - assert.strictEqual(Buffer.from(sig.serialize()).toString('hex'), getSignatureHex()); - + pk.delete(); sig.delete(); }); }); diff --git a/js-bindings/tests/karma.conf.js b/js-bindings/tests/karma.conf.js index 64b0370e4..cd5a2cb15 100644 --- a/js-bindings/tests/karma.conf.js +++ b/js-bindings/tests/karma.conf.js @@ -1,19 +1,42 @@ const testSource = './karma.test.js'; +const mime = require('mime'); +const fs = require('fs'); + +function webpackConfig() { + const config = require('./webpack.config.js'); + delete config.context; + delete config.entry; + delete config.output; + // delete config.devServer; + + return config; +} + +function MimeTypeMiddleware(config) { + return function (request, response, next) { + if (request.url.endsWith('.wasm')) { + const content = fs.readFileSync('blsjs.wasm'); + response.setHeader('Content-Type', 'application/wasm'); + response.writeHead(200); + response.write(content); + response.end(); + return next('route'); + } else { + return next(request,response); + } + }; +} const karmaConfig = { - frameworks: ['mocha'], + frameworks: ['mocha', 'webpack'], files: [ + 'node_modules/babel-polyfill/dist/polyfill.js', testSource ], preprocessors: { [testSource]: ['webpack'] }, - webpack: { - mode: 'development', - node: { - fs: 'empty', - }, - }, + webpack: webpackConfig(), reporters: ['mocha'], port: 9876, colors: true, @@ -25,8 +48,10 @@ const karmaConfig = { 'karma-mocha', 'karma-mocha-reporter', 'karma-firefox-launcher', - 'karma-webpack' + 'karma-webpack', + {'middleware:mimetyper': ['factory', MimeTypeMiddleware]} ], + middleware: [ 'mimetyper' ], customLaunchers: { FirefoxHeadless: { base: 'Firefox', diff --git a/js-bindings/tests/package.json b/js-bindings/tests/package.json deleted file mode 100644 index 3b756aa28..000000000 --- a/js-bindings/tests/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "bls-signature-tests", - "dependencies": { - "assert": "^2.0.0", - "binascii": "^0.0.2" - } -} diff --git a/js-bindings/tests/test.js b/js-bindings/tests/test.js index be98abd7f..d87dee101 100644 --- a/js-bindings/tests/test.js +++ b/js-bindings/tests/test.js @@ -1,6 +1,6 @@ const assert = require('assert'); const binascii = require('binascii'); -const blsjs = require('../../js_build/js-bindings/blsjs.js'); +const blsjs = require('../blsjs'); function bytes(x) { return Buffer.from(binascii.unhexlify(x), 'binary'); diff --git a/js-bindings/tests/typings.spec.ts b/js-bindings/tests/typings.spec.ts index 6b1c53956..ba18efe48 100644 --- a/js-bindings/tests/typings.spec.ts +++ b/js-bindings/tests/typings.spec.ts @@ -1,33 +1,45 @@ // This file is used to check if the typescript typings are working -import createBlsSignaturesModule = require('..'); +import createBlsSignaturesModule from '..'; import {deepStrictEqual, ok, strictEqual} from 'assert'; import {createHash} from 'crypto'; -const blsSignatures = createBlsSignaturesModule().then(() => { +createBlsSignaturesModule().then((blsSignatures) => { const { - AggregationInfo, - ChainCode, - ExtendedPrivateKey, - ExtendedPublicKey, - GROUP_ORDER, - InsecureSignature, + AugSchemeMPL, PrivateKey, - PublicKey, - Signature, - Threshold, - DHKeyExchange + G1Element, + G2Element } = blsSignatures; + function makehash(msg : Uint8Array) : Uint8Array { + return createHash('sha256').update(msg).digest(); + } + function getSkSeed(): Uint8Array { - return Uint8Array.from([1, 2, 3]); + return Uint8Array.from([ + 0, 50, 6, 244, 24, 199, 1, 25, 52, 88, 192, 19, 18, 12, 89, 6, 220, + 18, 102, 58, 209, 82, 12, 62, 89, 110, 182, 9, 44, 20, 254, 22 + ]); } function getSkBytes(): Uint8Array { - return Uint8Array.from([17, 124, 119, 158, 68, 227, 109, 63, 132, 68, 94, 198, 126, 236, 73, 71, 11, 7, 137, 235, 99, 63, 16, 34, 9, 175, 110, 14, 189, 156, 27, 249]); + return Uint8Array.from([ + 55, 112, 145, 240, 231, 40, 70, 59, + 194, 218, 125, 84, 108, 83, 185, 246, + 184, 29, 244, 161, 204, 26, 181, 191, + 41, 197, 144, 139, 113, 81, 163, 45 + ]); } function getPkBytes(): Uint8Array { - return Uint8Array.from([15, 128, 94, 226, 6, 236, 252, 3, 126, 41, 152, 204, 169, 80, 66, 245, 222, 64, 241, 191, 28, 142, 160, 62, 49, 244, 132, 97, 169, 171, 155, 96, 74, 253, 238, 108, 207, 75, 69, 38, 180, 24, 158, 26, 205, 241, 96, 236]); + return Uint8Array.from([ + 134, 36, 50, 144, 187, 203, 253, 154, 231, + 91, 222, 206, 121, 129, 150, 83, 80, 32, + 142, 181, 233, 155, 4, 213, 205, 36, 233, + 85, 173, 169, 97, 248, 192, 161, 98, 222, + 231, 64, 190, 123, 220, 108, 60, 6, 19, + 186, 46, 177 + ]); } function getMessageBytes(): Uint8Array { @@ -39,15 +51,16 @@ const blsSignatures = createBlsSignaturesModule().then(() => { } function getSignatureBytes(): Uint8Array { - return Uint8Array.from([131, 187, 59, 142, 42, 69, 254, 152, 172, 85, 1, 103, 4, 107, 65, 193, 195, 175, 119, 132, 122, 179, 123, 253, 215, 68, 17, 175, 180, 243, 5, 84, 167, 202, 236, 130, 219, 226, 72, 63, 235, 94, 225, 180, 148, 103, 109, 90, 24, 188, 105, 125, 165, 74, 188, 127, 250, 160, 207, 30, 196, 106, 168, 62, 79, 168, 219, 76, 43, 87, 167, 252, 69, 187, 113, 173, 182, 0, 137, 145, 4, 131, 190, 251, 181, 23, 82, 188, 87, 127, 242, 46, 234, 237, 220, 9]); - } - - function getEskBytes(): Uint8Array { - return Uint8Array.from([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 75, 79, 148, 193, 235, 158, 172, 163, 41, 102, 134, 72, 161, 187, 104, 97, 202, 38, 27, 206, 125, 64, 60, 149, 248, 29, 53, 180, 23, 253, 255, 81, 166, 177, 172, 207, 58, 74, 10, 229, 43, 174, 77, 91, 222, 159, 24, 29, 11, 190, 149, 27, 94, 76, 12, 100, 94, 17, 220, 38, 66, 179, 28]); - } - - function getEpkBytes(): Uint8Array { - return Uint8Array.from([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 75, 79, 148, 193, 235, 158, 172, 163, 41, 102, 134, 72, 161, 187, 104, 97, 202, 38, 27, 206, 125, 64, 60, 149, 248, 29, 53, 180, 23, 253, 255, 24, 98, 251, 112, 141, 167, 192, 161, 112, 151, 212, 18, 81, 160, 252, 201, 123, 120, 210, 54, 179, 74, 108, 219, 124, 123, 134, 186, 135, 75, 153, 183, 255, 54, 167, 17, 156, 63, 152, 194, 167, 30, 154, 29, 70, 218, 114, 53]); + return Uint8Array.from([ + 150, 18, 129, 243, 101, 246, 44, 55, 26, 188, 24, 50, + 34, 223, 147, 98, 184, 115, 124, 54, 133, 86, 100, 135, + 205, 155, 191, 212, 36, 49, 2, 244, 241, 202, 143, 223, + 89, 34, 7, 115, 96, 209, 22, 24, 100, 22, 55, 175, + 2, 199, 236, 131, 152, 217, 76, 146, 32, 13, 235, 31, + 129, 47, 84, 187, 229, 161, 27, 89, 214, 21, 7, 240, + 1, 130, 214, 13, 134, 189, 139, 112, 40, 94, 221, 76, + 249, 168, 114, 254, 55, 45, 42, 30, 14, 22, 107, 10 + ]); } function getChainCodeBytes(): Uint8Array { @@ -57,162 +70,40 @@ const blsSignatures = createBlsSignaturesModule().then(() => { describe('typings', () => { it('PrivateKey', () => { strictEqual(PrivateKey.PRIVATE_KEY_SIZE, 32); - const sk = PrivateKey.fromSeed(getSkSeed()); - const sk2 = PrivateKey.fromBytes(getSkBytes(), false); - const aggSk = PrivateKey.aggregate([sk], [sk.getPublicKey()]); - const aggSk2 = PrivateKey.aggregateInsecure([sk]); - const pk = sk.getPublicKey(); + const sk = AugSchemeMPL.key_gen(getSkSeed()); + const aggSk = PrivateKey.aggregate([sk]); + const pk = sk.get_g1(); const bytes: Uint8Array = sk.serialize(); - const sig = sk.sign(getMessageBytes()); - const insecureSig = sk.signInsecure(getMessageBytes()); - const prehashedSig = sk.signPrehashed(getMessageHash()); - ok(sig.verify()); - sk.delete(); - sk2.delete(); + const sig = AugSchemeMPL.sign(sk, getMessageBytes()); + ok(AugSchemeMPL.verify(pk, getMessageBytes(), sig)); aggSk.delete(); - aggSk2.delete(); pk.delete(); sig.delete(); - insecureSig.delete(); - prehashedSig.delete(); - }); - - it('InsecureSignature', () => { - strictEqual(InsecureSignature.SIGNATURE_SIZE, 96); - const sig = InsecureSignature.fromBytes(getSignatureBytes()); - const aggSig = InsecureSignature.aggregate([sig]); - const isValid: boolean = sig.verify([getMessageHash()], [PublicKey.fromBytes(getPkBytes())]); - const serialized: Uint8Array = sig.serialize(); - ok(isValid); - sig.delete(); - aggSig.delete(); - }); - - it('Signature', () => { - strictEqual(Signature.SIGNATURE_SIZE, 96); - const info = AggregationInfo.fromMsg(PublicKey.fromBytes(getPkBytes()), getMessageBytes()); - const sig = Signature.fromBytesAndAggregationInfo(getSignatureBytes(), info); - const aggSig = Signature.aggregateSigs([sig]); - const sig2 = Signature.fromBytes(getSignatureBytes()); - const isValid: boolean = sig.verify(); - const serialized: Uint8Array = sig.serialize(); - const aggInfo = sig.getAggregationInfo(); - ok(isValid); - sig.setAggregationInfo(info); - sig.delete(); - aggSig.delete(); - sig2.delete(); - aggInfo.delete(); }); - it('PublicKey', () => { - strictEqual(PublicKey.PUBLIC_KEY_SIZE, 48); - const pk = PublicKey.fromBytes(getPkBytes()); - const aggPk = PublicKey.aggregate([pk]); - const aggPk2 = PublicKey.aggregateInsecure([pk]); - const fingerprint: number = pk.getFingerprint(); + it('G1Element', () => { + strictEqual(G1Element.SIZE, 48); + const pk = G1Element.from_bytes(getPkBytes()); + const aggPk = pk.add(pk); + const fingerprint: number = pk.get_fingerprint(); const bytes: Uint8Array = pk.serialize(); pk.delete(); aggPk.delete(); - aggPk2.delete(); - }); - - it('AggregationInfo', () => { - const infoFromHash = AggregationInfo.fromMsgHash(PublicKey.fromBytes(getPkBytes()), getMessageHash()); - const info = AggregationInfo.fromMsg(PublicKey.fromBytes(getPkBytes()), getMessageBytes()); - const infoFromBuffers = AggregationInfo.fromBuffers([PublicKey.fromBytes(getPkBytes())], [getMessageHash()], [Uint8Array.from([1])]); - const pks = info.getPublicKeys(); - const messageHashes: Uint8Array[] = info.getMessageHashes(); - const exponents: Uint8Array[] = info.getExponents(); - deepStrictEqual(pks[0].serialize(), getPkBytes()); - deepStrictEqual(messageHashes[0], getMessageHash()); - deepStrictEqual(exponents[0], Uint8Array.from([1])); - infoFromHash.delete(); - info.delete(); - infoFromBuffers.delete(); - pks.forEach(pk => pk.delete()); - }); - - it('ExtendedPrivateKey', () => { - strictEqual(ExtendedPrivateKey.EXTENDED_PRIVATE_KEY_SIZE, 77); - const esk = ExtendedPrivateKey.fromSeed(getSkSeed()); - ExtendedPrivateKey.fromBytes(getEskBytes()); - const privateChild = esk.privateChild(1); - const publicChild = esk.publicChild(1); - const version: number = esk.getVersion(); - const depth: number = esk.getDepth(); - const parentFingerprint: number = esk.getParentFingerprint(); - const childNumber: number = esk.getChildNumber(); - const chainCode = esk.getChainCode(); - const sk = esk.getPrivateKey(); - const pk = esk.getPublicKey(); - const epk = esk.getExtendedPublicKey(); - const bytes: Uint8Array = esk.serialize(); - esk.delete(); - privateChild.delete(); - publicChild.delete(); - chainCode.delete(); - sk.delete(); - pk.delete(); - epk.delete(); }); - it('ExtendedPublicKey', () => { - strictEqual(ExtendedPublicKey.VERSION, 1); - strictEqual(ExtendedPublicKey.EXTENDED_PUBLIC_KEY_SIZE, 93); - const epk = ExtendedPublicKey.fromBytes(getEpkBytes()); - const publicChild = epk.publicChild(1); - const version: number = epk.getVersion(); - const depth: number = epk.getDepth(); - const parentFingerprint: number = epk.getParentFingerprint(); - const childNumber: number = epk.getChildNumber(); - const pk = epk.getPublicKey(); - const chainCode = epk.getChainCode(); - const bytes: Uint8Array = epk.serialize(); - epk.delete(); - publicChild.delete(); - pk.delete(); - chainCode.delete(); - }); - - it('ChainCode', () => { - strictEqual(ChainCode.CHAIN_CODE_SIZE, 32); - const chainCode = ChainCode.fromBytes(getChainCodeBytes()); - const bytes: Uint8Array = chainCode.serialize(); - chainCode.delete(); - }); - - it('Threshold', () => { - const commitments = [ - PublicKey.fromBytes(Uint8Array.from(Buffer.from('93075db5c398bd2682dfab816a920023e8c0337a42fafc93c0bfab937400b6e7dafa5e456f2fa127979ff9c9a140127b', 'hex'))), - PublicKey.fromBytes(Uint8Array.from(Buffer.from('1304180c71f137a1dc4c39c6e997285f55d9dd11f53c52f8fc7702a5b08f529190ffc01b8b6b28b64ee9704f26ca02c3', 'hex'))), - ]; - const fragments = [ - PrivateKey.fromBytes(Uint8Array.from(Buffer.from('0b5205ed2c9aa86391dc8c7de15efa868073d83fb782f92de81e3d21916e296e', 'hex')), false), - PrivateKey.fromBytes(Uint8Array.from(Buffer.from('56720e3ca7a2d6856fa16ef94eb2c2957066b849cea8a4da7fde0613efbc5401', 'hex')), false), - PrivateKey.fromBytes(Uint8Array.from(Buffer.from('49d151bb34da1f1957077e231e7cdf564f418b74cb9b3b1c751714cb649631c3', 'hex')), false), - ]; - const sk = Threshold.create(commitments, fragments, 2, 3); - const sig = Threshold.signWithCoefficient(sk, Uint8Array.from([1, 2, 3]), 2, [1, 3]); - const aggSig = Threshold.aggregateUnitSigs([], Uint8Array.from([1, 2, 3]), [1, 2]); - const isValid: boolean = Threshold.verifySecretFragment(1, sk, [], 3); - sk.delete(); + it('G2Element', () => { + strictEqual(G2Element.SIZE, 96); + const pk = G1Element.from_bytes(getPkBytes()); + const sig = G2Element.from_bytes(getSignatureBytes()); + const aggSig = AugSchemeMPL.aggregate([sig]); + const sig2 = G2Element.from_bytes(getSignatureBytes()); + const isValid: boolean = + AugSchemeMPL.verify(pk, getMessageBytes(), sig); + const serialized: Uint8Array = sig.serialize(); + ok(isValid); sig.delete(); aggSig.delete(); - }); - - it('GROUP_ORDER', () => { - strictEqual(GROUP_ORDER, '73EDA753299D7D483339D80809A1D80553BDA402FFFE5BFEFFFFFFFF00000001'); - }); - - it('DHKeyExchange', () => { - const sk = PrivateKey.fromSeed(getSkSeed()); - const pk = PublicKey.fromBytes(getPkBytes()); - const result = DHKeyExchange(sk, pk); - strictEqual(result.serialize().length, PublicKey.PUBLIC_KEY_SIZE); - sk.delete(); - pk.delete(); - result.delete(); + sig2.delete(); }); }); }); diff --git a/js-bindings/tests/webpack.config.js b/js-bindings/tests/webpack.config.js new file mode 100644 index 000000000..183b88bd4 --- /dev/null +++ b/js-bindings/tests/webpack.config.js @@ -0,0 +1,19 @@ +const webpack = require('webpack'); + +module.exports = { + mode: 'development', + plugins: [ + new webpack.ProvidePlugin({ + process: 'process', + + }) + ], + resolve: { + fallback: { + "path": require.resolve("path-browserify"), + "crypto": require.resolve("crypto-browserify"), + "stream": require.resolve("stream-browserify"), + "fs": false, + } + } +}; diff --git a/js_test.sh b/js_test.sh index ef4232f2d..abd1546b3 100755 --- a/js_test.sh +++ b/js_test.sh @@ -12,5 +12,4 @@ else fi fi -cd js-bindings/tests && ${YARN} install && exec node ./test.js - +cd js_build/js-bindings/tests && ${YARN} install && exec node ./test.js