BlueWallet/blue_modules/bc-bech32/dist/index.js
2020-06-24 12:56:35 +01:00

75 lines
No EOL
2.6 KiB
JavaScript

"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.decodeBc32Data = exports.encodeBc32Data = exports.encodeSegwitAddress = exports.decodeSegwitAddress = exports.Bech32Version = void 0;
var bech32_1 = __importDefault(require("./bech32"));
var Bech32Version;
(function (Bech32Version) {
Bech32Version[Bech32Version["Origin"] = 1] = "Origin";
Bech32Version[Bech32Version["bis"] = 2] = "bis";
})(Bech32Version = exports.Bech32Version || (exports.Bech32Version = {}));
var convertBits = function (data, fromBits, toBits, pad) {
var acc = 0;
var bits = 0;
var ret = [];
var maxv = (1 << toBits) - 1;
for (var p = 0; p < data.length; ++p) {
var value = data[p];
if (value < 0 || value >> fromBits !== 0) {
return null;
}
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 null;
}
return ret;
};
exports.decodeSegwitAddress = function (hrp, addr) {
var dec = bech32_1.default.decode(addr);
if (dec === null || dec.hrp !== hrp || dec.data.length < 1 || dec.data[0] > 16) {
return null;
}
var res = convertBits(Uint8Array.from(dec.data.slice(1)), 5, 8, false);
if (res === null || res.length < 2 || res.length > 40) {
return null;
}
if (dec.data[0] === 0 && res.length !== 20 && res.length !== 32) {
return null;
}
return { version: dec.data[0], program: res };
};
exports.encodeSegwitAddress = function (hrp, version, program) {
var ret = bech32_1.default.encode(hrp, [version].concat(convertBits(program, 8, 5, true)), Bech32Version.Origin);
if (exports.decodeSegwitAddress(hrp, ret) === null) {
return null;
}
return ret;
};
exports.encodeBc32Data = function (hex) {
var data = Buffer.from(hex, 'hex');
return bech32_1.default.encode(null, convertBits(data, 8, 5, true), Bech32Version.bis);
};
exports.decodeBc32Data = function (data) {
var result = bech32_1.default.decode(data);
if (result) {
var res = convertBits(Buffer.from(result.data), 5, 8, false);
return Buffer.from(res).toString('hex');
}
else {
return null;
}
};
//# sourceMappingURL=index.js.map