UNPKG

@airgap/crypto

Version:

The @airgap/crypto packages provides common crypto functionalities.

80 lines 3.56 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; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.bip32DecodeNode = exports.bip32EncodeNode = void 0; // @ts-ignore var bs58check = __importStar(require("@airgap/coinlib-core/dependencies/src/bs58check-2.1.2/index")); var factory_1 = require("./factory"); var XPRV_VERSION = '0488ade4'; var XPUB_VERSION = '0488b21e'; function bip32EncodeNode(node, version) { var _a, _b; if (version === void 0) { version = {}; } return { type: 'bip32', secretKey: encodeKey(node, (_a = version.secretKey) !== null && _a !== void 0 ? _a : XPRV_VERSION, 'secretKey'), publicKey: encodeKey(node, (_b = version.publicKey) !== null && _b !== void 0 ? _b : XPUB_VERSION, 'publicKey') }; } exports.bip32EncodeNode = bip32EncodeNode; function encodeKey(node, version, keyType) { var versionBuffer = Buffer.from(version, 'hex'); var depth = Buffer.alloc(1); depth.writeUInt8(node.depth); var parentFingerprint = Buffer.alloc(4); parentFingerprint.writeUInt32BE(node.parentFingerprint); var index = Buffer.alloc(4); index.writeUInt32BE(node.index); var chainCode = node.chainCode; var key = keyType === 'secretKey' ? Buffer.concat([Buffer.alloc(1, 0), node[keyType]]) : node[keyType]; return bs58check.encode(Buffer.concat([versionBuffer, depth, parentFingerprint, index, chainCode, key])); } function bip32DecodeNode(node, version) { var _a, _b; if (version === void 0) { version = {}; } var xprvDecoded = decodeKey(node.secretKey, (_a = version.secretKey) !== null && _a !== void 0 ? _a : XPRV_VERSION, 'secretKey'); var xpubDecoded = decodeKey(node.publicKey, (_b = version.publicKey) !== null && _b !== void 0 ? _b : XPUB_VERSION, 'publicKey'); return (0, factory_1.newDerivationNodeFromKeys)(xprvDecoded, xpubDecoded); } exports.bip32DecodeNode = bip32DecodeNode; function decodeKey(key, version, keyType) { var buffer = bs58check.decode(key); var versionBuffer = buffer.slice(0, 4); if (versionBuffer.toString('hex') !== version) { throw new Error('Invalid Bip32 version'); } var depth = buffer.readUInt8(4); var parentFingerprint = buffer.readUInt32BE(5); var index = buffer.readUInt32BE(9); var chainCode = buffer.slice(13, 45); return { depth: depth, parentFingerprint: parentFingerprint, index: index, chainCode: chainCode, key: keyType === 'secretKey' ? buffer.slice(46) : buffer.slice(45) }; } //# sourceMappingURL=bip32.js.map