diff --git a/package.json b/package.json index 412b69a3..8538063d 100644 --- a/package.json +++ b/package.json @@ -7,14 +7,14 @@ "./src/crypto-sha1-2.js": "./src/crypto-sha1-2-browser.js" }, "scripts": { - "test": "aegir-test", - "test:browser": "aegir-test browser", + "test": "aegir-test --webworker", + "test:browser": "aegir-test browser --webworker", "test:node": "aegir-test node", "lint": "aegir-lint", "docs": "aegir-docs", - "release": "aegir-release --docs", - "release-minor": "aegir-release minor --docs", - "release-major": "aegir-release major --docs", + "release": "aegir-release --docs --webworker", + "release-minor": "aegir-release minor --docs --webworker", + "release-major": "aegir-release major --docs --webworker", "build": "aegir-build", "coverage": "aegir-coverage", "coverage-publish": "aegir-coverage publish", @@ -38,13 +38,13 @@ }, "dependencies": { "async": "^2.1.4", - "js-sha3": "^0.5.5", - "multihashes": "^0.3.0", + "js-sha3": "^0.5.7", + "multihashes": "^0.3.2", "nodeify": "^1.0.0" }, "devDependencies": { - "aegir": "^9.3.0", - "benchmark": "^2.1.2", + "aegir": "^9.4.0", + "benchmark": "^2.1.3", "chai": "^3.5.0", "pre-commit": "^1.2.2" }, diff --git a/src/crypto-browser.js b/src/crypto-browser.js deleted file mode 100644 index 9035e8ba..00000000 --- a/src/crypto-browser.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict' - -const SHA3 = require('browserify-sha3') -const nodeify = require('nodeify') - -const webCrypto = getWebCrypto() - -function getWebCrypto () { - if (typeof window !== 'undefined') { - if (window.crypto) { - return window.crypto.subtle || window.crypto.webkitSubtle - } - - if (window.msCrypto) { - return window.msCrypto.subtle - } - } -} - -function webCryptoHash (type) { - if (!webCrypto) { - throw new Error('Please use a browser with webcrypto support') - } - - return (data, callback) => { - const res = webCrypto.digest({ name: type }, data) - - if (typeof res.then !== 'function') { // IE11 - res.onerror = () => { - callback(`Error hashing data using ${type}`) - } - res.oncomplete = (e) => { - callback(null, e.target.result) - } - return - } - - nodeify( - res.then((raw) => new Buffer(new Uint8Array(raw))), - callback - ) - } -} - -function sha1 (buf, callback) { - webCryptoHash('SHA-1')(buf, callback) -} - -function sha2256 (buf, callback) { - webCryptoHash('SHA-256')(buf, callback) -} - -function sha2512 (buf, callback) { - webCryptoHash('SHA-512')(buf, callback) -} - -function sha3 (buf, callback) { - const d = new SHA3.SHA3Hash() - const digest = new Buffer(d.update(buf).digest('hex'), 'hex') - callback(null, digest) -} - -module.exports = { - sha1: sha1, - sha2256: sha2256, - sha2512: sha2512, - sha3: sha3 -} diff --git a/src/crypto-sha1-2-browser.js b/src/crypto-sha1-2-browser.js index 652cca93..837c26ec 100644 --- a/src/crypto-sha1-2-browser.js +++ b/src/crypto-sha1-2-browser.js @@ -1,3 +1,4 @@ +/* global self */ 'use strict' const nodeify = require('nodeify') @@ -5,14 +6,22 @@ const nodeify = require('nodeify') const webCrypto = getWebCrypto() function getWebCrypto () { + let globalContext + if (typeof window !== 'undefined') { - if (window.crypto) { - return window.crypto.subtle || window.crypto.webkitSubtle - } + globalContext = window + } else if (typeof self !== 'undefined') { + globalContext = self + } else { + return + } - if (window.msCrypto) { - return window.msCrypto.subtle - } + if (globalContext.crypto) { + return globalContext.crypto.subtle || globalContext.crypto.webkitSubtle + } + + if (globalContext.msCrypto) { + return globalContext.msCrypto.subtle } }