1use serde_derive::Deserialize;
3
4use enum_display_derive::Display;
5use std::fmt::Display;
6
7use super::common::{
8 AttributeIndex, AttributeName, AttributeValue, CertificateType, CryptographicAlgorithm, KeyCompressionType,
9 KeyFormatType, KeyMaterial, NameType, NameValue, ObjectType, Operation, UniqueBatchItemID, UniqueIdentifier,
10};
11
12#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
14#[serde(rename = "0x420040")]
15pub struct KeyBlock {
16 #[serde(rename = "0x420042")]
17 pub key_format_type: KeyFormatType,
18
19 #[serde(rename = "0x420041")]
20 pub key_compression_type: Option<KeyCompressionType>,
21
22 #[serde(rename = "0x420045")]
23 pub key_value: KeyValue,
24
25 #[serde(rename = "0x420028")]
26 pub cryptographic_algorithm: Option<CryptographicAlgorithm>,
27
28 #[serde(rename = "0x42002A")]
29 pub cryptographic_length: Option<i32>,
30
31 #[serde(rename = "0x420046")]
32 pub key_wrapping_data: Option<()>, }
34
35#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
37#[serde(rename = "0x420045")]
38pub struct KeyValue {
39 pub key_material: KeyMaterial,
40 pub attributes: Option<Vec<Attribute>>,
41}
42
43#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
45#[serde(rename = "0x420091")]
46pub struct TemplateAttribute {
47 pub name: KeyMaterial,
48 pub attributes: Option<Vec<Attribute>>,
49}
50
51#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
53#[non_exhaustive]
54pub enum ManagedObject {
55 #[serde(rename = "if 0x420057==0x00000001")]
56 Certificate(Certificate),
57
58 #[serde(rename = "if 0x420057==0x00000002")]
59 SymmetricKey(SymmetricKey),
60
61 #[serde(rename = "if 0x420057==0x00000003")]
62 PublicKey(PublicKey),
63
64 #[serde(rename = "if 0x420057==0x00000004")]
65 PrivateKey(PrivateKey),
66 }
79
80#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
82#[serde(rename = "0x420013")]
83pub struct Certificate {
84 pub certificate_type: CertificateType,
85 #[serde(with = "serde_bytes")]
86 pub certificate_value: Vec<u8>,
87}
88
89#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
91#[serde(rename = "0x42008F")]
92pub struct SymmetricKey {
93 pub key_block: KeyBlock,
94}
95
96#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
98#[serde(rename = "0x42006D")]
99pub struct PublicKey {
100 pub key_block: KeyBlock,
101}
102
103#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
105#[serde(rename = "0x420064")]
106pub struct PrivateKey {
107 pub key_block: KeyBlock,
108}
109
110#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
112#[serde(rename = "0x420053")]
113pub struct Name {
114 pub name: NameValue,
115 pub r#type: NameType,
116}
117
118#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
120#[serde(rename = "0x42007C")]
121pub struct CreateResponsePayload {
122 pub object_type: ObjectType,
123 pub unique_identifier: UniqueIdentifier,
124 pub object_attributes: Option<Vec<Attribute>>,
125}
126
127#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
129#[serde(rename = "0x42007C")]
130pub struct CreateKeyPairResponsePayload {
131 #[serde(rename = "0x420066")]
132 pub private_key_unique_identifier: UniqueIdentifier,
133
134 #[serde(rename = "0x42006F")]
135 pub public_key_unique_identifier: UniqueIdentifier,
136 }
140
141#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
143#[serde(rename = "0x42007C")]
144pub struct RegisterResponsePayload {
145 #[serde(rename = "0x420094")]
146 pub unique_identifier: UniqueIdentifier,
147
148 #[serde(rename = "0x420091")]
149 pub template_attributes: Option<Vec<TemplateAttribute>>,
150}
151
152#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
154#[serde(rename = "0x42007C")]
155pub struct LocateResponsePayload {
156 #[serde(rename = "0x420094")]
157 #[serde(default = "Vec::new")]
158 pub unique_identifiers: Vec<UniqueIdentifier>,
162}
163
164#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
166#[serde(rename = "0x42007C")]
167pub struct GetResponsePayload {
168 pub object_type: ObjectType,
169 pub unique_identifier: UniqueIdentifier,
170 pub cryptographic_object: ManagedObject,
171}
172
173#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
175#[serde(rename = "0x42007C")]
176pub struct GetAttributesResponsePayload {
177 #[serde(rename = "0x420094")]
178 pub unique_identifier: UniqueIdentifier,
179
180 #[serde(rename = "0x420008")]
181 pub attributes: Option<Vec<Attribute>>,
182}
183
184#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
186#[serde(rename = "0x42007C")]
187pub struct GetAttributeListResponsePayload {
188 #[serde(rename = "0x420094")]
189 pub unique_identifier: UniqueIdentifier,
190
191 #[serde(rename = "0x42000A")]
192 pub attributes: Vec<AttributeName>,
193}
194
195#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
199#[serde(rename = "0x42007C")]
200pub struct UniqueIdentifierResponsePayload {
201 #[serde(rename = "0x420094")]
202 pub unique_identifier: UniqueIdentifier,
203}
204
205pub type ActivateResponsePayload = UniqueIdentifierResponsePayload;
207
208pub type RevokeResponsePayload = UniqueIdentifierResponsePayload;
210
211pub type DestroyResponsePayload = UniqueIdentifierResponsePayload;
213
214#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
218#[serde(rename = "0x42007C")]
219pub struct AttributeEditResponsePayload {
220 #[serde(rename = "0x420094")]
221 pub unique_identifier: UniqueIdentifier,
222
223 #[serde(rename = "0x420008")]
224 pub attribute: Attribute,
225}
226
227pub type AddAttributeResponsePayload = AttributeEditResponsePayload;
229
230pub type ModifyAttributeResponsePayload = AttributeEditResponsePayload;
232
233pub type DeleteAttributeResponsePayload = AttributeEditResponsePayload;
235
236#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
238#[serde(rename = "0x42007C")]
239pub struct QueryResponsePayload {
240 #[serde(rename = "0x42005C")]
241 pub operations: Option<Vec<Operation>>,
242
243 #[serde(rename = "0x420057")]
244 pub object_types: Option<Vec<ObjectType>>,
245
246 #[serde(rename = "0x42009D")]
247 pub vendor_identification: Option<String>,
248
249 #[serde(rename = "0x420088")]
250 #[serde(skip_deserializing)] #[serde(default)]
252 pub server_information: Option<ServerInformation>,
253}
254
255#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
257#[serde(rename = "0x42007C")]
258pub struct RNGRetrieveResponsePayload {
259 #[serde(with = "serde_bytes")]
260 pub data: Vec<u8>,
261}
262
263#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Default)]
265#[serde(rename = "0x420088")]
266pub struct ServerInformation;
267
268#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
270#[serde(rename = "0x42007C")]
271pub struct DiscoverVersionsResponsePayload {
272 #[serde(rename = "0x420069")]
273 pub supported_versions: Option<Vec<ProtocolVersion>>,
274}
275
276#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
278#[serde(rename = "0x42007C")]
279pub struct SignResponsePayload {
280 #[serde(rename = "0x420094")]
281 pub unique_identifier: UniqueIdentifier,
282
283 #[serde(rename = "0x4200C3")]
284 #[serde(with = "serde_bytes")]
285 pub signature_data: Vec<u8>,
286}
287
288#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq)]
290#[serde(rename = "0x420069")]
291pub struct ProtocolVersion {
292 #[serde(rename = "0x42006A")]
293 pub major: i32,
294
295 #[serde(rename = "0x42006B")]
296 pub minor: i32,
297}
298
299#[derive(Clone, Copy, Debug, Deserialize, Display, PartialEq, Eq)]
301#[non_exhaustive]
302pub enum ResultStatus {
303 #[serde(rename = "0x00000000")]
304 Success,
305
306 #[serde(rename = "0x00000001")]
307 OperationFailed,
308
309 #[serde(rename = "0x00000002")]
310 OperationPending,
311
312 #[serde(rename = "0x00000003")]
313 OperationUndone,
314}
315
316#[derive(Clone, Copy, Debug, Deserialize, Display, PartialEq, Eq)]
318#[non_exhaustive]
319pub enum ResultReason {
320 #[serde(rename = "0x00000001")]
321 ItemNotFound,
322
323 #[serde(rename = "0x00000002")]
324 ResponseTooLarge,
325
326 #[serde(rename = "0x00000003")]
327 AuthenticationNotSuccessful,
328
329 #[serde(rename = "0x00000004")]
330 InvalidMessage,
331
332 #[serde(rename = "0x00000005")]
333 OperationNotSupported,
334
335 #[serde(rename = "0x00000006")]
336 MissingData,
337
338 #[serde(rename = "0x00000007")]
339 InvalidField,
340
341 #[serde(rename = "0x00000008")]
342 FeatureNotSupported,
343
344 #[serde(rename = "0x00000009")]
345 OperationCanceledByRequester,
346
347 #[serde(rename = "0x0000000A")]
348 CryptographicFailure,
349
350 #[serde(rename = "0x0000000B")]
351 IllegalOperation,
352
353 #[serde(rename = "0x0000000C")]
354 PermissionDenied,
355
356 #[serde(rename = "0x0000000D")]
357 ObjectArchived,
358
359 #[serde(rename = "0x0000000E")]
360 IndexOutOfBounds,
361
362 #[serde(rename = "0x0000000F")]
363 ApplicationNamespaceNotSupported,
364
365 #[serde(rename = "0x00000010")]
366 KeyFormatTypeNotSupported,
367
368 #[serde(rename = "0x00000011")]
369 KeyCompressionTypeNotSupported,
370
371 #[serde(rename = "0x00000100")]
372 GeneralFailure,
373}
374
375#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
377#[serde(rename = "0x420051")]
378pub struct MessageExtension {
379 #[serde(rename = "0x42007D")]
380 pub vendor_identification: String,
381
382 #[serde(rename = "0x420026")]
383 pub criticality_indicator: bool,
384
385 #[serde(rename = "0x42009C")]
386 #[serde(skip_deserializing)] #[serde(default)]
388 pub vendor_extension: VendorExtension,
389}
390
391#[derive(Clone, Debug, Deserialize, PartialEq, Eq, Default)]
393#[serde(rename = "0x42009C")]
395pub struct VendorExtension;
396
397#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
399#[serde(rename = "0x42007B")]
400pub struct ResponseMessage {
401 #[serde(rename = "0x42007A")]
402 pub header: ResponseHeader,
403
404 #[serde(rename = "0x42000F")]
405 pub batch_items: Vec<BatchItem>,
406}
407
408#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Eq)]
410#[serde(rename = "0x42007A")]
411pub struct ResponseHeader {
412 #[serde(rename = "0x420069")]
413 pub protocol_version: ProtocolVersion,
414
415 #[serde(rename = "0x420092")]
416 pub timestamp: i64,
417
418 #[serde(rename = "0x42000D")]
419 pub batch_count: i32,
420}
421
422#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
424#[serde(rename = "0x42000F")]
425pub struct BatchItem {
426 #[serde(rename = "0x42005C")]
427 pub operation: Option<Operation>,
428
429 #[serde(rename = "0x420093")]
430 pub unique_batch_item_id: Option<UniqueBatchItemID>,
431
432 #[serde(rename = "0x42007F")]
433 pub result_status: ResultStatus,
434
435 #[serde(rename = "0x42007E")]
436 pub result_reason: Option<ResultReason>,
437
438 #[serde(rename = "0x42007D")]
439 pub result_message: Option<String>,
440
441 #[serde(rename = "0x42007C")]
444 pub payload: Option<ResponsePayload>,
445
446 #[serde(rename = "0x420051")]
447 pub message_extension: Option<MessageExtension>,
448}
449
450#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
452#[non_exhaustive]
453#[allow(clippy::large_enum_variant)]
454pub enum ResponsePayload {
455 #[serde(rename = "if 0x42005C==0x00000001")]
458 Create(CreateResponsePayload),
459
460 #[serde(rename = "if 0x42005C==0x00000002")]
463 CreateKeyPair(CreateKeyPairResponsePayload),
464
465 #[serde(rename = "if 0x42005C==0x00000003")]
468 Register(RegisterResponsePayload),
469
470 #[serde(rename = "if 0x42005C==0x00000008")]
473 Locate(LocateResponsePayload),
474
475 #[serde(rename = "if 0x42005C==0x0000000A")]
478 Get(GetResponsePayload),
479
480 #[serde(rename = "if 0x42005C==0x0000000B")]
483 GetAttributes(GetAttributesResponsePayload),
484
485 #[serde(rename = "if 0x42005C==0x0000000C")]
488 GetAttributeList(GetAttributeListResponsePayload),
489
490 #[serde(rename = "if 0x42005C==0x0000000D")]
493 AddAttribute(AddAttributeResponsePayload),
494
495 #[serde(rename = "if 0x42005C==0x0000000E")]
498 ModifyAttribute(ModifyAttributeResponsePayload),
499
500 #[serde(rename = "if 0x42005C==0x0000000F")]
503 DeleteAttribute(DeleteAttributeResponsePayload),
504
505 #[serde(rename = "if 0x42005C==0x00000012")]
508 Activate(ActivateResponsePayload),
509
510 #[serde(rename = "if 0x42005C==0x00000013")]
513 Revoke(RevokeResponsePayload),
514
515 #[serde(rename = "if 0x42005C==0x00000014")]
518 Destroy(DestroyResponsePayload),
519
520 #[serde(rename = "if 0x42005C==0x00000018")]
523 Query(QueryResponsePayload),
524
525 #[serde(rename = "if 0x42005C==0x0000001E")]
528 DiscoverVersions(DiscoverVersionsResponsePayload),
529
530 #[serde(rename = "if 0x42005C==0x00000021")]
533 Sign(SignResponsePayload),
534
535 #[serde(rename = "if 0x42005C==0x00000025")]
538 RNGRetrieve(RNGRetrieveResponsePayload),
539 }
541
542#[derive(Clone, Debug, Deserialize, PartialEq, Eq)]
544#[serde(rename = "0x420008")]
545pub struct Attribute {
546 #[serde(rename = "0x42000A")]
547 pub name: AttributeName,
548
549 #[serde(rename = "0x420009")]
550 pub index: Option<AttributeIndex>,
551
552 #[serde(rename = "0x42000B")]
553 pub value: AttributeValue,
554}