js-libp2p-crypto/src/hmac/index-browser.js

37 lines
736 B
JavaScript
Raw Normal View History

'use strict'
const { Buffer } = require('buffer')
const webcrypto = require('../webcrypto')
2017-07-22 10:57:27 -07:00
const lengths = require('./lengths')
const hashTypes = {
SHA1: 'SHA-1',
SHA256: 'SHA-256',
SHA512: 'SHA-512'
}
const sign = async (key, data) => {
return Buffer.from(await webcrypto.get().subtle.sign({ name: 'HMAC' }, key, data))
2017-08-17 06:38:26 +02:00
}
exports.create = async function (hashType, secret) {
const hash = hashTypes[hashType]
const key = await webcrypto.get().subtle.importKey(
'raw',
secret,
{
name: 'HMAC',
hash: { name: hash }
},
false,
['sign']
)
return {
async digest (data) { // eslint-disable-line require-await
return sign(key, data)
},
length: lengths[hashType]
}
}