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