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

impl LaunchIdentityExt for LaunchIdentity

Source§

fn generate() -> Result<Self, Error>

Fresh material from the OS random pool. 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> 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<Unshared, Shared> IntoShared<Shared> for Unshared
where Shared: FromUnshared<Unshared>,

Source§

fn into_shared(self) -> Shared

Creates a shared type from an unshared type.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + 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: Sized + 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, 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.
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