diff --git a/src/js/base.js b/src/js/base.js index 47ef551e..be2cab48 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 00000000..c143de7b --- /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 00000000..405c8ba5 --- /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