From 0a9bb23e4e0e8586156d289042665e6f52d174af Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Wed, 25 Jan 2023 17:09:16 +0100 Subject: [PATCH] Replace `RAD_DEBUG` with `RAD_SEED` The latter is strictly more powerful. --- radicle-cli/tests/commands.rs | 5 ++++- radicle-crypto/src/lib.rs | 17 +++++++++++++---- radicle-httpd/src/api/test.rs | 5 ++++- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/radicle-cli/tests/commands.rs b/radicle-cli/tests/commands.rs index ec77d7c0..70d09c35 100644 --- a/radicle-cli/tests/commands.rs +++ b/radicle-cli/tests/commands.rs @@ -94,7 +94,10 @@ fn rad_auth() { "examples/rad-auth.md", Path::new("."), None, - [("RAD_DEBUG", "1")], + [( + "RAD_SEED", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + )], ) .unwrap(); } diff --git a/radicle-crypto/src/lib.rs b/radicle-crypto/src/lib.rs index 5acbd98f..c9b7f432 100644 --- a/radicle-crypto/src/lib.rs +++ b/radicle-crypto/src/lib.rs @@ -499,11 +499,20 @@ pub mod keypair { /// Generate a new keypair using OS randomness. pub fn generate() -> KeyPair { #[cfg(debug_assertions)] - if std::env::var("RAD_DEBUG").is_ok() { - // Generate a test keypair that is always the same. + if let Ok(seed) = std::env::var("RAD_SEED") { + // Generate a keypair based on the given environment variable. // This is useful for debugging and testing, since the - // public key is known in advance. - return KeyPair::from_seed(Seed::new([0xff; 32])); + // public key can be known in advance. + let seed = (0..seed.len()) + .step_by(2) + .map(|i| u8::from_str_radix(&seed[i..i + 2], 16)) + .collect::, _>>() + .expect("generate: invalid hexadecimal value set in `RAD_SEED`"); + let seed: [u8; 32] = seed + .try_into() + .expect("generate: invalid seed length set in `RAD_SEED`"); + + return KeyPair::from_seed(Seed::new(seed)); } KeyPair::generate() } diff --git a/radicle-httpd/src/api/test.rs b/radicle-httpd/src/api/test.rs index 7b4abb54..dd43df58 100644 --- a/radicle-httpd/src/api/test.rs +++ b/radicle-httpd/src/api/test.rs @@ -27,7 +27,10 @@ pub fn seed(dir: &Path) -> Context { let rad_home = dir.join("radicle"); env::set_var("RAD_PASSPHRASE", PASSWORD); - env::set_var("RAD_DEBUG", "1"); + env::set_var( + "RAD_SEED", + "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + ); fs::create_dir_all(&workdir).unwrap(); fs::create_dir_all(&rad_home).unwrap();