diff --git a/Cargo.lock b/Cargo.lock index 20c2d84..87535c5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -180,8 +180,8 @@ dependencies = [ "failure 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "hex 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", "libcryptsetup-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", + "ring 0.13.5 (registry+https://github.com/rust-lang/crates.io-index)", "rpassword 4.0.1 (registry+https://github.com/rust-lang/crates.io-index)", - "rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)", "structopt 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", ] diff --git a/Cargo.toml b/Cargo.toml index 362be16..f1d9cb5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ libcryptsetup-sys = "0.1.2" hex = "0.3.2" -rust-crypto = "0.2.36" +ring = "0.13.5" failure = "0.1.5" rpassword = "4.0.1" structopt = "0.3.2" diff --git a/src/config.rs b/src/config.rs index 5dcabdb..eb06724 100644 --- a/src/config.rs +++ b/src/config.rs @@ -1,7 +1,6 @@ use crate::error::*; use crate::*; -use crypto::digest::Digest; -use crypto::sha2::Sha256; +use ring::digest; use std::fmt; use std::fs::File; @@ -57,7 +56,7 @@ impl fmt::Display for InputSalt { impl InputSalt { pub fn obtain(&self, password_helper: &PasswordHelper) -> Fido2LuksResult<[u8; 32]> { - let mut digest = Sha256::new(); + let mut digest = digest::Context::new(&digest::SHA256); match self { InputSalt::File { path } => { let mut do_io = || { @@ -65,7 +64,7 @@ impl InputSalt { let mut buf = [0u8; 512]; loop { let red = reader.read(&mut buf)?; - digest.input(&buf[0..red]); + digest.update(&buf[0..red]); if red == 0 { break; } @@ -75,12 +74,12 @@ impl InputSalt { do_io().map_err(|cause| Fido2LuksError::KeyfileError { cause })?; } InputSalt::AskPassword => { - digest.input(password_helper.obtain()?.as_bytes()); + digest.update(password_helper.obtain()?.as_bytes()); } - InputSalt::String(s) => digest.input(s.as_bytes()), + InputSalt::String(s) => digest.update(s.as_bytes()), } let mut salt = [0u8; 32]; - digest.result(&mut salt); + salt.as_mut().copy_from_slice(digest.finish().as_ref()); Ok(salt) } } diff --git a/src/main.rs b/src/main.rs index 2295ba2..ac93d4b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,10 +5,9 @@ use crate::cli::*; use crate::config::*; use crate::device::*; use crate::error::*; -use crypto::digest::Digest; -use crypto::sha2::Sha256; use cryptsetup_rs as luks; use cryptsetup_rs::Luks1CryptDevice; +use ring::digest; use std::io::{self}; use std::path::PathBuf; @@ -26,11 +25,11 @@ fn open_container(device: &PathBuf, name: &str, secret: &[u8; 32]) -> Fido2LuksR } fn assemble_secret(hmac_result: &[u8], salt: &[u8]) -> [u8; 32] { - let mut digest = Sha256::new(); - digest.input(salt); - digest.input(hmac_result); + let mut digest = digest::Context::new(&digest::SHA256); + digest.update(salt); + digest.update(hmac_result); let mut secret = [0u8; 32]; - digest.result(&mut secret); + secret.as_mut().copy_from_slice(digest.finish().as_ref()); secret }