Kyle Drake
11 years ago
7 changed files with 7 additions and 120 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