UNPKG

jcc_wallet

Version:

Toolkit of wallet to manage multiple chains & support multiple keystores for each chain

98 lines 3.73 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWallet = exports.decryptKeystore = exports.getAddress = exports.isValidAddress = exports.isValidSecret = void 0; var crypto_1 = __importDefault(require("crypto")); var util_1 = require("@ethereumjs/util"); var wallet_1 = require("@ethereumjs/wallet"); var jcc_common_1 = require("jcc_common"); var keccak_1 = __importDefault(require("keccak")); var scryptsy_1 = __importDefault(require("scryptsy")); var constant_1 = require("../constant"); var isObject = function (obj) { return Object.prototype.toString.call(obj) === "[object Object]"; }; /** * check eth secret is valid or not * * @param {string} secret * @returns {boolean} return true if valid */ var isValidSecret = function (secret) { secret = (0, jcc_common_1.filterOx)(secret); try { return (0, util_1.isValidPrivate)(Buffer.from(secret, "hex")); } catch (error) { return false; } }; exports.isValidSecret = isValidSecret; /** * check eth address is valid or not * * @param {string} address * @returns {boolean} return true if valid */ var isValidAddress = function (address) { return (0, util_1.isValidAddress)(address); }; exports.isValidAddress = isValidAddress; /** * get eth address with secret * @param {string} secret * @returns {string | null} return address if valid, otherwise return null */ var getAddress = function (secret) { secret = (0, jcc_common_1.filterOx)(secret); if (!isValidSecret(secret)) { return null; } var wallet = wallet_1.Wallet.fromPrivateKey(Buffer.from(secret, "hex")); return wallet.getAddressString(); }; exports.getAddress = getAddress; /** * decrypt ethereum keystore file with ethereum password * * @param {string} password * @param {*} encryptData * @returns {string} return secret if success, otherwise throws `keystore is invalid` if the keystore is invalid or * throws `ethereum password is wrong` if the password is wrong */ var decryptKeystore = function (password, encryptData) { if (!isObject(encryptData)) { throw new Error(constant_1.KEYSTORE_IS_INVALID); } var cryptoData = encryptData.Crypto || encryptData.crypto; if ((0, jcc_common_1.isEmptyObject)(cryptoData) || (0, jcc_common_1.isEmptyObject)(cryptoData.cipherparams) || (0, jcc_common_1.isEmptyObject)(cryptoData.kdfparams)) { throw new Error(constant_1.KEYSTORE_IS_INVALID); } var iv = Buffer.from(cryptoData.cipherparams.iv, "hex"); var kdfparams = cryptoData.kdfparams; var derivedKey = (0, scryptsy_1.default)(Buffer.from(password), Buffer.from(kdfparams.salt, "hex"), kdfparams.n, kdfparams.r, kdfparams.p, kdfparams.dklen); var ciphertext = Buffer.from(cryptoData.ciphertext, "hex"); var mac = (0, keccak_1.default)("keccak256") .update(Buffer.concat([derivedKey.slice(16, 32), ciphertext])) .digest(); if (mac.toString("hex") !== cryptoData.mac) { throw new Error(constant_1.ETH_PASSWORD_IS_WRONG); } var decipher = crypto_1.default.createDecipheriv("aes-128-ctr", derivedKey.slice(0, 16), iv); var seed = Buffer.concat([decipher.update(ciphertext), decipher.final()]); return seed.toString("hex"); }; exports.decryptKeystore = decryptKeystore; /** * create eth wallet * * @returns {IWalletModel} */ var createWallet = function () { var _w = wallet_1.Wallet.generate(); return { address: _w.getAddressString(), secret: _w.getPrivateKeyString() }; }; exports.createWallet = createWallet; //# sourceMappingURL=index.js.map