aboutsummaryrefslogtreecommitdiff
path: root/node_modules/evp_bytestokey
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/evp_bytestokey
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
downloadwallet-core-de98e0b232509d5f40c135d540a70e415272ff85.tar.xz
node_modules
Diffstat (limited to 'node_modules/evp_bytestokey')
-rw-r--r--node_modules/evp_bytestokey/index.js68
-rw-r--r--node_modules/evp_bytestokey/package.json31
-rw-r--r--node_modules/evp_bytestokey/readme.md13
-rw-r--r--node_modules/evp_bytestokey/test.js19
4 files changed, 131 insertions, 0 deletions
diff --git a/node_modules/evp_bytestokey/index.js b/node_modules/evp_bytestokey/index.js
new file mode 100644
index 000000000..25fbc9c24
--- /dev/null
+++ b/node_modules/evp_bytestokey/index.js
@@ -0,0 +1,68 @@
+var md5 = require('create-hash/md5')
+module.exports = EVP_BytesToKey
+function EVP_BytesToKey (password, salt, keyLen, ivLen) {
+ if (!Buffer.isBuffer(password)) {
+ password = new Buffer(password, 'binary')
+ }
+ if (salt && !Buffer.isBuffer(salt)) {
+ salt = new Buffer(salt, 'binary')
+ }
+ keyLen = keyLen / 8
+ ivLen = ivLen || 0
+ var ki = 0
+ var ii = 0
+ var key = new Buffer(keyLen)
+ var iv = new Buffer(ivLen)
+ var addmd = 0
+ var md_buf
+ var i
+ var bufs = []
+ while (true) {
+ if (addmd++ > 0) {
+ bufs.push(md_buf)
+ }
+ bufs.push(password)
+ if (salt) {
+ bufs.push(salt)
+ }
+ md_buf = md5(Buffer.concat(bufs))
+ bufs = []
+ i = 0
+ if (keyLen > 0) {
+ while (true) {
+ if (keyLen === 0) {
+ break
+ }
+ if (i === md_buf.length) {
+ break
+ }
+ key[ki++] = md_buf[i]
+ keyLen--
+ i++
+ }
+ }
+ if (ivLen > 0 && i !== md_buf.length) {
+ while (true) {
+ if (ivLen === 0) {
+ break
+ }
+ if (i === md_buf.length) {
+ break
+ }
+ iv[ii++] = md_buf[i]
+ ivLen--
+ i++
+ }
+ }
+ if (keyLen === 0 && ivLen === 0) {
+ break
+ }
+ }
+ for (i = 0; i < md_buf.length; i++) {
+ md_buf[i] = 0
+ }
+ return {
+ key: key,
+ iv: iv
+ }
+}
diff --git a/node_modules/evp_bytestokey/package.json b/node_modules/evp_bytestokey/package.json
new file mode 100644
index 000000000..e9e96b8ac
--- /dev/null
+++ b/node_modules/evp_bytestokey/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "evp_bytestokey",
+ "version": "1.0.0",
+ "description": "he super secure key derivation algorithm from openssl",
+ "main": "index.js",
+ "scripts": {
+ "test": "standard && node test.js | tspec"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/crypto-browserify/EVP_BytesToKey.git"
+ },
+ "keywords": [
+ "crypto",
+ "openssl"
+ ],
+ "author": "Calvin Metcalf <calvin.metcalf@gmail.com>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/crypto-browserify/EVP_BytesToKey/issues"
+ },
+ "homepage": "https://github.com/crypto-browserify/EVP_BytesToKey",
+ "dependencies": {
+ "create-hash": "^1.1.1"
+ },
+ "devDependencies": {
+ "standard": "^5.3.1",
+ "tap-spec": "^4.1.0",
+ "tape": "^4.2.0"
+ }
+}
diff --git a/node_modules/evp_bytestokey/readme.md b/node_modules/evp_bytestokey/readme.md
new file mode 100644
index 000000000..86234dbf3
--- /dev/null
+++ b/node_modules/evp_bytestokey/readme.md
@@ -0,0 +1,13 @@
+EVP_BytesToKey
+===
+
+The super secure [key derivation algorithm from openssl](https://wiki.openssl.org/index.php/Manual:EVP_BytesToKey(3)) (spoiler alert not actually secure, only every use it for compatibility reasons).
+
+Api:
+===
+
+```js
+var result = EVP_BytesToKey('password', 'salt', keyLen, ivLen);
+Buffer.isBuffer(result.password); // true
+Buffer.isBuffer(result.iv); // true
+```
diff --git a/node_modules/evp_bytestokey/test.js b/node_modules/evp_bytestokey/test.js
new file mode 100644
index 000000000..a638fa03f
--- /dev/null
+++ b/node_modules/evp_bytestokey/test.js
@@ -0,0 +1,19 @@
+var test = require('tape')
+var evp = require('./')
+var crypto = require('crypto')
+
+function runTest (password) {
+ test('password: ' + password, function (t) {
+ t.plan(1)
+ var keys = evp(password, false, 256, 16)
+ var nodeCipher = crypto.createCipher('aes-256-ctr', password)
+ var ourCipher = crypto.createCipheriv('aes-256-ctr', keys.key, keys.iv)
+ var nodeOut = nodeCipher.update('foooooo')
+ var ourOut = ourCipher.update('foooooo')
+ t.equals(nodeOut.toString('hex'), ourOut.toString('hex'))
+ })
+}
+runTest('password')
+runTest('ふっかつ あきる すぶり はやい つける まゆげ たんさん みんぞく ねほりはほり せまい たいまつばな ひはん')
+runTest('Z͑ͫ̓ͪ̂ͫ̽͏̴̙̤̞͉͚̯̞̠͍A̴̵̜̰͔ͫ͗͢L̠ͨͧͩ͘G̴̻͈͍͔̹̑͗̎̅͛́Ǫ̵̹̻̝̳͂̌̌͘!͖̬̰̙̗̿̋ͥͥ̂ͣ̐́́͜͞')
+runTest('💩')