From 0ad2d77d02394a9d86a1c942e3ba76b55dc43034 Mon Sep 17 00:00:00 2001 From: Stefan Thomas Date: Tue, 26 Feb 2013 13:56:40 +0100 Subject: [PATCH] JS: Fix erroneous base58 decoding and add tests for issue. --- src/js/base.js | 6 +++++- test/base58-test.js | 20 ++++++++++++++++++++ test/sign-test.js | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 test/base58-test.js create mode 100644 test/sign-test.js diff --git a/src/js/base.js b/src/js/base.js index 47ef551ed..be2cab483 100644 --- a/src/js/base.js +++ b/src/js/base.js @@ -130,7 +130,11 @@ Base.decode_check = function (version, input, alphabet) { if (computed[i] !== checksum[i]) return NaN; - return new BigInteger(buffer.slice(1, -4)); + // We'll use the version byte to add a leading zero, this ensures JSBN doesn't + // intrepret the value as a negative number + buffer[0] = 0; + + return new BigInteger(buffer.slice(0, -4), 256); } exports.Base = Base; diff --git a/test/base58-test.js b/test/base58-test.js new file mode 100644 index 000000000..c143de7b8 --- /dev/null +++ b/test/base58-test.js @@ -0,0 +1,20 @@ +var buster = require("buster"); + +var Seed = require("../src/js/seed").Seed; + +var config = require('../src/js/config').load(require('./config')); + +buster.testCase("Base58", { + "Seed" : { + "saESc82Vun7Ta5EJRzGJbrXb5HNYk" : function () { + var seed = Seed.from_json("saESc82Vun7Ta5EJRzGJbrXb5HNYk"); + buster.assert.equals(seed.to_hex(), "FF1CF838D02B2CF7B45BAC27F5F24F4F"); + }, + "sp6iDHnmiPN7tQFHm5sCW59ax3hfE" : function () { + var seed = Seed.from_json("sp6iDHnmiPN7tQFHm5sCW59ax3hfE"); + buster.assert.equals(seed.to_hex(), "00AD8DA764C3C8AF5F9B8D51C94B9E49"); + } + } +}); + +// vim:sw=2:sts=2:ts=8:et diff --git a/test/sign-test.js b/test/sign-test.js new file mode 100644 index 000000000..405c8ba53 --- /dev/null +++ b/test/sign-test.js @@ -0,0 +1,24 @@ +var buster = require("buster"); + +var Seed = require("../src/js/seed").Seed; + +var config = require('../src/js/config').load(require('./config')); + +buster.testCase("Signing", { + "Keys" : { + "SigningPubKey 1 (ripple-client issue #245)" : function () { + var seed = Seed.from_json("saESc82Vun7Ta5EJRzGJbrXb5HNYk"); + var key = seed.get_key("rBZ4j6MsoctipM6GEyHSjQKzXG3yambDnZ"); + var pub = key.to_hex_pub(); + buster.assert.equals(pub, "0396941B22791A448E5877A44CE98434DB217D6FB97D63F0DAD23BE49ED45173C9"); + }, + "SigningPubKey 2 (master seed)" : function () { + var seed = Seed.from_json("snoPBrXtMeMyMHUVTgbuqAfg1SUTb"); + var key = seed.get_key("rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh"); + var pub = key.to_hex_pub(); + buster.assert.equals(pub, "0330E7FC9D56BB25D6893BA3F317AE5BCF33B3291BD63DB32654A313222F7FD020"); + } + } +}); + +// vim:sw=2:sts=2:ts=8:et