UNPKG

keyvenant

Version:

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

70 lines 4.53 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const elliptic_1 = __importDefault(require("secp256k1/elliptic")); const coinstring_1 = __importDefault(require("coinstring")); const utils_1 = require("./utils"); const THash_1 = __importDefault(require("./utils/THash")); const crypto_1 = __importDefault(require("./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 */ 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_1.default.randomBytes(keySize + keySize); return recursiveVerify(randomBytes); } exports.createPrivateKey = createPrivateKey; /** * 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 */ function privateKeyToPublicKey(privateKey, compressed = true) { let prvBuf = utils_1.string2Buffer(privateKey); // compressed => 33 bytes compressed public key // uncompressed => 65 bytes compressed public key let pubBuf = elliptic_1.default.publicKeyCreate(prvBuf, compressed); return pubBuf.toString('hex'); } exports.privateKeyToPublicKey = privateKeyToPublicKey; /** * 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 */ function publicKeyToAddress(publicKey, version) { let pubBuf = utils_1.string2Buffer(publicKey); // hash public key by THash let hasedPubKey = THash_1.default(pubBuf); // base58 encode hasedPubKey to filter out O 0, I i, + / let addressBuf = coinstring_1.default.encode(hasedPubKey, version); return addressBuf.toString('hex'); } exports.publicKeyToAddress = publicKeyToAddress; /** * check private key validity * @param privateKey private key hex string * @return boolean of private key validity */ function isPrivateKeyValid(privateKey) { return elliptic_1.default.privateKeyVerify(privateKey); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5Z2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9rZXlnZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxrRUFBMEM7QUFDMUMsNERBQW1DO0FBRW5DLG1DQUF1QztBQUN2QywwREFBaUM7QUFDakMsNERBQW1DO0FBRW5DOzs7OztHQUtHO0FBQ0gsU0FBZ0IsZ0JBQWdCLENBQzlCLE9BQU8sR0FBRyxFQUFFO0lBRVosNkRBQTZEO0lBQzdELElBQUksZUFBZSxHQUFHLENBQUMsV0FBbUIsRUFBRSxFQUFFO1FBQzVDLElBQUksVUFBVSxHQUFXLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ3RELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNsQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1NBQy9CO1FBQ0QsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ25DLENBQUMsQ0FBQTtJQUVELElBQUksV0FBVyxHQUFXLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQTtJQUMvRCxPQUFPLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBZEQsNENBY0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxTQUFnQixxQkFBcUIsQ0FDbkMsVUFBa0IsRUFDbEIsVUFBVSxHQUFHLElBQUk7SUFFakIsSUFBSSxNQUFNLEdBQVcscUJBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM5QywrQ0FBK0M7SUFDL0MsaURBQWlEO0lBQ2pELElBQUksTUFBTSxHQUFXLGtCQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUVsRSxPQUFPLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUE7QUFDL0IsQ0FBQztBQVZELHNEQVVDO0FBRUQ7Ozs7Ozs7R0FPRztBQUNILFNBQWdCLGtCQUFrQixDQUNoQyxTQUFpQixFQUNqQixPQUFlO0lBRWYsSUFBSSxNQUFNLEdBQVcscUJBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUM3QywyQkFBMkI7SUFDM0IsSUFBSSxXQUFXLEdBQVcsZUFBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3ZDLHdEQUF3RDtJQUN4RCxJQUFJLFVBQVUsR0FBVyxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFFaEUsT0FBTyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFYRCxnREFXQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLGlCQUFpQixDQUN4QixVQUFrQjtJQUVsQixPQUFPLGtCQUFTLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUE7QUFDL0MsQ0FBQyJ9