Merge branch 'master' into HEAD
This commit is contained in:
27
src/cli.rs
27
src/cli.rs
@@ -155,6 +155,12 @@ pub fn parse_cmdline() -> Args {
|
||||
Args::from_args()
|
||||
}
|
||||
|
||||
pub fn prompt_interaction(interactive: bool) {
|
||||
if interactive {
|
||||
println!("Authorize using your FIDO device");
|
||||
}
|
||||
}
|
||||
|
||||
pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
let mut stdout = io::stdout();
|
||||
let args = parse_cmdline();
|
||||
@@ -163,6 +169,7 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
eprintln!("{}", &*message());
|
||||
}
|
||||
};
|
||||
let interactive = args.interactive;
|
||||
match &args.command {
|
||||
Command::Credential {
|
||||
authenticator,
|
||||
@@ -214,8 +221,9 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
.join(", ")
|
||||
)
|
||||
});
|
||||
prompt_interaction(interactive);
|
||||
let (secret, cred) = derive_secret(
|
||||
credentials.as_slice(),
|
||||
&credentials,
|
||||
&salt,
|
||||
authenticator.await_time,
|
||||
pin.as_deref(),
|
||||
@@ -291,6 +299,7 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
fido_device: true, ..
|
||||
} => {
|
||||
let (pin, salt) = inputs(salt_q, verify)?;
|
||||
prompt_interaction(interactive);
|
||||
Ok(derive_secret(
|
||||
&credentials,
|
||||
&salt,
|
||||
@@ -305,10 +314,12 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
)),
|
||||
}
|
||||
};
|
||||
let secret = |verify: bool,
|
||||
let secret = |q: &str,
|
||||
verify: bool,
|
||||
credentials: &[HexEncoded]|
|
||||
-> Fido2LuksResult<([u8; 32], FidoCredential)> {
|
||||
let (pin, salt) = inputs("Password", verify)?;
|
||||
let (pin, salt) = inputs(q, verify)?;
|
||||
prompt_interaction(interactive);
|
||||
derive_secret(credentials, &salt, authenticator.await_time, pin.as_deref())
|
||||
};
|
||||
// Non overlap
|
||||
@@ -338,9 +349,9 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
)
|
||||
});
|
||||
let creds = vec![HexEncoded(cred.id)];
|
||||
secret(true, &creds)
|
||||
secret("Password to be added", true, &creds)
|
||||
} else {
|
||||
secret(true, &credentials)
|
||||
secret("Password to be added", true, &credentials)
|
||||
}?;
|
||||
log(&|| format!("credential used: {}", hex::encode(&cred.id)));
|
||||
let added_slot = luks_dev.add_key(
|
||||
@@ -373,7 +384,8 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
remove_cred,
|
||||
..
|
||||
} => {
|
||||
let (existing_secret, _prev_cred) = secret(false, &credentials)?;
|
||||
let (existing_secret, _prev_cred) =
|
||||
secret("Current password", false, &credentials)?;
|
||||
let (replacement_secret, cred) = other_secret("Replacement password", true)?;
|
||||
let slot = if *add_password {
|
||||
luks_dev.add_key(
|
||||
@@ -429,6 +441,7 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
// Cow shouldn't be necessary
|
||||
let secret = |credentials: Cow<'_, Vec<HexEncoded>>| {
|
||||
let (pin, salt) = inputs("Password", false)?;
|
||||
prompt_interaction(interactive);
|
||||
derive_secret(
|
||||
credentials.as_ref(),
|
||||
&salt,
|
||||
@@ -489,7 +502,7 @@ pub fn run_cli() -> Fido2LuksResult<()> {
|
||||
if cause.kind() == FidoErrorKind::Timeout && retries > 0 => {}
|
||||
|
||||
e => return Err(e),
|
||||
}
|
||||
};
|
||||
retries -= 1;
|
||||
eprintln!("{}", e);
|
||||
}
|
||||
|
Reference in New Issue
Block a user