aboutsummaryrefslogtreecommitdiff
path: root/node_modules/create-hmac
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/create-hmac')
-rw-r--r--node_modules/create-hmac/.travis.yml4
-rw-r--r--node_modules/create-hmac/browser.js68
-rw-r--r--node_modules/create-hmac/index.js1
-rw-r--r--node_modules/create-hmac/package.json33
-rw-r--r--node_modules/create-hmac/readme.md19
-rw-r--r--node_modules/create-hmac/test.js41
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
+===
+
+[![Build Status](https://travis-ci.org/crypto-browserify/createHmac.svg)](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()
+ })
+ })
+})