diff options
Diffstat (limited to 'node_modules/create-hmac')
-rw-r--r-- | node_modules/create-hmac/.travis.yml | 4 | ||||
-rw-r--r-- | node_modules/create-hmac/browser.js | 68 | ||||
-rw-r--r-- | node_modules/create-hmac/index.js | 1 | ||||
-rw-r--r-- | node_modules/create-hmac/package.json | 33 | ||||
-rw-r--r-- | node_modules/create-hmac/readme.md | 19 | ||||
-rw-r--r-- | node_modules/create-hmac/test.js | 41 |
6 files changed, 166 insertions, 0 deletions
diff --git a/node_modules/create-hmac/.travis.yml b/node_modules/create-hmac/.travis.yml new file mode 100644 index 000000000..1416d607c --- /dev/null +++ b/node_modules/create-hmac/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.10" + - "0.11"
\ No newline at end of file diff --git a/node_modules/create-hmac/browser.js b/node_modules/create-hmac/browser.js new file mode 100644 index 000000000..b610781b2 --- /dev/null +++ b/node_modules/create-hmac/browser.js @@ -0,0 +1,68 @@ +'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) +} diff --git a/node_modules/create-hmac/index.js b/node_modules/create-hmac/index.js new file mode 100644 index 000000000..220908ad3 --- /dev/null +++ b/node_modules/create-hmac/index.js @@ -0,0 +1 @@ +module.exports = require('crypto').createHmac;
\ No newline at end of file diff --git a/node_modules/create-hmac/package.json b/node_modules/create-hmac/package.json new file mode 100644 index 000000000..f4267511c --- /dev/null +++ b/node_modules/create-hmac/package.json @@ -0,0 +1,33 @@ +{ + "name": "create-hmac", + "version": "1.1.4", + "description": "node style hmacs in the browser", + "main": "index.js", + "scripts": { + "test": "node test.js | tspec" + }, + "repository": { + "type": "git", + "url": "https://github.com/crypto-browserify/createHmac.git" + }, + "keywords": [ + "crypto", + "hmac" + ], + "author": "", + "license": "MIT", + "bugs": { + "url": "https://github.com/crypto-browserify/createHmac/issues" + }, + "homepage": "https://github.com/crypto-browserify/createHmac", + "devDependencies": { + "hash-test-vectors": "^1.3.2", + "tap-spec": "^2.1.2", + "tape": "^3.0.3" + }, + "dependencies": { + "create-hash": "^1.1.0", + "inherits": "^2.0.1" + }, + "browser": "./browser.js" +} diff --git a/node_modules/create-hmac/readme.md b/node_modules/create-hmac/readme.md new file mode 100644 index 000000000..4e8bda4df --- /dev/null +++ b/node_modules/create-hmac/readme.md @@ -0,0 +1,19 @@ +create-hmac +=== + +[](https://travis-ci.org/crypto-browserify/createHmac) + +Node style hmacs for use in the browser, with native hmac functions in node. Api is the same as hmacs in node: + +```js +var createHmac = require('create-hmac'); +var hmac = createHmac('sha224', new Buffer("secret key")); +hmac.update('synchronous write'); //optional encoding parameter +hmac.digest();// synchronously get result with optional encoding parameter + +hmac.write('write to it as a stream'); +hmac.end();//remember it's a stream +hmac.read();//only if you ended it as a stream though +``` + +To get the JavaScript version even in node require `require('create-hmac/browser');`
\ No newline at end of file diff --git a/node_modules/create-hmac/test.js b/node_modules/create-hmac/test.js new file mode 100644 index 000000000..cb0cd5765 --- /dev/null +++ b/node_modules/create-hmac/test.js @@ -0,0 +1,41 @@ +var test = require('tape') + +var algorithms = ['sha1', 'sha224','sha256', 'sha384', 'sha512', 'SHA512', 'md5', 'rmd160'] +var formats = [undefined, 'base64', 'hex', 'binary'] + +var vectors = require('hash-test-vectors/hmac') +var createHmac = require('./browser') +algorithms.forEach(function (alg) { + vectors.forEach(function (input) { + var key = new Buffer(input.key, 'hex') + var inputBuffer = new Buffer(input.data, 'hex') + + formats.forEach(function (format) { + test('hmac(' + alg + ') w/ ' + input.data.slice(0, 6) + '... as ' + format, function (t) { + var hmac = createHmac(alg, key) + + var formattedInput = format ? inputBuffer.toString(format) : inputBuffer + hmac.update(formattedInput, format) + + var formattedOutput = hmac.digest(format) + var output = new Buffer(formattedOutput, format) + + var truncated = input.truncate ? output.slice(0, input.truncate) : output + t.equal(truncated.toString('hex'), input[alg.toLowerCase()]) + t.end() + }) + }) + }) + + vectors.forEach(function (input) { + test('hmac(' + alg + ') as stream w/ ' + input.data.slice(0, 6) + '...', function (t) { + var hmac = createHmac(alg, new Buffer(input.key, 'hex')) + hmac.end(input.data, 'hex') + + var output = hmac.read() + var truncated = input.truncate ? output.slice(0, input.truncate) : output + t.equal(truncated.toString('hex'), input[alg.toLowerCase()]) + t.end() + }) + }) +}) |