UNPKG

@helium/address

Version:

Helium public key utilities

85 lines 3.59 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.sortAddresses = exports.bs58MultisigPublicKey = exports.bs58N = exports.bs58M = exports.bs58PublicKey = exports.bs58Version = exports.bs58KeyType = exports.bs58NetType = exports.byteToKeyType = exports.byteToNetType = exports.bs58ToBin = exports.bs58CheckEncode = void 0; /* eslint-disable no-bitwise */ const sha2_1 = require("@noble/hashes/sha2"); const bs58_1 = __importDefault(require("bs58")); const bs58CheckEncode = (version, binary) => { const vPayload = Buffer.concat([Buffer.from([version]), binary]); const checksum = (0, sha2_1.sha256)((0, sha2_1.sha256)(vPayload)); const checksumBytes = Buffer.alloc(4, Buffer.from(checksum).toString('hex'), 'hex'); const result = Buffer.concat([vPayload, checksumBytes]); return bs58_1.default.encode(result); }; exports.bs58CheckEncode = bs58CheckEncode; const bs58ToBin = (bs58Address) => { const bin = bs58_1.default.decode(bs58Address); const vPayload = bin.slice(0, -4); const payload = bin.slice(1, -4); const checksum = bin.slice(-4); const checksumVerify = (0, sha2_1.sha256)((0, sha2_1.sha256)(vPayload)); const checksumVerifyBytes = Buffer.alloc(4, Buffer.from(checksumVerify).toString('hex'), 'hex'); if (!checksumVerifyBytes.equals(Buffer.from(checksum))) { throw new Error('invalid checksum'); } return Buffer.from(payload); }; exports.bs58ToBin = bs58ToBin; const byteToNetType = (byte) => byte & 0xf0; exports.byteToNetType = byteToNetType; const byteToKeyType = (byte) => byte & 0x0f; exports.byteToKeyType = byteToKeyType; const bs58NetType = (bs58Address) => { const bin = (0, exports.bs58ToBin)(bs58Address); const byte = Buffer.from(bin).slice(0, 1)[0]; return (0, exports.byteToNetType)(byte); }; exports.bs58NetType = bs58NetType; const bs58KeyType = (bs58Address) => { const bin = (0, exports.bs58ToBin)(bs58Address); const byte = Buffer.from(bin).slice(0, 1)[0]; return (0, exports.byteToKeyType)(byte); }; exports.bs58KeyType = bs58KeyType; const bs58Version = (bs58Address) => { const bin = bs58_1.default.decode(bs58Address); const version = bin.slice(0, 1)[0]; return version; }; exports.bs58Version = bs58Version; const bs58PublicKey = (bs58Address) => { const bin = (0, exports.bs58ToBin)(bs58Address); const publicKey = Buffer.from(bin).slice(1); return publicKey; }; exports.bs58PublicKey = bs58PublicKey; const bs58M = (bs58Address) => { const bin = (0, exports.bs58ToBin)(bs58Address); const M = bin[1]; return M; }; exports.bs58M = bs58M; const bs58N = (bs58Address) => { const bin = (0, exports.bs58ToBin)(bs58Address); const N = bin[2]; return N; }; exports.bs58N = bs58N; const bs58MultisigPublicKey = (bs58Address) => { const bin = (0, exports.bs58ToBin)(bs58Address); const publicKey = Buffer.from(bin).slice(3); return publicKey; }; exports.bs58MultisigPublicKey = bs58MultisigPublicKey; const sortAddresses = (addresses) => { const addressMap = addresses.map((address) => { const charCodeArray = Array.from(address.b58).map((character) => character.charCodeAt(0)); return { address, buffer: new Uint8Array(charCodeArray) }; }); return addressMap.sort((a, b) => Buffer.compare(a.buffer, b.buffer)).map((obj) => obj.address); }; exports.sortAddresses = sortAddresses; //# sourceMappingURL=utils.js.map