Fixed slice for limited environments in HD and PBKDF2.

This commit is contained in:
Richard Moore 2017-11-08 22:38:11 -05:00
parent d49beb8374
commit a9bc2b5ea8
No known key found for this signature in database
GPG Key ID: 525F70A6FCABC295
4 changed files with 10 additions and 28 deletions

View File

@ -1,6 +1,6 @@
{ {
"name": "ethers-utils", "name": "ethers-utils",
"version": "2.1.5", "version": "2.1.6",
"description": "Utilities for the Ethers Ethereum library.", "description": "Utilities for the Ethers Ethereum library.",
"bugs": { "bugs": {
"url": "http://github.com/ethers-io/ethers.js/issues", "url": "http://github.com/ethers-io/ethers.js/issues",

View File

@ -1,3 +1,6 @@
'use strict';
var convert = require('./convert');
function pbkdf2(password, salt, iterations, keylen, createHmac) { function pbkdf2(password, salt, iterations, keylen, createHmac) {
var hLen var hLen
@ -39,31 +42,10 @@ function pbkdf2(password, salt, iterations, keylen, createHmac) {
var destPos = (i - 1) * hLen var destPos = (i - 1) * hLen
var len = (i === l ? r : hLen) var len = (i === l ? r : hLen)
//T.copy(DK, destPos, 0, len) //T.copy(DK, destPos, 0, len)
DK.set(Array.prototype.slice.call(T, 0, len), destPos); DK.set(convert.arrayify(T).slice(0, len), destPos);
} }
return DK return convert.arrayify(DK)
} }
/*
var hmac = require('./hmac.js');
var utf8 = require('./utf8.js');
var p = require('pbkdf2');
var pw = utf8.toUtf8Bytes('password');
var sa = utf8.toUtf8Bytes('salt');
var t0 = (new Date()).getTime();
for (var i = 0; i < 100; i++) {
pbkdf2(pw, sa, 1000, 40, hmac.createSha512Hmac);
}
var t1 = (new Date()).getTime();
for (var i = 0; i < 100; i++) {
p.pbkdf2Sync('password', 'salt', 1000, 40, 'sha512');
}
var t2 = (new Date()).getTime();
console.log('TT', t1 - t0, t2 - t1);
*/
module.exports = pbkdf2; module.exports = pbkdf2;

View File

@ -82,7 +82,7 @@ utils.defineProperty(HDNode.prototype, '_derive', function(index) {
// Data += ser_32(i) // Data += ser_32(i)
for (var i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); } for (var i = 24; i >= 0; i -= 8) { data[33 + (i >> 3)] = ((index >> (24 - i)) & 0xff); }
var I = utils.createSha512Hmac(this.chainCode).update(data).digest(); var I = utils.arrayify(utils.createSha512Hmac(this.chainCode).update(data).digest());
var IL = utils.bigNumberify(I.slice(0, 32)); var IL = utils.bigNumberify(I.slice(0, 32));
var IR = I.slice(32); var IR = I.slice(32);
@ -130,7 +130,7 @@ utils.defineProperty(HDNode, 'fromSeed', function(seed) {
seed = utils.arrayify(seed); seed = utils.arrayify(seed);
if (seed.length < 16 || seed.length > 64) { throw new Error('invalid seed'); } if (seed.length < 16 || seed.length > 64) { throw new Error('invalid seed'); }
var I = utils.createSha512Hmac(MasterSecret).update(seed).digest(); var I = utils.arrayify(utils.createSha512Hmac(MasterSecret).update(seed).digest());
return new HDNode(secp256k1.keyFromPrivate(I.slice(0, 32)), I.slice(32), 0, 0, 0); return new HDNode(secp256k1.keyFromPrivate(I.slice(0, 32)), I.slice(32), 0, 0, 0);
}); });
@ -160,7 +160,7 @@ function mnemonicToEntropy(mnemonic) {
var words = mnemonic.toLowerCase().split(' '); var words = mnemonic.toLowerCase().split(' ');
if ((words.length % 3) !== 0) { throw new Error('invalid mnemonic'); } if ((words.length % 3) !== 0) { throw new Error('invalid mnemonic'); }
var entropy = new Uint8Array(Math.ceil(11 * words.length / 8)); var entropy = utils.arrayify(new Uint8Array(Math.ceil(11 * words.length / 8)));
var offset = 0; var offset = 0;
for (var i = 0; i < words.length; i++) { for (var i = 0; i < words.length; i++) {

View File

@ -1,6 +1,6 @@
{ {
"name": "ethers-wallet", "name": "ethers-wallet",
"version": "2.1.3", "version": "2.1.4",
"description": "Wallet and signing library for Ethereum.", "description": "Wallet and signing library for Ethereum.",
"bugs": { "bugs": {
"url": "http://github.com/ethers-io/ethers.js/issues", "url": "http://github.com/ethers-io/ethers.js/issues",