UNPKG

@tomo-inc/ledger-bitcoin-babylon

Version:

Ledger Hardware Wallet Babylon Application Client

85 lines 6.13 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createExtendedPubkey = void 0; const crypto = __importStar(require("crypto")); const bs58_1 = __importDefault(require("bs58")); // Double SHA256 hash function function hash256(data) { return crypto .createHash('sha256') .update(crypto.createHash('sha256').update(data).digest()) .digest(); } function createExtendedPubkey(network, depth = 0, parentFingerprint = Buffer.from('00000000', 'hex'), childIndex = 0, chainCode = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'), pubkey) { let version; // Define version based on network if (network === 'Mainnet') { version = Buffer.from('0488b21e', 'hex'); // xpub } else if (network === 'Testnet') { version = Buffer.from('043587cf', 'hex'); // tpub } else { throw new Error("Invalid network. Use 'Mainnet' or 'Testnet'."); } // Serialize extended public key components const serialized = Buffer.concat([ version, Buffer.from([depth]), parentFingerprint, Buffer.from([ childIndex >> 24, (childIndex >> 16) & 0xff, (childIndex >> 8) & 0xff, childIndex & 0xff, ]), chainCode, pubkey, // 33 bytes: compressed public key ]); // Calculate checksum (double SHA256, first 4 bytes) const checksum = hash256(serialized).slice(0, 4); // Append checksum and encode in Base58 using bs58 const extendedPubkey = bs58_1.default.encode(Buffer.concat([serialized, checksum])); return extendedPubkey; } exports.createExtendedPubkey = createExtendedPubkey; // // Example usage // const network = 'testnet'; // Change to 'mainnet' for xpub // const depth = 0; // Root level // const parentFingerprint = Buffer.from('00000000', 'hex'); // No parent (root key) // const childIndex = 0; // Root index // const chainCode = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex'); // Example chain code // const pubkey = Buffer.from('0250929b74c1a04954b78b4b6035e97a5e078a5a0f28ec96d547bfee9ace803ac0', 'hex'); // Compressed public key // // Generate xpub or tpub based on the network // const extendedPubkeyTestnet = createExtendedPubkey(network, depth, parentFingerprint, childIndex, chainCode, pubkey); // console.log(`Generated extended public key (testnet): ${extendedPubkeyTestnet}`); // const networkMainnet = 'mainnet'; // const extendedPubkeyMainnet = createExtendedPubkey(networkMainnet, depth, parentFingerprint, childIndex, chainCode, pubkey); // console.log(`Generated extended public key (mainnet): ${extendedPubkeyMainnet}`); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieHB1Yi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saWIvYmFieWxvbi94cHViLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDLGdEQUF3QjtBQUV4Qiw4QkFBOEI7QUFDOUIsU0FBUyxPQUFPLENBQUMsSUFBWTtJQUMzQixPQUFPLE1BQU07U0FDVixVQUFVLENBQUMsUUFBUSxDQUFDO1NBQ3BCLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6RCxNQUFNLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRCxTQUFnQixvQkFBb0IsQ0FDbEMsT0FBOEIsRUFDOUIsS0FBSyxHQUFHLENBQUMsRUFDVCxpQkFBaUIsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsRUFDbEQsVUFBVSxHQUFHLENBQUMsRUFDZCxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FDckIsa0VBQWtFLEVBQ2xFLEtBQUssQ0FDTixFQUNELE1BQWM7SUFFZCxJQUFJLE9BQWUsQ0FBQztJQUVwQixrQ0FBa0M7SUFDbEMsSUFBSSxPQUFPLEtBQUssU0FBUyxFQUFFO1FBQ3pCLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU87S0FDbEQ7U0FBTSxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7UUFDaEMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTztLQUNsRDtTQUFNO1FBQ0wsTUFBTSxJQUFJLEtBQUssQ0FBQyw4Q0FBOEMsQ0FBQyxDQUFDO0tBQ2pFO0lBRUQsMkNBQTJDO0lBQzNDLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDL0IsT0FBTztRQUNQLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQixpQkFBaUI7UUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNWLFVBQVUsSUFBSSxFQUFFO1lBQ2hCLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxHQUFHLElBQUk7WUFDekIsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSTtZQUN4QixVQUFVLEdBQUcsSUFBSTtTQUNsQixDQUFDO1FBQ0YsU0FBUztRQUNULE1BQU0sRUFBRSxrQ0FBa0M7S0FDM0MsQ0FBQyxDQUFDO0lBRUgsb0RBQW9EO0lBQ3BELE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRWpELGtEQUFrRDtJQUNsRCxNQUFNLGNBQWMsR0FBRyxjQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzFFLE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUEzQ0Qsb0RBMkNDO0FBRUQsbUJBQW1CO0FBQ25CLDhEQUE4RDtBQUM5RCxrQ0FBa0M7QUFDbEMscUZBQXFGO0FBQ3JGLHVDQUF1QztBQUN2QyxtSUFBbUk7QUFDbkkscUlBQXFJO0FBRXJJLGdEQUFnRDtBQUNoRCx3SEFBd0g7QUFDeEgsb0ZBQW9GO0FBRXBGLG9DQUFvQztBQUNwQywrSEFBK0g7QUFDL0gsb0ZBQW9GIn0=