pe-sign 0.1.10

pe-sign is a cross-platform tool developed in Rust, designed for parsing and verifying digital signatures in PE files. It provides a simple command-line interface that supports extracting certificates, verifying digital signatures, calculating Authenticode digests, and printing certificate information.
Documentation
pub mod ext;
pub mod name;

mod certificate;
mod certificate_chain;

use std::fmt::Display;

pub use certificate::{Algorithm, Certificate, SubjectPublicKeyInfo, Validity};
pub use certificate_chain::{CertificateChain, CertificateChainBuilder};
use name::Name;

use crate::utils::{DisplayBytes, IndentString};

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct IssuerAndSerialNumber {
    pub issuer: Name,
    pub serial_number: Vec<u8>,
}

impl From<cms::cert::IssuerAndSerialNumber> for IssuerAndSerialNumber {
    fn from(value: cms::cert::IssuerAndSerialNumber) -> Self {
        let issuer = value.issuer.into();
        let serial_number = value.serial_number.as_bytes().to_vec();

        Self {
            issuer,
            serial_number,
        }
    }
}

impl Display for IssuerAndSerialNumber {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        writeln!(f, "Issuer And Serial Number:")?;
        writeln!(f, "{}", format!("Issuer: {}", self.issuer).indent(4))?;
        writeln!(f, "{}", "Serial Number:".indent(4))?;
        write!(f, "{}", self.serial_number.clone().to_bytes_string().indent(8))
    }
}