tpm2_protocol/data/
mod.rs

1// SPDX-License-Identifier: MIT OR Apache-2.0
2// Copyright (c) 2025 Opinsys Oy
3// Copyright (c) 2024-2025 Jarkko Sakkinen
4
5pub mod r#enum;
6pub mod tpm_rc;
7pub mod tpma;
8pub mod tpms;
9pub mod tpmt;
10pub mod tpmu;
11
12pub use r#enum::*;
13pub use tpm_rc::*;
14pub use tpma::*;
15pub use tpms::*;
16pub use tpmt::*;
17pub use tpmu::*;
18
19use crate::{tpm2b, tpm2b_struct, tpm_bool, tpml, TPM_MAX_COMMAND_SIZE};
20use core::{convert::TryFrom, fmt::Debug};
21
22pub const MAX_DIGEST_SIZE: usize = 64;
23pub const MAX_ECC_KEY_BYTES: usize = 66;
24pub const MAX_SYM_KEY_BYTES: usize = 32;
25pub const MAX_RSA_KEY_BYTES: usize = 512;
26pub const MAX_SENSITIVE_DATA: usize = 256;
27pub const MAX_BUFFER_SIZE: usize = 1024;
28pub const MAX_NV_BUFFER_SIZE: usize = 1024;
29pub const MAX_PRIVATE_SIZE: usize = 1408;
30
31tpm2b!(Tpm2b, TPM_MAX_COMMAND_SIZE);
32tpm2b!(Tpm2bAuth, MAX_DIGEST_SIZE);
33tpm2b!(Tpm2bDigest, MAX_DIGEST_SIZE);
34tpm2b!(Tpm2bEccParameter, MAX_ECC_KEY_BYTES);
35tpm2b!(Tpm2bEncryptedSecret, MAX_ECC_KEY_BYTES);
36tpm2b!(Tpm2bMaxBuffer, MAX_BUFFER_SIZE);
37tpm2b!(Tpm2bMaxNvBuffer, MAX_NV_BUFFER_SIZE);
38tpm2b!(Tpm2bName, { MAX_DIGEST_SIZE + 2 });
39tpm2b!(Tpm2bNonce, MAX_DIGEST_SIZE);
40tpm2b!(Tpm2bPrivate, MAX_PRIVATE_SIZE);
41tpm2b!(Tpm2bPrivateKeyRsa, MAX_RSA_KEY_BYTES);
42tpm2b!(Tpm2bPublicKeyRsa, MAX_RSA_KEY_BYTES);
43tpm2b!(Tpm2bSensitiveData, MAX_SENSITIVE_DATA);
44tpm2b!(Tpm2bSymKey, MAX_SYM_KEY_BYTES);
45tpm2b!(Tpm2bData, MAX_SENSITIVE_DATA);
46tpm2b!(Tpm2bTimeout, 8);
47
48tpm2b_struct! {
49    #[derive(Debug, PartialEq, Eq, Clone, Default)]
50    Tpm2bPublic,
51    TpmtPublic
52}
53tpm2b_struct! {
54    #[derive(Debug, PartialEq, Eq, Clone, Default)]
55    Tpm2bSensitiveCreate,
56    TpmsSensitiveCreate
57}
58tpm2b_struct! {
59    #[derive(Debug, PartialEq, Eq, Clone)]
60    Tpm2bSensitive,
61    TpmtSensitive
62}
63tpm2b_struct! {
64    #[derive(Debug, PartialEq, Eq, Clone, Default)]
65    Tpm2bCreationData,
66    TpmsCreationData
67}
68tpm2b_struct! {
69    #[derive(Debug, PartialEq, Eq, Clone)]
70    Tpm2bAttest,
71    TpmsAttest
72}
73tpm2b_struct! {
74    #[derive(Debug, PartialEq, Eq, Clone)]
75    Tpm2bNvPublic,
76    TpmsNvPublic
77}
78tpm2b_struct! {
79    #[derive(Debug, PartialEq, Eq, Clone, Default)]
80    Tpm2bIdObject,
81    TpmsIdObject
82}
83tpm2b_struct! {
84    #[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
85    Tpm2bEccPoint,
86    TpmsEccPoint
87}
88
89tpm_bool! {
90    #[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
91    pub struct TpmiYesNo(bool);
92}
93
94tpm_enum! {
95    #[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Copy, Clone, Hash, Default)]
96    pub enum TpmiEccKeyExchange(u16) {
97        #[default]
98        (None, 0x0000, "TPM_ECC_NONE"),
99        (Ecdh, 0x0019, "TPM_ALG_ECDH"),
100        (Ecmqv, 0x001D, "TPM_ALG_ECMQV"),
101        (Sm2, 0x001B, "TPM_ALG_SM2"),
102    }
103}
104
105tpml!(TpmlAlgProperty, TpmsAlgProperty, 64);
106tpml!(TpmlAlg, TpmAlgId, 64);
107tpml!(TpmlDigest, Tpm2bDigest, 8);
108tpml!(TpmlDigestValues, TpmtHa, 8);
109tpml!(TpmlHandle, u32, 128);
110tpml!(TpmlPcrSelection, TpmsPcrSelection, 8);