1pub 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);