@signumjs/core
Version:
Principal package with functions and models for building Signum Network applications.
63 lines • 2.41 kB
JavaScript
;
/**
* Original work Copyright (c) 2018 PoC-Consortium
* Modified work Copyright (c) 2019 Burst Apps Team
* Modified work Copyright (c) 2021 Signum Network
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertReedSolomonAddressToNumericId = void 0;
const internal_1 = require("./internal");
const ensureReedSolomonAddress_1 = require("./ensureReedSolomonAddress");
const tokenizeReedSolomonAddress_1 = require("./tokenizeReedSolomonAddress");
/**
* @internal
* Converts <Prefix>-XXXX-XXXX-XXXX-XXXXX into numeric Id
* @param address The Reed-Solomon address
* @return The numeric id, or undefined if address is invalid
*
*/
const convertReedSolomonAddressToNumericId = (address) => {
(0, ensureReedSolomonAddress_1.ensureReedSolomonAddress)(address);
const { rs } = (0, tokenizeReedSolomonAddress_1.tokenizeReedSolomonAddress)(address);
const codeword = internal_1.initialCodeword.slice();
let codewordLength = 0;
for (let i = 0; i < rs.length; i++) {
const pos = internal_1.alphabet.indexOf(rs.charAt(i));
if (pos <= -1 || pos > internal_1.alphabet.length) {
continue;
}
if (codewordLength > 16) {
throw new Error('Invalid codeword length');
}
const codeworkIndex = internal_1.cwmap[codewordLength];
codeword[codeworkIndex] = pos;
codewordLength++;
}
let length = internal_1.base32Length;
const cypherString32 = [];
for (let i = 0; i < length; i++) {
cypherString32[i] = codeword[length - i - 1];
}
let out = '', newLength, digit10 = 0;
do { // base 32 to base 10 conversion
newLength = 0;
digit10 = 0;
for (let i = 0; i < length; i++) {
digit10 = digit10 * 32 + cypherString32[i];
if (digit10 >= 10) {
cypherString32[newLength] = Math.floor(digit10 / 10);
digit10 %= 10;
newLength += 1;
}
else if (newLength > 0) {
cypherString32[newLength] = 0;
newLength += 1;
}
}
length = newLength;
out += digit10;
} while (length > 0);
return out.split('').reverse().join('');
};
exports.convertReedSolomonAddressToNumericId = convertReedSolomonAddressToNumericId;
//# sourceMappingURL=convertReedSolomonAddressToNumericId.js.map