Skip to main content

CraSidecarMetadata

Struct CraSidecarMetadata 

Source
pub struct CraSidecarMetadata {
Show 29 fields pub security_contact: Option<String>, pub vulnerability_disclosure_url: Option<String>, pub support_end_date: Option<DateTime<Utc>>, pub manufacturer_name: Option<String>, pub manufacturer_email: Option<String>, pub product_name: Option<String>, pub product_version: Option<String>, pub ce_marking_reference: Option<String>, pub update_mechanism: Option<String>, pub psirt_url: Option<String>, pub early_warning_contact: Option<String>, pub incident_report_contact: Option<String>, pub enisa_reporting_platform_id: Option<String>, pub coordinated_disclosure_policy_url: Option<String>, pub risk_assessment_url: Option<String>, pub risk_assessment_methodology: Option<String>, pub product_class: Option<CraProductClass>, pub conformity_assessment_route: Option<ConformityRoute>, pub is_oss_steward: bool, pub is_nis2_essential_entity: bool, pub is_nis2_important_entity: bool, pub processes_personal_data: bool, pub is_high_risk_ai: bool, pub red_repealed_until: Option<DateTime<Utc>>, pub eucc_protection_profile_id: Option<String>, pub eucc_target_of_evaluation: Option<String>, pub eucc_itsef_identifier: Option<String>, pub eucc_valid_until: Option<DateTime<Utc>>, pub annex_i_part_i_controls: BTreeMap<String, ControlAssertion>,
}
Expand description

CRA sidecar metadata that supplements SBOM information

Fields§

§security_contact: Option<String>

Security contact email or URL for vulnerability disclosure

§vulnerability_disclosure_url: Option<String>

URL for vulnerability disclosure policy/portal

§support_end_date: Option<DateTime<Utc>>

End of support/security updates date

§manufacturer_name: Option<String>

Manufacturer/vendor name (supplements SBOM creator info)

§manufacturer_email: Option<String>

Manufacturer contact email

§product_name: Option<String>

Product name (supplements SBOM document name)

§product_version: Option<String>

Product version

§ce_marking_reference: Option<String>

CE marking declaration reference (URL or document ID)

§update_mechanism: Option<String>

Security update delivery mechanism description

§psirt_url: Option<String>

PSIRT (Product Security Incident Response Team) public URL. Required to handle external vulnerability reports under Annex I Part II and Art. 14 incident reporting.

§early_warning_contact: Option<String>

Channel (email, URL, phone) for the 24-hour early-warning notification to ENISA / CSIRT under CRA Art. 14(1) when an actively-exploited vulnerability is identified.

§incident_report_contact: Option<String>

Channel for the 72-hour incident report under CRA Art. 14(2).

§enisa_reporting_platform_id: Option<String>

Manufacturer-side identifier for the ENISA single reporting platform (Art. 14(7)). Until ENISA publishes the technical interface this is a placeholder string — typically a manufacturer registration ID.

§coordinated_disclosure_policy_url: Option<String>

Coordinated vulnerability disclosure policy URL. Distinct from vulnerability_disclosure_url (which may point at a portal) — this is the published policy that meets CRA Art. 13(7) and ISO/IEC 29147 expectations.

§risk_assessment_url: Option<String>

URL or document reference for the documented risk assessment required by CRA Art. 13(2). Annex V technical documentation must include or reference this assessment.

§risk_assessment_methodology: Option<String>

Methodology used for the risk assessment (e.g., “ISO/IEC 27005:2022”, “NIST SP 800-30 r1”, “ETSI TS 102 165-1 TVRA”).

§product_class: Option<CraProductClass>

CRA product class drives the conformity-assessment route and the severity calibration of compliance checks (vendor-hash coverage, PSIRT, EUCC reference, attestation).

§conformity_assessment_route: Option<ConformityRoute>

Conformity-assessment route per CRA Annex VIII (Module A self-assessment, B+C EU-type examination, H full QA, or EUCC). Sidecar value wins over any CLI-provided default.

§is_oss_steward: bool

Whether this product is supplied by an open-source software steward (CRA Art. 24). When true, manufacturer-only obligations (DoC, notified-body attestation, manufacturer email) are not enforced; SBOM, vulnerability-handling, and CVD policy are still required.

§is_nis2_essential_entity: bool

True if the manufacturer is a NIS2 essential entity (Annex I of Directive (EU) 2022/2555). Triggers Art. 23 incident-reporting guidance in the cra-docs dossier.

§is_nis2_important_entity: bool

True if the manufacturer is a NIS2 important entity (Annex II of Directive (EU) 2022/2555).

§processes_personal_data: bool

True when the product processes personal data (GDPR Art. 32 security-of-processing applies in parallel to CRA Annex I).

§is_high_risk_ai: bool

True when the product is a high-risk AI system per the AI Act (Regulation (EU) 2024/1689). AI-Act conformity coordination must be handled alongside CRA Module assessment.

§red_repealed_until: Option<DateTime<Utc>>

Date until which the Radio Equipment Directive (RED, Directive 2014/53/EU) cybersecurity provisions still apply for this product. CRA repeals RED Art. 3(3)(d/e/f) on 2025-08-01; older device inventories may carry RED references through their support horizon.

§eucc_protection_profile_id: Option<String>

Common Criteria Protection Profile identifier (e.g., “PP-CC-MFR-2024-01”).

§eucc_target_of_evaluation: Option<String>

Common Criteria Target of Evaluation reference (URL or document ID).

§eucc_itsef_identifier: Option<String>

IT Security Evaluation Facility (ITSEF) identifier — the accredited laboratory that performed the EUCC evaluation.

§eucc_valid_until: Option<DateTime<Utc>>

EUCC certificate valid-until date.

§annex_i_part_i_controls: BTreeMap<String, ControlAssertion>

Per-control assertions for CRA Annex I Part I, keyed by control ID (e.g., "1.a" through "1.l" for §1, "2.a" through "2.m" for §2 vulnerability-handling). Each entry records whether the manufacturer claims the control is satisfied, the evidence URL, and the methodology used.

BTreeMap for deterministic ordering in dossier output.

Implementations§

Source§

impl CraSidecarMetadata

Source

pub fn from_json_file(path: &Path) -> Result<Self, CraSidecarError>

Load sidecar metadata from a JSON file

Source

pub fn from_yaml_file(path: &Path) -> Result<Self, CraSidecarError>

Load sidecar metadata from a YAML file

Source

pub fn from_file(path: &Path) -> Result<Self, CraSidecarError>

Load sidecar metadata, auto-detecting format from extension

Source

pub fn find_for_sbom(sbom_path: &Path) -> Option<Self>

Try to find a sidecar file for the given SBOM path.

Looks for <stem>.cra.{json,yaml,yml} and <stem>-cra.{json,yaml} alongside the SBOM. Multi-extension stems (app.cdx.json, app.spdx.json, app.spdx3.json) also try the inner stem (app.cra.json) so the common SBOM naming conventions work without forcing operators to repeat the format suffix.

Source

pub fn has_cra_data(&self) -> bool

Check if any CRA-relevant fields are populated

Source

pub fn example_json() -> String

Generate an example sidecar file content

Trait Implementations§

Source§

impl Clone for CraSidecarMetadata

Source§

fn clone(&self) -> CraSidecarMetadata

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for CraSidecarMetadata

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for CraSidecarMetadata

Source§

fn default() -> CraSidecarMetadata

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for CraSidecarMetadata

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Serialize for CraSidecarMetadata

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,