tpm2_protocol/message/
sequence.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2// Copyright (c) 2025 Opinsys Oy
3// Copyright (c) 2024-2025 Jarkko Sakkinen
4
5//! 17 Hash/HMAC/Event Sequences
6
7use crate::{
8    data::{
9        Tpm2bAuth, Tpm2bDigest, Tpm2bMaxBuffer, TpmAlgId, TpmCc, TpmRh, TpmlDigestValues,
10        TpmtTkHashcheck,
11    },
12    tpm_struct, TpmTransient,
13};
14use core::fmt::Debug;
15
16tpm_struct! {
17    #[derive(Debug, PartialEq, Eq, Clone)]
18    kind: Command,
19    name: TpmHmacStartCommand,
20    cc: TpmCc::HmacStart,
21    no_sessions: false,
22    with_sessions: true,
23    handles: {
24        pub handle: crate::data::TpmiDhObject,
25    },
26    parameters: {
27        pub auth: Tpm2bAuth,
28        pub hash_alg: TpmAlgId,
29    }
30}
31
32tpm_struct! {
33    #[derive(Debug, PartialEq, Eq, Clone, Copy)]
34    kind: Response,
35    name: TpmHmacStartResponse,
36    cc: TpmCc::HmacStart,
37    no_sessions: false,
38    with_sessions: true,
39    handles: {
40        pub sequence_handle: TpmTransient,
41    },
42    parameters: {}
43}
44
45tpm_struct! {
46    #[derive(Debug, PartialEq, Eq, Clone)]
47    kind: Command,
48    name: TpmHashSequenceStartCommand,
49    cc: TpmCc::HashSequenceStart,
50    no_sessions: true,
51    with_sessions: true,
52    handles: {},
53    parameters: {
54        pub auth: Tpm2bAuth,
55        pub hash_alg: TpmAlgId,
56    }
57}
58
59tpm_struct! {
60    #[derive(Debug, PartialEq, Eq, Clone, Copy)]
61    kind: Response,
62    name: TpmHashSequenceStartResponse,
63    cc: TpmCc::HashSequenceStart,
64    no_sessions: true,
65    with_sessions: true,
66    handles: {
67        pub sequence_handle: TpmTransient,
68    },
69    parameters: {}
70}
71
72tpm_struct! {
73    #[derive(Debug, PartialEq, Eq, Clone)]
74    kind: Command,
75    name: TpmSequenceUpdateCommand,
76    cc: TpmCc::SequenceUpdate,
77    no_sessions: true,
78    with_sessions: true,
79    handles: {
80        pub sequence_handle: crate::data::TpmiDhObject,
81    },
82    parameters: {
83        pub buffer: Tpm2bMaxBuffer,
84    }
85}
86
87tpm_struct! {
88    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
89    kind: Response,
90    name: TpmSequenceUpdateResponse,
91    cc: TpmCc::SequenceUpdate,
92    no_sessions: true,
93    with_sessions: true,
94    handles: {},
95    parameters: {}
96}
97
98tpm_struct! {
99    #[derive(Debug, PartialEq, Eq, Clone)]
100    kind: Command,
101    name: TpmSequenceCompleteCommand,
102    cc: TpmCc::SequenceComplete,
103    no_sessions: true,
104    with_sessions: true,
105    handles: {
106        pub sequence_handle: crate::data::TpmiDhObject,
107    },
108    parameters: {
109        pub buffer: Tpm2bMaxBuffer,
110        pub hierarchy: TpmRh,
111    }
112}
113
114tpm_struct! {
115    #[derive(Debug, PartialEq, Eq, Clone)]
116    kind: Response,
117    name: TpmSequenceCompleteResponse,
118    cc: TpmCc::SequenceComplete,
119    no_sessions: true,
120    with_sessions: true,
121    handles: {},
122    parameters: {
123        pub result: Tpm2bDigest,
124        pub validation: TpmtTkHashcheck,
125    }
126}
127
128tpm_struct! {
129    #[derive(Debug, PartialEq, Eq, Clone)]
130    kind: Command,
131    name: TpmEventSequenceCompleteCommand,
132    cc: TpmCc::EventSequenceComplete,
133    no_sessions: false,
134    with_sessions: true,
135    handles: {
136        pub pcr_handle: u32,
137        pub sequence_handle: crate::data::TpmiDhObject,
138    },
139    parameters: {
140        pub buffer: Tpm2bMaxBuffer,
141    }
142}
143
144tpm_struct! {
145    #[derive(Debug, Default, PartialEq, Eq, Clone)]
146    kind: Response,
147    name: TpmEventSequenceCompleteResponse,
148    cc: TpmCc::EventSequenceComplete,
149    no_sessions: true,
150    with_sessions: true,
151    handles: {},
152    parameters: {
153        pub results: TpmlDigestValues,
154    }
155}