parent
b486aef7bc
commit
dcc387f196
@ -0,0 +1,27 @@ |
||||
Copyright © 2011, Paul Vorbach. All rights reserved. |
||||
Copyright © 2009, Jeff Mott. All rights reserved. |
||||
|
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this |
||||
list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright notice, this |
||||
list of conditions and the following disclaimer in the documentation and/or |
||||
other materials provided with the distribution. |
||||
* Neither the name Crypto-JS nor the names of its contributors may be used to |
||||
endorse or promote products derived from this software without specific prior |
||||
written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1 @@ |
||||
**enc** provides crypto character encoding utilities. |
@ -0,0 +1,33 @@ |
||||
var charenc = { |
||||
// UTF-8 encoding
|
||||
utf8: { |
||||
// Convert a string to a byte array
|
||||
stringToBytes: function(str) { |
||||
return charenc.bin.stringToBytes(unescape(encodeURIComponent(str))); |
||||
}, |
||||
|
||||
// Convert a byte array to a string
|
||||
bytesToString: function(bytes) { |
||||
return decodeURIComponent(escape(charenc.bin.bytesToString(bytes))); |
||||
} |
||||
}, |
||||
|
||||
// Binary encoding
|
||||
bin: { |
||||
// Convert a string to a byte array
|
||||
stringToBytes: function(str) { |
||||
for (var bytes = [], i = 0; i < str.length; i++) |
||||
bytes.push(str.charCodeAt(i) & 0xFF); |
||||
return bytes; |
||||
}, |
||||
|
||||
// Convert a byte array to a string
|
||||
bytesToString: function(bytes) { |
||||
for (var str = [], i = 0; i < bytes.length; i++) |
||||
str.push(String.fromCharCode(bytes[i])); |
||||
return str.join(''); |
||||
} |
||||
} |
||||
}; |
||||
|
||||
module.exports = charenc; |
@ -0,0 +1,54 @@ |
||||
{ |
||||
"_from": "charenc@0.0.2", |
||||
"_id": "charenc@0.0.2", |
||||
"_inBundle": false, |
||||
"_integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", |
||||
"_location": "/charenc", |
||||
"_phantomChildren": {}, |
||||
"_requested": { |
||||
"type": "version", |
||||
"registry": true, |
||||
"raw": "charenc@0.0.2", |
||||
"name": "charenc", |
||||
"escapedName": "charenc", |
||||
"rawSpec": "0.0.2", |
||||
"saveSpec": null, |
||||
"fetchSpec": "0.0.2" |
||||
}, |
||||
"_requiredBy": [ |
||||
"/md5" |
||||
], |
||||
"_resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", |
||||
"_shasum": "c0a1d2f3a7092e03774bfa83f14c0fc5790a8667", |
||||
"_spec": "charenc@0.0.2", |
||||
"_where": "/home/sigonasr2/divar/server2/node_modules/md5", |
||||
"author": { |
||||
"name": "Paul Vorbach", |
||||
"email": "paul@vorb.de", |
||||
"url": "http://vorb.de" |
||||
}, |
||||
"bugs": { |
||||
"url": "https://github.com/pvorb/node-charenc/issues" |
||||
}, |
||||
"bundleDependencies": false, |
||||
"deprecated": false, |
||||
"description": "character encoding utilities", |
||||
"engines": { |
||||
"node": "*" |
||||
}, |
||||
"homepage": "https://github.com/pvorb/node-charenc#readme", |
||||
"license": "BSD-3-Clause", |
||||
"main": "charenc.js", |
||||
"name": "charenc", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git://github.com/pvorb/node-charenc.git" |
||||
}, |
||||
"tags": [ |
||||
"utf8", |
||||
"binary", |
||||
"byte", |
||||
"string" |
||||
], |
||||
"version": "0.0.2" |
||||
} |
@ -0,0 +1,27 @@ |
||||
Copyright © 2011, Paul Vorbach. All rights reserved. |
||||
Copyright © 2009, Jeff Mott. All rights reserved. |
||||
|
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this |
||||
list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright notice, this |
||||
list of conditions and the following disclaimer in the documentation and/or |
||||
other materials provided with the distribution. |
||||
* Neither the name Crypto-JS nor the names of its contributors may be used to |
||||
endorse or promote products derived from this software without specific prior |
||||
written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1 @@ |
||||
**crypt** provides utilities for encryption and hashing |
@ -0,0 +1,96 @@ |
||||
(function() { |
||||
var base64map |
||||
= 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/', |
||||
|
||||
crypt = { |
||||
// Bit-wise rotation left
|
||||
rotl: function(n, b) { |
||||
return (n << b) | (n >>> (32 - b)); |
||||
}, |
||||
|
||||
// Bit-wise rotation right
|
||||
rotr: function(n, b) { |
||||
return (n << (32 - b)) | (n >>> b); |
||||
}, |
||||
|
||||
// Swap big-endian to little-endian and vice versa
|
||||
endian: function(n) { |
||||
// If number given, swap endian
|
||||
if (n.constructor == Number) { |
||||
return crypt.rotl(n, 8) & 0x00FF00FF | crypt.rotl(n, 24) & 0xFF00FF00; |
||||
} |
||||
|
||||
// Else, assume array and swap all items
|
||||
for (var i = 0; i < n.length; i++) |
||||
n[i] = crypt.endian(n[i]); |
||||
return n; |
||||
}, |
||||
|
||||
// Generate an array of any length of random bytes
|
||||
randomBytes: function(n) { |
||||
for (var bytes = []; n > 0; n--) |
||||
bytes.push(Math.floor(Math.random() * 256)); |
||||
return bytes; |
||||
}, |
||||
|
||||
// Convert a byte array to big-endian 32-bit words
|
||||
bytesToWords: function(bytes) { |
||||
for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8) |
||||
words[b >>> 5] |= bytes[i] << (24 - b % 32); |
||||
return words; |
||||
}, |
||||
|
||||
// Convert big-endian 32-bit words to a byte array
|
||||
wordsToBytes: function(words) { |
||||
for (var bytes = [], b = 0; b < words.length * 32; b += 8) |
||||
bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF); |
||||
return bytes; |
||||
}, |
||||
|
||||
// Convert a byte array to a hex string
|
||||
bytesToHex: function(bytes) { |
||||
for (var hex = [], i = 0; i < bytes.length; i++) { |
||||
hex.push((bytes[i] >>> 4).toString(16)); |
||||
hex.push((bytes[i] & 0xF).toString(16)); |
||||
} |
||||
return hex.join(''); |
||||
}, |
||||
|
||||
// Convert a hex string to a byte array
|
||||
hexToBytes: function(hex) { |
||||
for (var bytes = [], c = 0; c < hex.length; c += 2) |
||||
bytes.push(parseInt(hex.substr(c, 2), 16)); |
||||
return bytes; |
||||
}, |
||||
|
||||
// Convert a byte array to a base-64 string
|
||||
bytesToBase64: function(bytes) { |
||||
for (var base64 = [], i = 0; i < bytes.length; i += 3) { |
||||
var triplet = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; |
||||
for (var j = 0; j < 4; j++) |
||||
if (i * 8 + j * 6 <= bytes.length * 8) |
||||
base64.push(base64map.charAt((triplet >>> 6 * (3 - j)) & 0x3F)); |
||||
else |
||||
base64.push('='); |
||||
} |
||||
return base64.join(''); |
||||
}, |
||||
|
||||
// Convert a base-64 string to a byte array
|
||||
base64ToBytes: function(base64) { |
||||
// Remove non-base-64 characters
|
||||
base64 = base64.replace(/[^A-Z0-9+\/]/ig, ''); |
||||
|
||||
for (var bytes = [], i = 0, imod4 = 0; i < base64.length; |
||||
imod4 = ++i % 4) { |
||||
if (imod4 == 0) continue; |
||||
bytes.push(((base64map.indexOf(base64.charAt(i - 1)) |
||||
& (Math.pow(2, -2 * imod4 + 8) - 1)) << (imod4 * 2)) |
||||
| (base64map.indexOf(base64.charAt(i)) >>> (6 - imod4 * 2))); |
||||
} |
||||
return bytes; |
||||
} |
||||
}; |
||||
|
||||
module.exports = crypt; |
||||
})(); |
@ -0,0 +1,52 @@ |
||||
{ |
||||
"_from": "crypt@0.0.2", |
||||
"_id": "crypt@0.0.2", |
||||
"_inBundle": false, |
||||
"_integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", |
||||
"_location": "/crypt", |
||||
"_phantomChildren": {}, |
||||
"_requested": { |
||||
"type": "version", |
||||
"registry": true, |
||||
"raw": "crypt@0.0.2", |
||||
"name": "crypt", |
||||
"escapedName": "crypt", |
||||
"rawSpec": "0.0.2", |
||||
"saveSpec": null, |
||||
"fetchSpec": "0.0.2" |
||||
}, |
||||
"_requiredBy": [ |
||||
"/md5" |
||||
], |
||||
"_resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", |
||||
"_shasum": "88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b", |
||||
"_spec": "crypt@0.0.2", |
||||
"_where": "/home/sigonasr2/divar/server2/node_modules/md5", |
||||
"author": { |
||||
"name": "Paul Vorbach", |
||||
"email": "paul@vorb.de", |
||||
"url": "http://vorb.de" |
||||
}, |
||||
"bugs": { |
||||
"url": "https://github.com/pvorb/node-crypt/issues" |
||||
}, |
||||
"bundleDependencies": false, |
||||
"deprecated": false, |
||||
"description": "utilities for encryption and hashing", |
||||
"engines": { |
||||
"node": "*" |
||||
}, |
||||
"homepage": "https://github.com/pvorb/node-crypt#readme", |
||||
"license": "BSD-3-Clause", |
||||
"main": "crypt.js", |
||||
"name": "crypt", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git://github.com/pvorb/node-crypt.git" |
||||
}, |
||||
"tags": [ |
||||
"hash", |
||||
"security" |
||||
], |
||||
"version": "0.0.2" |
||||
} |
@ -0,0 +1,21 @@ |
||||
The MIT License (MIT) |
||||
|
||||
Copyright (c) Feross Aboukhadijeh |
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy |
||||
of this software and associated documentation files (the "Software"), to deal |
||||
in the Software without restriction, including without limitation the rights |
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
||||
copies of the Software, and to permit persons to whom the Software is |
||||
furnished to do so, subject to the following conditions: |
||||
|
||||
The above copyright notice and this permission notice shall be included in |
||||
all copies or substantial portions of the Software. |
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
||||
THE SOFTWARE. |
@ -0,0 +1,53 @@ |
||||
# is-buffer [![travis][travis-image]][travis-url] [![npm][npm-image]][npm-url] [![downloads][downloads-image]][downloads-url] [![javascript style guide][standard-image]][standard-url] |
||||
|
||||
[travis-image]: https://img.shields.io/travis/feross/is-buffer/master.svg |
||||
[travis-url]: https://travis-ci.org/feross/is-buffer |
||||
[npm-image]: https://img.shields.io/npm/v/is-buffer.svg |
||||
[npm-url]: https://npmjs.org/package/is-buffer |
||||
[downloads-image]: https://img.shields.io/npm/dm/is-buffer.svg |
||||
[downloads-url]: https://npmjs.org/package/is-buffer |
||||
[standard-image]: https://img.shields.io/badge/code_style-standard-brightgreen.svg |
||||
[standard-url]: https://standardjs.com |
||||
|
||||
#### Determine if an object is a [`Buffer`](http://nodejs.org/api/buffer.html) (including the [browserify Buffer](https://github.com/feross/buffer)) |
||||
|
||||
[![saucelabs][saucelabs-image]][saucelabs-url] |
||||
|
||||
[saucelabs-image]: https://saucelabs.com/browser-matrix/is-buffer.svg |
||||
[saucelabs-url]: https://saucelabs.com/u/is-buffer |
||||
|
||||
## Why not use `Buffer.isBuffer`? |
||||
|
||||
This module lets you check if an object is a `Buffer` without using `Buffer.isBuffer` (which includes the whole [buffer](https://github.com/feross/buffer) module in [browserify](http://browserify.org/)). |
||||
|
||||
It's future-proof and works in node too! |
||||
|
||||
## install |
||||
|
||||
```bash |
||||
npm install is-buffer |
||||
``` |
||||
|
||||
## usage |
||||
|
||||
```js |
||||
var isBuffer = require('is-buffer') |
||||
|
||||
isBuffer(new Buffer(4)) // true |
||||
|
||||
isBuffer(undefined) // false |
||||
isBuffer(null) // false |
||||
isBuffer('') // false |
||||
isBuffer(true) // false |
||||
isBuffer(false) // false |
||||
isBuffer(0) // false |
||||
isBuffer(1) // false |
||||
isBuffer(1.0) // false |
||||
isBuffer('string') // false |
||||
isBuffer({}) // false |
||||
isBuffer(function foo () {}) // false |
||||
``` |
||||
|
||||
## license |
||||
|
||||
MIT. Copyright (C) [Feross Aboukhadijeh](http://feross.org). |
@ -0,0 +1,21 @@ |
||||
/*! |
||||
* Determine if an object is a Buffer |
||||
* |
||||
* @author Feross Aboukhadijeh <https://feross.org>
|
||||
* @license MIT |
||||
*/ |
||||
|
||||
// The _isBuffer check is for Safari 5-7 support, because it's missing
|
||||
// Object.prototype.constructor. Remove this eventually
|
||||
module.exports = function (obj) { |
||||
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) |
||||
} |
||||
|
||||
function isBuffer (obj) { |
||||
return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) |
||||
} |
||||
|
||||
// For Node v0.10 support. Remove this eventually.
|
||||
function isSlowBuffer (obj) { |
||||
return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) |
||||
} |
@ -0,0 +1,77 @@ |
||||
{ |
||||
"_from": "is-buffer@~1.1.6", |
||||
"_id": "is-buffer@1.1.6", |
||||
"_inBundle": false, |
||||
"_integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", |
||||
"_location": "/is-buffer", |
||||
"_phantomChildren": {}, |
||||
"_requested": { |
||||
"type": "range", |
||||
"registry": true, |
||||
"raw": "is-buffer@~1.1.6", |
||||
"name": "is-buffer", |
||||
"escapedName": "is-buffer", |
||||
"rawSpec": "~1.1.6", |
||||
"saveSpec": null, |
||||
"fetchSpec": "~1.1.6" |
||||
}, |
||||
"_requiredBy": [ |
||||
"/md5" |
||||
], |
||||
"_resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", |
||||
"_shasum": "efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be", |
||||
"_spec": "is-buffer@~1.1.6", |
||||
"_where": "/home/sigonasr2/divar/server2/node_modules/md5", |
||||
"author": { |
||||
"name": "Feross Aboukhadijeh", |
||||
"email": "feross@feross.org", |
||||
"url": "http://feross.org/" |
||||
}, |
||||
"bugs": { |
||||
"url": "https://github.com/feross/is-buffer/issues" |
||||
}, |
||||
"bundleDependencies": false, |
||||
"dependencies": {}, |
||||
"deprecated": false, |
||||
"description": "Determine if an object is a Buffer", |
||||
"devDependencies": { |
||||
"standard": "*", |
||||
"tape": "^4.0.0", |
||||
"zuul": "^3.0.0" |
||||
}, |
||||
"homepage": "https://github.com/feross/is-buffer#readme", |
||||
"keywords": [ |
||||
"buffer", |
||||
"buffers", |
||||
"type", |
||||
"core buffer", |
||||
"browser buffer", |
||||
"browserify", |
||||
"typed array", |
||||
"uint32array", |
||||
"int16array", |
||||
"int32array", |
||||
"float32array", |
||||
"float64array", |
||||
"browser", |
||||
"arraybuffer", |
||||
"dataview" |
||||
], |
||||
"license": "MIT", |
||||
"main": "index.js", |
||||
"name": "is-buffer", |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git://github.com/feross/is-buffer.git" |
||||
}, |
||||
"scripts": { |
||||
"test": "standard && npm run test-node && npm run test-browser", |
||||
"test-browser": "zuul -- test/*.js", |
||||
"test-browser-local": "zuul --local -- test/*.js", |
||||
"test-node": "tape test/*.js" |
||||
}, |
||||
"testling": { |
||||
"files": "test/*.js" |
||||
}, |
||||
"version": "1.1.6" |
||||
} |
@ -0,0 +1,24 @@ |
||||
var isBuffer = require('../') |
||||
var test = require('tape') |
||||
|
||||
test('is-buffer', function (t) { |
||||
t.equal(isBuffer(Buffer.alloc(4)), true, 'new Buffer(4)') |
||||
t.equal(isBuffer(Buffer.allocUnsafeSlow(100)), true, 'SlowBuffer(100)') |
||||
|
||||
t.equal(isBuffer(undefined), false, 'undefined') |
||||
t.equal(isBuffer(null), false, 'null') |
||||
t.equal(isBuffer(''), false, 'empty string') |
||||
t.equal(isBuffer(true), false, 'true') |
||||
t.equal(isBuffer(false), false, 'false') |
||||
t.equal(isBuffer(0), false, '0') |
||||
t.equal(isBuffer(1), false, '1') |
||||
t.equal(isBuffer(1.0), false, '1.0') |
||||
t.equal(isBuffer('string'), false, 'string') |
||||
t.equal(isBuffer({}), false, '{}') |
||||
t.equal(isBuffer([]), false, '[]') |
||||
t.equal(isBuffer(function foo () {}), false, 'function foo () {}') |
||||
t.equal(isBuffer({ isBuffer: null }), false, '{ isBuffer: null }') |
||||
t.equal(isBuffer({ isBuffer: function () { throw new Error() } }), false, '{ isBuffer: function () { throw new Error() } }') |
||||
|
||||
t.end() |
||||
}) |
@ -0,0 +1,7 @@ |
||||
language: node_js |
||||
node_js: |
||||
- 0.12 |
||||
- 4 |
||||
- 5 |
||||
- 6 |
||||
- 7 |
@ -0,0 +1,27 @@ |
||||
Copyright © 2011-2012, Paul Vorbach. |
||||
Copyright © 2009, Jeff Mott. |
||||
|
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this |
||||
list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright notice, this |
||||
list of conditions and the following disclaimer in the documentation and/or |
||||
other materials provided with the distribution. |
||||
* Neither the name Crypto-JS nor the names of its contributors may be used to |
||||
endorse or promote products derived from this software without specific prior |
||||
written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@ -0,0 +1,111 @@ |
||||
# MD5 |
||||
|
||||
[![build status](https://secure.travis-ci.org/pvorb/node-md5.png)](http://travis-ci.org/pvorb/node-md5) [![info badge](https://img.shields.io/npm/dt/md5.svg)](http://npm-stat.com/charts.html?package=md5) |
||||
|
||||
a JavaScript function for hashing messages with MD5. |
||||
|
||||
node-md5 is being sponsored by the following tool; please help to support us by taking a look and signing up to a free trial |
||||
<a href="https://tracking.gitads.io/?repo=node-md5"><img src="https://images.gitads.io/node-md5" alt="GitAds"/></a> |
||||
|
||||
## Installation |
||||
|
||||
You can use this package on the server side as well as the client side. |
||||
|
||||
### [Node.js](http://nodejs.org/): |
||||
|
||||
~~~ |
||||
npm install md5 |
||||
~~~ |
||||
|
||||
|
||||
## API |
||||
|
||||
~~~ javascript |
||||
md5(message) |
||||
~~~ |
||||
|
||||
* `message` -- `String`, `Buffer`, `Array` or `Uint8Array` |
||||
* returns `String` |
||||
|
||||
|
||||
## Usage |
||||
|
||||
~~~ javascript |
||||
var md5 = require('md5'); |
||||
|
||||
console.log(md5('message')); |
||||
~~~ |
||||
|
||||
This will print the following |
||||
|
||||
~~~ |
||||
78e731027d8fd50ed642340b7c9a63b3 |
||||
~~~ |
||||
|
||||
It supports buffers, too |
||||
|
||||
~~~ javascript |
||||
var fs = require('fs'); |
||||
var md5 = require('md5'); |
||||
|
||||
fs.readFile('example.txt', function(err, buf) { |
||||
console.log(md5(buf)); |
||||
}); |
||||
~~~ |
||||
|
||||
## Versions |
||||
|
||||
Before version 2.0.0 there were two packages called md5 on npm, one lowercase, |
||||
one uppercase (the one you're looking at). As of version 2.0.0, all new versions |
||||
of this module will go to lowercase [md5](https://www.npmjs.com/package/md5) on |
||||
npm. To use the correct version, users of this module will have to change their |
||||
code from `require('MD5')` to `require('md5')` if they want to use versions >= |
||||
2.0.0. |
||||
|
||||
|
||||
## Bugs and Issues |
||||
|
||||
If you encounter any bugs or issues, feel free to open an issue at |
||||
[github](https://github.com/pvorb/node-md5/issues). |
||||
|
||||
|
||||
## Credits |
||||
|
||||
This package is based on the work of Jeff Mott, who did a pure JS implementation |
||||
of the MD5 algorithm that was published by Ronald L. Rivest in 1991. I needed a |
||||
npm package of the algorithm, so I used Jeff’s implementation for this package. |
||||
The original implementation can be found in the |
||||
[CryptoJS](http://code.google.com/p/crypto-js/) project. |
||||
|
||||
|
||||
## License |
||||
|
||||
~~~ |
||||
Copyright © 2011-2015, Paul Vorbach. |
||||
Copyright © 2009, Jeff Mott. |
||||
|
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, |
||||
are permitted provided that the following conditions are met: |
||||
|
||||
* Redistributions of source code must retain the above copyright notice, this |
||||
list of conditions and the following disclaimer. |
||||
* Redistributions in binary form must reproduce the above copyright notice, this |
||||
list of conditions and the following disclaimer in the documentation and/or |
||||
other materials provided with the distribution. |
||||
* Neither the name Crypto-JS nor the names of its contributors may be used to |
||||
endorse or promote products derived from this software without specific prior |
||||
written permission. |
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND |
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR |
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON |
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS |
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
||||
~~~ |
@ -0,0 +1,48 @@ |
||||
<input type="file" id="input"> |
||||
<output id="output"></output> |
||||
<style> |
||||
output::before { |
||||
content: "output:"; |
||||
} |
||||
output { |
||||
display: block; |
||||
padding: 1em; |
||||
margin: 1em; |
||||
outline: 1px solid gray; |
||||
white-space: pre-wrap; |
||||
} |
||||
</style> |
||||
<script src="../dist/md5.min.js"></script> |
||||
<script> |
||||
|
||||
|
||||
function readAsArrayBuffer(file){ |
||||
return new Promise(function(resolve) { |
||||
var reader = new FileReader(); |
||||
reader.readAsArrayBuffer(file) |
||||
reader.onload = function(e) { |
||||
resolve(e.target.result) |
||||
}; |
||||
}); |
||||
} |
||||
|
||||
input.onchange = function(e) { |
||||
var file = input.files[0]; |
||||
readAsArrayBuffer(file) |
||||
.then(buffer => { |
||||
console.log(buffer); |
||||
var now = performance.now(); |
||||
var hash = MD5(buffer); |
||||
var after = performance.now() - now; |
||||
output.innerHTML = ` |
||||
file: ${file.name} |
||||
size: ${file.size} bytes |
||||
type: ${file.type} |
||||
md5: ${hash} |
||||
duration: ${after.toFixed(2)} ms |
||||
`; |
||||
}) |
||||
} |
||||
|
||||
|
||||
</script> |
File diff suppressed because one or more lines are too long
@ -0,0 +1,160 @@ |
||||
(function(){ |
||||
var crypt = require('crypt'), |
||||
utf8 = require('charenc').utf8, |
||||
isBuffer = require('is-buffer'), |
||||
bin = require('charenc').bin, |
||||
|
||||
// The core
|
||||
md5 = function (message, options) { |
||||
// Convert to byte array
|
||||
if (message.constructor == String) |
||||
if (options && options.encoding === 'binary') |
||||
message = bin.stringToBytes(message); |
||||
else |
||||
message = utf8.stringToBytes(message); |
||||
else if (isBuffer(message)) |
||||
message = Array.prototype.slice.call(message, 0); |
||||
else if (!Array.isArray(message) && message.constructor !== Uint8Array) |
||||
message = message.toString(); |
||||
// else, assume byte array already
|
||||
|
||||
var m = crypt.bytesToWords(message), |
||||
l = message.length * 8, |
||||
a = 1732584193, |
||||
b = -271733879, |
||||
c = -1732584194, |
||||
d = 271733878; |
||||
|
||||
// Swap endian
|
||||
for (var i = 0; i < m.length; i++) { |
||||
m[i] = ((m[i] << 8) | (m[i] >>> 24)) & 0x00FF00FF | |
||||
((m[i] << 24) | (m[i] >>> 8)) & 0xFF00FF00; |
||||
} |
||||
|
||||
// Padding
|
||||
m[l >>> 5] |= 0x80 << (l % 32); |
||||
m[(((l + 64) >>> 9) << 4) + 14] = l; |
||||
|
||||
// Method shortcuts
|
||||
var FF = md5._ff, |
||||
GG = md5._gg, |
||||
HH = md5._hh, |
||||
II = md5._ii; |
||||
|
||||
for (var i = 0; i < m.length; i += 16) { |
||||
|
||||
var aa = a, |
||||
bb = b, |
||||
cc = c, |
||||
dd = d; |
||||
|
||||
a = FF(a, b, c, d, m[i+ 0], 7, -680876936); |
||||
d = FF(d, a, b, c, m[i+ 1], 12, -389564586); |
||||
c = FF(c, d, a, b, m[i+ 2], 17, 606105819); |
||||
b = FF(b, c, d, a, m[i+ 3], 22, -1044525330); |
||||
a = FF(a, b, c, d, m[i+ 4], 7, -176418897); |
||||
d = FF(d, a, b, c, m[i+ 5], 12, 1200080426); |
||||
c = FF(c, d, a, b, m[i+ 6], 17, -1473231341); |
||||
b = FF(b, c, d, a, m[i+ 7], 22, -45705983); |
||||
a = FF(a, b, c, d, m[i+ 8], 7, 1770035416); |
||||
d = FF(d, a, b, c, m[i+ 9], 12, -1958414417); |
||||
c = FF(c, d, a, b, m[i+10], 17, -42063); |
||||
b = FF(b, c, d, a, m[i+11], 22, -1990404162); |
||||
a = FF(a, b, c, d, m[i+12], 7, 1804603682); |
||||
d = FF(d, a, b, c, m[i+13], 12, -40341101); |
||||
c = FF(c, d, a, b, m[i+14], 17, -1502002290); |
||||
b = FF(b, c, d, a, m[i+15], 22, 1236535329); |
||||
|
||||
a = GG(a, b, c, d, m[i+ 1], 5, -165796510); |
||||
d = GG(d, a, b, c, m[i+ 6], 9, -1069501632); |
||||
c = GG(c, d, a, b, m[i+11], 14, 643717713); |
||||
b = GG(b, c, d, a, m[i+ 0], 20, -373897302); |
||||
a = GG(a, b, c, d, m[i+ 5], 5, -701558691); |
||||
d = GG(d, a, b, c, m[i+10], 9, 38016083); |
||||
c = GG(c, d, a, b, m[i+15], 14, -660478335); |
||||
b = GG(b, c, d, a, m[i+ 4], 20, -405537848); |
||||
a = GG(a, b, c, d, m[i+ 9], 5, 568446438); |
||||
d = GG(d, a, b, c, m[i+14], 9, -1019803690); |
||||
c = GG(c, d, a, b, m[i+ 3], 14, -187363961); |
||||
b = GG(b, c, d, a, m[i+ 8], 20, 1163531501); |
||||
a = GG(a, b, c, d, m[i+13], 5, -1444681467); |
||||
d = GG(d, a, b, c, m[i+ 2], 9, -51403784); |
||||
c = GG(c, d, a, b, m[i+ 7], 14, 1735328473); |
||||
b = GG(b, c, d, a, m[i+12], 20, -1926607734); |
||||
|
||||
a = HH(a, b, c, d, m[i+ 5], 4, -378558); |
||||
d = HH(d, a, b, c, m[i+ 8], 11, -2022574463); |
||||
c = HH(c, d, a, b, m[i+11], 16, 1839030562); |
||||
b = HH(b, c, d, a, m[i+14], 23, -35309556); |
||||
a = HH(a, b, c, d, m[i+ 1], 4, -1530992060); |
||||
d = HH(d, a, b, c, m[i+ 4], 11, 1272893353); |
||||
c = HH(c, d, a, b, m[i+ 7], 16, -155497632); |
||||
b = HH(b, c, d, a, m[i+10], 23, -1094730640); |
||||
a = HH(a, b, c, d, m[i+13], 4, 681279174); |
||||
d = HH(d, a, b, c, m[i+ 0], 11, -358537222); |
||||
c = HH(c, d, a, b, m[i+ 3], 16, -722521979); |
||||
b = HH(b, c, d, a, m[i+ 6], 23, 76029189); |
||||
a = HH(a, b, c, d, m[i+ 9], 4, -640364487); |
||||
d = HH(d, a, b, c, m[i+12], 11, -421815835); |
||||
c = HH(c, d, a, b, m[i+15], 16, 530742520); |
||||
b = HH(b, c, d, a, m[i+ 2], 23, -995338651); |
||||
|
||||
a = II(a, b, c, d, m[i+ 0], 6, -198630844); |
||||
d = II(d, a, b, c, m[i+ 7], 10, 1126891415); |
||||
c = II(c, d, a, b, m[i+14], 15, -1416354905); |
||||
b = II(b, c, d, a, m[i+ 5], 21, -57434055); |
||||
a = II(a, b, c, d, m[i+12], 6, 1700485571); |
||||
d = II(d, a, b, c, m[i+ 3], 10, -1894986606); |
||||
c = II(c, d, a, b, m[i+10], 15, -1051523); |
||||
b = II(b, c, d, a, m[i+ 1], 21, -2054922799); |
||||
a = II(a, b, c, d, m[i+ 8], 6, 1873313359); |
||||
d = II(d, a, b, c, m[i+15], 10, -30611744); |
||||
c = II(c, d, a, b, m[i+ 6], 15, -1560198380); |
||||
b = II(b, c, d, a, m[i+13], 21, 1309151649); |
||||
a = II(a, b, c, d, m[i+ 4], 6, -145523070); |
||||
d = II(d, a, b, c, m[i+11], 10, -1120210379); |
||||
c = II(c, d, a, b, m[i+ 2], 15, 718787259); |
||||
b = II(b, c, d, a, m[i+ 9], 21, -343485551); |
||||
|
||||
a = (a + aa) >>> 0; |
||||
b = (b + bb) >>> 0; |
||||
c = (c + cc) >>> 0; |
||||
d = (d + dd) >>> 0; |
||||
} |
||||
|
||||
return crypt.endian([a, b, c, d]); |
||||
}; |
||||
|
||||
// Auxiliary functions
|
||||
md5._ff = function (a, b, c, d, x, s, t) { |
||||
var n = a + (b & c | ~b & d) + (x >>> 0) + t; |
||||
return ((n << s) | (n >>> (32 - s))) + b; |
||||
}; |
||||
md5._gg = function (a, b, c, d, x, s, t) { |
||||
var n = a + (b & d | c & ~d) + (x >>> 0) + t; |
||||
return ((n << s) | (n >>> (32 - s))) + b; |
||||
}; |
||||
md5._hh = function (a, b, c, d, x, s, t) { |
||||
var n = a + (b ^ c ^ d) + (x >>> 0) + t; |
||||
return ((n << s) | (n >>> (32 - s))) + b; |
||||
}; |
||||
md5._ii = function (a, b, c, d, x, s, t) { |
||||
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t; |
||||
return ((n << s) | (n >>> (32 - s))) + b; |
||||
}; |
||||
|
||||
// Package private blocksize
|
||||
md5._blocksize = 16; |
||||
md5._digestsize = 16; |
||||
|
||||
module.exports = function (message, options) { |
||||
if (message === undefined || message === null) |
||||
throw new Error('Illegal argument ' + message); |
||||
|
||||
var digestbytes = crypt.wordsToBytes(md5(message, options)); |
||||
return options && options.asBytes ? digestbytes : |
||||
options && options.asString ? bin.bytesToString(digestbytes) : |
||||
crypt.bytesToHex(digestbytes); |
||||
}; |
||||
|
||||
})(); |
@ -0,0 +1,71 @@ |
||||
{ |
||||
"_from": "md5@^2.3.0", |
||||
"_id": "md5@2.3.0", |
||||
"_inBundle": false, |
||||
"_integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", |
||||
"_location": "/md5", |
||||
"_phantomChildren": {}, |
||||
"_requested": { |
||||
"type": "range", |
||||
"registry": true, |
||||
"raw": "md5@^2.3.0", |
||||
"name": "md5", |
||||
"escapedName": "md5", |
||||
"rawSpec": "^2.3.0", |
||||
"saveSpec": null, |
||||
"fetchSpec": "^2.3.0" |
||||
}, |
||||
"_requiredBy": [ |
||||
"#USER", |
||||
"/" |
||||
], |
||||
"_resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", |
||||
"_shasum": "c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f", |
||||
"_spec": "md5@^2.3.0", |
||||
"_where": "/home/sigonasr2/divar/server2", |
||||
"author": { |
||||
"name": "Paul Vorbach", |
||||
"email": "paul@vorba.ch", |
||||
"url": "http://paul.vorba.ch" |
||||
}, |
||||
"bugs": { |
||||
"url": "https://github.com/pvorb/node-md5/issues" |
||||
}, |
||||
"bundleDependencies": false, |
||||
"contributors": [ |
||||
{ |
||||
"name": "salba" |
||||
} |
||||
], |
||||
"dependencies": { |
||||
"charenc": "0.0.2", |
||||
"crypt": "0.0.2", |
||||
"is-buffer": "~1.1.6" |
||||
}, |
||||
"deprecated": false, |
||||
"description": "js function for hashing messages with MD5", |
||||
"devDependencies": { |
||||
"mocha": "~2.3.4", |
||||
"webpack": "~2.4.1" |
||||
}, |
||||
"homepage": "https://github.com/pvorb/node-md5#readme", |
||||
"license": "BSD-3-Clause", |
||||
"main": "md5.js", |
||||
"name": "md5", |
||||
"optionalDependencies": {}, |
||||
"repository": { |
||||
"type": "git", |
||||
"url": "git://github.com/pvorb/node-md5.git" |
||||
}, |
||||
"scripts": { |
||||
"test": "mocha", |
||||
"webpack": "webpack -p" |
||||
}, |
||||
"tags": [ |
||||
"md5", |
||||
"hash", |
||||
"encryption", |
||||
"message digest" |
||||
], |
||||
"version": "2.3.0" |
||||
} |
@ -0,0 +1,75 @@ |
||||
var md5 = require('./md5.js'); |
||||
var assert = require('assert'); |
||||
|
||||
describe('md5', function () { |
||||
|
||||
it('should throw an error for an undefined value', function() { |
||||
assert.throws(function() { |
||||
md5(undefined); |
||||
}); |
||||
}); |
||||
|
||||
it('should allow the hashing of the string `undefined`', function() { |
||||
assert.equal('5e543256c480ac577d30f76f9120eb74', md5('undefined')); |
||||
}); |
||||
|
||||
it('should throw an error for `null`', function() { |
||||
assert.throws(function() { |
||||
md5(null); |
||||
}); |
||||
}); |
||||
|
||||
it('should return the expected MD5 hash for "message"', function() { |
||||
assert.equal('78e731027d8fd50ed642340b7c9a63b3', md5('message')); |
||||
}); |
||||
|
||||
it('should not return the same hash for random numbers twice', function() { |
||||
var msg1 = Math.floor((Math.random() * 100000) + 1) + (new Date).getTime(); |
||||
var msg2 = Math.floor((Math.random() * 100000) + 1) + (new Date).getTime(); |
||||
|
||||
if (msg1 !== msg2) { |
||||
assert.notEqual(md5(msg1), md5(msg2)); |
||||
} else { |
||||
assert.equal(md5(msg1), md5(msg1)); |
||||
} |
||||
}); |
||||
|
||||
it('should support Node.js Buffers', function() { |
||||
var buffer = new Buffer('message áßäöü', 'utf8'); |
||||
|
||||
assert.equal(md5(buffer), md5('message áßäöü')); |
||||
}) |
||||
|
||||
it('should be able to use a binary encoded string', function() { |
||||
var hash1 = md5('abc', { asString: true }); |
||||
var hash2 = md5(hash1 + 'a', { asString: true, encoding : 'binary' }); |
||||
var hash3 = md5(hash1 + 'a', { encoding : 'binary' }); |
||||
assert.equal(hash3, '131f0ac52813044f5110e4aec638c169'); |
||||
}); |
||||
|
||||
it('should support Uint8Array', function() { |
||||
// Polyfills
|
||||
if (!Array.from) { |
||||
Array.from = function(src, fn) { |
||||
var result = new Array(src.length); |
||||
for (var i = 0; i < src.length; ++i) |
||||
result[i] = fn(src[i]); |
||||
return result; |
||||
}; |
||||
} |
||||
if (!Uint8Array.from) { |
||||
Uint8Array.from = function(src) { |
||||
var result = new Uint8Array(src.length); |
||||
for (var i = 0; i < src.length; ++i) |
||||
result[i] = src[i]; |
||||
return result; |
||||
}; |
||||
} |
||||
|
||||
var message = 'foobarbaz'; |
||||
var u8arr = Uint8Array.from( |
||||
Array.from(message, function(c) { return c.charCodeAt(0); })); |
||||
var u8aHash = md5(u8arr); |
||||
assert.equal(u8aHash, md5(message)); |
||||
}); |
||||
}); |
@ -0,0 +1,13 @@ |
||||
const {resolve} = require('path'); |
||||
|
||||
module.exports = { |
||||
entry: [ |
||||
'./md5.js' |
||||
], |
||||
output: { |
||||
path: resolve('./dist'), |
||||
filename: 'md5.min.js', |
||||
libraryTarget: "var", |
||||
library: "MD5" |
||||
} |
||||
}; |
@ -0,0 +1,11 @@ |
||||
{ |
||||
"name": "secrethash", |
||||
"version": "1.0.0", |
||||
"main": "secrethash.js", |
||||
"scripts": { |
||||
"test": "echo \"Error: no test specified\" && exit 1" |
||||
}, |
||||
"author": "", |
||||
"license": "ISC", |
||||
"description": "" |
||||
} |
Loading…
Reference in new issue