faster base58.
This commit is contained in:
parent
9e0adcfec1
commit
42e12f312f
@ -161,9 +161,85 @@ utils.toBase58 = function toBase58(arr) {
|
||||
res = '1' + res;
|
||||
}
|
||||
|
||||
//utils.print(res);
|
||||
//utils.print(utils.toBase582(arr));
|
||||
// assert(utils.toBase582(arr) === res);
|
||||
|
||||
return res;
|
||||
};
|
||||
|
||||
// Ported from:
|
||||
// https://github.com/bitcoin/bitcoin/blob/master/src/base58.cpp
|
||||
utils.toBase582 = function toBase582(buf) {
|
||||
var zeroes = 0;
|
||||
var length = 0;
|
||||
for (var i = 0; i < buf.length; i++) {
|
||||
if (buf[i] !== 0)
|
||||
break;
|
||||
zeroes++;
|
||||
}
|
||||
var size = ((buf.length * 138 / 100) | 0) + 1;
|
||||
var b58 = new Buffer(size);
|
||||
b58.fill(0);
|
||||
for (; i < buf.length; i++) {
|
||||
var carry = buf[i];
|
||||
var j = 0;
|
||||
for (var k = b58.length - 1; k >= 0; k--, j++) {
|
||||
if (carry === 0 && j >= length)
|
||||
break;
|
||||
carry += 256 * b58[k];
|
||||
b58[k] = carry % 58;
|
||||
carry = carry / 58 | 0;
|
||||
}
|
||||
assert(carry === 0);
|
||||
length = j;
|
||||
}
|
||||
var i = size - length;
|
||||
while (b58[i] === 0)
|
||||
i++;
|
||||
var str = '';
|
||||
for (j = 0; j < zeroes; j++)
|
||||
str += '1';
|
||||
for (; i < b58.length; i++)
|
||||
str += base58[b58[i]];
|
||||
return str;
|
||||
};
|
||||
|
||||
utils.fromBase582 = function fromBase58(str) {
|
||||
var zeroes = 0;
|
||||
var i = 0;
|
||||
while (str[i] === '1') {
|
||||
zeroes++;
|
||||
i++;
|
||||
}
|
||||
var b256 = new Buffer(((str.length * 733) / 1000 | 0) + 1);
|
||||
b256.fill(0);
|
||||
while (str[i]) {
|
||||
var ch = unbase58[str[i]];
|
||||
if (ch == null)
|
||||
return;
|
||||
var carry = ch;
|
||||
for (var j = b256.length - 1; j >= 0; j--) {
|
||||
carry += 58 * b256[j];
|
||||
b256[j] = carry % 256;
|
||||
carry = carry / 256 | 0;
|
||||
}
|
||||
assert(carry === 0);
|
||||
i++;
|
||||
}
|
||||
if (str[i] != null)
|
||||
return;
|
||||
i = 0;
|
||||
while (b256[i] === 0)
|
||||
i++;
|
||||
var vch = new Buffer(zeroes + (b256.length - i));
|
||||
for (j = 0; j < zeroes; j++)
|
||||
vch[j] = 0;
|
||||
for (; i < b256.length; i++)
|
||||
vch[i] = b256[i];
|
||||
return vch;
|
||||
};
|
||||
|
||||
utils.fromBase58 = function fromBase58(str) {
|
||||
var i, zeroes, q, w, res, c, z;
|
||||
|
||||
@ -198,7 +274,9 @@ utils.fromBase58 = function fromBase58(str) {
|
||||
for (i = 0; i < zeroes; i++)
|
||||
z.push(0);
|
||||
|
||||
return new Buffer(z.concat(res.toArray()));
|
||||
var ret = new Buffer(z.concat(res.toArray()));
|
||||
// assert(utils.isEqual(ret, utils.fromBase582(str)));
|
||||
return ret;
|
||||
};
|
||||
|
||||
utils.isBase58 = function isBase58(msg) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user