UNPKG

@dip1059/bitcoinjs-lib

Version:

bitcoinjs-lib with some other btc based network support. Cloned from https://github.com/junderw/bitcoinjs-lib/tree/cashv5

108 lines (107 loc) 2.18 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); /** * @license * https://github.com/bitcoincashjs/cashaddr * Copyright (c) 2017-2018 Emilio Almansi * Distributed under the MIT software license, see the accompanying * file LICENSE or http://www.opensource.org/licenses/mit-license.php. */ const validation_1 = require('./validation'); /** * Base32 encoding and decoding. * * @module base32 */ /** * Charset containing the 32 symbols used in the base32 encoding. * @private */ const CHARSET = 'qpzry9x8gf2tvdw0s3jn54khce6mua7l'; /** * Inverted index mapping each symbol into its index within the charset. * @private */ const CHARSET_INVERSE_INDEX = { q: 0, p: 1, z: 2, r: 3, y: 4, 9: 5, x: 6, 8: 7, g: 8, f: 9, 2: 10, t: 11, v: 12, d: 13, w: 14, 0: 15, s: 16, 3: 17, j: 18, n: 19, 5: 20, 4: 21, k: 22, h: 23, c: 24, e: 25, 6: 26, m: 27, u: 28, a: 29, 7: 30, l: 31, }; /** * Encodes the given array of 5-bit integers as a base32-encoded string. * * @static * @param {Uint8Array} data Array of integers between 0 and 31 inclusive. * @returns {string} * @throws {ValidationError} */ function encode(data) { validation_1.validate( data instanceof Uint8Array, 'Invalid data: ' + data + '.', ); let base32 = ''; for (const value of data) { validation_1.validate( 0 <= value && value < 32, 'Invalid value: ' + value + '.', ); base32 += CHARSET[value]; } return base32; } exports.encode = encode; /** * Decodes the given base32-encoded string into an array of 5-bit integers. * * @static * @param {string} string * @returns {Uint8Array} * @throws {ValidationError} */ function decode(strng) { validation_1.validate( typeof strng === 'string', 'Invalid base32-encoded string: ' + strng + '.', ); const data = new Uint8Array(strng.length); for (let i = 0; i < strng.length; ++i) { const value = strng[i]; validation_1.validate( value in CHARSET_INVERSE_INDEX, 'Invalid value: ' + value + '.', ); data[i] = CHARSET_INVERSE_INDEX[value]; } return data; } exports.decode = decode;