signun
signun provides sync and async N-API bindings to the following crypto libraries:
- secp256k1
privateKeyVerify
,publicKeyCreate
,sign
- Note: custom nonce function not yet supported for async, however it works with sync.
verify
.
- BLAKE2
Install
Install with npm or yarn:
npm i @nlv8/signun --save
yarn add @nlv8/signun
Please keep in mind, that for the best secp256k1 performance, you should have GMP installed.
Examples
secp256k1 ECDSA
Sync
const { randomBytes } = require('crypto');
const { secp256k1 } = require('@nlv8/signun');
let privateKey;
do {
privateKey = randomBytes(32)
} while (!secp256k1.privateKeyVerifySync(privateKey));
const publicKey = secp256k1.publicKeyCreateSync(privateKey);
const message = randomBytes(32);
const signOptions = {
data: null,
noncefn: null
}
const signResult = secp256k1.signSync(message, privateKey, signOptions);
const verifyResult = secp256k1.verifySync(message, signResult.signature, publicKey);
console.log(verifyResult);
Async
const { randomBytes } = require('crypto');
const { secp256k1 } = require('@nlv8/signun');
(async function main() {
let privateKey;
do {
privateKey = randomBytes(32)
} while (!(await secp256k1.privateKeyVerify(privateKey)));
const publicKey = await secp256k1.publicKeyCreate(privateKey);
const message = randomBytes(32);
const signOptions = {
data: null
}
const signResult = await secp256k1.sign(message, privateKey, signOptions);
const verifyResult = await secp256k1.verify(message, signResult.signature, publicKey);
console.log(verifyResult);
})();
BLAKE2 hash
Async
const { randomBytes } = require('crypto');
const { blake2b } = require('@nlv8/signun');
(async function main() {
const data = randomBytes(64);
const key = randomBytes(64);
const hashLength = 64;
const result = await blake2b.hash(data, hashLength);
const keyedResult = await blake2b.hash(data, key, hashLength);
})();
Acknowledgements
This project is kindly supported by:
I'd like to give special thanks to Viktor Simkó and Tibor Balla for helping me out when I was lost :unicorn:
License
signun is licensed under Apache-2.0.
Licenses of dependencies: