2.2.0 • Published 4 years ago

bitcoinjs-message v2.2.0

Weekly downloads
7,184
License
MIT
Repository
github
Last release
4 years ago

bitcoinjs-message

NPM Package Build Status Dependency status

js-standard-style

Examples (Note about Electrum support at the bottom)

var bitcoin = require('bitcoinjs-lib') // v4.x.x
var bitcoinMessage = require('bitcoinjs-message')

sign(message, privateKey, compressed, network.messagePrefix, sigOptions)

  • If you pass the sigOptions arg instead of messagePrefix it will dynamically replace.
  • sigOptions contains two attributes
    • segwitType should be one of 'p2sh(p2wpkh)' or 'p2wpkh'
    • extraEntropy will be used to create non-deterministic signatures using the RFC6979 extra entropy parameter. R value reuse is not an issue.

Sign a Bitcoin message

var keyPair = bitcoin.ECPair.fromWIF('L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1')
var privateKey = keyPair.privateKey
var message = 'This is an example of a signed message.'

var signature = bitcoinMessage.sign(message, privateKey, keyPair.compressed)
console.log(signature.toString('base64'))
// => 'H9L5yLFjti0QTHhPyFrZCT1V/MMnBtXKmoiKDZ78NDBjERki6ZTQZdSMCtkgoNmp17By9ItJr8o7ChX0XxY91nk='

To produce non-deterministic signatures you can pass an extra option to sign()

var { randomBytes } = require('crypto')
var keyPair = bitcoin.ECPair.fromWIF('L4rK1yDtCWekvXuE6oXD9jCYfFNV2cWRpVuPLBcCU2z8TrisoyY1')
var privateKey = keyPair.privateKey
var message = 'This is an example of a signed message.'

var signature = bitcoinMessage.sign(message, privateKey, keyPair.compressed, { extraEntropy: randomBytes(32) })
console.log(signature.toString('base64'))
// => different (but valid) signature each time

Sign a Bitcoin message (with segwit addresses)

// P2SH(P2WPKH) address 'p2sh(p2wpkh)'
var signature = bitcoinMessage.sign(message, privateKey, keyPair.compressed, { segwitType: 'p2sh(p2wpkh)' })
console.log(signature.toString('base64'))
// => 'I9L5yLFjti0QTHhPyFrZCT1V/MMnBtXKmoiKDZ78NDBjERki6ZTQZdSMCtkgoNmp17By9ItJr8o7ChX0XxY91nk='

// P2WPKH address 'p2wpkh'
var signature = bitcoinMessage.sign(message, privateKey, keyPair.compressed, { segwitType: 'p2wpkh' })
console.log(signature.toString('base64'))
// => 'J9L5yLFjti0QTHhPyFrZCT1V/MMnBtXKmoiKDZ78NDBjERki6ZTQZdSMCtkgoNmp17By9ItJr8o7ChX0XxY91nk='

verify(message, address, signature, network.messagePrefix, checkSegwitAlways)

Verify a Bitcoin message

var address = '1F3sAm6ZtwLAUnj7d38pGFxtP3RVEvtsbV'

console.log(bitcoinMessage.verify(message, address, signature))
// => true

About Electrum segwit signature support

  • For Signing: Use the non-segwit compressed signing parameters for both segwit types (p2sh-p2wpkh and p2wpkh)
  • For Verifying: Pass the checkSegwitAlways argument as true. (messagePrefix should be set to null to default to Bitcoin messagePrefix)

LICENSE MIT

@thorswap-lib/hdwallet-ledger@thorswap-lib/hdwallet-metamask@thorswap-lib/hdwallet-portisalebussenode_mongo_express@twetch/walletwoleet-weblibshdwalletcoinoxs@diviproject/react-native-bitcoinjs-messagebchidentitybch-js-joey@everything-registry/sub-chunk-1239bch-js-testwalltime-clixec-jsswitcheo-jsvexlib-js@diviproject-public/react-native-bitcoinjs-message@developers.cash/libcash-js@payvo/sdk-btcjachavaljichaolijs-oipjiclibitgojavascript-frostjavascript-dlc@joundy/ordit-sdktyler-bitgojs-testing@arkecosystem/platform-sdk-btc@ashishbarvaliya-redsoft/orange-core@asigna/btc-connect@atomicfinance/bitcoin-js-wallet-provider@ardenthq/sdk-btc@aidpproject/aidpcoin-message@aloe2/abstract-utxo@aloe2/bitgo@aloe2/sdk-api@aloe2/sdk-core@b2network/b2-account-agent@bcpros/redux-store@bcpros/xpi-js@bitgo-beta/abstract-utxo@bitgo-beta/sdk-core@bitcoinunlimited/bchidentity@bitgo/abstract-utxo@bitgo/sdk-api@bitgo-beta/sdk-api@bithighlander/hdwallet-portis@bithighlander/hdwallet-ledger@bithighlander/hdwallet-metamask@bithighlander/hdwallet-pioneer@bitgo/sdk-core@bobo-wallet/coin-lib@carmel/js@chris.troutner/bch-js@chris.troutner/bitbox-js@ckb-ccc/core@chainify/bitcoin4nkweb_core@adawg/ordit-sdk@abcpros/xpi-js@abcpros/bch-js@daviortega/js-oip@daviortega/oip-protobufjsxrg-jszeltrezjsztakio-corevipstarcoinjs-wallet-corezeronet-cryptozetamaskzetalink@sambo5000/xec-js@gunner6/ordit-sdk@hashprotocol/bitcoin-js-wallet-provider@hyperbitjs/message@elmutt/hdwallet-ledger@elmutt/hdwallet-portis@getsafle/vault-bitcoin-controller@getsafle/bitcoin-wallet-controller@gobob/bob-snap@gobob/btcsnap@liquality-dev/bitcoin-js-wallet-provider@liquality/bitcoin-js-wallet-provider@liquality/litecoin-js-wallet-provider@liquality-dev/ethereum-js-wallet-provider@liquality/bitcoin@mandeep-self/mdip-client-private@nexm-io/bitsnap@nestor0405/xverse-core@nbellanich/bitgo@metavatem/aidpcoin-message@mdip/client@keepkey/hdwallet-ledger@keepkey/hdwallet-portis@kitzen/wallet-core-essentials@jelly-swap/btc-web-wallet@hypereon/message@ravenrebels/ravencoin-message@ryan-bitgo/bitgo@sadoprotocol/ordit-sdk
2.2.0

4 years ago

2.1.4

4 years ago

2.1.3

5 years ago

2.1.2

5 years ago

2.1.1

5 years ago

2.1.0

6 years ago

2.0.0

8 years ago

1.0.1

9 years ago

1.0.0

10 years ago