Tidied up PGP operations and added progress callback

This commit is contained in:
n1474335 2018-03-28 23:26:48 +01:00
parent 1143c23ad9
commit e41145427e
9 changed files with 143 additions and 456 deletions

View File

@ -1,17 +1,11 @@
{ {
"plugins": [
["transform-runtime", {
"polyfill": false,
"regenerator": true
}]
],
"presets": [ "presets": [
["env", { ["env", {
"targets": { "targets": {
"chrome": 40, "chrome": 40,
"firefox": 35, "firefox": 35,
"edge": 14, "edge": 14,
"node": "6.5", "node": "6.5"
}, },
"modules": false, "modules": false,
"useBuiltIns": true "useBuiltIns": true

View File

@ -318,7 +318,7 @@ module.exports = function (grunt) {
chunks: false, chunks: false,
modules: false, modules: false,
entrypoints: false, entrypoints: false,
warningsFilter: /source-map/, warningsFilter: [/source-map/, /dependency is an expression/],
} }
}, },
start: { start: {

347
package-lock.json generated
View File

@ -529,17 +529,6 @@
} }
} }
}, },
"babel-helper-bindify-decorators": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz",
"integrity": "sha1-FMGeXxQte0fxmlJDHlKxzLxAozA=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0",
"babel-traverse": "6.26.0",
"babel-types": "6.26.0"
}
},
"babel-helper-builder-binary-assignment-operator-visitor": { "babel-helper-builder-binary-assignment-operator-visitor": {
"version": "6.24.1", "version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz",
@ -586,18 +575,6 @@
"babel-types": "6.26.0" "babel-types": "6.26.0"
} }
}, },
"babel-helper-explode-class": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz",
"integrity": "sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes=",
"dev": true,
"requires": {
"babel-helper-bindify-decorators": "6.24.1",
"babel-runtime": "6.26.0",
"babel-traverse": "6.26.0",
"babel-types": "6.26.0"
}
},
"babel-helper-function-name": { "babel-helper-function-name": {
"version": "6.24.1", "version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",
@ -724,83 +701,18 @@
"integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=",
"dev": true "dev": true
}, },
"babel-plugin-syntax-async-generators": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz",
"integrity": "sha1-a8lj67FuzLrmuStZbrfzXDQqi5o=",
"dev": true
},
"babel-plugin-syntax-class-constructor-call": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz",
"integrity": "sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY=",
"dev": true
},
"babel-plugin-syntax-class-properties": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",
"integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94=",
"dev": true
},
"babel-plugin-syntax-decorators": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz",
"integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=",
"dev": true
},
"babel-plugin-syntax-do-expressions": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz",
"integrity": "sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0=",
"dev": true
},
"babel-plugin-syntax-dynamic-import": {
"version": "6.18.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz",
"integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=",
"dev": true
},
"babel-plugin-syntax-exponentiation-operator": { "babel-plugin-syntax-exponentiation-operator": {
"version": "6.13.0", "version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz",
"integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=",
"dev": true "dev": true
}, },
"babel-plugin-syntax-export-extensions": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz",
"integrity": "sha1-cKFITw+QiaToStRLrDU8lbmxJyE=",
"dev": true
},
"babel-plugin-syntax-function-bind": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz",
"integrity": "sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y=",
"dev": true
},
"babel-plugin-syntax-object-rest-spread": {
"version": "6.13.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
"integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
"dev": true
},
"babel-plugin-syntax-trailing-function-commas": { "babel-plugin-syntax-trailing-function-commas": {
"version": "6.22.0", "version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",
"integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=",
"dev": true "dev": true
}, },
"babel-plugin-transform-async-generator-functions": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz",
"integrity": "sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds=",
"dev": true,
"requires": {
"babel-helper-remap-async-to-generator": "6.24.1",
"babel-plugin-syntax-async-generators": "6.13.0",
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-async-to-generator": { "babel-plugin-transform-async-to-generator": {
"version": "6.24.1", "version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz",
@ -812,52 +724,6 @@
"babel-runtime": "6.26.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-class-constructor-call": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz",
"integrity": "sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk=",
"dev": true,
"requires": {
"babel-plugin-syntax-class-constructor-call": "6.18.0",
"babel-runtime": "6.26.0",
"babel-template": "6.26.0"
}
},
"babel-plugin-transform-class-properties": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",
"integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",
"dev": true,
"requires": {
"babel-helper-function-name": "6.24.1",
"babel-plugin-syntax-class-properties": "6.13.0",
"babel-runtime": "6.26.0",
"babel-template": "6.26.0"
}
},
"babel-plugin-transform-decorators": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz",
"integrity": "sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0=",
"dev": true,
"requires": {
"babel-helper-explode-class": "6.24.1",
"babel-plugin-syntax-decorators": "6.13.0",
"babel-runtime": "6.26.0",
"babel-template": "6.26.0",
"babel-types": "6.26.0"
}
},
"babel-plugin-transform-do-expressions": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz",
"integrity": "sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs=",
"dev": true,
"requires": {
"babel-plugin-syntax-do-expressions": "6.13.0",
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-es2015-arrow-functions": { "babel-plugin-transform-es2015-arrow-functions": {
"version": "6.22.0", "version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",
@ -1103,36 +969,6 @@
"babel-runtime": "6.26.0" "babel-runtime": "6.26.0"
} }
}, },
"babel-plugin-transform-export-extensions": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz",
"integrity": "sha1-U3OLR+deghhYnuqUbLvTkQm75lM=",
"dev": true,
"requires": {
"babel-plugin-syntax-export-extensions": "6.13.0",
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-function-bind": {
"version": "6.22.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz",
"integrity": "sha1-xvuOlqwpajELjPjqQBRiQH3fapc=",
"dev": true,
"requires": {
"babel-plugin-syntax-function-bind": "6.13.0",
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-object-rest-spread": {
"version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",
"integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",
"dev": true,
"requires": {
"babel-plugin-syntax-object-rest-spread": "6.13.0",
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-regenerator": { "babel-plugin-transform-regenerator": {
"version": "6.26.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz",
@ -1142,15 +978,6 @@
"regenerator-transform": "0.10.1" "regenerator-transform": "0.10.1"
} }
}, },
"babel-plugin-transform-runtime": {
"version": "6.23.0",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz",
"integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=",
"dev": true,
"requires": {
"babel-runtime": "6.26.0"
}
},
"babel-plugin-transform-strict-mode": { "babel-plugin-transform-strict-mode": {
"version": "6.24.1", "version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",
@ -1216,85 +1043,6 @@
"semver": "5.4.1" "semver": "5.4.1"
} }
}, },
"babel-preset-es2015": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz",
"integrity": "sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk=",
"dev": true,
"requires": {
"babel-plugin-check-es2015-constants": "6.22.0",
"babel-plugin-transform-es2015-arrow-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoped-functions": "6.22.0",
"babel-plugin-transform-es2015-block-scoping": "6.26.0",
"babel-plugin-transform-es2015-classes": "6.24.1",
"babel-plugin-transform-es2015-computed-properties": "6.24.1",
"babel-plugin-transform-es2015-destructuring": "6.23.0",
"babel-plugin-transform-es2015-duplicate-keys": "6.24.1",
"babel-plugin-transform-es2015-for-of": "6.23.0",
"babel-plugin-transform-es2015-function-name": "6.24.1",
"babel-plugin-transform-es2015-literals": "6.22.0",
"babel-plugin-transform-es2015-modules-amd": "6.24.1",
"babel-plugin-transform-es2015-modules-commonjs": "6.26.0",
"babel-plugin-transform-es2015-modules-systemjs": "6.24.1",
"babel-plugin-transform-es2015-modules-umd": "6.24.1",
"babel-plugin-transform-es2015-object-super": "6.24.1",
"babel-plugin-transform-es2015-parameters": "6.24.1",
"babel-plugin-transform-es2015-shorthand-properties": "6.24.1",
"babel-plugin-transform-es2015-spread": "6.22.0",
"babel-plugin-transform-es2015-sticky-regex": "6.24.1",
"babel-plugin-transform-es2015-template-literals": "6.22.0",
"babel-plugin-transform-es2015-typeof-symbol": "6.23.0",
"babel-plugin-transform-es2015-unicode-regex": "6.24.1",
"babel-plugin-transform-regenerator": "6.26.0"
}
},
"babel-preset-stage-0": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz",
"integrity": "sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo=",
"dev": true,
"requires": {
"babel-plugin-transform-do-expressions": "6.22.0",
"babel-plugin-transform-function-bind": "6.22.0",
"babel-preset-stage-1": "6.24.1"
}
},
"babel-preset-stage-1": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz",
"integrity": "sha1-dpLNfc1oSZB+auSgqFWJz7niv7A=",
"dev": true,
"requires": {
"babel-plugin-transform-class-constructor-call": "6.24.1",
"babel-plugin-transform-export-extensions": "6.22.0",
"babel-preset-stage-2": "6.24.1"
}
},
"babel-preset-stage-2": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz",
"integrity": "sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE=",
"dev": true,
"requires": {
"babel-plugin-syntax-dynamic-import": "6.18.0",
"babel-plugin-transform-class-properties": "6.24.1",
"babel-plugin-transform-decorators": "6.24.1",
"babel-preset-stage-3": "6.24.1"
}
},
"babel-preset-stage-3": {
"version": "6.24.1",
"resolved": "https://registry.npmjs.org/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz",
"integrity": "sha1-g2raCp56f6N8sTj7kyb4eTSkg5U=",
"dev": true,
"requires": {
"babel-plugin-syntax-trailing-function-commas": "6.22.0",
"babel-plugin-transform-async-generator-functions": "6.24.1",
"babel-plugin-transform-async-to-generator": "6.24.1",
"babel-plugin-transform-exponentiation-operator": "6.24.1",
"babel-plugin-transform-object-rest-spread": "6.26.0"
}
},
"babel-register": { "babel-register": {
"version": "6.26.0", "version": "6.26.0",
"resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",
@ -1756,7 +1504,11 @@
"integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=", "integrity": "sha1-/TVGSkA/b5EXwt42Cez/nK4ABYg=",
"dev": true "dev": true
}, },
<<<<<<< HEAD "bzip-deflate": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/bzip-deflate/-/bzip-deflate-1.0.0.tgz",
"integrity": "sha1-sC2wB+83vrzCk4Skssb08PTHlsk="
},
"cacache": { "cacache": {
"version": "10.0.4", "version": "10.0.4",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz",
@ -1825,12 +1577,6 @@
"union-value": "1.0.0", "union-value": "1.0.0",
"unset-value": "1.0.0" "unset-value": "1.0.0"
} }
=======
"bzip-deflate": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/bzip-deflate/-/bzip-deflate-1.0.0.tgz",
"integrity": "sha1-sC2wB+83vrzCk4Skssb08PTHlsk="
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
}, },
"caller-path": { "caller-path": {
"version": "0.1.0", "version": "0.1.0",
@ -3178,24 +2924,15 @@
} }
}, },
"es6-promise": { "es6-promise": {
<<<<<<< HEAD
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
"integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
"dev": true
=======
"version": "4.0.5", "version": "4.0.5",
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.0.5.tgz",
"integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI=" "integrity": "sha1-eILzCt3lskDM+n99eMVIMwlRrkI="
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
}, },
"es6-promise-polyfill": { "es6-promise-polyfill": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz", "resolved": "https://registry.npmjs.org/es6-promise-polyfill/-/es6-promise-polyfill-1.2.0.tgz",
"integrity": "sha1-84kl8jyz4+jObNqP93T867sJDN4=" "integrity": "sha1-84kl8jyz4+jObNqP93T867sJDN4="
}, },
<<<<<<< HEAD
=======
"es6-promisify": { "es6-promisify": {
"version": "5.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
@ -3204,42 +2941,6 @@
"es6-promise": "4.0.5" "es6-promise": "4.0.5"
} }
}, },
"es6-set": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
"integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.37",
"es6-iterator": "2.0.3",
"es6-symbol": "3.1.1",
"event-emitter": "0.3.5"
}
},
"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.0.0",
"es5-ext": "0.10.37"
}
},
"es6-weak-map": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
"integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
"dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.37",
"es6-iterator": "2.0.3",
"es6-symbol": "3.1.1"
}
},
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
"escape-html": { "escape-html": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
@ -4272,11 +3973,7 @@
"dev": true, "dev": true,
"requires": { "requires": {
"commondir": "1.0.1", "commondir": "1.0.1",
<<<<<<< HEAD
"make-dir": "1.2.0",
=======
"make-dir": "1.1.0", "make-dir": "1.1.0",
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
"pkg-dir": "2.0.0" "pkg-dir": "2.0.0"
} }
}, },
@ -7917,15 +7614,9 @@
"dev": true "dev": true
}, },
"make-dir": { "make-dir": {
<<<<<<< HEAD
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.2.0.tgz",
"integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==",
=======
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.1.0.tgz",
"integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==", "integrity": "sha512-0Pkui4wLJ7rxvmfUvs87skoEaxmu0hCUApF8nonzpl7q//FWp9zu8W61Scz4sd/kUiqDxvUhtoam2efDyiBzcA==",
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
"dev": true, "dev": true,
"requires": { "requires": {
"pify": "3.0.0" "pify": "3.0.0"
@ -8253,7 +7944,14 @@
"moment": "2.20.1" "moment": "2.20.1"
} }
}, },
<<<<<<< HEAD "more-entropy": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/more-entropy/-/more-entropy-0.0.7.tgz",
"integrity": "sha1-Z7/G96hvJvvDeqyD/UbYjGHRCbU=",
"requires": {
"iced-runtime": "1.0.3"
}
},
"move-concurrently": { "move-concurrently": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@ -8277,14 +7975,6 @@
"glob": "7.0.6" "glob": "7.0.6"
} }
} }
=======
"more-entropy": {
"version": "0.0.7",
"resolved": "https://registry.npmjs.org/more-entropy/-/more-entropy-0.0.7.tgz",
"integrity": "sha1-Z7/G96hvJvvDeqyD/UbYjGHRCbU=",
"requires": {
"iced-runtime": "1.0.3"
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
} }
}, },
"ms": { "ms": {
@ -9029,7 +8719,7 @@
"integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=", "integrity": "sha1-79ISpKOWbTZHaE6ouniFSb4q7+8=",
"dev": true, "dev": true,
"requires": { "requires": {
"es6-promise": "4.2.4", "es6-promise": "4.0.5",
"extract-zip": "1.6.6", "extract-zip": "1.6.6",
"fs-extra": "1.0.0", "fs-extra": "1.0.0",
"hasha": "2.2.0", "hasha": "2.2.0",
@ -12085,8 +11775,6 @@
"integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
"dev": true "dev": true
}, },
<<<<<<< HEAD
=======
"triplesec": { "triplesec": {
"version": "3.0.26", "version": "3.0.26",
"resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.26.tgz", "resolved": "https://registry.npmjs.org/triplesec/-/triplesec-3.0.26.tgz",
@ -12099,13 +11787,6 @@
"progress": "1.1.8" "progress": "1.1.8"
} }
}, },
"tryit": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
"integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
"dev": true
},
>>>>>>> aa3f781e18cbcae549538637573a807064f3c730
"tty-browserify": { "tty-browserify": {
"version": "0.0.0", "version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",

View File

@ -32,6 +32,7 @@
"devDependencies": { "devDependencies": {
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-loader": "^7.1.3", "babel-loader": "^7.1.3",
"babel-polyfill": "^6.26.0",
"babel-preset-env": "^1.6.1", "babel-preset-env": "^1.6.1",
"css-loader": "^0.28.10", "css-loader": "^0.28.10",
"eslint": "^4.18.1", "eslint": "^4.18.1",
@ -40,10 +41,6 @@
"file-loader": "^1.1.10", "file-loader": "^1.1.10",
"grunt": ">=1.0.2", "grunt": ">=1.0.2",
"grunt-accessibility": "~6.0.0", "grunt-accessibility": "~6.0.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.26.0",
"babel-preset-es2015": "^6.24.1",
"babel-preset-stage-0": "^6.24.1",
"grunt-chmod": "~1.1.1", "grunt-chmod": "~1.1.1",
"grunt-concurrent": "^2.3.1", "grunt-concurrent": "^2.3.1",
"grunt-contrib-clean": "~1.1.0", "grunt-contrib-clean": "~1.1.0",

View File

@ -114,6 +114,11 @@ const Categories = [
"Hex to PEM", "Hex to PEM",
"Hex to Object Identifier", "Hex to Object Identifier",
"Object Identifier to Hex", "Object Identifier to Hex",
"Generate PGP Key Pair",
"PGP Encrypt",
"PGP Decrypt",
"PGP Encrypt and Sign",
"PGP Decrypt and Verify",
] ]
}, },
{ {

View File

@ -4162,8 +4162,7 @@ const OperationConfig = {
}, },
"Generate PGP Key Pair": { "Generate PGP Key Pair": {
module: "PGP", module: "PGP",
manualBake: true, description: "Generates a new public/private PGP key pair. Supports RSA and Eliptic Curve (EC) keys.",
description: "",
inputType: "string", inputType: "string",
outputType: "string", outputType: "string",
args: [ args: [
@ -4172,11 +4171,6 @@ const OperationConfig = {
type: "option", type: "option",
value: PGP.KEY_TYPES value: PGP.KEY_TYPES
}, },
{
name: "Key size",
type: "option",
value: PGP.KEY_SIZES
},
{ {
name: "Password (optional)", name: "Password (optional)",
type: "string", type: "string",
@ -4196,7 +4190,6 @@ const OperationConfig = {
}, },
"PGP Encrypt": { "PGP Encrypt": {
module: "PGP", module: "PGP",
manualBake: true,
description: [ description: [
"Input: the message you want to encrypt.", "Input: the message you want to encrypt.",
"<br><br>", "<br><br>",
@ -4204,7 +4197,7 @@ const OperationConfig = {
"<br><br>", "<br><br>",
"Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.", "Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.",
"<br><br>", "<br><br>",
"This function relies on kbpgp.js for the implementation of PGP.", "This function uses the Keybase implementation of PGP.",
].join("\n"), ].join("\n"),
inputType: "string", inputType: "string",
outputType: "string", outputType: "string",
@ -4218,7 +4211,6 @@ const OperationConfig = {
}, },
"PGP Decrypt": { "PGP Decrypt": {
module: "PGP", module: "PGP",
manualBake: true,
description: [ description: [
"Input: the ASCII-armoured PGP message you want to decrypt.", "Input: the ASCII-armoured PGP message you want to decrypt.",
"<br><br>", "<br><br>",
@ -4227,7 +4219,7 @@ const OperationConfig = {
"<br><br>", "<br><br>",
"Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.", "Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.",
"<br><br>", "<br><br>",
"This function relies on kbpgp.js for the implementation of PGP.", "This function uses the Keybase implementation of PGP.",
].join("\n"), ].join("\n"),
inputType: "string", inputType: "string",
outputType: "string", outputType: "string",
@ -4244,9 +4236,8 @@ const OperationConfig = {
}, },
] ]
}, },
"PGP Sign": { "PGP Encrypt and Sign": {
module: "PGP", module: "PGP",
manualBake: true,
description: [ description: [
"Input: the cleartext you want to sign.", "Input: the cleartext you want to sign.",
"<br><br>", "<br><br>",
@ -4257,7 +4248,7 @@ const OperationConfig = {
"<br><br>", "<br><br>",
"Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.", "Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.",
"<br><br>", "<br><br>",
"This function relies on kbpgp.js for the implementation of PGP.", "This function uses the Keybase implementation of PGP.",
].join("\n"), ].join("\n"),
inputType: "string", inputType: "string",
outputType: "string", outputType: "string",
@ -4279,7 +4270,7 @@ const OperationConfig = {
}, },
] ]
}, },
"PGP Verify": { "PGP Decrypt and Verify": {
module: "PGP", module: "PGP",
description: [ description: [
"Input: the ASCII-armoured encrypted PGP message you want to verify.", "Input: the ASCII-armoured encrypted PGP message you want to verify.",
@ -4291,7 +4282,7 @@ const OperationConfig = {
"<br><br>", "<br><br>",
"Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.", "Pretty Good Privacy is an encryption standard (OpenPGP) used for encrypting, decrypting, and signing messages.",
"<br><br>", "<br><br>",
"This function relies on kbpgp.js for the implementation of PGP.", "This function uses the Keybase implementation of PGP.",
].join("\n"), ].join("\n"),
inputType: "string", inputType: "string",
outputType: "string", outputType: "string",

View File

@ -15,11 +15,11 @@ import PGP from "../../operations/PGP.js";
let OpModules = typeof self === "undefined" ? {} : self.OpModules || {}; let OpModules = typeof self === "undefined" ? {} : self.OpModules || {};
OpModules.PGP = { OpModules.PGP = {
"Generate PGP Key Pair": PGP.runGenerateKeyPair, "Generate PGP Key Pair": PGP.runGenerateKeyPair,
"PGP Encrypt": PGP.runEncrypt, "PGP Encrypt": PGP.runEncrypt,
"PGP Decrypt": PGP.runDecrypt, "PGP Decrypt": PGP.runDecrypt,
"PGP Sign": PGP.runSign, "PGP Encrypt and Sign": PGP.runSign,
"PGP Verify": PGP.runVerify, "PGP Decrypt and Verify": PGP.runVerify,
}; };
export default OpModules; export default OpModules;

View File

@ -1,58 +1,33 @@
/*eslint camelcase: ["error", {properties: "never"}]*/
import * as kbpgp from "kbpgp"; import * as kbpgp from "kbpgp";
import promisify from "es6-promisify"; import promisify from "es6-promisify";
const ECC_SIZES = ["256", "384"];
const RSA_SIZES = ["1024", "2048", "4096"];
const KEY_SIZES = RSA_SIZES.concat(ECC_SIZES);
const KEY_TYPES = ["RSA", "ECC"];
/** /**
* PGP operations. * PGP operations.
* *
* @author tlwr [toby@toby.codes] * @author tlwr [toby@toby.codes]
* @author Matt C [matt@artemisbot.uk] * @author Matt C [matt@artemisbot.uk]
* @copyright Crown Copyright 2016 * @author n1474335 [n1474335@gmail.com]
* @copyright Crown Copyright 2017
* @license Apache-2.0 * @license Apache-2.0
* *
* @namespace * @namespace
*/ */
const PGP = { const PGP = {
KEY_SIZES: KEY_SIZES,
/** /**
* Validate PGP Key Size * @constant
* * @default
* @private
* @param {string} keySize
* @returns {Integer}
*/ */
_validateKeySize(keySize, keyType) { KEY_TYPES: ["RSA-1024", "RSA-2048", "RSA-4096", "ECC-256", "ECC-384"],
if (KEY_SIZES.indexOf(keySize) < 0) {
throw `Invalid key size ${keySize}, must be in ${JSON.stringify(KEY_SIZES)}`;
}
if (keyType === "ecc") {
if (ECC_SIZES.indexOf(keySize) >= 0) {
return parseInt(keySize, 10);
} else {
throw `Invalid key size ${keySize}, must be in ${JSON.stringify(ECC_SIZES)} for ECC`;
}
} else {
if (RSA_SIZES.indexOf(keySize) >= 0) {
return parseInt(keySize, 10);
} else {
throw `Invalid key size ${keySize}, must be in ${JSON.stringify(RSA_SIZES)} for RSA`;
}
}
},
/** /**
* Get size of subkey * Get size of subkey
* *
* @private * @private
* @param {Integer} keySize * @param {number} keySize
* @returns {Integer} * @returns {number}
*/ */
_getSubkeySize(keySize) { _getSubkeySize(keySize) {
return { return {
@ -65,29 +40,53 @@ const PGP = {
}, },
KEY_TYPES: KEY_TYPES,
/** /**
* Validate PGP Key Type * Progress callback
* *
* @private * @private
* @param {string} keyType
* @returns {string}
*/ */
_validateKeyType(keyType) { _ASP: new kbpgp.ASP({
if (KEY_TYPES.indexOf(keyType) >= 0) return keyType.toLowerCase(); "progress_hook": info => {
throw `Invalid key type ${keyType}, must be in ${JSON.stringify(KEY_TYPES)}`; let msg = "";
},
switch (info.what) {
case "guess":
msg = "Guessing a prime";
break;
case "fermat":
msg = "Factoring prime using Fermat's factorization method";
break;
case "mr":
msg = "Performing Miller-Rabin primality test";
break;
case "passed_mr":
msg = "Passed Miller-Rabin primality test";
break;
case "failed_mr":
msg = "Failed Miller-Rabin primality test";
break;
case "found":
msg = "Prime found";
break;
default:
msg = `Stage: ${info.what}`;
}
if (ENVIRONMENT_IS_WORKER())
self.sendStatusMessage(msg);
}
}),
/** /**
* Import private key and unlock if necessary * Import private key and unlock if necessary
* *
* @private * @private
* @param {string} privateKey * @param {string} privateKey
* @param {string} [passphrase] * @param {string} [passphrase]
* @returns {Object} * @returns {Object}
*/ */
async _importPrivateKey (privateKey, passphrase) { async _importPrivateKey(privateKey, passphrase) {
try { try {
const key = await promisify(kbpgp.KeyManager.import_from_armored_pgp)({ const key = await promisify(kbpgp.KeyManager.import_from_armored_pgp)({
armored: privateKey, armored: privateKey,
@ -107,9 +106,10 @@ const PGP = {
} }
}, },
/** /**
* Import public key * Import public key
* *
* @private * @private
* @param {string} publicKey * @param {string} publicKey
* @returns {Object} * @returns {Object}
@ -125,6 +125,7 @@ const PGP = {
} }
}, },
/** /**
* Generate PGP Key Pair operation. * Generate PGP Key Pair operation.
* *
@ -133,43 +134,41 @@ const PGP = {
* @returns {string} * @returns {string}
*/ */
runGenerateKeyPair(input, args) { runGenerateKeyPair(input, args) {
let keyType = args[0], let [keyType, keySize] = args[0].split("-"),
keySize = args[1], password = args[1],
password = args[2], name = args[2],
name = args[3], email = args[3],
email = args[4]; userIdentifier = "";
keyType = PGP._validateKeyType(keyType);
keySize = PGP._validateKeySize(keySize, keyType);
let userIdentifier = "";
if (name) userIdentifier += name; if (name) userIdentifier += name;
if (email) userIdentifier += ` <${email}>`; if (email) userIdentifier += ` <${email}>`;
let flags = kbpgp.const.openpgp.certify_keys; let flags = kbpgp.const.openpgp.certify_keys;
flags = flags | kbpgp.const.openpgp.sign_data; flags |= kbpgp.const.openpgp.sign_data;
flags = flags | kbpgp.const.openpgp.auth; flags |= kbpgp.const.openpgp.auth;
flags = flags | kbpgp.const.openpgp.encrypt_comm; flags |= kbpgp.const.openpgp.encrypt_comm;
flags = flags | kbpgp.const.openpgp.encrypt_storage; flags |= kbpgp.const.openpgp.encrypt_storage;
let keyGenerationOptions = { let keyGenerationOptions = {
userid: userIdentifier, userid: userIdentifier,
ecc: keyType === "ecc", ecc: keyType === "ecc",
primary: { primary: {
nbits: keySize, "nbits": keySize,
flags: flags, "flags": flags,
expire_in: 0 "expire_in": 0
}, },
subkeys: [{ subkeys: [{
nbits: PGP._getSubkeySize(keySize), "nbits": PGP._getSubkeySize(keySize),
flags: kbpgp.const.openpgp.sign_data, "flags": kbpgp.const.openpgp.sign_data,
expire_in: 86400 * 365 * 8 "expire_in": 86400 * 365 * 8
}, { }, {
nbits: PGP._getSubkeySize(keySize), "nbits": PGP._getSubkeySize(keySize),
flags: kbpgp.const.openpgp.encrypt_comm | kbpgp.const.openpgp.encrypt_storage, "flags": kbpgp.const.openpgp.encrypt_comm | kbpgp.const.openpgp.encrypt_storage,
expire_in: 86400 * 365 * 2 "expire_in": 86400 * 365 * 2
}], }],
asp: PGP._ASP
}; };
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
try { try {
const unsignedKey = await promisify(kbpgp.KeyManager.generate)(keyGenerationOptions); const unsignedKey = await promisify(kbpgp.KeyManager.generate)(keyGenerationOptions);
@ -179,13 +178,14 @@ const PGP = {
if (password) privateKeyExportOptions.passphrase = password; if (password) privateKeyExportOptions.passphrase = password;
const privateKey = await promisify(signedKey.export_pgp_private, signedKey)(privateKeyExportOptions); const privateKey = await promisify(signedKey.export_pgp_private, signedKey)(privateKeyExportOptions);
const publicKey = await promisify(signedKey.export_pgp_public, signedKey)({}); const publicKey = await promisify(signedKey.export_pgp_public, signedKey)({});
resolve(privateKey + "\n" + publicKey); resolve(privateKey + "\n" + publicKey.trim());
} catch (err) { } catch (err) {
reject(`Error from kbpgp whilst generating key pair: ${err}`); reject(`Error whilst generating key pair: ${err}`);
} }
}); });
}, },
/** /**
* PGP Encrypt operation. * PGP Encrypt operation.
* *
@ -195,9 +195,11 @@ const PGP = {
*/ */
async runEncrypt(input, args) { async runEncrypt(input, args) {
let plaintextMessage = input, let plaintextMessage = input,
plainPubKey = args[0]; plainPubKey = args[0],
key,
encryptedMessage;
let key, encryptedMessage; if (!plainPubKey) return "Enter the public key of the recipient.";
try { try {
key = await promisify(kbpgp.KeyManager.import_from_armored_pgp)({ key = await promisify(kbpgp.KeyManager.import_from_armored_pgp)({
@ -209,8 +211,9 @@ const PGP = {
try { try {
encryptedMessage = await promisify(kbpgp.box)({ encryptedMessage = await promisify(kbpgp.box)({
msg: plaintextMessage, "msg": plaintextMessage,
encrypt_for: key, "encrypt_for": key,
"asp": PGP._ASP
}); });
} catch (err) { } catch (err) {
throw `Couldn't encrypt message with provided public key: ${err}`; throw `Couldn't encrypt message with provided public key: ${err}`;
@ -219,6 +222,7 @@ const PGP = {
return encryptedMessage.toString(); return encryptedMessage.toString();
}, },
/** /**
* PGP Decrypt operation. * PGP Decrypt operation.
* *
@ -228,11 +232,13 @@ const PGP = {
*/ */
async runDecrypt(input, args) { async runDecrypt(input, args) {
let encryptedMessage = input, let encryptedMessage = input,
privateKey = args[0], privateKey = args[0],
passphrase = args[1], passphrase = args[1],
keyring = new kbpgp.keyring.KeyRing(); keyring = new kbpgp.keyring.KeyRing(),
plaintextMessage;
if (!privateKey) return "Enter the private key of the recipient.";
let plaintextMessage;
const key = await PGP._importPrivateKey(privateKey, passphrase); const key = await PGP._importPrivateKey(privateKey, passphrase);
keyring.add_key_manager(key); keyring.add_key_manager(key);
@ -240,6 +246,7 @@ const PGP = {
plaintextMessage = await promisify(kbpgp.unbox)({ plaintextMessage = await promisify(kbpgp.unbox)({
armored: encryptedMessage, armored: encryptedMessage,
keyfetch: keyring, keyfetch: keyring,
asp: PGP._ASP
}); });
} catch (err) { } catch (err) {
throw `Couldn't decrypt message with provided private key: ${err}`; throw `Couldn't decrypt message with provided private key: ${err}`;
@ -248,6 +255,7 @@ const PGP = {
return plaintextMessage.toString(); return plaintextMessage.toString();
}, },
/** /**
* PGP Sign Message operation. * PGP Sign Message operation.
* *
@ -257,19 +265,22 @@ const PGP = {
*/ */
async runSign(input, args) { async runSign(input, args) {
let message = input, let message = input,
privateKey = args[0], privateKey = args[0],
passphrase = args[1], passphrase = args[1],
publicKey = args[2]; publicKey = args[2],
signedMessage;
let signedMessage; if (!privateKey) return "Enter the private key of the signer.";
if (!publicKey) return "Enter the public key of the recipient.";
const privKey = await PGP._importPrivateKey(privateKey, passphrase); const privKey = await PGP._importPrivateKey(privateKey, passphrase);
const pubKey = await PGP._importPublicKey(publicKey); const pubKey = await PGP._importPublicKey(publicKey);
try { try {
signedMessage = await promisify(kbpgp.box)({ signedMessage = await promisify(kbpgp.box)({
msg: message, "msg": message,
encrypt_for: pubKey, "encrypt_for": pubKey,
sign_with: privKey "sign_with": privKey,
"asp": PGP._ASP
}); });
} catch (err) { } catch (err) {
throw `Couldn't sign message: ${err}`; throw `Couldn't sign message: ${err}`;
@ -278,6 +289,7 @@ const PGP = {
return signedMessage; return signedMessage;
}, },
/** /**
* PGP Verify Message operation. * PGP Verify Message operation.
* *
@ -287,12 +299,14 @@ const PGP = {
*/ */
async runVerify(input, args) { async runVerify(input, args) {
let signedMessage = input, let signedMessage = input,
publicKey = args[0], publicKey = args[0],
privateKey = args[1], privateKey = args[1],
passphrase = args[2], passphrase = args[2],
keyring = new kbpgp.keyring.KeyRing(); keyring = new kbpgp.keyring.KeyRing(),
unboxedLiterals;
let unboxedLiterals; if (!publicKey) return "Enter the public key of the signer.";
if (!privateKey) return "Enter the private key of the recipient.";
const privKey = await PGP._importPrivateKey(privateKey, passphrase); const privKey = await PGP._importPrivateKey(privateKey, passphrase);
const pubKey = await PGP._importPublicKey(publicKey); const pubKey = await PGP._importPublicKey(publicKey);
keyring.add_key_manager(privKey); keyring.add_key_manager(privKey);
@ -300,8 +314,9 @@ const PGP = {
try { try {
unboxedLiterals = await promisify(kbpgp.unbox)({ unboxedLiterals = await promisify(kbpgp.unbox)({
armored: signedMessage, armored: signedMessage,
keyfetch: keyring keyfetch: keyring,
asp: PGP._ASP
}); });
const ds = unboxedLiterals[0].get_data_signer(); const ds = unboxedLiterals[0].get_data_signer();
if (ds) { if (ds) {
@ -328,10 +343,14 @@ const PGP = {
].join("\n"); ].join("\n");
text += unboxedLiterals.toString(); text += unboxedLiterals.toString();
return text.trim(); return text.trim();
} else {
return "Could not identify a key manager.";
} }
} else {
return "The data does not appear to be signed.";
} }
} catch (err) { } catch (err) {
throw `Couldn't verify message: ${err}`; return `Couldn't verify message: ${err}`;
} }
}, },
}; };

View File

@ -109,7 +109,7 @@ module.exports = {
chunks: false, chunks: false,
modules: false, modules: false,
entrypoints: false, entrypoints: false,
warningsFilter: /source-map/, warningsFilter: [/source-map/, /dependency is an expression/],
}, },
node: { node: {
fs: "empty" fs: "empty"