Fixed bug in Base62 operations when using different alphabets

This commit is contained in:
n1474335 2019-11-13 17:59:16 +00:00
parent d3473a7462
commit cce84c3782
2 changed files with 18 additions and 8 deletions

View File

@ -42,15 +42,22 @@ class FromBase62 extends Operation {
*/ */
run(input, args) { run(input, args) {
if (input.length < 1) return []; if (input.length < 1) return [];
const ALPHABET = Utils.expandAlphRange(args[0]).join(""); const alphabet = Utils.expandAlphRange(args[0]).join("");
const BN = BigNumber.clone({ ALPHABET }); const BN62 = BigNumber.clone({ ALPHABET: alphabet });
const re = new RegExp("[^" + ALPHABET.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g"); const re = new RegExp("[^" + alphabet.replace(/[[\]\\\-^$]/g, "\\$&") + "]", "g");
input = input.replace(re, ""); input = input.replace(re, "");
const number = new BN(input, 62); // Read number in using Base62 alphabet
const number = new BN62(input, 62);
// Copy to new BigNumber object that uses the default alphabet
const normalized = new BigNumber(number);
return Utils.convertToByteArray(number.toString(16), "Hex"); // Convert to hex and add leading 0 if required
let hex = normalized.toString(16);
if (hex.length % 2 !== 0) hex = "0" + hex;
return Utils.convertToByteArray(hex, "Hex");
} }
} }

View File

@ -44,12 +44,15 @@ class ToBase62 extends Operation {
input = new Uint8Array(input); input = new Uint8Array(input);
if (input.length < 1) return ""; if (input.length < 1) return "";
const ALPHABET = Utils.expandAlphRange(args[0]).join(""); const alphabet = Utils.expandAlphRange(args[0]).join("");
const BN = BigNumber.clone({ ALPHABET }); const BN62 = BigNumber.clone({ ALPHABET: alphabet });
input = toHexFast(input).toUpperCase(); input = toHexFast(input).toUpperCase();
const number = new BN(input, 16); // Read number in as hex using normal alphabet
const normalized = new BigNumber(input, 16);
// Copy to BigNumber clone that uses the specified Base62 alphabet
const number = new BN62(normalized);
return number.toString(62); return number.toString(62);
} }