Skip to content

Commit 7449ad1

Browse files
committed
refacotr: project structer
1 parent 8995322 commit 7449ad1

File tree

20 files changed

+101
-292
lines changed

20 files changed

+101
-292
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
use crate::EncAlg;
4+
5+
#[derive(Debug, Clone, Serialize, Deserialize)]
6+
pub struct Ciphertext {
7+
pub ct: String, // base64(ciphertext || tag)
8+
pub aad: String, // base64(aad) —— 由外层计算并传入(绑定上下文)
9+
pub enc: EncAlg, // AES-256-GCM / ChaCha20-Poly1305
10+
pub nonce: String, // base64(12 bytes)
11+
pub len: u64, // 明文长度(字节)
12+
pub dek_id: String, // 对应的 DEK ID(外层用 KeyWrap 关联)
13+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
pub mod ciphertext;
2+
pub mod proof;
3+
pub mod seal;
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
use crate::integrity::{digest::Digest, signature::Signature};
4+
5+
#[derive(Debug, Clone, Serialize, Deserialize)]
6+
pub struct AuthorProof {
7+
pub subject: Digest, // 明文指纹(或 Merkle 根)
8+
#[serde(default)]
9+
pub schema_hash: Option<String>, // 可选:明文结构/规范哈希
10+
#[serde(default)]
11+
pub issued_at: Option<String>, // 可选:RFC3339 出具时间
12+
pub signature: Signature, // 作者对 {subject, schema_hash?, issued_at?} 的脱离式签名
13+
}
Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,57 +5,17 @@ use capsula_crypto::{
55
use capsula_key::key::SigningKey;
66
use pkcs8::{der::Decode, spki::SubjectPublicKeyInfoRef};
77
use serde::{Deserialize, Serialize};
8-
use serde_json::Value;
98
use sha2::{Digest as Sha2Digest, Sha256};
109
use time::OffsetDateTime;
1110

1211
use crate::{
12+
block::{ciphertext::Ciphertext, proof::AuthorProof},
1313
error::{CoreError as Error, Result},
14+
integrity::{digest::Digest, signature::Signature},
1415
keyring::{KeyWrap, Keyring},
1516
ContentType, EncAlg,
1617
};
1718

18-
// --- 密文块:加解密所需最小信息 ---
19-
#[derive(Debug, Clone, Serialize, Deserialize)]
20-
pub struct Ciphertext {
21-
pub ct: String, // base64(ciphertext || tag)
22-
pub aad: String, // base64(aad) —— 由外层计算并传入(绑定上下文)
23-
pub enc: EncAlg, // AES-256-GCM / ChaCha20-Poly1305
24-
pub nonce: String, // base64(12 bytes)
25-
pub len: u64, // 明文长度(字节)
26-
pub dek_id: String, // 对应的 DEK ID(外层用 KeyWrap 关联)
27-
}
28-
29-
// --- 明文指纹(被签名的“承诺值”)---
30-
#[derive(Debug, Clone, Serialize, Deserialize)]
31-
pub struct Digest {
32-
pub alg: String, // 例: "SHA-256" / "Merkle-SHA256"
33-
pub hash: String, // hex 或 base64
34-
#[serde(default, skip_serializing_if = "Option::is_none")]
35-
pub summary: Option<Value>, // 任意结构的概要标签,如 {"heme":"normal"}
36-
}
37-
38-
// --- 作者签名(对 AuthorProof 的签名值/身份线索)---
39-
#[derive(Debug, Clone, Serialize, Deserialize)]
40-
pub struct Signature {
41-
pub alg: String, // "Ed25519" / "ECDSA-P256-SHA256"
42-
pub sig: String, // base64(signature)
43-
pub author_hint: String, // 作者标识线索(证书主体/DID/公钥指纹)
44-
#[serde(default)]
45-
pub cert_hint: Option<String>, // 可选:证书链/目录定位线索
46-
}
47-
48-
// --- 作者证明:明确“签了什么” ---
49-
#[derive(Debug, Clone, Serialize, Deserialize)]
50-
pub struct AuthorProof {
51-
pub subject: Digest, // 明文指纹(或 Merkle 根)
52-
#[serde(default)]
53-
pub schema_hash: Option<String>, // 可选:明文结构/规范哈希
54-
#[serde(default)]
55-
pub issued_at: Option<String>, // 可选:RFC3339 出具时间
56-
pub signature: Signature, // 作者对 {subject, schema_hash?, issued_at?} 的脱离式签名
57-
}
58-
5919
// --- 最小可验证封装单元:密文 + 单一作者证明 ---
6020
#[derive(Debug, Clone, Serialize, Deserialize)]
6121
pub struct SealedBlock {
@@ -227,7 +187,6 @@ impl SealedBlock {
227187
Ok(Digest {
228188
alg: "SHA-256".to_string(),
229189
hash,
230-
summary: None,
231190
})
232191
}
233192

File renamed without changes.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
1+
use serde::{Deserialize, Serialize};
12

3+
use crate::{
4+
capsule::{header::Header, meta::Meta},
5+
integrity::Integrity,
6+
Keyring,
7+
};
8+
9+
pub mod header;
10+
pub mod meta;
11+
12+
#[derive(Debug, Clone, Serialize, Deserialize)]
13+
pub struct Capsula {
14+
pub header: Header, // ← 胶囊头(版本、类型、时间戳等)
15+
pub meta: Meta, // ← 元数据(0阶数据的摘要等)
16+
17+
pub policy: String, // 指向数据库或 IPFS 的访问策略
18+
pub integrity: Integrity, // ← 对整个胶囊的签名
19+
20+
#[serde(default)]
21+
pub keyring: Keyring, // 传输时的密钥包装
22+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
#[derive(Debug, Clone, Serialize, Deserialize)]
4+
pub struct Digest {
5+
pub alg: String, // 例: "SHA-256" / "Merkle-SHA256"
6+
pub hash: String, // hex 或 base64
7+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
pub mod digest;
2+
pub mod signature;
3+
pub mod watermark;
4+
5+
use serde::{Deserialize, Serialize};
6+
7+
use crate::integrity::{digest::Digest, signature::Signature, watermark::Watermark};
8+
9+
#[derive(Debug, Clone, Serialize, Deserialize)]
10+
pub struct Integrity {
11+
pub digest: Digest,
12+
pub signature: Signature, // 整体指纹(对整个胶囊的摘要)
13+
pub watermark: Option<Watermark>, // 数字水印
14+
}

0 commit comments

Comments
 (0)