thor-devkit
Version:
Typescript library to aid DApp development on VeChain Thor
74 lines • 5.54 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Keystore = void 0;
const ethers_1 = require("ethers");
const buffer_1 = require("buffer");
var Keystore;
(function (Keystore) {
/**
* encrypt private key to keystore with given password
* @param privateKey the private key to be encrypted
* @param password password to encrypt the private key
*/
function encrypt(privateKey, password) {
const hexKey = '0x' + privateKey.toString('hex');
const addr = (0, ethers_1.computeAddress)(hexKey).toLowerCase();
return (0, ethers_1.encryptKeystoreJson)({ address: addr, privateKey: hexKey }, password, { scrypt: { N: 131072, p: 1, r: 8 } }).then(str => normalize(JSON.parse(str)));
}
Keystore.encrypt = encrypt;
/**
* decrypt private key from keystore
* an error thrown if not well formed
* @param ks the keystore
* @param password password to decrypt keystore
*/
function decrypt(ks, password) {
return (0, ethers_1.decryptKeystoreJson)(JSON.stringify(ks), password)
.then(sk => buffer_1.Buffer.from(sk.privateKey.slice(2), 'hex'));
}
Keystore.decrypt = decrypt;
/**
* roughly check whether keystore is well formed
* @param ks the keystore
*/
function wellFormed(ks) {
try {
validate(normalize(ks));
return true;
}
catch (_a) {
return false;
}
}
Keystore.wellFormed = wellFormed;
/** normalize keystore. e.g. lower case keys */
function normalize(obj) {
const lowerKey = (o) => {
return Object.keys(o).reduce((converted, k) => {
let v = o[k];
if (typeof v === 'object') {
v = lowerKey(v);
}
converted[k.toLowerCase()] = v;
return converted;
}, {});
};
return lowerKey(obj);
}
function validate(ks) {
if (ks.version !== 1 && ks.version !== 3) {
throw new Error('unsupported version');
}
if (!/^[0-9a-f]{40}$/i.test(ks.address)) {
throw new Error('invalid address');
}
if (!/^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$/i.test(ks.id)) {
throw new Error('invalid id');
}
if (typeof ks.crypto !== 'object') {
throw new Error('invalid crypto');
}
return ks;
}
})(Keystore || (exports.Keystore = Keystore = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMva2V5c3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbUNBQWlGO0FBQ2pGLG1DQUErQjtBQVUvQixJQUFpQixRQUFRLENBc0V4QjtBQXRFRCxXQUFpQixRQUFRO0lBQ3JCOzs7O09BSUc7SUFDSCxTQUFnQixPQUFPLENBQUMsVUFBa0IsRUFBRSxRQUFnQjtRQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoRCxNQUFNLElBQUksR0FBRyxJQUFBLHVCQUFjLEVBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDakQsT0FBTyxJQUFBLDRCQUFtQixFQUN0QixFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUNyQyxRQUFRLEVBQ1IsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQ3hDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdDLENBQUM7SUFSZSxnQkFBTyxVQVF0QixDQUFBO0lBRUQ7Ozs7O09BS0c7SUFDSCxTQUFnQixPQUFPLENBQUMsRUFBWSxFQUFFLFFBQWdCO1FBQ2xELE9BQU8sSUFBQSw0QkFBbUIsRUFBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQzthQUNuRCxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxlQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDL0QsQ0FBQztJQUhlLGdCQUFPLFVBR3RCLENBQUE7SUFFRDs7O09BR0c7SUFDSCxTQUFnQixVQUFVLENBQUMsRUFBTztRQUM5QixJQUFJLENBQUM7WUFDRCxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7WUFDdkIsT0FBTyxJQUFJLENBQUE7UUFDZixDQUFDO1FBQUMsV0FBTSxDQUFDO1lBQ0wsT0FBTyxLQUFLLENBQUE7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFQZSxtQkFBVSxhQU96QixDQUFBO0lBRUQsK0NBQStDO0lBQy9DLFNBQVMsU0FBUyxDQUFDLEdBQVc7UUFDMUIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFTLEVBQUUsRUFBRTtZQUMzQixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxJQUFJLENBQUMsR0FBSSxDQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ3JCLElBQUksT0FBTyxDQUFDLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ3hCLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUE7Z0JBQ25CLENBQUM7Z0JBQ0QsU0FBUyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQTtnQkFDOUIsT0FBTyxTQUFTLENBQUE7WUFDcEIsQ0FBQyxFQUFFLEVBQVMsQ0FBQyxDQUFBO1FBQ2pCLENBQUMsQ0FBQTtRQUNELE9BQU8sUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ3hCLENBQUM7SUFFRCxTQUFTLFFBQVEsQ0FBQyxFQUFZO1FBQzFCLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN2QyxNQUFNLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ3RDLENBQUM7UUFDRCxJQUFJLENBQUMsaUVBQWlFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ2pGLE1BQU0sSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7UUFDakMsQ0FBQztRQUNELElBQUksT0FBTyxFQUFFLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQUNyQyxDQUFDO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDYixDQUFDO0FBQ0wsQ0FBQyxFQXRFZ0IsUUFBUSx3QkFBUixRQUFRLFFBc0V4QiJ9