pub struct HashQualityMetrics {
pub components_with_any_hash: usize,
pub components_with_strong_hash: usize,
pub components_with_weak_only: usize,
pub algorithm_distribution: BTreeMap<String, usize>,
pub total_hashes: usize,
pub vendor_components_total: usize,
pub vendor_components_with_hash: usize,
pub vendor_components_with_strong_hash: usize,
}Expand description
Hash/integrity quality metrics
Fields§
§components_with_any_hash: usizeComponents with any hash
components_with_strong_hash: usizeComponents with at least one strong hash (SHA-256+, SHA-3, BLAKE, Blake3)
components_with_weak_only: usizeComponents with only weak hashes (MD5, SHA-1) and no strong backup
algorithm_distribution: BTreeMap<String, usize>Distribution of hash algorithms across all components
total_hashes: usizeTotal hash entries across all components
vendor_components_total: usizeVendor-supplied components — supplier or author set AND a non-synthetic
canonical identifier (PURL/CPE/SWHID/SWID).
Tracks how many such “upstream” components exist, used to verify
CRA prEN 40000-1-3 [PRE-7-RQ-07-RE] (carry-through of vendor hashes).
vendor_components_with_hash: usizeVendor components that carry at least one hash entry.
vendor_components_with_strong_hash: usizeVendor components that carry at least one strong hash (SHA-256+).
Implementations§
Source§impl HashQualityMetrics
impl HashQualityMetrics
Sourcepub fn from_sbom(sbom: &NormalizedSbom) -> Self
pub fn from_sbom(sbom: &NormalizedSbom) -> Self
Calculate hash quality metrics from an SBOM
Sourcepub fn vendor_hash_coverage(&self) -> Option<f64>
pub fn vendor_hash_coverage(&self) -> Option<f64>
Vendor-hash coverage (fraction of vendor-supplied components carrying
at least one hash). Returns None when there are no vendor components,
so the caller can suppress the violation rather than divide by zero.
Sourcepub fn vendor_strong_hash_coverage(&self) -> Option<f64>
pub fn vendor_strong_hash_coverage(&self) -> Option<f64>
Vendor strong-hash coverage (fraction with at least one SHA-256+ hash).
Sourcepub fn quality_score(&self, total_components: usize) -> f32
pub fn quality_score(&self, total_components: usize) -> f32
Calculate integrity quality score (0-100)
Base 60% for any-hash coverage + 40% bonus for strong-hash coverage, with a penalty for weak-only components.
Trait Implementations§
Source§impl Clone for HashQualityMetrics
impl Clone for HashQualityMetrics
Source§fn clone(&self) -> HashQualityMetrics
fn clone(&self) -> HashQualityMetrics
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for HashQualityMetrics
impl Debug for HashQualityMetrics
Source§impl<'de> Deserialize<'de> for HashQualityMetrics
impl<'de> Deserialize<'de> for HashQualityMetrics
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for HashQualityMetrics
impl RefUnwindSafe for HashQualityMetrics
impl Send for HashQualityMetrics
impl Sync for HashQualityMetrics
impl Unpin for HashQualityMetrics
impl UnsafeUnpin for HashQualityMetrics
impl UnwindSafe for HashQualityMetrics
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more