@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');
const msg = randomBytes(32);
let privKey;
do {
privKey = randomBytes(32);
} while (!secp256k1.privateKeyVerify(privKey));
const pubKey = secp256k1.publicKeyCreate(privKey);
const sigObj = secp256k1.ecdsaSign(msg, privKey);
console.log(secp256k1.ecdsaVerify(sigObj.signature, msg, pubKey));
* .verify return false for high signatures
Get X point of ECDH
const { randomBytes } = require('crypto');
const secp256k1 = require('@wangshijun/secp256k1');
function getPrivateKey() {
while (true) {
const privKey = randomBytes(32);
if (secp256k1.privateKeyVerify(privKey)) return privKey;
}
}
const privKey = getPrivateKey();
const pubKey = secp256k1.publicKeyCreate(getPrivateKey());
function hashfn(x, y) {
const pubKey = new Uint8Array(33);
pubKey[0] = (y[31] & 1) === 0 ? 0x02 : 0x03;
pubKey.set(x, 1);
return pubKey;
}
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.