UNPKG

@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
"use strict"; 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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