Skip to main content

easyofd_core/crypto/
mod.rs

1//! 加密子包。
2//!
3//! 对应 Java: org.ofdrw.core.crypto.encryt
4//!
5//! 提供 OFD 加密相关的数据类型:
6//! - [`CryptoParameter`] — 加密参数
7//! - [`SigParameter`] — 签名参数
8//! - [`SigParameters`] — 签名参数列表
9//! - [`UserInfo`] — 用户信息
10//! - [`Encryptions`] — 加密信息列表
11//! - [`ExtendParams`] — 扩展参数
12//! - [`DecyptSeed`] — 解密种子
13//! - [`CryptoProvider`] — 加密组件提供者
14
15mod provider;
16
17pub use provider::CryptoProvider;
18
19/// 加密参数。
20///
21/// 对应 Java: org.ofdrw.core.crypto.encryt.Parameter
22#[derive(Debug, Clone, Default)]
23pub struct CryptoParameter {
24    /// 参数名。
25    pub name: String,
26    /// 参数值。
27    pub value: String,
28}
29
30impl CryptoParameter {
31    /// 创建加密参数。
32    #[must_use]
33    pub fn new(name: impl Into<String>, value: impl Into<String>) -> Self {
34        Self {
35            name: name.into(),
36            value: value.into(),
37        }
38    }
39}
40
41/// 签名参数。
42///
43/// 对应 Java: org.ofdrw.core.signatures.sig.Parameter
44#[derive(Debug, Clone, Default)]
45pub struct SigParameter {
46    /// 参数名。
47    pub name: String,
48    /// 参数值。
49    pub value: String,
50}
51
52impl SigParameter {
53    /// 创建签名参数。
54    #[must_use]
55    pub fn new(name: impl Into<String>, value: impl Into<String>) -> Self {
56        Self {
57            name: name.into(),
58            value: value.into(),
59        }
60    }
61}
62
63/// 签名参数列表。
64///
65/// 对应 Java: org.ofdrw.core.signatures.sig.Parameters
66#[derive(Debug, Clone, Default)]
67pub struct SigParameters {
68    /// 参数列表。
69    pub parameters: Vec<SigParameter>,
70}
71
72impl SigParameters {
73    /// 创建空参数列表。
74    #[must_use]
75    pub fn new() -> Self {
76        Self::default()
77    }
78
79    /// 添加参数。
80    pub fn add(&mut self, param: SigParameter) {
81        self.parameters.push(param);
82    }
83
84    /// 获取参数数量。
85    #[must_use]
86    pub fn len(&self) -> usize {
87        self.parameters.len()
88    }
89
90    /// 是否为空。
91    #[must_use]
92    pub fn is_empty(&self) -> bool {
93        self.parameters.is_empty()
94    }
95}
96
97/// 用户信息。
98///
99/// 对应 Java: org.ofdrw.core.crypto.encryt.UserInfo
100#[derive(Debug, Clone, Default)]
101pub struct UserInfo {
102    /// 用户名。
103    pub user_name: Option<String>,
104    /// 用户证书。
105    pub cert: Option<String>,
106}
107
108impl UserInfo {
109    /// 创建用户信息。
110    #[must_use]
111    pub fn new() -> Self {
112        Self::default()
113    }
114
115    /// 设置用户名。
116    #[must_use]
117    pub fn user_name(mut self, name: impl Into<String>) -> Self {
118        self.user_name = Some(name.into());
119        self
120    }
121}
122
123/// 加密信息列表。
124///
125/// 对应 Java: org.ofdrw.core.crypto.encryt.Encryptions
126#[derive(Debug, Clone, Default)]
127pub struct Encryptions {
128    /// 加密信息列表。
129    pub items: Vec<String>,
130}
131
132impl Encryptions {
133    /// 创建空列表。
134    #[must_use]
135    pub fn new() -> Self {
136        Self::default()
137    }
138
139    /// 添加加密信息。
140    pub fn add(&mut self, item: impl Into<String>) {
141        self.items.push(item.into());
142    }
143}
144
145/// 扩展参数。
146///
147/// 对应 Java: org.ofdrw.core.crypto.encryt.ExtendParams
148#[derive(Debug, Clone, Default)]
149pub struct ExtendParams {
150    /// 参数列表。
151    pub params: Vec<(String, String)>,
152}
153
154impl ExtendParams {
155    /// 创建空扩展参数。
156    #[must_use]
157    pub fn new() -> Self {
158        Self::default()
159    }
160
161    /// 添加参数。
162    pub fn add(&mut self, key: impl Into<String>, value: impl Into<String>) {
163        self.params.push((key.into(), value.into()));
164    }
165}
166
167/// 解密种子。
168///
169/// 对应 Java: org.ofdrw.core.crypto.encryt.DecyptSeed
170#[derive(Debug, Clone, Default)]
171pub struct DecyptSeed {
172    /// 种子值。
173    pub seed: Vec<u8>,
174}
175
176impl DecyptSeed {
177    /// 创建解密种子。
178    #[must_use]
179    pub fn new(seed: Vec<u8>) -> Self {
180        Self { seed }
181    }
182}
183
184#[cfg(test)]
185mod tests {
186    use super::*;
187
188    #[test]
189    fn crypto_parameter_new() {
190        let p = CryptoParameter::new("key", "value");
191        assert_eq!(p.name, "key");
192        assert_eq!(p.value, "value");
193    }
194
195    #[test]
196    fn sig_parameter_new() {
197        let p = SigParameter::new("algo", "SM2");
198        assert_eq!(p.name, "algo");
199    }
200
201    #[test]
202    fn sig_parameters_add() {
203        let mut params = SigParameters::new();
204        params.add(SigParameter::new("a", "1"));
205        assert_eq!(params.len(), 1);
206    }
207
208    #[test]
209    fn user_info_builder() {
210        let ui = UserInfo::new().user_name("test");
211        assert_eq!(ui.user_name.unwrap(), "test");
212    }
213
214    #[test]
215    fn encryptions_add() {
216        let mut e = Encryptions::new();
217        e.add("entry1");
218        assert_eq!(e.items.len(), 1);
219    }
220
221    #[test]
222    fn extend_params_add() {
223        let mut ep = ExtendParams::new();
224        ep.add("k", "v");
225        assert_eq!(ep.params.len(), 1);
226    }
227
228    #[test]
229    fn decypt_seed_new() {
230        let ds = DecyptSeed::new(vec![1, 2, 3]);
231        assert_eq!(ds.seed.len(), 3);
232    }
233}