{"id":21860949,"url":"https://github.com/bitauth/libauth","last_synced_at":"2025-05-16T07:07:46.872Z","repository":{"id":38334583,"uuid":"126120346","full_name":"bitauth/libauth","owner":"bitauth","description":"An ultra-lightweight, zero-dependency TypeScript library for Bitcoin Cash, Bitcoin, and Bitauth applications.","archived":false,"fork":false,"pushed_at":"2025-04-22T03:17:03.000Z","size":26480,"stargazers_count":279,"open_issues_count":26,"forks_count":54,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-22T05:42:55.398Z","etag":null,"topics":["authentication","bch","bitcoin","bitcoin-cash","bsv","btc","ecash","javascript","ripemd160","secp256k1","sha256","sha512","typescript","webassembly","xec"],"latest_commit_sha":null,"homepage":"https://libauth.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bitauth.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-03-21T03:51:42.000Z","updated_at":"2025-04-15T16:06:51.000Z","dependencies_parsed_at":"2024-02-12T23:27:47.799Z","dependency_job_id":"c18ed6dc-9e14-4e7e-b994-52721eafb60c","html_url":"https://github.com/bitauth/libauth","commit_stats":{"total_commits":282,"total_committers":11,"mean_commits":"25.636363636363637","dds":0.1028368794326241,"last_synced_commit":"7e2f4115f2d62d35fac33d0678b9119ee8e9e7da"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitauth%2Flibauth","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitauth%2Flibauth/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitauth%2Flibauth/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bitauth%2Flibauth/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bitauth","download_url":"https://codeload.github.com/bitauth/libauth/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254485065,"owners_count":22078767,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["authentication","bch","bitcoin","bitcoin-cash","bsv","btc","ecash","javascript","ripemd160","secp256k1","sha256","sha512","typescript","webassembly","xec"],"created_at":"2024-11-28T03:09:08.859Z","updated_at":"2025-05-16T07:07:41.858Z","avatar_url":"https://github.com/bitauth.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://libauth.org/\"\u003e\n    \u003cimg src=\"https://libauth.org/assets/libauth.svg\" alt=\"Libauth logo\" width=\"200\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  An ultra-lightweight JavaScript library for Bitcoin Cash, Bitcoin, and Bitauth\n  applications.\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003ca href=\"https://github.com/bitauth/libauth/tree/master/docs\"\u003e\u003cstrong\u003eDocs: Getting Started →\u003c/strong\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp align=\"center\"\u003e\u003ca href=\"https://libauth.org/#md:api-overview\"\u003eAPI Reference\u003c/a\u003e\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@bitauth/libauth\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@bitauth/libauth.svg\" alt=\"NPM version\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://codecov.io/gh/bitauth/libauth\"\u003e\u003cimg src=\"https://img.shields.io/codecov/c/github/bitauth/libauth/master.svg\" alt=\"Codecov\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/bitauth/libauth/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/bitauth/libauth/ci.yml?branch=master\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://twitter.com/libauth\"\u003e\u003cimg alt=\"Follow Libauth on Twitter\" src=\"https://img.shields.io/badge/follow-@libauth-1DA1F2?logo=twitter\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://t.me/libauth_dev\"\u003e\u003cimg alt=\"Join Chat on Telegram\" src=\"https://img.shields.io/badge/chat-Libauth%20Devs-0088CC?logo=telegram\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.npmjs.com/package/@bitauth/libauth\"\u003e\u003cimg alt=\"npm downloads\" src=\"https://img.shields.io/npm/dm/@bitauth/libauth\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/bitauth/libauth\"\u003e\u003cimg src=\"https://img.shields.io/github/stars/bitauth/libauth.svg?style=social\u0026logo=github\u0026label=Stars\" alt=\"GitHub stars\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Libauth\n\n**An ultra-lightweight JavaScript library for Bitcoin Cash, Bitcoin, and Bitauth applications.**\n\nLibauth has **no dependencies** and works in all JavaScript environments, including [Node.js](https://nodejs.org/), [Deno](https://deno.land/), and browsers.\n\n## Purpose\n\nLibauth is designed to be **flexible**, **lightweight**, and **easily auditable**. Rather than providing a single, overarching, object-oriented API, all functionality is composed from simple functions. This has several benefits:\n\n- **Flexibility** – Even highly-complex functionality is built-up from simpler functions. These lower-level functions can be used to experiment, tweak, and remix your own higher-level methods without maintaining a fork of the library.\n- **Smaller application bundles** – Applications can import only the methods they need, eliminating the unused code (via [dead-code elimination](https://rollupjs.org/guide/en/#tree-shaking)).\n- **Better auditability** – Beyond having no dependencies of its own, Libauth's [functional programming](https://en.wikipedia.org/wiki/Functional_programming) approach makes auditing critical code easier: smaller bundles, smaller functions, and less churn between versions (fewer cascading changes to object-oriented interfaces).\n- **Fully-portable** – No platform-specific APIs are ever used, so the same code paths are used across all JavaScript environments (reducing the auditable \"surface area\" and simplifying library development).\n\n## Quick Start\n\nTo get started, install `@bitauth/libauth`:\n\n```sh\nnpm install @bitauth/libauth\n# OR\nyarn add @bitauth/libauth\n```\n\nAnd import the functionality you need:\n\n```ts\nimport { secp256k1 } from '@bitauth/libauth';\nimport { msgHash, pubkey, sig } from 'somewhere';\n\nsecp256k1.verifySignatureDERLowS(sig, pubkey, msgHash)\n  ? console.log('🚀 Signature valid')\n  : console.log('❌ Signature invalid');\n```\n\nSee [Installation](./docs/install.md) for more guidance on getting set up.\n\n## Guides\n\nThese guides introduce some of the high-level concepts and functionality provided by Libauth.\n\n- [Installation](https://github.com/bitauth/libauth/blob/master/docs/install.md)\n- [Handling Errors](https://github.com/bitauth/libauth/blob/master/docs/errors.md)\n- [Cryptography](https://github.com/bitauth/libauth/blob/master/docs/crypto.md)\n- [Keys](https://github.com/bitauth/libauth/blob/master/docs/keys.md)\n- [Addresses](https://github.com/bitauth/libauth/blob/master/docs/addresses.md)\n- [Verifying Transactions](https://github.com/bitauth/libauth/blob/master/docs/verify-transactions.md)\n- [Wallets \u0026 Transaction Creation](https://github.com/bitauth/libauth/blob/master/docs/wallets.md)\n\n### More Examples\n\nIn addition to the usage examples in these guides, note that **Libauth includes comprehensive tests that can help demonstrate usage of all functionality**.\n\nFor example, utilities related to hexadecimal-encoded strings are defined in [`hex.ts`](https://github.com/bitauth/libauth/blob/master/src/lib/format/hex.ts); for thorough usage examples, see the co-located [`hex.spec.ts`](https://github.com/bitauth/libauth/blob/master/src/lib/format/hex.spec.ts). You can also use GitHub search to see how a particular utility is used throughout the library, e.g. [`splitEvery`](https://github.com/search?q=repo%3Abitauth%2Flibauth+splitEvery\u0026type=code).\n\n## API Overview\n\nBelow is a partial selection of functionality provided by Libauth.\nIf you're looking for something else, be sure to search the [API Reference](https://libauth.org/#md:api-overview).\n\nHigh-level utilities are composed from lower-level utilities which are also exported, so it's often possible to remix behavior in your own codebase with relatively little duplication or maintenance burden. See the `Defined in ...` link on each utility's API reference page to review and copy the implementation.\n\n\u003cdetails\u003e\u003csummary\u003eTable of Contents\u003c/summary\u003e\n\n- [Address Formats](#address-formats)\n  - [Base58 Addresses](#base58-addresses)\n  - [Bech32](#bech32)\n  - [CashAddress](#cashaddress)\n  - [CashAddress-like Formats](#cashaddress-like-formats)\n- [Crypto](#crypto)\n- [Formats](#formats)\n  - [Base-N Conversion](#base-n-conversion)\n  - [Base64](#base64)\n  - [Binary Strings (e.g. `00101010`)](#binary-strings-eg-00101010)\n  - [Hex (Hexadecimal-Encoded Strings)](#hex-hexadecimal-encoded-strings)\n  - [Logging](#logging)\n  - [Numbers](#numbers)\n    - [CompactUint (A.K.A. \"VarInt\" or \"CompactSize\")](#compactuint-aka-varint-or-compactsize)\n    - [Satoshi Values](#satoshi-values)\n    - [VM Numbers (A.K.A. \"ScriptNum\")](#vm-numbers-aka-scriptnum)\n  - [Miscellaneous](#miscellaneous)\n  - [Time](#time)\n  - [UTF8](#utf8)\n- [Keys](#keys)\n  - [BIP32 Hierarchical Deterministic (HD) Keys](#bip32-hierarchical-deterministic-hd-keys)\n  - [BIP39 Mnemonic Phrases](#bip39-mnemonic-phrases)\n  - [Wallet Import Format (WIF)](#wallet-import-format-wif)\n  - [Key Utilities](#key-utilities)\n- [P2P Messages](#p2p-messages)\n  - [Decoding Utilities](#decoding-utilities)\n  - [Transactions](#transactions)\n  - [Outputs](#outputs)\n    - [Dust Calculation](#dust-calculation)\n- [Virtual Machines](#virtual-machines)\n  - [Built-In VMs](#built-in-vms)\n  - [Debugging](#debugging)\n  - [Combinators](#combinators)\n- [Wallet Engine](#wallet-engine)\n  - [Bitcoin Cash Metadata Registries (BCMRs)](#bitcoin-cash-metadata-registries-bcmrs)\n  - [CashAssembly Language \\\u0026 Compiler](#cashassembly-language--compiler)\n  - [Multi-Party Compilation](#multi-party-compilation)\n  - [Wallet Templates](#wallet-templates)\n\n\u003c/details\u003e\n\n### Address Formats\n\n#### Base58 Addresses\n\n- [`encodeBase58Address`](https://libauth.org/functions/encodeBase58Address.html)/[`decodeBase58Address`](https://libauth.org/functions/decodeBase58Address.html)\n- [`encodeBase58AddressFormat`](https://libauth.org/functions/encodeBase58AddressFormat.html)/[`decodeBase58AddressFormat`](https://libauth.org/functions/decodeBase58AddressFormat.html)\n- [`lockingBytecodeToBase58Address`](https://libauth.org/functions/lockingBytecodeToBase58Address.html)/[`base58AddressToLockingBytecode`](https://libauth.org/functions/base58AddressToLockingBytecode.html)\n\n#### Bech32\n\n- [`encodeBech32`](https://libauth.org/functions/encodeBech32.html)/[`decodeBech32`](https://libauth.org/functions/decodeBech32.html)\n- [`bech32PaddedToBin`](https://libauth.org/functions/bech32PaddedToBin.html)/[`binToBech32Padded`](https://libauth.org/functions/binToBech32Padded.html)\n- [`regroupBits`](https://libauth.org/functions/regroupBits.html)\n\n#### CashAddress\n\n- [`encodeCashAddress`](https://libauth.org/functions/encodeCashAddress.html)/[`decodeCashAddress`](https://libauth.org/functions/decodeCashAddress.html)\n- [`lockingBytecodeToCashAddress`](https://libauth.org/functions/lockingBytecodeToCashAddress.html)/[`cashAddressToLockingBytecode`](https://libauth.org/functions/cashAddressToLockingBytecode.html)\n- [`decodeCashAddressFormatWithoutPrefix`](https://libauth.org/functions/decodeCashAddressFormatWithoutPrefix.html)\n- [`encodeCashAddressVersionByte`](https://libauth.org/functions/encodeCashAddressVersionByte.html)/[`decodeCashAddressVersionByte`](https://libauth.org/functions/decodeCashAddressVersionByte.html)\n\n#### CashAddress-like Formats\n\n- [`attemptCashAddressFormatErrorCorrection`](https://libauth.org/functions/attemptCashAddressFormatErrorCorrection.html)\n- [`encodeCashAddressFormat`](https://libauth.org/functions/encodeCashAddressFormat.html)/[`decodeCashAddressFormat`](https://libauth.org/functions/decodeCashAddressFormat.html)\n- [`encodeCashAddressNonStandard`](https://libauth.org/functions/encodeCashAddressNonStandard.html)/[`decodeCashAddressNonStandard`](https://libauth.org/functions/decodeCashAddressNonStandard.html)\n\n### Crypto\n\n- [`hash160`](https://libauth.org/functions/hash160.html) (`sha256` -\u003e `ripemd160`)\n- [`hash256`](https://libauth.org/functions/hash256.html) (`sha256` -\u003e `sha256`)\n- [`hmacSha256`](https://libauth.org/functions/hmacSha256.html)\n- [`hmacSha512`](https://libauth.org/functions/hmacSha512.html)\n- [`instantiateHmacFunction`](https://libauth.org/functions/instantiateHmacFunction.html)\n- [`instantiatePbkdf2Function`](https://libauth.org/functions/instantiatePbkdf2Function.html)\n- [`pbkdf2HmacSha256`](https://libauth.org/functions/pbkdf2HmacSha256.html)\n- [`pbkdf2HmacSha512`](https://libauth.org/functions/pbkdf2HmacSha512.html)\n- [`ripemd160`](https://libauth.org/types/Ripemd160.html)\n- [`secp256k1`](https://libauth.org/types/Secp256k1.html)\n- [`sha1`](https://libauth.org/types/Sha1.html)\n- [`sha256`](https://libauth.org/types/Sha256.html)\n- [`sha512`](https://libauth.org/types/Sha512.html)\n\n### Formats\n\n#### Base-N Conversion\n\n- [`base58ToBin`](https://libauth.org/functions/base58ToBin.html)/[`binToBase58`](https://libauth.org/functions/binToBase58.html)\n- [`createBaseConverter`](https://libauth.org/functions/createBaseConverter.html)\n\n#### Base64\n\n- [`base64ToBin`](https://libauth.org/functions/base64ToBin.html)/[`binToBase64`](https://libauth.org/functions/binToBase64.html)\n- [`isBase64`](https://libauth.org/functions/isBase64.html)\n\n#### Binary Strings (e.g. `00101010`)\n\n- [`binStringToBin`](https://libauth.org/functions/binStringToBin.html)/[`binToBinString`](https://libauth.org/functions/binToBinString.html)\n- [`isBinString`](https://libauth.org/functions/isBinString.html)\n\n#### Hex (Hexadecimal-Encoded Strings)\n\n- [`hexToBin`](https://libauth.org/functions/hexToBin.html)/[`binToHex`](https://libauth.org/functions/binToHex.html)\n- [`isHex`](https://libauth.org/functions/isHex.html)\n- [`swapEndianness`](https://libauth.org/functions/swapEndianness.html)\n\n#### Logging\n\n- [`sortObjectKeys`](https://libauth.org/functions/sortObjectKeys.html)\n- [`stringify`](https://libauth.org/functions/stringify.html)\n- [`stringifyTestVector`](https://libauth.org/functions/stringifyTestVector.html)\n\n#### Numbers\n\n- [`bigIntToBinUint256BEClamped`](https://libauth.org/functions/bigIntToBinUint256BEClamped.html)/[`binToBigIntUint256BE`](https://libauth.org/functions/binToBigIntUint256BE.html)\n- [`bigIntToBinUint64LE`](https://libauth.org/functions/bigIntToBinUint64LE.html)([`bigIntToBinUint64LEClamped`](https://libauth.org/functions/bigIntToBinUint64LEClamped.html))/[`binToBigIntUint64LE`](https://libauth.org/functions/binToBigIntUint64LE.html)\n- [`bigIntToBinUintLE`](https://libauth.org/functions/bigIntToBinUintLE.html)/[`binToBigIntUintLE`](https://libauth.org/functions/binToBigIntUintLE.html)\n- [`binToBigIntUintBE`](https://libauth.org/functions/binToBigIntUintBE.html)/[`bigIntToBinUintBE`](https://libauth.org/functions/bigIntToBinUintBE.html)\n- [`int32SignedToUnsigned`](https://libauth.org/functions/int32SignedToUnsigned.html)/[`int32UnsignedToSigned`](https://libauth.org/functions/int32UnsignedToSigned.html)\n- [`numberToBinInt16LE`](https://libauth.org/functions/numberToBinInt16LE.html)/[`binToNumberInt16LE`](https://libauth.org/functions/binToNumberInt16LE.html)\n- [`numberToBinInt32LE`](https://libauth.org/functions/numberToBinInt32LE.html)/[`binToNumberInt32LE`](https://libauth.org/functions/binToNumberInt32LE.html)\n- [`numberToBinInt32TwosCompliment`](https://libauth.org/functions/numberToBinInt32TwosCompliment.html)\n- [`numberToBinUintLE`](https://libauth.org/functions/numberToBinUintLE.html)/[`binToNumberUintLE`](https://libauth.org/functions/binToNumberUintLE.html)\n- [`numberToBinUint16BE`](https://libauth.org/functions/numberToBinUint16BE.html)\n- [`numberToBinUint16LE`](https://libauth.org/functions/numberToBinUint16LE.html)([`numberToBinUint16LEClamped`](https://libauth.org/functions/numberToBinUint16LEClamped.html))/[`binToNumberUint16LE`](https://libauth.org/functions/binToNumberUint16LE.html)\n- [`numberToBinUint32BE`](https://libauth.org/functions/numberToBinUint32BE.html)\n- [`numberToBinUint32LE`](https://libauth.org/functions/numberToBinUint32LE.html)([`numberToBinUint32LEClamped`](https://libauth.org/functions/numberToBinUint32LEClamped.html))/[`binToNumberUint32LE`](https://libauth.org/functions/binToNumberUint32LE.html)\n\n##### CompactUint (A.K.A. \"VarInt\" or \"CompactSize\")\n\n- [`compactUintToBigInt`](https://libauth.org/functions/compactUintToBigInt.html)/[`bigIntToCompactUint`](https://libauth.org/functions/bigIntToCompactUint.html)\n- [`compactUintPrefixToSize`](https://libauth.org/functions/compactUintPrefixToSize.html)\n- [`readCompactUint`](https://libauth.org/functions/readCompactUint.html)\n- [`readCompactUintMinimal`](https://libauth.org/functions/readCompactUintMinimal.html)\n\n##### Satoshi Values\n\n- [`valueSatoshisToBin`](https://libauth.org/functions/valueSatoshisToBin.html)/[`binToValueSatoshis`](https://libauth.org/functions/binToValueSatoshis.html)\n\n##### VM Numbers (A.K.A. \"ScriptNum\")\n\n- [`vmNumberToBigInt`](https://libauth.org/functions/vmNumberToBigInt.html)/[`bigIntToVmNumber`](https://libauth.org/functions/bigIntToVmNumber.html)\n- [`booleanToVmNumber`](https://libauth.org/functions/booleanToVmNumber.html)\n\n#### Miscellaneous\n\n- [`assertSuccess`](https://libauth.org/functions/assertSuccess.html)\n- [`binsAreEqual`](https://libauth.org/functions/binsAreEqual.html)\n- [`encodeDataPush`](https://libauth.org/functions/encodeDataPush.html)\n- [`flattenBinArray`](https://libauth.org/functions/flattenBinArray.html)\n- [`range`](https://libauth.org/functions/range-1.html)\n- [`splitEvery`](https://libauth.org/functions/splitEvery.html)\n- [`unknownValue`](https://libauth.org/functions/unknownValue.html)\n\n#### Time\n\n- [`dateToLocktime`](https://libauth.org/functions/dateToLocktime.html)/[`locktimeToDate`](https://libauth.org/functions/locktimeToDate.html)\n- [`dateToLocktimeBin`](https://libauth.org/functions/dateToLocktimeBin.html)\n- [`decodeLocktime`](https://libauth.org/functions/decodeLocktime.html)\n\n#### UTF8\n\n- [`length`](https://libauth.org/functions/length.html)\n- [`lossyNormalize`](https://libauth.org/functions/lossyNormalize.html)\n- [`segment`](https://libauth.org/functions/segment.html)\n- [`utf8ToBin`](https://libauth.org/functions/utf8ToBin.html)/[`binToUtf8`](https://libauth.org/functions/binToUtf8.html)\n\n### Keys\n\n#### BIP32 Hierarchical Deterministic (HD) Keys\n\n- [`crackHdPrivateNodeFromHdPublicNodeAndChildPrivateNode`](https://libauth.org/functions/crackHdPrivateNodeFromHdPublicNodeAndChildPrivateNode.html)\n- [`decodeHdKey`](https://libauth.org/functions/decodeHdKey.html) ([`decodeHdKeyUnchecked`](https://libauth.org/functions/decodeHdKeyUnchecked.html))\n- [`decodeHdPrivateKey`](https://libauth.org/functions/decodeHdPrivateKey.html)/[`encodeHdPrivateKey`](https://libauth.org/functions/encodeHdPrivateKey.html)\n- [`decodeHdPublicKey`](https://libauth.org/functions/decodeHdPublicKey.html)/[`encodeHdPrivateKey`](https://libauth.org/functions/encodeHdPrivateKey.html)\n- [`deriveHdPath`](https://libauth.org/functions/deriveHdPath.html)\n- [`deriveHdPathRelative`](https://libauth.org/functions/deriveHdPathRelative.html)\n- [`deriveHdPrivateNodeFromSeed`](https://libauth.org/functions/deriveHdPrivateNodeFromSeed.html)\n- [`deriveHdPrivateNodeIdentifier`](https://libauth.org/functions/deriveHdPrivateNodeIdentifier.html)/[`deriveHdPublicNodeIdentifier`](https://libauth.org/functions/deriveHdPublicNodeIdentifier.html)\n- [`deriveHdPrivateNodeChild`](https://libauth.org/functions/deriveHdPrivateNodeChild.html)/[`deriveHdPublicNodeChild`](https://libauth.org/functions/deriveHdPublicNodeChild.html)\n- [`deriveHdPublicKey`](https://libauth.org/functions/deriveHdPublicKey.html)\n- [`deriveHdPublicNode`](https://libauth.org/functions/deriveHdPublicNode.html)\n- [`hdKeyVersionIsPrivateKey`](https://libauth.org/functions/hdKeyVersionIsPrivateKey.html)/[`hdKeyVersionIsPublicKey`](https://libauth.org/functions/hdKeyVersionIsPublicKey.html)\n- [`hdPrivateKeyToIdentifier`](https://libauth.org/functions/hdPrivateKeyToIdentifier.html)/[`hdPublicKeyToIdentifier`](https://libauth.org/functions/hdPublicKeyToIdentifier.html)\n\n#### BIP39 Mnemonic Phrases\n\n- [`deriveHdPrivateNodeFromBip39Mnemonic`](https://libauth.org/functions/deriveHdPrivateNodeFromBip39Mnemonic.html)\n- [`deriveSeedFromBip39Mnemonic`](https://libauth.org/functions/deriveSeedFromBip39Mnemonic.html)\n- [`encodeBip39Mnemonic`](https://libauth.org/functions/encodeBip39Mnemonic.html)/[`decodeBip39Mnemonic`](https://libauth.org/functions/decodeBip39Mnemonic.html)\n- [`generateBip39Mnemonic`](https://libauth.org/functions/generateBip39Mnemonic.html)\n\n#### Wallet Import Format (WIF)\n\n- [`encodePrivateKeyWif`](https://libauth.org/functions/encodePrivateKeyWif.html)/[`decodePrivateKeyWif`](https://libauth.org/functions/decodePrivateKeyWif.html)\n\n#### Key Utilities\n\n- [`generateDeterministicEntropy`](https://libauth.org/functions/generateDeterministicEntropy.html)\n- [`generateHdPrivateNode`](https://libauth.org/functions/generateHdPrivateNode.html)\n- [`generatePrivateKey`](https://libauth.org/functions/generatePrivateKey.html)\n- [`generateRandomBytes`](https://libauth.org/functions/generateRandomBytes.html)\n- [`generateRandomSeed`](https://libauth.org/functions/generateRandomSeed.html)\n- [`minimumEventsPerEntropyBits`](https://libauth.org/functions/minimumEventsPerEntropyBits.html)\n- [`shannonEntropyPerEvent`](https://libauth.org/functions/shannonEntropyPerEvent.html)\n- [`validateSecp256k1PrivateKey`](https://libauth.org/functions/validateSecp256k1PrivateKey.html)\n\n### P2P Messages\n\n#### Decoding Utilities\n\n- [`readBytes`](https://libauth.org/functions/readBytes.html)\n- [`readCompactUintPrefixedBin`](https://libauth.org/functions/readCompactUintPrefixedBin.html)\n- [`readRemainingBytes`](https://libauth.org/functions/readRemainingBytes.html)\n- [`readUint32LE`](https://libauth.org/functions/readUint32LE.html)\n- [`readUint64LE`](https://libauth.org/functions/readUint64LE.html)\n- [`readMultiple`](https://libauth.org/functions/readMultiple.html)\n- [`readItemCount`](https://libauth.org/functions/readItemCount.html)\n\n#### Transactions\n\n- [`encodeTransaction`](https://libauth.org/functions/encodeTransaction.html)/[`decodeTransaction`](https://libauth.org/functions/decodeTransaction.html) ([`decodeTransactionUnsafe`](https://libauth.org/functions/decodeTransactionUnsafe.html))\n- [`encodeTransactionOutputs`](https://libauth.org/functions/encodeTransactionOutputs.html)/[`decodeTransactionOutputs`](https://libauth.org/functions/decodeTransactionOutputs.html)\n- [`hashTransaction`](https://libauth.org/functions/hashTransaction.html)\n- [`hashTransactionP2pOrder`](https://libauth.org/functions/hashTransactionP2pOrder.html)\n- [`hashTransactionUiOrder`](https://libauth.org/functions/hashTransactionUiOrder.html)\n\n#### Outputs\n\n- [`isArbitraryDataOutput`](https://libauth.org/functions/isArbitraryDataOutput.html)\n- [`isSimpleMultisig`](https://libauth.org/functions/isSimpleMultisig.html)\n- [`isStandardOutputBytecode`](https://libauth.org/functions/isStandardOutputBytecode.html)\n- [`isStandardOutputBytecode2023`](https://libauth.org/functions/isStandardOutputBytecode2023.html)\n- [`isStandardMultisig`](https://libauth.org/functions/isStandardMultisig.html)\n- [`isWitnessProgram`](https://libauth.org/functions/isWitnessProgram.html)\n\n##### Dust Calculation\n\n- [`getDustThreshold`](https://libauth.org/functions/getDustThreshold.html)\n- [`getDustThresholdForLength`](https://libauth.org/functions/getDustThresholdForLength.html)\n- [`isDustOutput`](https://libauth.org/functions/isDustOutput.html)\n\n### Virtual Machines\n\n#### Built-In VMs\n\n- [`createInstructionSetBCH`](https://libauth.org/functions/createInstructionSetBCH.html)\n- [`createInstructionSetBCH2022`](https://libauth.org/functions/createInstructionSetBCH2022.html)\n- [`createInstructionSetBCH2023`](https://libauth.org/functions/createInstructionSetBCH2023.html)\n- [`createInstructionSetBCHCHIPs`](https://libauth.org/functions/createInstructionSetBCHCHIPs.html)\n- [`createInstructionSetXEC`](https://libauth.org/functions/createInstructionSetXEC.html)\n- [`createVirtualMachine`](https://libauth.org/functions/createVirtualMachine.html)\n- [`createVirtualMachineBCH`](https://libauth.org/functions/createVirtualMachineBCH.html)\n- [`createVirtualMachineBCH2022`](https://libauth.org/functions/createVirtualMachineBCH2022.html)\n- [`createVirtualMachineBCH2023`](https://libauth.org/functions/createVirtualMachineBCH2023.html)\n- [`createVirtualMachineBCHCHIPs`](https://libauth.org/functions/createVirtualMachineBCHCHIPs.html)\n- [`createVirtualMachineXEC`](https://libauth.org/functions/createVirtualMachineXEC.html)\n\n#### Debugging\n\n- [`assembleBytecode`](https://libauth.org/functions/assembleBytecode.html)\n- [`assembleBytecodeBCH`](https://libauth.org/functions/assembleBytecodeBCH.html)\n- [`assembleBytecodeBTC`](https://libauth.org/functions/assembleBytecodeBTC.html)\n- [`disassembleBytecode`](https://libauth.org/functions/disassembleBytecodeBCH.html)\n- [`disassembleBytecodeBCH`](https://libauth.org/functions/disassembleBytecodeBCH.html)\n- [`disassembleBytecodeBTC`](https://libauth.org/functions/disassembleBytecodeBTC.html)\n- [`generateBytecodeMap`](https://libauth.org/functions/generateBytecodeMap.html)\n- [`summarizeDebugTrace`](https://libauth.org/functions/summarizeDebugTrace.html)\n- [`stringifyDebugTraceSummary`](https://libauth.org/functions/stringifyDebugTraceSummary.html)\n- [`summarizeStack`](https://libauth.org/functions/summarizeStack.html)\n\n#### Combinators\n\n- [`combineOperations`](https://libauth.org/functions/combineOperations.html)\n- [`mapOverOperations`](https://libauth.org/functions/mapOverOperations.html)\n- [`pushToStack`](https://libauth.org/functions/pushToStack.html)\n- [`pushToStackChecked`](https://libauth.org/functions/pushToStackChecked.html)\n- [`pushToStackVmNumber`](https://libauth.org/functions/pushToStackVmNumber.html)\n- [`pushToStackVmNumberChecked`](https://libauth.org/functions/pushToStackVmNumberChecked.html)\n- [`useOneStackItem`](https://libauth.org/functions/useOneStackItem.html)\n- [`useTwoStackItems`](https://libauth.org/functions/useTwoStackItems.html)\n- [`useThreeStackItems`](https://libauth.org/functions/useThreeStackItems.html)\n- [`useFourStackItems`](https://libauth.org/functions/useFourStackItems.html)\n- [`useSixStackItems`](https://libauth.org/functions/useSixStackItems.html)\n- [`useOneVmNumber`](https://libauth.org/functions/useSixStackItems.html)\n- [`useTwoVmNumbers`](https://libauth.org/functions/useSixStackItems.html)\n- [`useThreeVmNumbers`](https://libauth.org/functions/useSixStackItems.html)\n\n### Wallet Engine\n\n#### Bitcoin Cash Metadata Registries (BCMRs)\n\n- [`importMetadataRegistry`](https://libauth.org/functions/importMetadataRegistry.html)\n\n#### CashAssembly Language \u0026 Compiler\n\n- [`allErrorsAreRecoverable`](https://libauth.org/functions/allErrorsAreRecoverable.html)\n- [`cashAssemblyToBin`](https://libauth.org/functions/cashAssemblyToBin.html)\n- [`compileScript`](https://libauth.org/functions/compileScript.html)\n- [`containsRange`](https://libauth.org/functions/containsRange.html)\n- [`createCompiler`](https://libauth.org/functions/createCompiler.html)\n- [`extractBytecodeResolutions`](https://libauth.org/functions/extractBytecodeResolutions.html)\n- [`extractEvaluationSamples`](https://libauth.org/functions/extractEvaluationSamples.html)\n- [`extractEvaluationSamplesRecursive`](https://libauth.org/functions/extractEvaluationSamplesRecursive.html)\n- [`extractUnexecutedRanges`](https://libauth.org/functions/extractUnexecutedRanges.html)\n- [`getResolutionErrors`](https://libauth.org/functions/getResolutionErrors.html)\n- [`mergeRanges`](https://libauth.org/functions/mergeRanges.html)\n- [`parseScript`](https://libauth.org/functions/parseScript.html)\n- [`resolveVariableIdentifier`](https://libauth.org/functions/resolveVariableIdentifier.html)\n- [`stringifyErrors`](https://libauth.org/functions/stringifyErrors.html)\n- [`verifyCashAssemblyEvaluationState`](https://libauth.org/functions/verifyCashAssemblyEvaluationState.html)\n- [`walletTemplateToCompilerConfiguration`](https://libauth.org/functions/walletTemplateToCompilerConfiguration.html)\n- [`walletTemplateToCompilerBCH`](https://libauth.org/functions/walletTemplateToCompilerBCH.html)\n\n#### Multi-Party Compilation\n\n- [`extractMissingVariables`](https://libauth.org/functions/extractMissingVariables.html)\n- [`extractResolvedVariables`](https://libauth.org/functions/extractResolvedVariables.html)\n- [`generateTransaction`](https://libauth.org/functions/generateTransaction.html)\n- [`safelyExtendCompilationData`](https://libauth.org/functions/safelyExtendCompilationData.html)\n\n#### P2PKH Utilities\n\n- [`hdPrivateKeyToP2pkhLockingBytecode`](https://libauth.org/functions/hdPrivateKeyToP2pkhLockingBytecode.html)\n- [`hdPrivateKeyToP2pkhCashAddress`](https://libauth.org/functions/hdPrivateKeyToP2pkhCashAddress.html)\n- [`hdPublicKeyToP2pkhLockingBytecode`](https://libauth.org/functions/hdPublicKeyToP2pkhLockingBytecode.html)\n- [`hdPublicKeyToP2pkhCashAddress`](https://libauth.org/functions/hdPublicKeyToP2pkhCashAddress.html)\n- [`privateKeyToP2pkhLockingBytecode`](https://libauth.org/functions/privateKeyToP2pkhLockingBytecode.html)\n- [`privateKeyToP2pkhCashAddress`](https://libauth.org/functions/privateKeyToP2pkhCashAddress.html)\n- [`publicKeyToP2pkhLockingBytecode`](https://libauth.org/functions/publicKeyToP2pkhLockingBytecode.html)\n- [`publicKeyToP2pkhCashAddress`](https://libauth.org/functions/publicKeyToP2pkhCashAddress.html)\n\n#### Wallet Templates\n\n- [`importWalletTemplate`](https://libauth.org/functions/importWalletTemplate.html)\n\n## VMB Tests\n\nLibauth's test suite includes a set of cross-implementation Virtual Machine Bytecode (VMB) test vectors for each supported VM. See [`Libauth VMB Tests`](https://github.com/bitauth/libauth/blob/master/src/lib/vmb-tests/readme.md) for details.\n\n# CashAssembly\n\nCashAssembly is the assembly language used by Libauth's [Wallet Templates](https://libauth.org/types/WalletTemplate.html). To learn more about CashAssembly, read the [Bitauth IDE Guide](https://ide.bitauth.com/guide).\n\n## Contributing\n\nPull Requests welcome! Please see [`CONTRIBUTING.md`](https://github.com/bitauth/libauth/blob/master/.github/CONTRIBUTING.md) for details.\n","funding_links":[],"categories":["Awesome Bitcoin Cash [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/sindresorhus/awesome)"],"sub_categories":["Projects"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitauth%2Flibauth","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbitauth%2Flibauth","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbitauth%2Flibauth/lists"}