canon_protocol/
signature.rs

1use chrono::{DateTime, Utc};
2use serde::{Deserialize, Serialize};
3
4/// Canon signature for verifying authenticity
5#[derive(Debug, Serialize, Deserialize)]
6pub struct CanonSignature {
7    pub canon: String,
8    pub signature_version: String,
9    pub manifest_hash: String,
10    pub signature: SignatureData,
11}
12
13#[derive(Debug, Serialize, Deserialize)]
14pub struct SignatureData {
15    pub algorithm: String,
16    pub key_id: String,
17    pub signature: String,
18    pub signed_at: DateTime<Utc>,
19}
20
21/// Publisher keys for verification
22#[derive(Debug, Serialize, Deserialize)]
23pub struct PublisherKeys {
24    pub version: String,
25    pub keys: std::collections::HashMap<String, PublisherKey>,
26    #[serde(default)]
27    pub revoked_keys: std::collections::HashMap<String, RevokedKey>,
28}
29
30#[derive(Debug, Serialize, Deserialize)]
31pub struct PublisherKey {
32    pub algorithm: String,
33    pub public_key: String,
34    pub created_at: DateTime<Utc>,
35    pub expires_at: Option<DateTime<Utc>>,
36    pub revoked: bool,
37    pub usage: String,
38}
39
40#[derive(Debug, Serialize, Deserialize)]
41pub struct RevokedKey {
42    pub revoked_at: DateTime<Utc>,
43    pub reason: String,
44}