UNPKG

keyvenant

Version:

Keyvenant is a JavaScript tool to generate and export CovenantSQL keys to facilitate key management locally and in web extensions.

62 lines 4.13 kB
import secp256k1 from 'secp256k1/elliptic'; import coinstring from 'coinstring'; import { string2Buffer } from './utils'; import THash from './utils/THash'; import crypto from './utils/crypto'; /** * create CovenantSQL private key * use ECDS(secp256k1) for private key generation * @param keySize=32 default keysize is 32 bytes * @return privateKey hex string */ export function createPrivateKey(keySize = 32) { // recursively try random bytes until has a valid private key let recursiveVerify = (randomBytes) => { let privateKey = randomBytes.slice(0, keySize); if (!isPrivateKeyValid(privateKey)) { return this.createPrivateKey(); } return privateKey.toString('hex'); }; let randomBytes = crypto.randomBytes(keySize + keySize); return recursiveVerify(randomBytes); } /** * create public key from private key * use secp256k1 public key generation with compress enabled * @param privateKey private key hex string * @param compressed=true default compress public key * @return publicKey hex string */ export function privateKeyToPublicKey(privateKey, compressed = true) { let prvBuf = string2Buffer(privateKey); // compressed => 33 bytes compressed public key // uncompressed => 65 bytes compressed public key let pubBuf = secp256k1.publicKeyCreate(prvBuf, compressed); return pubBuf.toString('hex'); } /** * convert address from public key * 1. hash public key by THash * 2. base58 encode hasedPubKey to filter out O 0, I i, + / * @param publicKey public key hex string * @param version version hex string to differ MainNet & TestNet * @return address hex string */ export function publicKeyToAddress(publicKey, version) { let pubBuf = string2Buffer(publicKey); // hash public key by THash let hasedPubKey = THash(pubBuf); // base58 encode hasedPubKey to filter out O 0, I i, + / let addressBuf = coinstring.encode(hasedPubKey, version); return addressBuf.toString('hex'); } /** * check private key validity * @param privateKey private key hex string * @return boolean of private key validity */ function isPrivateKeyValid(privateKey) { return secp256k1.privateKeyVerify(privateKey); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Z2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9rZXlnZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxTQUFTLE1BQU0sb0JBQW9CLENBQUE7QUFDMUMsT0FBTyxVQUFVLE1BQU0sWUFBWSxDQUFBO0FBRW5DLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUE7QUFDdkMsT0FBTyxLQUFLLE1BQU0sZUFBZSxDQUFBO0FBQ2pDLE9BQU8sTUFBTSxNQUFNLGdCQUFnQixDQUFBO0FBRW5DOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixPQUFPLEdBQUcsRUFBRTtJQUVaLDZEQUE2RDtJQUM3RCxJQUFJLGVBQWUsR0FBRyxDQUFDLFdBQW1CLEVBQUUsRUFBRTtRQUM1QyxJQUFJLFVBQVUsR0FBVyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQTtRQUN0RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDbEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQTtTQUMvQjtRQUNELE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUNuQyxDQUFDLENBQUE7SUFFRCxJQUFJLFdBQVcsR0FBVyxNQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUMvRCxPQUFPLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxVQUFrQixFQUNsQixVQUFVLEdBQUcsSUFBSTtJQUVqQixJQUFJLE1BQU0sR0FBVyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUE7SUFDOUMsK0NBQStDO0lBQy9DLGlEQUFpRDtJQUNqRCxJQUFJLE1BQU0sR0FBVyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVsRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDL0IsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQ2hDLFNBQWlCLEVBQ2pCLE9BQWU7SUFFZixJQUFJLE1BQU0sR0FBVyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDN0MsMkJBQTJCO0lBQzNCLElBQUksV0FBVyxHQUFXLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQTtJQUN2Qyx3REFBd0Q7SUFDeEQsSUFBSSxVQUFVLEdBQVcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFaEUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FDeEIsVUFBa0I7SUFFbEIsT0FBTyxTQUFTLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDL0MsQ0FBQyJ9