did-sdk-js
Version:
js sdk for did and vc according to mcps did spec
80 lines • 2.81 kB
JavaScript
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
;