Skip to main content

LaunchIdentity

Struct LaunchIdentity 

Source
pub struct LaunchIdentity { /* private fields */ }
Expand description

One launch’s identity material, built by LaunchIdentity::from_seeds.

Holds both secret halves, so it lives exactly as long as the launch needs it: the payload fields are read out of it before the call, and LaunchIdentity::keep converts it into the durable TunnelIdentity — which keeps the host secret and the public VM pin, and drops the VM secret on the floor where it belongs.

Implementations§

Source§

impl LaunchIdentity

Source

pub fn from_seeds( vm_seed: [u8; 32], host_seed: [u8; 32], ) -> Result<LaunchIdentity, Error>

The material for vm_seed and host_seed, validated the way the daemon validates them at bootstrap.

The seeds are the caller’s: this crate doesn’t read the OS random pool (ARCH-6). microvms_core::prelude::LaunchIdentityExt::generate draws fresh ones, which is what a launch wants. seed_from_bytes is the shared validation the daemon runs at bootstrap; running it here makes “the host accepted what the daemon will refuse” unrepresentable.

Source

pub fn seed_field(&self) -> String

The payload value under protocol::identity::SEED_KEY: the VM seed, base64.

Source

pub fn host_public_field(&self) -> String

The payload value under protocol::identity::HOST_PUBLIC_KEY_KEY: the host public key, base64. The public half — the secret never appears in any payload.

Source

pub fn keep(self) -> TunnelIdentity

Converts into what outlives the launch: the host secret and the VM’s public pin.

The VM’s secret half ends here. After this call the host can verify its VM forever and impersonate it never, which is the least-privilege shape for a record that will sit in a ledger file: a stolen record lets an attacker check a VM’s identity, not forge one.

Trait Implementations§

Source§

impl Debug for LaunchIdentity

Prints nothing but the fact that material exists. Both fields are private keys, and a derived Debug would put them into any log line that formats a launch request.

Source§

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

Formats the value using the given formatter. 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> Same for T

Source§

type Output = T

Should always be Self
Source§

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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.