eth-crypto
Version:
Cryptographic functions for ethereum and how to use them with web3 and solidity
46 lines (43 loc) • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.createIdentity = createIdentity;
exports.createPrivateKey = createPrivateKey;
var _ethers = require("ethers");
var _util = require("@ethereumjs/util");
var MIN_ENTROPY_SIZE = 128;
/**
* create a privateKey from the given entropy or a new one
* @param {Buffer} entropy
* @return {string}
*/
function createPrivateKey(entropy) {
if (entropy) {
if (!Buffer.isBuffer(entropy)) throw new Error('EthCrypto.createPrivateKey(): given entropy is no Buffer');
if (Buffer.byteLength(entropy, 'utf8') < MIN_ENTROPY_SIZE) throw new Error('EthCrypto.createPrivateKey(): Entropy-size must be at least ' + MIN_ENTROPY_SIZE);
var outerHex = (0, _ethers.keccak256)(entropy);
return outerHex;
} else {
var innerHex = (0, _ethers.keccak256)((0, _ethers.concat)([(0, _ethers.randomBytes)(32), (0, _ethers.randomBytes)(32)]));
var middleHex = (0, _ethers.concat)([(0, _ethers.concat)([(0, _ethers.randomBytes)(32), innerHex]), (0, _ethers.randomBytes)(32)]);
var _outerHex = (0, _ethers.keccak256)(middleHex);
return _outerHex;
}
}
/**
* creates a new object with
* private-, public-Key and address
* @param {Buffer?} entropy if provided, will use that as single random-source
*/
function createIdentity(entropy) {
var privateKey = createPrivateKey(entropy);
var wallet = new _ethers.Wallet(privateKey);
var identity = {
privateKey: privateKey,
// remove trailing '0x04'
publicKey: (0, _util.stripHexPrefix)(wallet.signingKey.publicKey).slice(2),
address: wallet.address
};
return identity;
}