Sha256: cdc67d931ef4b9f4e6dec14ff0b4ead6f0f53f0ed69601bd7606dae24e14a319

Contents?: true

Size: 1.34 KB

Versions: 8

Compression:

Stored size: 1.34 KB

Contents

'use strict';
var createHash = require('create-hash/browser');
var inherits = require('inherits')

var Transform = require('stream').Transform

var ZEROS = new Buffer(128)
ZEROS.fill(0)

function Hmac(alg, key) {
  Transform.call(this)
  alg = alg.toLowerCase()
  if (typeof key === 'string') {
    key = new Buffer(key)
  }

  var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64

  this._alg = alg
  this._key = key

  if (key.length > blocksize) {
    key = createHash(alg).update(key).digest()

  } else if (key.length < blocksize) {
    key = Buffer.concat([key, ZEROS], blocksize)
  }

  var ipad = this._ipad = new Buffer(blocksize)
  var opad = this._opad = new Buffer(blocksize)

  for (var i = 0; i < blocksize; i++) {
    ipad[i] = key[i] ^ 0x36
    opad[i] = key[i] ^ 0x5C
  }

  this._hash = createHash(alg).update(ipad)
}

inherits(Hmac, Transform)

Hmac.prototype.update = function (data, enc) {
  this._hash.update(data, enc)

  return this
}

Hmac.prototype._transform = function (data, _, next) {
  this._hash.update(data)

  next()
}

Hmac.prototype._flush = function (next) {
  this.push(this.digest())

  next()
}

Hmac.prototype.digest = function (enc) {
  var h = this._hash.digest()

  return createHash(this._alg).update(this._opad).update(h).digest(enc)
}

module.exports = function createHmac(alg, key) {
  return new Hmac(alg, key)
}

Version data entries

8 entries across 8 versions & 3 rubygems

Version Path
lanes-0.8.0 node_modules/create-hmac/browser.js
minimum_viable_product-0.0.11 test/dummy/node_modules/create-hmac/browser.js
brwy_rails-0.0.6 test/dummy/node_modules/create-hmac/browser.js
brwy_rails-0.0.5 test/dummy/node_modules/create-hmac/browser.js
brwy_rails-0.0.4 test/dummy/node_modules/create-hmac/browser.js
brwy_rails-0.0.3 test/dummy/node_modules/create-hmac/browser.js
brwy_rails-0.0.2 test/dummy/node_modules/create-hmac/browser.js
brwy_rails-0.0.1 test/dummy/node_modules/create-hmac/browser.js