tpm2_protocol/message/
non_volatile.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//! 23 Non-Volatile (NV) Storage
6
7use crate::{
8    data::{
9        Tpm2bAttest, Tpm2bAuth, Tpm2bData, Tpm2bMaxNvBuffer, Tpm2bName, Tpm2bNvPublic, TpmCc,
10        TpmtSignature,
11    },
12    tpm_struct,
13};
14use core::fmt::Debug;
15
16tpm_struct! {
17    #[derive(Debug, PartialEq, Eq, Clone)]
18    kind: Command,
19    name: TpmNvDefineSpaceCommand,
20    cc: TpmCc::NvDefineSpace,
21    no_sessions: false,
22    with_sessions: true,
23    handles: {
24        pub auth_handle: crate::data::TpmiRhHierarchy,
25    },
26    parameters: {
27        pub auth: Tpm2bAuth,
28        pub public_info: Tpm2bNvPublic,
29    }
30}
31
32tpm_struct! {
33    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
34    kind: Response,
35    name: TpmNvDefineSpaceResponse,
36    cc: TpmCc::NvDefineSpace,
37    no_sessions: false,
38    with_sessions: true,
39    handles: {},
40    parameters: {}
41}
42
43tpm_struct! {
44    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
45    kind: Command,
46    name: TpmNvUndefineSpaceCommand,
47    cc: TpmCc::NvUndefineSpace,
48    no_sessions: false,
49    with_sessions: true,
50    handles: {
51        pub auth_handle: crate::data::TpmiRhHierarchy,
52        pub nv_index: u32,
53    },
54    parameters: {}
55}
56
57tpm_struct! {
58    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
59    kind: Response,
60    name: TpmNvUndefineSpaceResponse,
61    cc: TpmCc::NvUndefineSpace,
62    no_sessions: false,
63    with_sessions: true,
64    handles: {},
65    parameters: {}
66}
67
68tpm_struct! {
69    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
70    kind: Command,
71    name: TpmNvUndefineSpaceSpecialCommand,
72    cc: TpmCc::NvUndefineSpaceSpecial,
73    no_sessions: false,
74    with_sessions: true,
75    handles: {
76        pub nv_index: u32,
77        pub platform: crate::data::TpmiRhHierarchy,
78    },
79    parameters: {}
80}
81
82tpm_struct! {
83    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
84    kind: Response,
85    name: TpmNvUndefineSpaceSpecialResponse,
86    cc: TpmCc::NvUndefineSpaceSpecial,
87    no_sessions: false,
88    with_sessions: true,
89    handles: {},
90    parameters: {}
91}
92
93tpm_struct! {
94    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
95    kind: Command,
96    name: TpmNvReadPublicCommand,
97    cc: TpmCc::NvReadPublic,
98    no_sessions: true,
99    with_sessions: false,
100    handles: {
101        pub nv_index: u32,
102    },
103    parameters: {}
104}
105
106tpm_struct! {
107    #[derive(Debug, PartialEq, Eq, Clone)]
108    kind: Response,
109    name: TpmNvReadPublicResponse,
110    cc: TpmCc::NvReadPublic,
111    no_sessions: true,
112    with_sessions: false,
113    handles: {},
114    parameters: {
115        pub nv_public: Tpm2bNvPublic,
116        pub nv_name: Tpm2bName,
117    }
118}
119
120tpm_struct! {
121    #[derive(Debug, PartialEq, Eq, Clone)]
122    kind: Command,
123    name: TpmNvWriteCommand,
124    cc: TpmCc::NvWrite,
125    no_sessions: false,
126    with_sessions: true,
127    handles: {
128        pub auth_handle: crate::data::TpmiDhObject,
129        pub nv_index: u32,
130    },
131    parameters: {
132        pub data: Tpm2bMaxNvBuffer,
133        pub offset: u16,
134    }
135}
136
137tpm_struct! {
138    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
139    kind: Response,
140    name: TpmNvWriteResponse,
141    cc: TpmCc::NvWrite,
142    no_sessions: false,
143    with_sessions: true,
144    handles: {},
145    parameters: {}
146}
147
148tpm_struct! {
149    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
150    kind: Command,
151    name: TpmNvIncrementCommand,
152    cc: TpmCc::NvIncrement,
153    no_sessions: false,
154    with_sessions: true,
155    handles: {
156        pub auth_handle: crate::data::TpmiDhObject,
157        pub nv_index: u32,
158    },
159    parameters: {}
160}
161
162tpm_struct! {
163    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
164    kind: Response,
165    name: TpmNvIncrementResponse,
166    cc: TpmCc::NvIncrement,
167    no_sessions: false,
168    with_sessions: true,
169    handles: {},
170    parameters: {}
171}
172
173tpm_struct! {
174    #[derive(Debug, PartialEq, Eq, Clone)]
175    kind: Command,
176    name: TpmNvExtendCommand,
177    cc: TpmCc::NvExtend,
178    no_sessions: false,
179    with_sessions: true,
180    handles: {
181        pub auth_handle: crate::data::TpmiDhObject,
182        pub nv_index: u32,
183    },
184    parameters: {
185        pub data: Tpm2bMaxNvBuffer,
186    }
187}
188
189tpm_struct! {
190    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
191    kind: Response,
192    name: TpmNvExtendResponse,
193    cc: TpmCc::NvExtend,
194    no_sessions: false,
195    with_sessions: true,
196    handles: {},
197    parameters: {}
198}
199
200tpm_struct! {
201    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
202    kind: Command,
203    name: TpmNvSetBitsCommand,
204    cc: TpmCc::NvSetBits,
205    no_sessions: false,
206    with_sessions: true,
207    handles: {
208        pub auth_handle: crate::data::TpmiDhObject,
209        pub nv_index: u32,
210    },
211    parameters: {
212        pub bits: u64,
213    }
214}
215
216tpm_struct! {
217    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
218    kind: Response,
219    name: TpmNvSetBitsResponse,
220    cc: TpmCc::NvSetBits,
221    no_sessions: false,
222    with_sessions: true,
223    handles: {},
224    parameters: {}
225}
226
227tpm_struct! {
228    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
229    kind: Command,
230    name: TpmNvWriteLockCommand,
231    cc: TpmCc::NvWriteLock,
232    no_sessions: false,
233    with_sessions: true,
234    handles: {
235        pub auth_handle: crate::data::TpmiDhObject,
236        pub nv_index: u32,
237    },
238    parameters: {}
239}
240
241tpm_struct! {
242    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
243    kind: Response,
244    name: TpmNvWriteLockResponse,
245    cc: TpmCc::NvWriteLock,
246    no_sessions: false,
247    with_sessions: true,
248    handles: {},
249    parameters: {}
250}
251
252tpm_struct! {
253    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
254    kind: Command,
255    name: TpmNvGlobalWriteLockCommand,
256    cc: TpmCc::NvGlobalWriteLock,
257    no_sessions: false,
258    with_sessions: true,
259    handles: {
260        pub auth_handle: crate::data::TpmiRhHierarchy,
261    },
262    parameters: {}
263}
264
265tpm_struct! {
266    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
267    kind: Response,
268    name: TpmNvGlobalWriteLockResponse,
269    cc: TpmCc::NvGlobalWriteLock,
270    no_sessions: false,
271    with_sessions: true,
272    handles: {},
273    parameters: {}
274}
275
276tpm_struct! {
277    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
278    kind: Command,
279    name: TpmNvReadCommand,
280    cc: TpmCc::NvRead,
281    no_sessions: false,
282    with_sessions: true,
283    handles: {
284        pub auth_handle: crate::data::TpmiDhObject,
285        pub nv_index: u32,
286    },
287    parameters: {
288        pub size: u16,
289        pub offset: u16,
290    }
291}
292
293tpm_struct! {
294    #[derive(Debug, Default, PartialEq, Eq, Clone)]
295    kind: Response,
296    name: TpmNvReadResponse,
297    cc: TpmCc::NvRead,
298    no_sessions: false,
299    with_sessions: true,
300    handles: {},
301    parameters: {
302        pub data: Tpm2bMaxNvBuffer,
303    }
304}
305
306tpm_struct! {
307    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
308    kind: Command,
309    name: TpmNvReadLockCommand,
310    cc: TpmCc::NvReadLock,
311    no_sessions: false,
312    with_sessions: true,
313    handles: {
314        pub auth_handle: crate::data::TpmiDhObject,
315        pub nv_index: u32,
316    },
317    parameters: {}
318}
319
320tpm_struct! {
321    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
322    kind: Response,
323    name: TpmNvReadLockResponse,
324    cc: TpmCc::NvReadLock,
325    no_sessions: false,
326    with_sessions: true,
327    handles: {},
328    parameters: {}
329}
330
331tpm_struct! {
332    #[derive(Debug, PartialEq, Eq, Clone)]
333    kind: Command,
334    name: TpmNvChangeAuthCommand,
335    cc: TpmCc::NvChangeAuth,
336    no_sessions: false,
337    with_sessions: true,
338    handles: {
339        pub nv_index: u32,
340    },
341    parameters: {
342        pub new_auth: Tpm2bAuth,
343    }
344}
345
346tpm_struct! {
347    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
348    kind: Response,
349    name: TpmNvChangeAuthResponse,
350    cc: TpmCc::NvChangeAuth,
351    no_sessions: false,
352    with_sessions: true,
353    handles: {},
354    parameters: {}
355}
356
357tpm_struct! {
358    #[derive(Debug, PartialEq, Eq, Clone)]
359    kind: Command,
360    name: TpmNvCertifyCommand,
361    cc: TpmCc::NvCertify,
362    no_sessions: false,
363    with_sessions: true,
364    handles: {
365        pub sign_handle: crate::data::TpmiDhObject,
366        pub auth_handle: crate::data::TpmiDhObject,
367        pub nv_index: u32,
368    },
369    parameters: {
370        pub qualifying_data: Tpm2bData,
371        pub in_scheme: TpmtSignature,
372        pub size: u16,
373        pub offset: u16,
374    }
375}
376
377tpm_struct! {
378    #[derive(Debug, PartialEq, Eq, Clone)]
379    kind: Response,
380    name: TpmNvCertifyResponse,
381    cc: TpmCc::NvCertify,
382    no_sessions: false,
383    with_sessions: true,
384    handles: {},
385    parameters: {
386        pub certify_info: Tpm2bAttest,
387        pub signature: TpmtSignature,
388    }
389}
390
391tpm_struct! {
392    #[derive(Debug, PartialEq, Eq, Clone)]
393    kind: Command,
394    name: TpmNvDefineSpace2Command,
395    cc: TpmCc::NvDefineSpace2,
396    no_sessions: false,
397    with_sessions: true,
398    handles: {
399        pub auth_handle: crate::data::TpmiRhHierarchy,
400    },
401    parameters: {
402        pub auth: Tpm2bAuth,
403        pub public_info: crate::data::Tpm2bNvPublic2,
404    }
405}
406
407tpm_struct! {
408    #[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
409    kind: Response,
410    name: TpmNvDefineSpace2Response,
411    cc: TpmCc::NvDefineSpace2,
412    no_sessions: false,
413    with_sessions: true,
414    handles: {},
415    parameters: {}
416}
417
418tpm_struct! {
419    #[derive(Debug, PartialEq, Eq, Copy, Clone)]
420    kind: Command,
421    name: TpmNvReadPublic2Command,
422    cc: TpmCc::NvReadPublic2,
423    no_sessions: true,
424    with_sessions: false,
425    handles: {
426        pub nv_index: u32,
427    },
428    parameters: {}
429}
430
431tpm_struct! {
432    #[derive(Debug, PartialEq, Eq, Clone)]
433    kind: Response,
434    name: TpmNvReadPublic2Response,
435    cc: TpmCc::NvReadPublic2,
436    no_sessions: true,
437    with_sessions: false,
438    handles: {},
439    parameters: {
440        pub nv_public: crate::data::Tpm2bNvPublic2,
441        pub nv_name: Tpm2bName,
442    }
443}