meteor-node-stubs 1.2.18 → 1.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/node_modules/@meteorjs/browserify-sign/browser/sign.js +1 -1
- package/node_modules/@meteorjs/browserify-sign/elliptic/README.md +238 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/benchmarks/deps/jodid.js +82 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/benchmarks/deps/secp256k1.js +41 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/benchmarks/index.js +153 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/benchmarks/package.json +21 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/dist/.gitkeep +0 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/dist/elliptic.js +8961 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/dist/elliptic.min.js +1 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/curve/base.js +381 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/curve/edwards.js +435 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/curve/index.js +8 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/curve/mont.js +178 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/curve/short.js +938 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/curves.js +206 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/ec/index.js +278 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/ec/key.js +121 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/ec/signature.js +176 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/eddsa/index.js +121 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/eddsa/key.js +95 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/eddsa/signature.js +66 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/precomputed/secp256k1.js +780 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic/utils.js +122 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/lib/elliptic.js +13 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/api-test.js +20 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/curve-test.js +357 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/ecdh-test.js +43 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/ecdsa-test.js +547 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/ed25519-test.js +138 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/fixtures/derivation-fixtures.js +3842 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/fixtures/sign.input +1024 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/index.js +10 -0
- package/node_modules/@meteorjs/browserify-sign/elliptic/test/unittests.html +39 -0
- package/node_modules/@meteorjs/browserify-sign/package.json +2 -1
- package/node_modules/pbkdf2/.eslintrc +45 -0
- package/node_modules/pbkdf2/.github/FUNDING.yml +12 -0
- package/node_modules/pbkdf2/.nycrc +10 -0
- package/node_modules/pbkdf2/CHANGELOG.md +345 -0
- package/node_modules/pbkdf2/README.md +27 -9
- package/node_modules/pbkdf2/browser.js +4 -2
- package/node_modules/pbkdf2/index.js +30 -25
- package/node_modules/pbkdf2/lib/async.js +108 -104
- package/node_modules/pbkdf2/lib/default-encoding.js +8 -6
- package/node_modules/pbkdf2/lib/precondition.js +16 -14
- package/node_modules/pbkdf2/lib/sync-browser.js +120 -94
- package/node_modules/pbkdf2/lib/sync.js +59 -38
- package/node_modules/pbkdf2/lib/to-buffer.js +18 -11
- package/node_modules/pbkdf2/package.json +75 -68
- package/package.json +1 -1
|
@@ -1,118 +1,122 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var defaultEncoding = require('./default-encoding')
|
|
5
|
-
var sync = require('./sync')
|
|
6
|
-
var toBuffer = require('./to-buffer')
|
|
3
|
+
var Buffer = require('safe-buffer').Buffer;
|
|
7
4
|
|
|
8
|
-
var
|
|
9
|
-
var
|
|
5
|
+
var checkParameters = require('./precondition');
|
|
6
|
+
var defaultEncoding = require('./default-encoding');
|
|
7
|
+
var sync = require('./sync');
|
|
8
|
+
var toBuffer = require('./to-buffer');
|
|
9
|
+
|
|
10
|
+
var ZERO_BUF;
|
|
11
|
+
var subtle = global.crypto && global.crypto.subtle;
|
|
10
12
|
var toBrowser = {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
var checks = []
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return false
|
|
38
|
-
})
|
|
39
|
-
checks[algo] = prom
|
|
40
|
-
return prom
|
|
13
|
+
sha: 'SHA-1',
|
|
14
|
+
'sha-1': 'SHA-1',
|
|
15
|
+
sha1: 'SHA-1',
|
|
16
|
+
sha256: 'SHA-256',
|
|
17
|
+
'sha-256': 'SHA-256',
|
|
18
|
+
sha384: 'SHA-384',
|
|
19
|
+
'sha-384': 'SHA-384',
|
|
20
|
+
'sha-512': 'SHA-512',
|
|
21
|
+
sha512: 'SHA-512'
|
|
22
|
+
};
|
|
23
|
+
var checks = [];
|
|
24
|
+
var nextTick;
|
|
25
|
+
function getNextTick() {
|
|
26
|
+
if (nextTick) {
|
|
27
|
+
return nextTick;
|
|
28
|
+
}
|
|
29
|
+
if (global.process && global.process.nextTick) {
|
|
30
|
+
nextTick = global.process.nextTick;
|
|
31
|
+
} else if (global.queueMicrotask) {
|
|
32
|
+
nextTick = global.queueMicrotask;
|
|
33
|
+
} else if (global.setImmediate) {
|
|
34
|
+
nextTick = global.setImmediate;
|
|
35
|
+
} else {
|
|
36
|
+
nextTick = global.setTimeout;
|
|
37
|
+
}
|
|
38
|
+
return nextTick;
|
|
41
39
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
return nextTick
|
|
40
|
+
function browserPbkdf2(password, salt, iterations, length, algo) {
|
|
41
|
+
return subtle.importKey('raw', password, { name: 'PBKDF2' }, false, ['deriveBits']).then(function (key) {
|
|
42
|
+
return subtle.deriveBits({
|
|
43
|
+
name: 'PBKDF2',
|
|
44
|
+
salt: salt,
|
|
45
|
+
iterations: iterations,
|
|
46
|
+
hash: {
|
|
47
|
+
name: algo
|
|
48
|
+
}
|
|
49
|
+
}, key, length << 3);
|
|
50
|
+
}).then(function (res) {
|
|
51
|
+
return Buffer.from(res);
|
|
52
|
+
});
|
|
57
53
|
}
|
|
58
|
-
function
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
54
|
+
function checkNative(algo) {
|
|
55
|
+
if (global.process && !global.process.browser) {
|
|
56
|
+
return Promise.resolve(false);
|
|
57
|
+
}
|
|
58
|
+
if (!subtle || !subtle.importKey || !subtle.deriveBits) {
|
|
59
|
+
return Promise.resolve(false);
|
|
60
|
+
}
|
|
61
|
+
if (checks[algo] !== undefined) {
|
|
62
|
+
return checks[algo];
|
|
63
|
+
}
|
|
64
|
+
ZERO_BUF = ZERO_BUF || Buffer.alloc(8);
|
|
65
|
+
var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo)
|
|
66
|
+
.then(
|
|
67
|
+
function () { return true; },
|
|
68
|
+
function () { return false; }
|
|
69
|
+
);
|
|
70
|
+
checks[algo] = prom;
|
|
71
|
+
return prom;
|
|
73
72
|
}
|
|
74
73
|
|
|
75
|
-
function resolvePromise
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
74
|
+
function resolvePromise(promise, callback) {
|
|
75
|
+
promise.then(function (out) {
|
|
76
|
+
getNextTick()(function () {
|
|
77
|
+
callback(null, out);
|
|
78
|
+
});
|
|
79
|
+
}, function (e) {
|
|
80
|
+
getNextTick()(function () {
|
|
81
|
+
callback(e);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
85
84
|
}
|
|
86
85
|
module.exports = function (password, salt, iterations, keylen, digest, callback) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
86
|
+
if (typeof digest === 'function') {
|
|
87
|
+
callback = digest;
|
|
88
|
+
digest = undefined;
|
|
89
|
+
}
|
|
91
90
|
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
digest = digest || 'sha1';
|
|
92
|
+
var algo = toBrowser[digest.toLowerCase()];
|
|
94
93
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
94
|
+
if (!algo || typeof global.Promise !== 'function') {
|
|
95
|
+
getNextTick()(function () {
|
|
96
|
+
var out;
|
|
97
|
+
try {
|
|
98
|
+
out = sync(password, salt, iterations, keylen, digest);
|
|
99
|
+
} catch (e) {
|
|
100
|
+
callback(e);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
callback(null, out);
|
|
104
|
+
});
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
checkParameters(iterations, keylen);
|
|
109
|
+
password = toBuffer(password, defaultEncoding, 'Password');
|
|
110
|
+
salt = toBuffer(salt, defaultEncoding, 'Salt');
|
|
111
|
+
if (typeof callback !== 'function') {
|
|
112
|
+
throw new Error('No callback provided to pbkdf2');
|
|
113
|
+
}
|
|
112
114
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
+
resolvePromise(checkNative(algo).then(function (resp) {
|
|
116
|
+
if (resp) {
|
|
117
|
+
return browserPbkdf2(password, salt, iterations, keylen, algo);
|
|
118
|
+
}
|
|
115
119
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
120
|
+
return sync(password, salt, iterations, keylen, digest);
|
|
121
|
+
}), callback);
|
|
122
|
+
};
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var defaultEncoding;
|
|
2
4
|
/* istanbul ignore next */
|
|
3
5
|
if (global.process && global.process.browser) {
|
|
4
|
-
|
|
6
|
+
defaultEncoding = 'utf-8';
|
|
5
7
|
} else if (global.process && global.process.version) {
|
|
6
|
-
|
|
8
|
+
var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10);
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary';
|
|
9
11
|
} else {
|
|
10
|
-
|
|
12
|
+
defaultEncoding = 'utf-8';
|
|
11
13
|
}
|
|
12
|
-
module.exports = defaultEncoding
|
|
14
|
+
module.exports = defaultEncoding;
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs
|
|
2
4
|
|
|
3
5
|
module.exports = function (iterations, keylen) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
if (typeof iterations !== 'number') {
|
|
7
|
+
throw new TypeError('Iterations not a number');
|
|
8
|
+
}
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
10
|
+
if (iterations < 0) {
|
|
11
|
+
throw new TypeError('Bad iterations');
|
|
12
|
+
}
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
if (typeof keylen !== 'number') {
|
|
15
|
+
throw new TypeError('Key length not a number');
|
|
16
|
+
}
|
|
15
17
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
18
|
+
if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) { /* eslint no-self-compare: 0 */
|
|
19
|
+
throw new TypeError('Bad key length');
|
|
20
|
+
}
|
|
21
|
+
};
|
|
@@ -1,105 +1,131 @@
|
|
|
1
|
-
|
|
2
|
-
var RIPEMD160 = require('ripemd160')
|
|
3
|
-
var sha = require('sha.js')
|
|
4
|
-
var Buffer = require('safe-buffer').Buffer
|
|
1
|
+
'use strict';
|
|
5
2
|
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
3
|
+
var md5 = require('create-hash/md5');
|
|
4
|
+
var RIPEMD160 = require('ripemd160');
|
|
5
|
+
var sha = require('sha.js');
|
|
6
|
+
var Buffer = require('safe-buffer').Buffer;
|
|
9
7
|
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
sha1: 20,
|
|
14
|
-
sha224: 28,
|
|
15
|
-
sha256: 32,
|
|
16
|
-
sha384: 48,
|
|
17
|
-
sha512: 64,
|
|
18
|
-
rmd160: 20,
|
|
19
|
-
ripemd160: 20
|
|
20
|
-
}
|
|
8
|
+
var checkParameters = require('./precondition');
|
|
9
|
+
var defaultEncoding = require('./default-encoding');
|
|
10
|
+
var toBuffer = require('./to-buffer');
|
|
21
11
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
12
|
+
var ZEROS = Buffer.alloc(128);
|
|
13
|
+
var sizes = {
|
|
14
|
+
__proto__: null,
|
|
15
|
+
md5: 16,
|
|
16
|
+
sha1: 20,
|
|
17
|
+
sha224: 28,
|
|
18
|
+
sha256: 32,
|
|
19
|
+
sha384: 48,
|
|
20
|
+
sha512: 64,
|
|
21
|
+
'sha512-256': 32,
|
|
22
|
+
ripemd160: 20,
|
|
23
|
+
rmd160: 20
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
var mapping = {
|
|
27
|
+
__proto__: null,
|
|
28
|
+
'sha-1': 'sha1',
|
|
29
|
+
'sha-224': 'sha224',
|
|
30
|
+
'sha-256': 'sha256',
|
|
31
|
+
'sha-384': 'sha384',
|
|
32
|
+
'sha-512': 'sha512',
|
|
33
|
+
'ripemd-160': 'ripemd160'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function rmd160Func(data) {
|
|
37
|
+
return new RIPEMD160().update(data).digest();
|
|
48
38
|
}
|
|
49
39
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
40
|
+
function getDigest(alg) {
|
|
41
|
+
function shaFunc(data) {
|
|
42
|
+
return sha(alg).update(data).digest();
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
if (alg === 'rmd160' || alg === 'ripemd160') {
|
|
46
|
+
return rmd160Func;
|
|
47
|
+
}
|
|
48
|
+
if (alg === 'md5') {
|
|
49
|
+
return md5;
|
|
50
|
+
}
|
|
51
|
+
return shaFunc;
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
function
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
54
|
+
function Hmac(alg, key, saltLen) {
|
|
55
|
+
var hash = getDigest(alg);
|
|
56
|
+
var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;
|
|
57
|
+
|
|
58
|
+
if (key.length > blocksize) {
|
|
59
|
+
key = hash(key);
|
|
60
|
+
} else if (key.length < blocksize) {
|
|
61
|
+
key = Buffer.concat([key, ZEROS], blocksize);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]);
|
|
65
|
+
var opad = Buffer.allocUnsafe(blocksize + sizes[alg]);
|
|
66
|
+
for (var i = 0; i < blocksize; i++) {
|
|
67
|
+
ipad[i] = key[i] ^ 0x36;
|
|
68
|
+
opad[i] = key[i] ^ 0x5C;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4);
|
|
72
|
+
ipad.copy(ipad1, 0, 0, blocksize);
|
|
73
|
+
this.ipad1 = ipad1;
|
|
74
|
+
this.ipad2 = ipad;
|
|
75
|
+
this.opad = opad;
|
|
76
|
+
this.alg = alg;
|
|
77
|
+
this.blocksize = blocksize;
|
|
78
|
+
this.hash = hash;
|
|
79
|
+
this.size = sizes[alg];
|
|
68
80
|
}
|
|
69
81
|
|
|
70
|
-
function
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
82
|
+
Hmac.prototype.run = function (data, ipad) {
|
|
83
|
+
data.copy(ipad, this.blocksize);
|
|
84
|
+
var h = this.hash(ipad);
|
|
85
|
+
h.copy(this.opad, this.blocksize);
|
|
86
|
+
return this.hash(this.opad);
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
function pbkdf2(password, salt, iterations, keylen, digest) {
|
|
90
|
+
checkParameters(iterations, keylen);
|
|
91
|
+
password = toBuffer(password, defaultEncoding, 'Password');
|
|
92
|
+
salt = toBuffer(salt, defaultEncoding, 'Salt');
|
|
93
|
+
|
|
94
|
+
var lowerDigest = (digest || 'sha1').toLowerCase();
|
|
95
|
+
var mappedDigest = mapping[lowerDigest] || lowerDigest;
|
|
96
|
+
var size = sizes[mappedDigest];
|
|
97
|
+
if (typeof size !== 'number' || !size) {
|
|
98
|
+
throw new TypeError('Digest algorithm not supported: ' + digest);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
var hmac = new Hmac(mappedDigest, password, salt.length);
|
|
102
|
+
|
|
103
|
+
var DK = Buffer.allocUnsafe(keylen);
|
|
104
|
+
var block1 = Buffer.allocUnsafe(salt.length + 4);
|
|
105
|
+
salt.copy(block1, 0, 0, salt.length);
|
|
106
|
+
|
|
107
|
+
var destPos = 0;
|
|
108
|
+
var hLen = size;
|
|
109
|
+
var l = Math.ceil(keylen / hLen);
|
|
110
|
+
|
|
111
|
+
for (var i = 1; i <= l; i++) {
|
|
112
|
+
block1.writeUInt32BE(i, salt.length);
|
|
113
|
+
|
|
114
|
+
var T = hmac.run(block1, hmac.ipad1);
|
|
115
|
+
var U = T;
|
|
116
|
+
|
|
117
|
+
for (var j = 1; j < iterations; j++) {
|
|
118
|
+
U = hmac.run(U, hmac.ipad2);
|
|
119
|
+
for (var k = 0; k < hLen; k++) {
|
|
120
|
+
T[k] ^= U[k];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
T.copy(DK, destPos);
|
|
125
|
+
destPos += hLen;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return DK;
|
|
103
129
|
}
|
|
104
130
|
|
|
105
|
-
module.exports = pbkdf2
|
|
131
|
+
module.exports = pbkdf2;
|
|
@@ -1,52 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
1
3
|
var sizes = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
__proto__: null,
|
|
5
|
+
md5: 16,
|
|
6
|
+
sha1: 20,
|
|
7
|
+
sha224: 28,
|
|
8
|
+
sha256: 32,
|
|
9
|
+
sha384: 48,
|
|
10
|
+
sha512: 64,
|
|
11
|
+
'sha512-256': 32,
|
|
12
|
+
rmd160: 20,
|
|
13
|
+
ripemd160: 20
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
var mapping = {
|
|
17
|
+
__proto__: null,
|
|
18
|
+
'sha-1': 'sha1',
|
|
19
|
+
'sha-224': 'sha224',
|
|
20
|
+
'sha-256': 'sha256',
|
|
21
|
+
'sha-384': 'sha384',
|
|
22
|
+
'sha-512': 'sha512',
|
|
23
|
+
'ripemd-160': 'ripemd160'
|
|
24
|
+
};
|
|
11
25
|
|
|
12
|
-
var createHmac = require('create-hmac')
|
|
13
|
-
var Buffer = require('safe-buffer').Buffer
|
|
26
|
+
var createHmac = require('create-hmac');
|
|
27
|
+
var Buffer = require('safe-buffer').Buffer;
|
|
14
28
|
|
|
15
|
-
var checkParameters = require('./precondition')
|
|
16
|
-
var defaultEncoding = require('./default-encoding')
|
|
17
|
-
var toBuffer = require('./to-buffer')
|
|
29
|
+
var checkParameters = require('./precondition');
|
|
30
|
+
var defaultEncoding = require('./default-encoding');
|
|
31
|
+
var toBuffer = require('./to-buffer');
|
|
18
32
|
|
|
19
|
-
function pbkdf2
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
33
|
+
function pbkdf2(password, salt, iterations, keylen, digest) {
|
|
34
|
+
checkParameters(iterations, keylen);
|
|
35
|
+
password = toBuffer(password, defaultEncoding, 'Password');
|
|
36
|
+
salt = toBuffer(salt, defaultEncoding, 'Salt');
|
|
23
37
|
|
|
24
|
-
|
|
38
|
+
var lowerDigest = (digest || 'sha1').toLowerCase();
|
|
39
|
+
var mappedDigest = mapping[lowerDigest] || lowerDigest;
|
|
40
|
+
var size = sizes[mappedDigest];
|
|
41
|
+
if (typeof size !== 'number' || !size) {
|
|
42
|
+
throw new TypeError('Digest algorithm not supported: ' + digest);
|
|
43
|
+
}
|
|
25
44
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
45
|
+
var DK = Buffer.allocUnsafe(keylen);
|
|
46
|
+
var block1 = Buffer.allocUnsafe(salt.length + 4);
|
|
47
|
+
salt.copy(block1, 0, 0, salt.length);
|
|
29
48
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
49
|
+
var destPos = 0;
|
|
50
|
+
var hLen = size;
|
|
51
|
+
var l = Math.ceil(keylen / hLen);
|
|
33
52
|
|
|
34
|
-
|
|
35
|
-
|
|
53
|
+
for (var i = 1; i <= l; i++) {
|
|
54
|
+
block1.writeUInt32BE(i, salt.length);
|
|
36
55
|
|
|
37
|
-
|
|
38
|
-
|
|
56
|
+
var T = createHmac(mappedDigest, password).update(block1).digest();
|
|
57
|
+
var U = T;
|
|
39
58
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
59
|
+
for (var j = 1; j < iterations; j++) {
|
|
60
|
+
U = createHmac(mappedDigest, password).update(U).digest();
|
|
61
|
+
for (var k = 0; k < hLen; k++) {
|
|
62
|
+
T[k] ^= U[k];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
44
65
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
T.copy(DK, destPos);
|
|
67
|
+
destPos += hLen;
|
|
68
|
+
}
|
|
48
69
|
|
|
49
|
-
|
|
70
|
+
return DK;
|
|
50
71
|
}
|
|
51
72
|
|
|
52
|
-
module.exports = pbkdf2
|
|
73
|
+
module.exports = pbkdf2;
|
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var Buffer = require('safe-buffer').Buffer;
|
|
4
|
+
var toBuffer = require('to-buffer');
|
|
5
|
+
|
|
6
|
+
var useUint8Array = typeof Uint8Array !== 'undefined';
|
|
7
|
+
var useArrayBuffer = useUint8Array && typeof ArrayBuffer !== 'undefined';
|
|
8
|
+
var isView = useArrayBuffer && ArrayBuffer.isView;
|
|
2
9
|
|
|
3
10
|
module.exports = function (thing, encoding, name) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
if (
|
|
12
|
+
typeof thing === 'string'
|
|
13
|
+
|| Buffer.isBuffer(thing)
|
|
14
|
+
|| (useUint8Array && thing instanceof Uint8Array)
|
|
15
|
+
|| (isView && isView(thing))
|
|
16
|
+
) {
|
|
17
|
+
return toBuffer(thing, encoding);
|
|
18
|
+
}
|
|
19
|
+
throw new TypeError(name + ' must be a string, a Buffer, a Uint8Array, or a DataView');
|
|
20
|
+
};
|