thor-devkit
Version:
Typescript library to aid DApp development on VeChain Thor
71 lines • 5.5 kB
JavaScript
import { encryptKeystoreJson, decryptKeystoreJson, computeAddress } from 'ethers';
import { Buffer } from 'buffer';
export 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 = computeAddress(hexKey).toLowerCase();
return 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 decryptKeystoreJson(JSON.stringify(ks), password)
.then(sk => 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 || (Keystore = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5c3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMva2V5c3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUNqRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBVS9CLE1BQU0sS0FBVyxRQUFRLENBc0V4QjtBQXRFRCxXQUFpQixRQUFRO0lBQ3JCOzs7O09BSUc7SUFDSCxTQUFnQixPQUFPLENBQUMsVUFBa0IsRUFBRSxRQUFnQjtRQUN4RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUNoRCxNQUFNLElBQUksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7UUFDakQsT0FBTyxtQkFBbUIsQ0FDdEIsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsRUFDckMsUUFBUSxFQUNSLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUN4QyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUM3QyxDQUFDO0lBUmUsZ0JBQU8sVUFRdEIsQ0FBQTtJQUVEOzs7OztPQUtHO0lBQ0gsU0FBZ0IsT0FBTyxDQUFDLEVBQVksRUFBRSxRQUFnQjtRQUNsRCxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBUSxDQUFDO2FBQ25ELElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUMvRCxDQUFDO0lBSGUsZ0JBQU8sVUFHdEIsQ0FBQTtJQUVEOzs7T0FHRztJQUNILFNBQWdCLFVBQVUsQ0FBQyxFQUFPO1FBQzlCLElBQUksQ0FBQztZQUNELFFBQVEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUN2QixPQUFPLElBQUksQ0FBQTtRQUNmLENBQUM7UUFBQyxXQUFNLENBQUM7WUFDTCxPQUFPLEtBQUssQ0FBQTtRQUNoQixDQUFDO0lBQ0wsQ0FBQztJQVBlLG1CQUFVLGFBT3pCLENBQUE7SUFFRCwrQ0FBK0M7SUFDL0MsU0FBUyxTQUFTLENBQUMsR0FBVztRQUMxQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVMsRUFBRSxFQUFFO1lBQzNCLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxHQUFJLENBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDckIsSUFBSSxPQUFPLENBQUMsS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDeEIsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQTtnQkFDbkIsQ0FBQztnQkFDRCxTQUFTLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFBO2dCQUM5QixPQUFPLFNBQVMsQ0FBQTtZQUNwQixDQUFDLEVBQUUsRUFBUyxDQUFDLENBQUE7UUFDakIsQ0FBQyxDQUFBO1FBQ0QsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUVELFNBQVMsUUFBUSxDQUFDLEVBQVk7UUFDMUIsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE1BQU0sSUFBSSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUMxQyxDQUFDO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxNQUFNLElBQUksS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDdEMsQ0FBQztRQUNELElBQUksQ0FBQyxpRUFBaUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDakYsTUFBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNqQyxDQUFDO1FBQ0QsSUFBSSxPQUFPLEVBQUUsQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDaEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQTtJQUNiLENBQUM7QUFDTCxDQUFDLEVBdEVnQixRQUFRLEtBQVIsUUFBUSxRQXNFeEIifQ==