Novelty Polygonal Mathematics

    bitcoinjs-message
    TypeScript icon, indicating that this package has built-in type declarations

    2.2.0 • Public • Published

    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

    Install

    npm i bitcoinjs-message

    DownloadsWeekly Downloads

    13,504

    Version

    2.2.0

    License

    MIT

    Unpacked Size

    13.7 kB

    Total Files

    6

    Last publish

    Collaborators

    • fanatid
    • jprichardson
    • junderw