@diotoborg/officiis-ratione-facilis v3.9.131
Libauth
An ultra-lightweight JavaScript library for Bitcoin Cash, Bitcoin, and Bitauth applications.
Libauth has no dependencies and works in all JavaScript environments, including Node.js, Deno, and browsers.
Purpose
Libauth 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:
- 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.
- Smaller application bundles – Applications can import only the methods they need, eliminating the unused code (via dead-code elimination).
- Better auditability – Beyond having no dependencies of its own, Libauth's functional programming approach makes auditing critical code easier: smaller bundles, smaller functions, and less churn between versions (fewer cascading changes to object-oriented interfaces).
- 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).
Quick Start
To get started, install @diotoborg/officiis-ratione-facilis:
npm install @diotoborg/officiis-ratione-facilis
# OR
yarn add @diotoborg/officiis-ratione-facilisAnd import the functionality you need:
import { secp256k1 } from '@diotoborg/officiis-ratione-facilis';
import { msgHash, pubkey, sig } from 'somewhere';
secp256k1.verifySignatureDERLowS(sig, pubkey, msgHash)
? console.log('🚀 Signature valid')
: console.log('❌ Signature invalid');See Installation for more guidance on getting set up.
Guides
These guides introduce some of the high-level concepts and functionality provided by Libauth.
- Installation
- Handling Errors
- Cryptography
- Keys
- Addresses
- Verifying Transactions
- Wallets & Transaction Creation
More Examples
In addition to the usage examples in these guides, note that Libauth includes comprehensive tests that can help demonstrate usage of all functionality.
For example, utilities related to hexadecimal-encoded strings are defined in hex.ts; for thorough usage examples, see the co-located hex.spec.ts. You can also use GitHub search to see how a particular utility is used throughout the library, e.g. splitEvery.
API Overview
Below is a partial selection of functionality provided by Libauth. If you're looking for something else, be sure to search the API Reference.
High-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.
Address Formats
Base58 Addresses
encodeBase58Address/decodeBase58AddressencodeBase58AddressFormat/decodeBase58AddressFormatlockingBytecodeToBase58Address/base58AddressToLockingBytecode
Bech32
CashAddress
encodeCashAddress/decodeCashAddresslockingBytecodeToCashAddress/cashAddressToLockingBytecodedecodeCashAddressFormatWithoutPrefixencodeCashAddressVersionByte/decodeCashAddressVersionByte
CashAddress-like Formats
attemptCashAddressFormatErrorCorrectionencodeCashAddressFormat/decodeCashAddressFormatencodeCashAddressNonStandard/decodeCashAddressNonStandard
Crypto
hash160(sha256->ripemd160)hash256(sha256->sha256)hmacSha256hmacSha512instantiateHmacFunctioninstantiatePbkdf2Functionpbkdf2HmacSha256pbkdf2HmacSha512ripemd160secp256k1sha1sha256sha512
Formats
Base-N Conversion
Base64
Binary Strings (e.g. 00101010)
Hex (Hexadecimal-Encoded Strings)
Logging
Numbers
bigIntToBinUint256BEClamped/binToBigIntUint256BEbigIntToBinUint64LE(bigIntToBinUint64LEClamped)/binToBigIntUint64LEbigIntToBinUintLE/binToBigIntUintLEbinToBigIntUintBE/bigIntToBinUintBEint32SignedToUnsigned/int32UnsignedToSignednumberToBinInt16LE/binToNumberInt16LEnumberToBinInt32LE/binToNumberInt32LEnumberToBinInt32TwosComplimentnumberToBinUintLE/binToNumberUintLEnumberToBinUint16BEnumberToBinUint16LE(numberToBinUint16LEClamped)/binToNumberUint16LEnumberToBinUint32BEnumberToBinUint32LE(numberToBinUint32LEClamped)/binToNumberUint32LE
CompactUint (A.K.A. "VarInt" or "CompactSize")
Satoshi Values
VM Numbers (A.K.A. "ScriptNum")
Miscellaneous
Time
UTF8
Keys
BIP32 Hierarchical Deterministic (HD) Keys
crackHdPrivateNodeFromHdPublicNodeAndChildPrivateNodedecodeHdKey(decodeHdKeyUnchecked)decodeHdPrivateKey/encodeHdPrivateKeydecodeHdPublicKey/encodeHdPrivateKeyderiveHdPathderiveHdPathRelativederiveHdPrivateNodeFromSeedderiveHdPrivateNodeIdentifier/deriveHdPublicNodeIdentifierderiveHdPrivateNodeChild/deriveHdPublicNodeChildderiveHdPublicKeyderiveHdPublicNodehdKeyVersionIsPrivateKey/hdKeyVersionIsPublicKeyhdPrivateKeyToIdentifier/hdPublicKeyToIdentifier
BIP39 Mnemonic Phrases
deriveHdPrivateNodeFromBip39MnemonicderiveSeedFromBip39MnemonicencodeBip39Mnemonic/decodeBip39MnemonicgenerateBip39Mnemonic
Wallet Import Format (WIF)
Key Utilities
generateDeterministicEntropygenerateHdPrivateNodegeneratePrivateKeygenerateRandomBytesgenerateRandomSeedminimumEventsPerEntropyBitsshannonEntropyPerEventvalidateSecp256k1PrivateKey
P2P Messages
Decoding Utilities
readBytesreadCompactUintPrefixedBinreadRemainingBytesreadUint32LEreadUint64LEreadMultiplereadItemCount
Transactions
encodeTransaction/decodeTransaction(decodeTransactionUnsafe)encodeTransactionOutputs/decodeTransactionOutputshashTransactionhashTransactionP2pOrderhashTransactionUiOrder
Outputs
isArbitraryDataOutputisSimpleMultisigisStandardOutputBytecodeisStandardOutputBytecode2023isStandardMultisigisWitnessProgram
Dust Calculation
Virtual Machines
Built-In VMs
createInstructionSetBCHcreateInstructionSetBCH2022createInstructionSetBCH2023createInstructionSetBCHCHIPscreateInstructionSetXECcreateVirtualMachinecreateVirtualMachineBCHcreateVirtualMachineBCH2022createVirtualMachineBCH2023createVirtualMachineBCHCHIPscreateVirtualMachineXEC
Debugging
assembleBytecodeassembleBytecodeBCHassembleBytecodeBTCdisassembleBytecodedisassembleBytecodeBCHdisassembleBytecodeBTCgenerateBytecodeMapsummarizeDebugTracestringifyDebugTraceSummarysummarizeStack
Combinators
combineOperationsmapOverOperationspushToStackpushToStackCheckedpushToStackVmNumberpushToStackVmNumberCheckeduseOneStackItemuseTwoStackItemsuseThreeStackItemsuseFourStackItemsuseSixStackItemsuseOneVmNumberuseTwoVmNumbersuseThreeVmNumbers
Wallet Engine
Bitcoin Cash Metadata Registries (BCMRs)
CashAssembly Language & Compiler
allErrorsAreRecoverablecashAssemblyToBincompileScriptcontainsRangecreateCompilerextractBytecodeResolutionsextractEvaluationSamplesextractEvaluationSamplesRecursiveextractUnexecutedRangesgetResolutionErrorsmergeRangesparseScriptresolveVariableIdentifierstringifyErrorsverifyCashAssemblyEvaluationStatewalletTemplateToCompilerConfigurationwalletTemplateToCompilerBCH
Multi-Party Compilation
P2PKH Utilities
hdPrivateKeyToP2pkhLockingBytecodehdPrivateKeyToP2pkhCashAddresshdPublicKeyToP2pkhLockingBytecodehdPublicKeyToP2pkhCashAddressprivateKeyToP2pkhLockingBytecodeprivateKeyToP2pkhCashAddresspublicKeyToP2pkhLockingBytecodepublicKeyToP2pkhCashAddress
Wallet Templates
VMB Tests
Libauth's test suite includes a set of cross-implementation Virtual Machine Bytecode (VMB) test vectors for each supported VM. See Libauth VMB Tests for details.
CashAssembly
CashAssembly is the assembly language used by Libauth's Wallet Templates. To learn more about CashAssembly, read the Bitauth IDE Guide.
Contributing
Pull Requests welcome! Please see CONTRIBUTING.md for details.
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago