feat: 0.7.2, remove direct sha256 dependency

This commit is contained in:
2023-11-12 23:19:34 +08:00
parent 9c5b28eb2a
commit 4b426f7b13
5 changed files with 17 additions and 100 deletions

View File

@@ -8,8 +8,8 @@ use clap::Args;
use rust_util::{debugging, information, opt_result, simple_error, success, warning, XResult};
use zeroize::Zeroize;
use crate::{util, util_digest};
use crate::crypto_cryptor::{Cryptor, KeyNonce};
use crate::util;
use crate::util_progress::Progress;
#[derive(Debug, Args)]
@@ -61,8 +61,9 @@ pub fn direct_decrypt(cmd_direct_decrypt: CmdDirectDecrypt) -> XResult<()> {
}
let mut key_digest = [0_u8; 32];
opt_result!(file_in.read_exact(&mut key_digest), "Read encryption key digest failed: {}");
if sha256::digest(&key) != hex::encode(key_digest) {
debugging!("Encryption key digest mismatch: {} vs {}", sha256::digest(&key), hex::encode(key_digest));
if hex::encode(util_digest::sha256_digest(&key)) != hex::encode(key_digest) {
debugging!("Encryption key digest mismatch: {} vs {}",
hex::encode(util_digest::sha256_digest(&key)), hex::encode(key_digest));
return simple_error!("Encryption key digest mismatch.");
}
let mut nonce = [0_u8; 12];

View File

@@ -1,6 +1,7 @@
use rust_util::XResult;
use crate::crypto_cryptor::{Cryptor, KeyNonce};
use crate::util_digest;
pub fn try_decrypt_with_salt(crypto: Cryptor, key_nonce: &KeyNonce, salt: &[u8], message: &[u8]) -> XResult<Vec<u8>> {
let new_nonce = build_salted_nonce(key_nonce.n, salt);
@@ -28,6 +29,7 @@ pub fn encrypt(crypto: Cryptor, key_nonce: &KeyNonce, message: &[u8]) -> XResult
fn build_salted_nonce(nonce: &[u8], salt: &[u8]) -> Vec<u8> {
let mut nonce_with_salt = nonce.to_vec();
nonce_with_salt.extend_from_slice(salt);
let input = hex::decode(sha256::digest(nonce_with_salt)).unwrap();
let input = util_digest::sha256_digest(&nonce_with_salt);
// let input = hex::decode(sha256::digest(nonce_with_salt)).unwrap();
input[0..12].to_vec()
}

View File

@@ -45,6 +45,14 @@ impl DigestWrite {
}
}
pub fn sha256_digest(input: &[u8]) -> Vec<u8> {
let mut digest = Sha256::new();
digest.input(input);
let mut buf: Vec<u8> = repeat(0).take((digest.output_bits() + 7) / 8).collect();
digest.result(&mut buf);
buf
}
fn get_digest_by_algorithm(algo: &str) -> Option<Box<dyn Digest>> {
let algo = algo.to_uppercase();
match algo.as_str() {