'use strict' const nodeify = require('../nodeify') const crypto = require('../webcrypto.js')() const lengths = require('./lengths') const hashTypes = { SHA1: 'SHA-1', SHA256: 'SHA-256', SHA512: 'SHA-512' } const sign = (key, data, cb) => { nodeify(crypto.subtle.sign({name: 'HMAC'}, key, data) .then((raw) => Buffer.from(raw)), cb) } exports.create = function (hashType, secret, callback) { const hash = hashTypes[hashType] nodeify(crypto.subtle.importKey( 'raw', secret, { name: 'HMAC', hash: {name: hash} }, false, ['sign'] ).then((key) => { return { digest (data, cb) { sign(key, data, cb) }, length: lengths[hashType] } }), callback) }