#![deny(missing_docs)]
#![deny(warnings)]
#![allow(clippy::too_many_arguments)]
use aws_nitro_enclaves_image_format::defs::EifIdentityInfo;
use aws_nitro_enclaves_image_format::utils::eif_reader::SignCertificateInfo;
use serde::{Deserialize, Serialize};
use std::collections::BTreeMap;
#[derive(Clone, Serialize, Deserialize)]
pub struct EnclaveDescribeInfo {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "EnclaveName")]
pub enclave_name: Option<String>,
#[serde(rename = "EnclaveID")]
pub enclave_id: String,
#[serde(rename = "ProcessID")]
pub process_id: u32,
#[serde(rename = "EnclaveCID")]
pub enclave_cid: u64,
#[serde(rename = "NumberOfCPUs")]
pub cpu_count: u64,
#[serde(rename = "CPUIDs")]
pub cpu_ids: Vec<u32>,
#[serde(rename = "MemoryMiB")]
pub memory_mib: u64,
#[serde(rename = "State")]
pub state: String,
#[serde(rename = "Flags")]
pub flags: String,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(flatten)]
pub build_info: Option<EnclaveBuildInfo>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "ImageName")]
pub img_name: Option<String>,
#[serde(rename = "ImageVersion")]
#[serde(skip_serializing_if = "Option::is_none")]
pub img_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "Metadata")]
pub metadata: Option<MetadataDescribeInfo>,
}
impl EnclaveDescribeInfo {
pub fn new(
enclave_name: Option<String>,
enclave_id: String,
enclave_cid: u64,
cpu_count: u64,
cpu_ids: Vec<u32>,
memory_mib: u64,
state: String,
flags: String,
build_info: Option<EnclaveBuildInfo>,
img_name: Option<String>,
img_version: Option<String>,
metadata: Option<MetadataDescribeInfo>,
) -> Self {
EnclaveDescribeInfo {
enclave_name,
enclave_id,
process_id: std::process::id(),
enclave_cid,
cpu_count,
cpu_ids,
memory_mib,
state,
flags,
build_info,
img_name,
img_version,
metadata,
}
}
}
#[derive(Clone, Serialize, Deserialize)]
pub struct EnclaveRunInfo {
#[serde(rename = "EnclaveName")]
pub enclave_name: String,
#[serde(rename = "EnclaveID")]
pub enclave_id: String,
#[serde(rename = "ProcessID")]
pub process_id: u32,
#[serde(rename = "EnclaveCID")]
pub enclave_cid: u64,
#[serde(rename = "NumberOfCPUs")]
pub cpu_count: usize,
#[serde(rename = "CPUIDs")]
pub cpu_ids: Vec<u32>,
#[serde(rename = "MemoryMiB")]
pub memory_mib: u64,
}
impl EnclaveRunInfo {
pub fn new(
enclave_name: String,
enclave_id: String,
enclave_cid: u64,
cpu_count: usize,
cpu_ids: Vec<u32>,
memory_mib: u64,
) -> Self {
EnclaveRunInfo {
enclave_name,
enclave_id,
process_id: std::process::id(),
enclave_cid,
cpu_count,
cpu_ids,
memory_mib,
}
}
}
#[derive(Clone, Serialize, Deserialize)]
pub struct EnclaveTerminateInfo {
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "EnclaveName")]
pub enclave_name: Option<String>,
#[serde(rename = "EnclaveID")]
pub enclave_id: String,
#[serde(rename = "Terminated")]
pub terminated: bool,
}
impl EnclaveTerminateInfo {
pub fn new(enclave_name: Option<String>, enclave_id: String, terminated: bool) -> Self {
EnclaveTerminateInfo {
enclave_name,
enclave_id,
terminated,
}
}
}
#[derive(Serialize, Clone, Deserialize, Debug)]
pub struct EnclaveBuildInfo {
#[serde(rename = "Measurements")]
pub measurements: BTreeMap<String, String>,
}
impl EnclaveBuildInfo {
pub fn new(measurements: BTreeMap<String, String>) -> Self {
EnclaveBuildInfo { measurements }
}
}
#[derive(Clone, Serialize, Deserialize)]
pub struct EifDescribeInfo {
#[serde(rename = "EifVersion")]
pub version: u16,
#[serde(flatten)]
pub build_info: EnclaveBuildInfo,
#[serde(rename = "IsSigned")]
pub is_signed: bool,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "SigningCertificate")]
pub cert_info: Option<SignCertificateInfo>,
#[serde(rename = "CheckCRC")]
pub crc_check: bool,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "SignatureCheck")]
pub sign_check: Option<bool>,
#[serde(rename = "ImageName")]
#[serde(skip_serializing_if = "Option::is_none")]
pub img_name: Option<String>,
#[serde(rename = "ImageVersion")]
#[serde(skip_serializing_if = "Option::is_none")]
pub img_version: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(rename = "Metadata")]
pub metadata: Option<MetadataDescribeInfo>,
}
#[derive(Clone, Serialize, Deserialize)]
pub struct MetadataDescribeInfo {
#[serde(rename = "BuildTime")]
pub build_time: String,
#[serde(rename = "BuildTool")]
pub build_tool: String,
#[serde(rename = "BuildToolVersion")]
pub tool_version: String,
#[serde(rename = "OperatingSystem")]
pub operating_system: String,
#[serde(rename = "KernelVersion")]
pub kernel_version: String,
#[serde(rename = "DockerInfo")]
pub docker_info: serde_json::Value,
#[serde(skip_serializing_if = "serde_json::Value::is_null")]
#[serde(rename = "CustomMetadata")]
#[serde(flatten)]
pub custom_metadata: serde_json::Value,
}
impl MetadataDescribeInfo {
pub fn new(eif_info: EifIdentityInfo) -> Self {
MetadataDescribeInfo {
build_time: eif_info.build_info.build_time,
build_tool: eif_info.build_info.build_tool,
tool_version: eif_info.build_info.build_tool_version,
operating_system: eif_info.build_info.img_os,
kernel_version: eif_info.build_info.img_kernel,
docker_info: eif_info.docker_info,
custom_metadata: eif_info.custom_info,
}
}
}