UNPKG

@signumjs/core

Version:

Principal package with functions and models for building Signum Network applications.

63 lines 2.41 kB
"use strict"; /** * 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