tpm2_protocol/message/
symmetric.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2// Copyright (c) 2025 Opinsys Oy
3
4//! 15.2 `TPM2_EncryptDecrypt`
5//! 15.3 `TPM2_EncryptDecrypt2`
6//! 15.4 `TPM2_Hash`
7//! 15.5 `TPM2_HMAC`
8//! 15.6 `TPM2_MAC`
9
10use crate::{
11    data::{
12        Tpm2bDigest, Tpm2bIv, Tpm2bMaxBuffer, TpmAlgId, TpmCc, TpmRh, TpmiAlgHash, TpmiYesNo,
13        TpmtTkHashcheck,
14    },
15    tpm_struct,
16};
17use core::fmt::Debug;
18
19pub type TpmiAlgCipherMode = TpmAlgId;
20
21tpm_struct! {
22    #[derive(Debug, PartialEq, Eq, Clone)]
23    kind: Command,
24    name: TpmEncryptDecryptCommand,
25    cc: TpmCc::EncryptDecrypt,
26    no_sessions: false,
27    with_sessions: true,
28    handles: {
29        pub key_handle: crate::data::TpmiDhObject,
30    },
31    parameters: {
32        pub decrypt: TpmiYesNo,
33        pub mode: TpmiAlgCipherMode,
34        pub iv_in: Tpm2bIv,
35        pub in_data: Tpm2bMaxBuffer,
36    }
37}
38
39tpm_struct! {
40    #[derive(Debug, PartialEq, Eq, Clone)]
41    kind: Response,
42    name: TpmEncryptDecryptResponse,
43    cc: TpmCc::EncryptDecrypt,
44    no_sessions: false,
45    with_sessions: true,
46    handles: {},
47    parameters: {
48        pub out_data: Tpm2bMaxBuffer,
49        pub iv_out: Tpm2bIv,
50    }
51}
52
53tpm_struct! {
54    #[derive(Debug, PartialEq, Eq, Clone)]
55    kind: Command,
56    name: TpmEncryptDecrypt2Command,
57    cc: TpmCc::EncryptDecrypt2,
58    no_sessions: false,
59    with_sessions: true,
60    handles: {
61        pub key_handle: crate::data::TpmiDhObject,
62    },
63    parameters: {
64        pub in_data: Tpm2bMaxBuffer,
65        pub decrypt: TpmiYesNo,
66        pub mode: TpmAlgId,
67        pub iv_in: Tpm2bIv,
68    }
69}
70
71tpm_struct! {
72    #[derive(Debug, PartialEq, Eq, Clone)]
73    kind: Response,
74    name: TpmEncryptDecrypt2Response,
75    cc: TpmCc::EncryptDecrypt2,
76    no_sessions: false,
77    with_sessions: true,
78    handles: {},
79    parameters: {
80        pub out_data: Tpm2bMaxBuffer,
81        pub iv_out: Tpm2bIv,
82    }
83}
84
85tpm_struct! {
86    #[derive(Debug, PartialEq, Eq, Clone)]
87    kind: Command,
88    name: TpmHashCommand,
89    cc: TpmCc::Hash,
90    no_sessions: true,
91    with_sessions: false,
92    handles: {},
93    parameters: {
94        pub data: Tpm2bMaxBuffer,
95        pub hash_alg: TpmAlgId,
96        pub hierarchy: TpmRh,
97    }
98}
99
100tpm_struct! {
101    #[derive(Debug, PartialEq, Eq, Clone)]
102    kind: Response,
103    name: TpmHashResponse,
104    cc: TpmCc::Hash,
105    no_sessions: true,
106    with_sessions: false,
107    handles: {},
108    parameters: {
109        pub out_hash: Tpm2bDigest,
110        pub validation: TpmtTkHashcheck,
111    }
112}
113
114tpm_struct! {
115    #[derive(Debug, PartialEq, Eq, Clone)]
116    kind: Command,
117    name: TpmHmacCommand,
118    cc: TpmCc::Hmac,
119    no_sessions: false,
120    with_sessions: true,
121    handles: {
122        pub handle: crate::data::TpmiDhObject,
123    },
124    parameters: {
125        pub buffer: Tpm2bMaxBuffer,
126        pub hash_alg: TpmiAlgHash,
127    }
128}
129
130tpm_struct! {
131    #[derive(Debug, PartialEq, Eq, Clone)]
132    kind: Response,
133    name: TpmHmacResponse,
134    cc: TpmCc::Hmac,
135    no_sessions: false,
136    with_sessions: true,
137    handles: {},
138    parameters: {
139        pub out_hmac: Tpm2bDigest,
140    }
141}