mod signature;
pub use signature::{
canonicalize_manifest, compute_bundle_hash, compute_signing_payload, decode_public_key,
decode_signature, derive_signer_id_did_key, format_bundle_hash, sign_manifest_json,
verify_ed25519, verify_manifest_signature, ManifestVerification,
};
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BundleArtifact {
pub path: String,
pub hash: Option<String>,
pub size: u64,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BundleMetadata {
pub name: String,
pub description: Option<String>,
pub icon: Option<String>,
#[serde(default)]
pub tags: Vec<String>,
pub license: Option<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BundleInterfaces {
#[serde(default)]
pub exports: Vec<String>,
#[serde(default)]
pub uses: Vec<String>,
}
#[derive(Clone, Debug, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BundleLinks {
pub frontend: Option<String>,
pub github: Option<String>,
pub docs: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BundleSignature {
pub algorithm: String,
pub public_key: String,
pub signature: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub signed_at: Option<String>,
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct BundleManifest {
pub version: String,
pub package: String,
pub app_version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub signer_id: Option<String>,
pub min_runtime_version: String,
#[serde(default)]
pub metadata: Option<BundleMetadata>,
#[serde(default)]
pub interfaces: Option<BundleInterfaces>,
pub wasm: Option<BundleArtifact>,
pub abi: Option<BundleArtifact>,
#[serde(default)]
pub migrations: Vec<BundleArtifact>,
#[serde(default)]
pub links: Option<BundleLinks>,
#[serde(default)]
pub signature: Option<BundleSignature>,
}