UNPKG

@signumjs/core

Version:

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

74 lines 2.54 kB
"use strict"; // tslint:disable:no-bitwise Object.defineProperty(exports, "__esModule", { value: true }); exports.convertNumericIdToReedSolomonAddress = void 0; /** * Original work Copyright (c) 2018 PoC-Consortium * Modified work Copyright (c) 2019 Burst Apps Team * Modified work Copyright (c) 2021 Signum Network */ const internal_1 = require("./internal"); /** * @internal * Encode a numeric id into Reed-Solomon address <Prefix>-XXXX-XXXX-XXXX-XXXXX * @param numericId The numeric Id * @param prefix The prefix for the address * @return the Reed-Solomon address encoding, or undefined if passed null, undefined * */ const convertNumericIdToReedSolomonAddress = (numericId, prefix) => { if (!(numericId && prefix)) { throw new Error('Invalid arguments'); } if (!/^\d+$/.test(numericId)) { throw new Error(`Invalid numeric id: ${numericId}`); } const plainString10 = [], codeword = internal_1.initialCodeword.slice(); let pos = 0; let length = numericId.length; for (let i = 0; i < length; i++) { plainString10[i] = numericId.charCodeAt(i) - '0'.charCodeAt(0); } let digit32 = 0, newLength = 0; do { digit32 = 0; newLength = 0; for (let i = 0; i < length; i++) { digit32 = digit32 * 10 + plainString10[i]; if (digit32 >= 32) { plainString10[newLength] = digit32 >> 5; digit32 &= 31; newLength++; } else if (newLength > 0) { plainString10[newLength] = 0; newLength++; } } length = newLength; codeword[pos] = digit32; pos++; } while (length > 0); const p = [0, 0, 0, 0]; for (let i = internal_1.base32Length - 1; i >= 0; i--) { const fb = codeword[i] ^ p[3]; p[3] = p[2] ^ (0, internal_1.gmult)(30, fb); p[2] = p[1] ^ (0, internal_1.gmult)(6, fb); p[1] = p[0] ^ (0, internal_1.gmult)(9, fb); p[0] = (0, internal_1.gmult)(17, fb); } codeword[13] = p[0]; codeword[14] = p[1]; codeword[15] = p[2]; codeword[16] = p[3]; let out = prefix + '-'; for (let i = 0; i < 17; i++) { out += internal_1.alphabet[codeword[internal_1.cwmap[i]]]; if ((i & 3) === 3 && i < 13) { out += '-'; } } return out; }; exports.convertNumericIdToReedSolomonAddress = convertNumericIdToReedSolomonAddress; //# sourceMappingURL=convertNumericIdToReedSolomonAddress.js.map