diff --git a/lib/crypto/pbkdf2-browser.js b/lib/crypto/pbkdf2-browser.js index 9ecd1849..5366bed8 100644 --- a/lib/crypto/pbkdf2-browser.js +++ b/lib/crypto/pbkdf2-browser.js @@ -13,7 +13,7 @@ var digest = require('./digest'); var crypto = global.crypto || global.msCrypto || {}; -var subtle = crypto.subtle && crypto.subtle.importKey ? crypto.subtle : {}; +var subtle = crypto.subtle || {}; /** * Perform key derivation using PBKDF2. @@ -62,32 +62,27 @@ exports.derive = function derive(key, salt, iter, len, alg) { * @returns {Promise} */ -exports.deriveAsync = function deriveAsync(key, salt, iter, len, alg) { +exports.deriveAsync = async function deriveAsync(key, salt, iter, len, alg) { var algo = { name: 'PBKDF2' }; var use = ['deriveBits']; - var name = getHash(alg); - var length = len * 8; - var options, promise; + var options, key, data; + + if (!subtle.importKey || !subtle.deriveBits) + return exports.derive(key, salt, iter, len, alg); options = { name: 'PBKDF2', salt: salt, iterations: iter, - hash: name + hash: getHash(alg) }; - promise = subtle.importKey('raw', key, algo, false, use); + key = await subtle.importKey('raw', key, algo, false, use); + data = await subtle.deriveBits(options, key, len * 8); - return promise.then(function(key) { - return subtle.deriveBits(options, key, length); - }).then(function(result) { - return Buffer.from(result); - }); + return Buffer.from(data); }; -if (!subtle.deriveBits) - exports.pbkdf2Async = exports.pbkdf2; - /* * Helpers */ diff --git a/lib/crypto/pbkdf2.js b/lib/crypto/pbkdf2.js index ac37b170..f246d8f5 100644 --- a/lib/crypto/pbkdf2.js +++ b/lib/crypto/pbkdf2.js @@ -10,8 +10,8 @@ * @module crypto.pbkdf2 */ -var co = require('../utils/co'); var crypto = require('crypto'); +var co = require('../utils/co'); /** * Perform key derivation using PBKDF2.