UNPKG

thor-devkit

Version:

Typescript library to aid DApp development on VeChain Thor

71 lines 5.5 kB
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==