cross_authenticode/
algorithm.rs1use std::fmt::Display;
2
3use crate::error::AuthenticodeError;
4
5#[derive(Debug, PartialEq)]
7pub enum Algorithm {
8 Md5,
9 Sha1,
10 Sha256,
11 Sha384,
12 Sha512,
13}
14
15impl TryFrom<&[u8]> for Algorithm {
16 type Error = AuthenticodeError;
17
18 fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
19 match value.len() {
20 16 => Ok(Algorithm::Md5),
21 20 => Ok(Algorithm::Sha1),
22 32 => Ok(Algorithm::Sha256),
23 48 => Ok(Algorithm::Sha384),
24 64 => Ok(Algorithm::Sha512),
25 _ => Err(AuthenticodeError::InvalidHashAlgorithm),
26 }
27 }
28}
29
30impl Display for Algorithm {
31 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
32 match self {
33 Algorithm::Md5 => write!(f, "MD5"),
34 Algorithm::Sha1 => write!(f, "SHA1"),
35 Algorithm::Sha256 => write!(f, "SHA256"),
36 Algorithm::Sha384 => write!(f, "SHA384"),
37 Algorithm::Sha512 => write!(f, "SHA512"),
38 }
39 }
40}