From 80d32122f505567d9b84a8e0beffe379c800017d Mon Sep 17 00:00:00 2001 From: Hugo Trentesaux <hugo@trentesaux.fr> Date: Fri, 16 Feb 2024 16:51:17 +0100 Subject: [PATCH] wip add phrase generation --- Cargo.lock | 3 +++ Cargo.toml | 5 ++++- src/commands/vault.rs | 9 ++++++++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b891ee4..f4b5060 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2077,6 +2077,7 @@ version = "0.2.7" dependencies = [ "age", "anyhow", + "bip39", "bs58", "clap", "confy", @@ -2086,9 +2087,11 @@ dependencies = [ "graphql_client", "hex", "inquire", + "itertools 0.12.1", "log", "nacl", "parity-scale-codec", + "rand_chacha", "reqwest", "rpassword", "scrypt", diff --git a/Cargo.toml b/Cargo.toml index 8f7dfd2..d840777 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -41,13 +41,16 @@ confy = "^0.5.1" bs58 = "^0.5.0" inquire = "^0.6.2" directories = "^5.0.1" +itertools = "^0.12.1" + # crypto scrypt = { version = "^0.11", default-features = false } # for old-style key generation nacl = { version = "^0.5.3" } # for old-style key generation age = { default-features = false, version = "^0.10.0", features = [ "armor", ] } # this is beta crate for password -encrypted files - +rand_chacha = "^0.3.1" # used to generate random seed +bip39 = "^2.0.0" # to convert seed to mnemonic # allows to build gcli for different runtimes and with different predefined networks [features] diff --git a/src/commands/vault.rs b/src/commands/vault.rs index 5c2a9cf..6355110 100644 --- a/src/commands/vault.rs +++ b/src/commands/vault.rs @@ -1,5 +1,7 @@ use crate::*; use age::secrecy::Secret; +use itertools::Itertools; +use rand_chacha::rand_core::SeedableRng; use std::io::{Read, Write}; /// define universal dividends subcommands @@ -58,7 +60,12 @@ pub fn handle_command(data: Data, command: Subcommand) -> Result<(), GcliError> println!("{}", data.project_dir.data_dir().to_str().unwrap()); } Subcommand::Generate => { - unimplemented!() + // ChaCha20Rng is ok for cryptography + let rng = rand_chacha::ChaCha20Rng::from_entropy(); + let seed = rng.get_seed(); + let mnemonic = bip39::Mnemonic::from_entropy(&seed); + let phrase = mnemonic.unwrap().word_iter().join(" "); + println!("{phrase}"); } Subcommand::Import => { // --- currently only support mnemonic secret -- GitLab