Skip to main content

canic_core/api/
fleet_activation.rs

1//! Module: api::fleet_activation
2//!
3//! Responsibility: expose Fleet activation workflows and canonical evidence hashes.
4//! Does not own: evidence encoding, storage projection, phase validation, or authorization.
5//! Boundary: maps typed internal failures into Canic's public error contract.
6
7use crate::{
8    dto::{
9        error::Error,
10        fleet_activation::{
11            FleetActivationIdentity, FleetActivationRequest, FleetActivationResumeRequest,
12            FleetActivationStatusResponse, FleetCascadeActivationEvidence,
13            FleetCascadeManifestEntry, FleetCredentialGenerationRef,
14            FleetCredentialGenerationRequest, FleetCredentialManifest,
15        },
16        fleet_subnet_root::FleetSubnetRootAuthority,
17    },
18    ids::FleetSubnetWasmStoreAuthority,
19    ops::fleet_activation::FleetActivationEvidenceOps,
20    view::fleet_activation::FleetActivationTransition,
21    workflow::runtime::fleet_activation::FleetActivationWorkflow,
22};
23
24///
25/// FleetActivationApi
26///
27
28pub struct FleetActivationApi;
29
30impl FleetActivationApi {
31    /// Hash one canonical root cascade manifest for host/runtime evidence comparison.
32    pub fn cascade_manifest_hash(
33        manifest: &[FleetCascadeManifestEntry],
34    ) -> Result<[u8; 32], Error> {
35        FleetActivationEvidenceOps::cascade_manifest_hash(manifest).map_err(Error::from)
36    }
37
38    /// Hash one canonical credential manifest for host/runtime evidence comparison.
39    pub fn credential_manifest_hash(manifest: &FleetCredentialManifest) -> Result<[u8; 32], Error> {
40        FleetActivationEvidenceOps::credential_manifest_hash(manifest).map_err(Error::from)
41    }
42
43    /// Hash the canonical empty root issuer-policy set used by fresh activation.
44    pub fn empty_root_policy_set_hash() -> Result<[u8; 32], Error> {
45        FleetActivationEvidenceOps::empty_root_policy_set_hash().map_err(Error::from)
46    }
47
48    /// Hash the canonical empty root renewal-template set used by fresh activation.
49    pub fn empty_renewal_template_set_hash() -> Result<[u8; 32], Error> {
50        FleetActivationEvidenceOps::empty_renewal_template_set_hash().map_err(Error::from)
51    }
52
53    /// Hash one Canister's exact activation identity and accepted evidence.
54    pub fn activation_evidence_hash(
55        identity: &FleetActivationIdentity,
56        cascade: &FleetCascadeActivationEvidence,
57        credential: FleetCredentialGenerationRef,
58    ) -> Result<[u8; 32], Error> {
59        FleetActivationEvidenceOps::activation_evidence_hash(identity, cascade, credential)
60            .map_err(Error::from)
61    }
62
63    pub fn status() -> Result<FleetActivationStatusResponse, Error> {
64        FleetActivationWorkflow::status().map_err(Error::from)
65    }
66
67    pub fn require_active() -> Result<(), Error> {
68        FleetActivationWorkflow::require_active().map_err(Error::from)
69    }
70
71    pub fn root_authority() -> Result<FleetSubnetRootAuthority, Error> {
72        FleetActivationWorkflow::root_authority().map_err(Error::from)
73    }
74
75    pub fn wasm_store_authority() -> Result<FleetSubnetWasmStoreAuthority, Error> {
76        FleetActivationWorkflow::wasm_store_authority().map_err(Error::from)
77    }
78
79    pub async fn resume_root(
80        request: FleetActivationResumeRequest,
81    ) -> Result<FleetActivationTransition, Error> {
82        FleetActivationWorkflow::resume_root(request)
83            .await
84            .map_err(Error::from)
85    }
86
87    pub fn prepare_nonroot_credential_generation(
88        request: FleetCredentialGenerationRequest,
89    ) -> Result<FleetActivationStatusResponse, Error> {
90        FleetActivationWorkflow::prepare_nonroot_credential_generation(request).map_err(Error::from)
91    }
92
93    pub fn activate_nonroot(
94        request: FleetActivationRequest,
95    ) -> Result<FleetActivationTransition, Error> {
96        FleetActivationWorkflow::activate_nonroot(request).map_err(Error::from)
97    }
98}