36 lines
987 B
Rust
36 lines
987 B
Rust
//! signkey create command
|
|
|
|
use std::path::PathBuf;
|
|
|
|
use anyhow::Result;
|
|
use sequoia_openpgp::cert::CertBuilder;
|
|
use sequoia_directories::Home;
|
|
|
|
use crate::cli::cli_args::SignkeyCreateCommand;
|
|
use crate::common::crypto;
|
|
use crate::config::{HuskConfig, HuskConfigContainer};
|
|
use crate::types::husk_context::HuskContext;
|
|
|
|
pub async fn dispatch(cmd: SignkeyCreateCommand, config: HuskConfigContainer)
|
|
-> Result<()> {
|
|
|
|
let config: HuskConfig = config.into();
|
|
let context = HuskContext::new(&config)?;
|
|
let sequoia_home = Home::new(PathBuf::from(&config.sequoia_home))?;
|
|
|
|
// XXX: cleanup the userid before using
|
|
let (cert, _) = CertBuilder::new()
|
|
.add_signing_subkey()
|
|
.add_userid(cmd.userid)
|
|
.generate()?;
|
|
|
|
if crypto::import_key(sequoia_home, &cert) {
|
|
let vc = cert.with_policy(&context.policy, None)?;
|
|
crypto::set_signing_key(&context, &vc)?;
|
|
|
|
println!("New signing key: {}", vc.fingerprint());
|
|
}
|
|
|
|
Ok(())
|
|
}
|