rust_xmlsec/proto/
ds.rs

1#[derive(Debug, Serialize, Deserialize, Clone)]
2pub struct OuterSignatre {
3    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Signature")]
4    pub signature: Signature,
5}
6
7#[derive(Debug, Serialize, Deserialize, Clone)]
8pub struct Signature {
9    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:SignedInfo")]
10    pub signed_info: SignedInfo,
11    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:SignatureValue")]
12    pub signature_value: SignatureValue,
13    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:KeyInfo")]
14    pub key_info: Option<KeyInfo>,
15}
16
17#[derive(Debug, Serialize, Deserialize, Clone)]
18pub struct SignatureValue {
19    #[serde(rename = "$value")]
20    pub value: String,
21    #[serde(rename = "$attr:Id", default, skip_serializing_if = "Option::is_none")]
22    pub id: Option<String>,
23}
24
25#[derive(Debug, Serialize, Deserialize, Clone)]
26pub struct SignedInfo {
27    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:CanonicalizationMethod")]
28    pub canonicalization_method: CanonicalizationMethod,
29    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:SignatureMethod")]
30    pub signature_method: SignatureMethod,
31    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Reference")]
32    pub reference: Vec<Reference>,
33    #[serde(rename = "$attr:Id", default, skip_serializing_if = "Option::is_none")]
34    pub id: Option<String>,
35}
36
37#[derive(Debug, Serialize, Deserialize, Clone)]
38pub struct CanonicalizationMethod {
39    #[serde(rename = "$attr:Algorithm")]
40    pub algorithm: String,
41}
42
43#[derive(Debug, Serialize, Deserialize, Clone)]
44pub struct SignatureMethod {
45    #[serde(rename = "$attr:Algorithm")]
46    pub algorithm: String,
47}
48
49#[derive(Debug, Serialize, Deserialize, Clone)]
50pub struct KeyInfo {
51    #[serde(rename = "$value")]
52    pub keys_info: Vec<KeyInfoType>,
53}
54
55#[derive(Debug, Serialize, Deserialize, Clone)]
56pub struct Reference {
57    #[serde(
58        rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Transforms",
59        default, skip_serializing_if = "Option::is_none"
60    )]
61    pub transforms: Option<Transforms>,
62    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:DigestMethod")]
63    pub digest_method: DigestMethod,
64    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:DigestValue")]
65    pub digest_value: String,
66    #[serde(rename = "$attr:Id", default, skip_serializing_if = "Option::is_none")]
67    pub id: Option<String>,
68    #[serde(rename = "$attr:URI", default, skip_serializing_if = "Option::is_none")]
69    pub uri: Option<String>,
70    #[serde(rename = "$attr:Type", default, skip_serializing_if = "Option::is_none")]
71    pub ref_type: Option<String>,
72}
73
74#[derive(Debug, Serialize, Deserialize, Clone)]
75pub struct Transforms {
76    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Transform")]
77    pub transforms: Vec<Transform>,
78}
79
80#[derive(Debug, Serialize, Deserialize, Clone)]
81pub struct Transform {
82    #[serde(rename = "$attr:Algorithm")]
83    pub algorithm: String,
84}
85
86#[derive(Debug, Serialize, Deserialize, Clone)]
87pub struct DigestMethod {
88    #[serde(rename = "$attr:Algorithm")]
89    pub algorithm: String,
90}
91
92#[derive(Debug, Serialize, Deserialize, Clone)]
93pub enum KeyInfoType {
94    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:KeyName")]
95    KeyName(String),
96    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:KeyValue")]
97    KeyValue(KeyValue),
98    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509Data")]
99    X509Data(X509Data),
100    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:PGPData")]
101    PGPData(PGPData),
102    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:SPKIData")]
103    SPKIData(SPKIData),
104}
105
106#[derive(Debug, Serialize, Deserialize, Clone)]
107pub enum KeyValue {
108    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:DSAKeyValue")]
109    DSA(DSAKeyValue),
110    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:RSAKeyValue")]
111    RSA(RSAKeyValue),
112    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:ECKeyValue")]
113    EC(ECKeyValue),
114}
115
116#[derive(Debug, Serialize, Deserialize, Clone)]
117pub struct DSAKeyValue {
118    #[serde(
119    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:P",
120    default, skip_serializing_if = "Option::is_none"
121    )]
122    pub p: Option<String>,
123    #[serde(
124    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Q",
125    default, skip_serializing_if = "Option::is_none"
126    )]
127    pub q: Option<String>,
128    #[serde(
129    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:G",
130    default, skip_serializing_if = "Option::is_none"
131    )]
132    pub g: Option<String>,
133    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Y")]
134    pub y: String,
135    #[serde(
136    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:J",
137    default, skip_serializing_if = "Option::is_none"
138    )]
139    pub j: Option<String>,
140    #[serde(
141    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Seed",
142    default, skip_serializing_if = "Option::is_none"
143    )]
144    pub seed: Option<String>,
145    #[serde(
146    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:PgenCounter",
147    default, skip_serializing_if = "Option::is_none"
148    )]
149    pub pgen_counter: Option<String>,
150}
151
152#[derive(Debug, Serialize, Deserialize, Clone)]
153pub struct RSAKeyValue {
154    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Modulus")]
155    pub modulus: String,
156    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:Exponent")]
157    pub exponent: String,
158}
159
160#[derive(Debug, Serialize, Deserialize, Clone)]
161pub struct ECKeyValue {
162    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:PublicKey")]
163    pub pub_key: String,
164}
165
166#[derive(Debug, Serialize, Deserialize, Clone)]
167pub enum ECKeyCurve {
168    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:NamedCurve")]
169    NamedCurve(String),
170    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:ECParameters")]
171    Params(ECParams),
172}
173
174#[derive(Debug, Serialize, Deserialize, Clone)]
175pub struct ECParams {
176    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:FieldID")]
177    pub field_id: ECFieldID,
178    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:Curve")]
179    pub curve: ECCurve,
180    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:Base")]
181    pub base: String,
182    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:Order")]
183    pub order: String,
184    #[serde(
185    rename = "{http://www.w3.org/2009/xmldsig11#}ds11:CoFactor",
186    default, skip_serializing_if = "Option::is_none"
187    )]
188    pub cofactor: Option<i64>,
189    #[serde(
190    rename = "{http://www.w3.org/2009/xmldsig11#}ds11:ValidationData",
191    default, skip_serializing_if = "Option::is_none"
192    )]
193    pub validation_data: Option<ECValidationData>,
194}
195
196#[derive(Debug, Serialize, Deserialize, Clone)]
197pub struct ECCurve {
198    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:A")]
199    pub a: String,
200    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:B")]
201    pub b: String,
202}
203
204#[derive(Debug, Serialize, Deserialize, Clone)]
205pub struct ECValidationData {
206    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:seed")]
207    pub seed: String,
208    #[serde(rename = "$attr:hashAlgorithm")]
209    pub hash_algorithm: String,
210}
211
212#[derive(Debug, Serialize, Deserialize, Clone)]
213pub enum ECFieldID {
214    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:Prime")]
215    Prime(PrimeFieldParams),
216    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:TnB")]
217    TnB(TnBFieldParams),
218    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:PnB")]
219    PnB(PnBFieldParams),
220    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:GnB")]
221    GnB(GnBFieldParams),
222}
223
224#[derive(Debug, Serialize, Deserialize, Clone)]
225pub struct PrimeFieldParams {
226    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:P")]
227    pub prime: String,
228}
229
230#[derive(Debug, Serialize, Deserialize, Clone)]
231pub struct TnBFieldParams {
232    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:M")]
233    pub m: u64,
234    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:K")]
235    pub k: u64,
236}
237
238#[derive(Debug, Serialize, Deserialize, Clone)]
239pub struct PnBFieldParams {
240    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:M")]
241    pub m: u64,
242    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:K1")]
243    pub k1: u64,
244    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:K2")]
245    pub k2: u64,
246    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:K3")]
247    pub k3: u64,
248}
249
250#[derive(Debug, Serialize, Deserialize, Clone)]
251pub struct GnBFieldParams {
252    #[serde(rename = "{http://www.w3.org/2009/xmldsig11#}ds11:M")]
253    pub m: u64,
254}
255
256#[derive(Debug, Serialize, Deserialize, Clone)]
257pub struct X509Data {
258    #[serde(rename = "$value")]
259    pub x509_data: Vec<X509Datum>,
260}
261
262#[derive(Debug, Serialize, Deserialize, Clone)]
263pub enum X509Datum {
264    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509IssuerSerial")]
265    IssuerSerial(X509IssuerSerial),
266    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509SKI")]
267    SKI(String),
268    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509SubjectName")]
269    SubjectName(String),
270    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509Certificate")]
271    Certificate(String),
272    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509CRL")]
273    CRL(String),
274}
275
276#[derive(Debug, Serialize, Deserialize, Clone)]
277pub struct X509IssuerSerial {
278    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509IssuerName")]
279    pub issuer_name: String,
280    #[serde(rename = "{http://www.w3.org/2000/09/xmldsig#}ds:X509SerialNumber")]
281    pub serial_number: i64,
282}
283
284#[derive(Debug, Serialize, Deserialize, Clone)]
285pub struct PGPData {
286    #[serde(
287    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:PGPKeyID",
288    default, skip_serializing_if = "Option::is_none"
289    )]
290    pub key_id: Option<String>,
291    #[serde(
292    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:PGPKeyPacket",
293    default, skip_serializing_if = "Option::is_none"
294    )]
295    pub key_packet: Option<String>,
296}
297
298#[derive(Debug, Serialize, Deserialize, Clone)]
299pub struct SPKIData {
300    #[serde(
301    rename = "{http://www.w3.org/2000/09/xmldsig#}ds:SPKISexp",
302    default, skip_serializing_if = "Vec::is_empty"
303    )]
304    pub sexp: Vec<String>,
305}