Daniel Cousens
11 years ago
6 changed files with 3 additions and 112 deletions
@ -1,73 +0,0 @@ |
|||
// Base58 encoding/decoding
|
|||
// Originally written by Mike Hearn for BitcoinJ
|
|||
// Copyright (c) 2011 Google Inc
|
|||
// Ported to JavaScript by Stefan Thomas
|
|||
// Merged Buffer refactorings from base58-native by Stephen Pair
|
|||
// Copyright (c) 2013 BitPay Inc
|
|||
|
|||
var assert = require('assert') |
|||
var BigInteger = require('bigi') |
|||
|
|||
var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz' |
|||
var ALPHABET_BUF = new Buffer(ALPHABET, 'ascii') |
|||
var ALPHABET_MAP = {} |
|||
for(var i = 0; i < ALPHABET.length; i++) { |
|||
ALPHABET_MAP[ALPHABET.charAt(i)] = BigInteger.valueOf(i) |
|||
} |
|||
var BASE = BigInteger.valueOf(58) |
|||
|
|||
function encode(buffer) { |
|||
var bi = BigInteger.fromBuffer(buffer) |
|||
var result = new Buffer(buffer.length << 1) |
|||
|
|||
var i = result.length - 1 |
|||
while (bi.signum() > 0) { |
|||
var remainder = bi.mod(BASE) |
|||
bi = bi.divide(BASE) |
|||
|
|||
result[i] = ALPHABET_BUF[remainder.intValue()] |
|||
i-- |
|||
} |
|||
|
|||
// deal with leading zeros
|
|||
var j = 0 |
|||
while (buffer[j] === 0) { |
|||
result[i] = ALPHABET_BUF[0] |
|||
j++ |
|||
i-- |
|||
} |
|||
|
|||
return result.slice(i + 1, result.length).toString('ascii') |
|||
} |
|||
|
|||
function decode(string) { |
|||
if (string.length === 0) return new Buffer(0) |
|||
|
|||
var num = BigInteger.ZERO |
|||
|
|||
for (var i = 0; i < string.length; i++) { |
|||
num = num.multiply(BASE) |
|||
|
|||
var figure = ALPHABET_MAP[string.charAt(i)] |
|||
assert.notEqual(figure, undefined, 'Non-base58 character') |
|||
|
|||
num = num.add(figure) |
|||
} |
|||
|
|||
// deal with leading zeros
|
|||
var j = 0 |
|||
while ((j < string.length) && (string[j] === ALPHABET[0])) { |
|||
j++ |
|||
} |
|||
|
|||
var buffer = num.toBuffer() |
|||
var leadingZeros = new Buffer(j) |
|||
leadingZeros.fill(0) |
|||
|
|||
return Buffer.concat([leadingZeros, buffer]) |
|||
} |
|||
|
|||
module.exports = { |
|||
encode: encode, |
|||
decode: decode |
|||
} |
@ -1,36 +0,0 @@ |
|||
var assert = require('assert') |
|||
var base58 = require('../src/base58') |
|||
|
|||
var fixtures = require('./fixtures/base58.json') |
|||
|
|||
describe('base58', function() { |
|||
describe('decode', function() { |
|||
it('can decode Bitcoin core test data', function() { |
|||
fixtures.valid.forEach(function(f) { |
|||
var actual = base58.decode(f.string) |
|||
var expected = f.hex |
|||
|
|||
assert.strictEqual(actual.toString('hex'), expected) |
|||
}) |
|||
}) |
|||
|
|||
fixtures.invalid.forEach(function(f) { |
|||
it('throws on ' + f.description, function() { |
|||
assert.throws(function() { |
|||
base58.decode(f.string) |
|||
}, /Non-base58 character/) |
|||
}) |
|||
}) |
|||
}) |
|||
|
|||
describe('encode', function() { |
|||
it('can encode Bitcoin core test data', function() { |
|||
fixtures.valid.forEach(function(f) { |
|||
var actual = base58.encode(new Buffer(f.hex, 'hex')) |
|||
var expected = f.string.trim() |
|||
|
|||
assert.strictEqual(actual, expected) |
|||
}) |
|||
}) |
|||
}) |
|||
}) |
Loading…
Reference in new issue