@kba-tools/genesis-tool
Version:
A forked repo from ConsenSys which helps to generate genesis block for Besu Network with xemptyBlockPeriod field.
113 lines • 8.73 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.tesseraOutput = tesseraOutput;
const nacl = __importStar(require("tweetnacl"));
const argon2 = __importStar(require("argon2"));
const fs = __importStar(require("fs"));
const crypto_1 = require("crypto");
function createDefaultKeyFile(locked) {
const UNLOCKED = {
type: "unlocked",
data: {
bytes: ""
}
};
const LOCKED = {
type: "argon2sbox",
data: {
snonce: "",
asalt: "",
sbox: "",
aopts: {
variant: "i",
iterations: 10,
memory: 1048576,
parallelism: 4
}
}
};
if (locked) {
return LOCKED;
}
else {
return UNLOCKED;
}
}
function generateKeys() {
const keyPairUint8Array = nacl.box.keyPair();
return { secretKey: Buffer.from(keyPairUint8Array.secretKey), publicKey: Buffer.from(keyPairUint8Array.publicKey) };
}
function tesseraOutput(password, outputPath, member) {
return __awaiter(this, void 0, void 0, function* () {
// this function can be called from networkGenerate and looped outside here for each tessera instance needed (usually 1:1 to members needed)
const newKeys = generateKeys();
const encodedPublicKey = Buffer.from(newKeys.publicKey).toString("base64");
const encodedPrivateKey = Buffer.from(newKeys.secretKey).toString("base64");
const privateKeyPath = outputPath + "/member" + member.toString() + "/tessera.key";
const publicKeyPath = outputPath + "/member" + member.toString() + "/tessera.pub";
const passwordFilePath = outputPath + "/member" + member.toString() + "/passwordFile.txt";
if (password === "") {
// if no password provided just run key generation and output result
const defaultKeyFile = createDefaultKeyFile(false);
defaultKeyFile.data.bytes = encodedPrivateKey;
fs.writeFileSync(privateKeyPath, JSON.stringify(defaultKeyFile, null, 2));
fs.writeFileSync(publicKeyPath, encodedPublicKey);
}
else {
// if password is provided then we need to do more steps
const defaultKeyFile = createDefaultKeyFile(true);
const randomSalt = (0, crypto_1.randomBytes)(16);
const argonResult = yield argon2.hash(password, {
type: argon2.argon2i,
memoryCost: 1048576,
hashLength: 32,
parallelism: 4,
raw: true,
timeCost: 10,
salt: randomSalt
});
const myNonce = (0, crypto_1.randomBytes)(24);
const mySecretBox = nacl.secretbox(newKeys.secretKey, myNonce, argonResult);
defaultKeyFile.data.snonce = myNonce.toString("base64");
defaultKeyFile.data.asalt = randomSalt.toString("base64");
defaultKeyFile.data.sbox = Buffer.from(mySecretBox).toString("base64");
fs.writeFileSync(privateKeyPath, JSON.stringify(defaultKeyFile, null, 2));
fs.writeFileSync(publicKeyPath, encodedPublicKey);
fs.writeFileSync(passwordFilePath, password);
}
return { privateKeyPath, publicKeyPath };
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzc2VyYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdGVzc2VyYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMENBLHNDQTRDQztBQXRGRCxnREFBa0M7QUFDbEMsK0NBQWlDO0FBRWpDLHVDQUF5QjtBQUN6QixtQ0FBcUM7QUFHckMsU0FBUyxvQkFBb0IsQ0FBQyxNQUFlO0lBQzNDLE1BQU0sUUFBUSxHQUFzQjtRQUNsQyxJQUFJLEVBQUUsVUFBVTtRQUNoQixJQUFJLEVBQUU7WUFDSixLQUFLLEVBQUUsRUFBRTtTQUNWO0tBQ0YsQ0FBQztJQUVGLE1BQU0sTUFBTSxHQUFvQjtRQUM5QixJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUU7WUFDSixNQUFNLEVBQUUsRUFBRTtZQUNWLEtBQUssRUFBRSxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUU7WUFDUixLQUFLLEVBQUU7Z0JBQ0wsT0FBTyxFQUFFLEdBQUc7Z0JBQ1osVUFBVSxFQUFFLEVBQUU7Z0JBQ2QsTUFBTSxFQUFFLE9BQU87Z0JBQ2YsV0FBVyxFQUFFLENBQUM7YUFDZjtTQUNGO0tBQ0YsQ0FBQztJQUVGLElBQUksTUFBTSxFQUFFLENBQUM7UUFDWCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZO0lBQ25CLE1BQU0saUJBQWlCLEdBQWdCLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDMUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7QUFDdEgsQ0FBQztBQUVE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