hasher cleanup

This commit is contained in:
Grimmauld 2025-02-09 14:35:33 +01:00
parent 01485a3168
commit 565e924baf
No known key found for this signature in database

View file

@ -3,12 +3,12 @@ extern crate byteorder;
extern crate pcsc;
use base32::Alphabet;
use iso7816_tlv::simple::{Tag as TlvTag, Tlv};
use once_cell::unsync::OnceCell;
use openssl::hash::MessageDigest;
use sha1::Sha1;
use ouroboros::self_referencing;
use regex::Regex;
use std::collections::HashMap;
use std::default;
use std::iter::zip;
use std::str::{self};
@ -18,15 +18,12 @@ use base64::{engine::general_purpose, Engine as _};
use hmac::{Hmac, Mac};
use openssl::pkcs5::pbkdf2_hmac;
use pcsc::{Card, Transaction};
use sha1::Sha1;
use sha2::{Digest, Sha256};
use std::cmp::Ordering;
use std::hash::{Hash, Hasher};
use byteorder::{BigEndian, ByteOrder, ReadBytesExt, WriteBytesExt};
use byteorder::{BigEndian, ByteOrder, WriteBytesExt};
use std::ffi::CString;
use std::io::{Cursor, Read};
use std::time::SystemTime;
pub const INS_SELECT: u8 = 0xa4;
@ -98,6 +95,16 @@ pub enum HashAlgo {
Sha512 = 0x03,
}
impl HashAlgo {
pub fn getMessageDigest(&self) -> openssl::hash::MessageDigest {
match self {
HashAlgo::Sha1 => MessageDigest::sha1(),
HashAlgo::Sha256 => MessageDigest::sha256(),
HashAlgo::Sha512 => MessageDigest::sha512(),
}
}
}
#[derive(Debug, PartialEq, Copy, Clone, Eq)]
#[repr(u8)]
pub enum OathType {
@ -280,9 +287,9 @@ fn _parse_cred_id(cred_id: &[u8], oath_type: OathType) -> (Option<String>, Strin
fn _get_device_id(salt: Vec<u8>) -> String {
// Create SHA-256 hash of the salt
let mut hasher = Sha256::new();
hasher.update(salt);
let result = hasher.finalize();
let mut hasher = openssl::hash::Hasher::new(MessageDigest::sha256()).unwrap();
hasher.update(salt.leak()).unwrap();
let result = hasher.finish().unwrap();
// Get the first 16 bytes of the hash
let hash_16_bytes = &result[..16];
@ -309,14 +316,6 @@ fn _derive_key(salt: &[u8], passphrase: &str) -> Vec<u8> {
key
}
fn get_message_digest(algo: HashAlgo) -> MessageDigest {
match algo {
HashAlgo::Sha1 => MessageDigest::sha1(),
HashAlgo::Sha256 => MessageDigest::sha256(),
HashAlgo::Sha512 => MessageDigest::sha512(),
}
}
fn _hmac_shorten_key(key: &[u8], algo: MessageDigest) -> Vec<u8> {
if key.len() > algo.block_size() {
let mut hasher = openssl::hash::Hasher::new(algo).unwrap();