Neat Paraskavedekatriaphobia's Meaning

    @wangshijun/secp256k1

    4.0.3 • Public • Published

    @wangshijun/secp256k1

    This module provides pure javascript implementation of secp256k1, elliptic is used behind the scene

    Installation

    npm install @wangshijun/secp256k1

    Usage

    Private Key generation, Public Key creation, signature creation, signature verification
    const { randomBytes } = require('crypto');
    const secp256k1 = require('@wangshijun/secp256k1');
    
    // generate message to sign
    // message should have 32-byte length, if you have some other length you can hash message
    // for example `msg = sha256(rawMessage)`
    const msg = randomBytes(32);
    
    // generate privKey
    let privKey;
    do {
      privKey = randomBytes(32);
    } while (!secp256k1.privateKeyVerify(privKey));
    
    // get the public key in a compressed format
    const pubKey = secp256k1.publicKeyCreate(privKey);
    
    // sign the message
    const sigObj = secp256k1.ecdsaSign(msg, privKey);
    
    // verify the signature
    console.log(secp256k1.ecdsaVerify(sigObj.signature, msg, pubKey));
    // => true

    * .verify return false for high signatures

    Get X point of ECDH
    const { randomBytes } = require('crypto');
    const secp256k1 = require('@wangshijun/secp256k1');
    
    // generate privKey
    function getPrivateKey() {
      while (true) {
        const privKey = randomBytes(32);
        if (secp256k1.privateKeyVerify(privKey)) return privKey;
      }
    }
    
    // generate private and public keys
    const privKey = getPrivateKey();
    const pubKey = secp256k1.publicKeyCreate(getPrivateKey());
    
    // compressed public key from X and Y
    function hashfn(x, y) {
      const pubKey = new Uint8Array(33);
      pubKey[0] = (y[31] & 1) === 0 ? 0x02 : 0x03;
      pubKey.set(x, 1);
      return pubKey;
    }
    
    // get X point of ecdh
    const ecdhPointX = secp256k1.ecdh(pubKey, privKey, { hashfn }, Buffer.alloc(33));
    console.log(ecdhPointX.toString('hex'));

    LICENSE

    This library is free and open-source software released under the MIT license.

    Install

    npm i @wangshijun/secp256k1

    DownloadsWeekly Downloads

    537

    Version

    4.0.3

    License

    MIT

    Unpacked Size

    103 kB

    Total Files

    19

    Last publish

    Collaborators

    • wangshijun