use serde::Deserialize;
use super::{JsonObject, OrganizationPublic};
#[derive(Debug, Clone, Default)]
pub struct IngestAttestationParams {
pub r#type: String,
pub input: String,
pub output: String,
pub model_provider: String,
pub model_name: String,
pub model_version: String,
pub subject: Option<JsonObject>,
pub idempotency_key: Option<String>,
pub trace_id: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct IngestAttestationResponse {
pub attestation_id: String,
pub created_at: String,
pub input_hash: String,
pub output_hash: String,
pub payload_hash: String,
pub status: String,
}
#[derive(Debug, Clone, Default)]
pub struct ListAttestationsParams {
pub page: Option<u32>,
pub limit: Option<u32>,
pub date_from: Option<String>,
pub date_to: Option<String>,
pub attestation_type: Option<String>,
pub model_provider: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AttestationListItem {
pub attestation_id: String,
pub attestation_type: String,
pub attestation_hash: String,
#[serde(default)]
pub model_provider: Option<String>,
#[serde(default)]
pub model_name: Option<String>,
pub retention_policy: String,
pub created_at: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ListAttestationsResponse {
pub attestations: Vec<AttestationListItem>,
pub page: u32,
pub limit: u32,
pub total: u64,
pub has_more: bool,
}
#[derive(Debug, Clone, Deserialize)]
pub struct AiAttestation {
pub attestation_id: String,
pub tenant_id: String,
pub attestation_type: String,
pub attestation_hash: String,
#[serde(default)]
pub input_hash: Option<String>,
#[serde(default)]
pub output_hash: Option<String>,
pub signed_payload: String,
pub signature: String,
pub public_key: String,
pub signature_alg: String,
#[serde(default)]
pub model_provider: Option<String>,
#[serde(default)]
pub model_name: Option<String>,
#[serde(default)]
pub model_version: Option<String>,
pub retention_policy: String,
pub created_at: String,
#[serde(default)]
pub organization: Option<OrganizationPublic>,
}
#[derive(Debug, Clone)]
pub struct SignatureVerificationResult {
pub valid: bool,
pub reason: Option<String>,
pub attestation: AiAttestation,
pub signed_data: Option<serde_json::Value>,
}
#[derive(Debug, Clone, Default)]
pub struct VerifyAttestationParams {
pub content_hash: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct VerifyAttestationResponse {
pub attestation_id: String,
pub match_result: bool,
#[serde(default)]
pub matched_field: Option<String>,
pub anchored_hash: String,
pub submitted_hash: String,
pub anchored_at: String,
#[serde(default)]
pub organization: Option<OrganizationPublic>,
}