added connected command
This commit is contained in:
parent
b9f3f793a7
commit
ee5f3358f7
@ -90,3 +90,7 @@ pub fn add_key_to_luks(conf: &Config) -> Fido2LuksResult<u8> {
|
||||
let slot = handle.add_keyslot(&secret, None, None)?;
|
||||
Ok(slot)
|
||||
}
|
||||
|
||||
pub fn authenticator_connected() -> Fido2LuksResult<bool> {
|
||||
Ok(!device::get_devices()?.is_empty())
|
||||
}
|
||||
|
@ -2,7 +2,7 @@ use crate::error::*;
|
||||
|
||||
use ctap;
|
||||
use ctap::extensions::hmac::{FidoHmacCredential, HmacExtension};
|
||||
use ctap::FidoDevice;
|
||||
use ctap::{FidoDevice, FidoError, FidoErrorKind};
|
||||
|
||||
pub fn perform_challenge(credential_id: &str, salt: &[u8; 32]) -> Fido2LuksResult<[u8; 32]> {
|
||||
let cred = FidoHmacCredential {
|
||||
@ -10,16 +10,34 @@ pub fn perform_challenge(credential_id: &str, salt: &[u8; 32]) -> Fido2LuksResul
|
||||
rp_id: "hmac".to_string(),
|
||||
};
|
||||
let mut errs = Vec::new();
|
||||
for di in ctap::get_devices()? {
|
||||
let mut dev = FidoDevice::new(&di)?;
|
||||
match dev.hmac_challange(&cred, &salt[..]) {
|
||||
Ok(secret) => {
|
||||
return Ok(secret);
|
||||
}
|
||||
Err(e) => {
|
||||
errs.push(e);
|
||||
match get_devices()? {
|
||||
ref devs if devs.is_empty() => Err(Fido2LuksError::NoAuthenticatorError)?,
|
||||
devs => {
|
||||
for mut dev in devs.into_iter() {
|
||||
match dev.hmac_challange(&cred, &salt[..]) {
|
||||
Ok(secret) => {
|
||||
return Ok(secret);
|
||||
}
|
||||
Err(e) => {
|
||||
errs.push(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(errs.pop().ok_or(Fido2LuksError::NoAuthenticatorError)?)?
|
||||
}
|
||||
|
||||
pub fn get_devices() -> Fido2LuksResult<Vec<FidoDevice>> {
|
||||
let mut devices = Vec::with_capacity(2);
|
||||
for di in ctap::get_devices()? {
|
||||
match FidoDevice::new(&di) {
|
||||
Err(e) => match e.kind() {
|
||||
FidoErrorKind::ParseCtap | FidoErrorKind::DeviceUnsupported => (),
|
||||
err => Err(FidoError::from(err))?,
|
||||
},
|
||||
Ok(dev) => devices.push(dev),
|
||||
}
|
||||
}
|
||||
Ok(devices)
|
||||
}
|
||||
|
14
src/main.rs
14
src/main.rs
@ -1,6 +1,5 @@
|
||||
#[macro_use]
|
||||
extern crate failure;
|
||||
#[macro_use]
|
||||
extern crate serde_derive;
|
||||
use crate::cli::*;
|
||||
use crate::config::*;
|
||||
@ -20,6 +19,7 @@ use std::env;
|
||||
|
||||
use std::io::{self, Write};
|
||||
use std::path::PathBuf;
|
||||
use std::process::exit;
|
||||
|
||||
mod cli;
|
||||
mod config;
|
||||
@ -104,8 +104,18 @@ fn main() -> Fido2LuksResult<()> {
|
||||
match args.first().map(|s| s.as_ref()).unwrap() {
|
||||
"addkey" => add_key_to_luks(&Config::load_default_location()?).map(|_| ()),
|
||||
"setup" => setup(),
|
||||
"connected" => match authenticator_connected()? {
|
||||
false => {
|
||||
println!("no");
|
||||
exit(1)
|
||||
}
|
||||
_ => {
|
||||
println!("yes");
|
||||
exit(0)
|
||||
}
|
||||
},
|
||||
_ => {
|
||||
eprintln!("Usage: setup | addkey");
|
||||
eprintln!("Usage: setup | addkey | connected");
|
||||
Ok(())
|
||||
} //"selfcontain" => package_self()
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user