UNPKG

did-sdk-js

Version:

js sdk for did and vc according to mcps did spec

80 lines 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AddressUtils = void 0; const bech32 = require("bech32"); /** * Utilities for address operations */ class AddressUtils { /** * Decodes an address in bech32 format. * @param address The bech32 address to decode * @returns The decoded address buffer */ // static decodeAddress(address: string): Buffer { // const decodeAddress = bech32.decode(address); // return Buffer.from(bech32.fromWords(decodeAddress.words)); // } /** * Encodes an address from input data bytes. * @param pubkeyHash The public key to encode * @param hrp The address prefix * @param type The output type (default: hex) * @returns Bech32 address */ // static encodeAddress(pubkeyHash: string, hrp = 'mcps', type = 'hex') { // const words = bech32.toWords(Buffer.from(pubkeyHash, type)); // return bech32.encode(hrp, words); // } /** * ConvertAndEncode converts from a base64 encoded byte array to bach32 encoded byte string and then to bech32 * @param hrp The address prefix * @param data Base64 encoded byte array * @returns Bech32 address */ static convertAndEncode(hrp, data) { const converted = AddressUtils.convertBits(data, 8, 5, true); return bech32.encode(hrp, converted); } /** * Copy from https://github.com/sipa/bech32/blob/master/ref/javascript/segwit_addr.js */ static convertBits(data, frombits, tobits, pad) { let acc = 0; let bits = 0; let ret = []; let maxv = (1 << tobits) - 1; for (let p = 0; p < data.length; ++p) { let value = data[p]; if (value < 0 || value >> frombits !== 0) { return []; } acc = (acc << frombits) | value; bits += frombits; while (bits >= tobits) { bits -= tobits; ret.push((acc >> bits) & maxv); } } if (pad) { if (bits > 0) { ret.push((acc << (tobits - bits)) & maxv); } } else if (bits >= frombits || (acc << (tobits - bits)) & maxv) { return []; } return ret; } /** * DecodeAndConvert decodes a bech32 encoded string and converts to base64 encoded bytes * @param address Bech32 address * @returns Base64 encoded bytes */ static decodeAndConvert(address) { const decodeAddress = bech32.decode(address); return bech32.convertBits(decodeAddress.words, 5, 8, false); } } exports.AddressUtils = AddressUtils; //# sourceMappingURL=address.js.map