@@ -97,15 +97,30 @@ pub mod public;
9797pub  mod  sensitive; 
9898
9999pub  mod  auth { 
100-     buffer_type ! ( Auth ,  64 ,  TPM2B_AUTH ) ; 
100+     // Same size as TPM2B_DIGEST according to the specification. 
101+     use  crate :: tss2_esys:: TPMU_HA ; 
102+     use  std:: mem:: size_of; 
103+     const  TPM2B_AUTH_BUFFER_SIZE :  usize  = size_of :: < TPMU_HA > ( ) ; 
104+     buffer_type ! ( Auth ,  TPM2B_AUTH_BUFFER_SIZE ,  TPM2B_AUTH ) ; 
101105} 
102106
103107pub  mod  data { 
104-     buffer_type ! ( Data ,  64 ,  TPM2B_DATA ) ; 
108+     // This should, according to the specification, be 
109+     // size_of::<TPMT_HA>() but due to a bug in tpm2-tss 
110+     // (https://github.com/tpm2-software/tpm2-tss/issues/2888) 
111+     // it is the size of TPMU_HA 
112+     use  crate :: tss2_esys:: TPMU_HA ; 
113+     use  std:: mem:: size_of; 
114+     const  TPM2B_DATA_BUFFER_SIZE :  usize  = size_of :: < TPMU_HA > ( ) ; 
115+     buffer_type ! ( Data ,  TPM2B_DATA_BUFFER_SIZE ,  TPM2B_DATA ) ; 
105116} 
106117
107118pub  mod  digest { 
108-     buffer_type ! ( Digest ,  64 ,  TPM2B_DIGEST ) ; 
119+     use  crate :: tss2_esys:: TPMU_HA ; 
120+     use  std:: mem:: size_of; 
121+     const  TPM2B_DIGEST_BUFFER_SIZE :  usize  = size_of :: < TPMU_HA > ( ) ; 
122+ 
123+     buffer_type ! ( Digest ,  TPM2B_DIGEST_BUFFER_SIZE ,  TPM2B_DIGEST ) ; 
109124
110125    // Some implementations to get from Digest to [u8; N] for common values of N (sha* primarily) 
111126    // This is used to work around the fact that Rust does not allow custom functions for general values of N in [T; N], 
@@ -170,50 +185,75 @@ pub mod digest {
170185} 
171186
172187pub  mod  ecc_parameter { 
188+     use  crate :: tss2_esys:: TPM2_MAX_ECC_KEY_BYTES ; 
189+     const  TPM2B_ECC_PARAMETER_BUFFER_SIZE :  usize  = TPM2_MAX_ECC_KEY_BYTES  as  usize ; 
173190    buffer_type ! ( 
174191        EccParameter , 
175-         crate :: tss2_esys :: TPM2_MAX_ECC_KEY_BYTES   as   usize , 
192+         TPM2B_ECC_PARAMETER_BUFFER_SIZE , 
176193        TPM2B_ECC_PARAMETER 
177194    ) ; 
178195} 
179196
180197pub  mod  encrypted_secret { 
181-     named_field_buffer_type ! ( EncryptedSecret ,  256 ,  TPM2B_ENCRYPTED_SECRET ,  secret) ; 
198+     use  crate :: tss2_esys:: TPMU_ENCRYPTED_SECRET ; 
199+     use  std:: mem:: size_of; 
200+     const  TPM2B_ENCRYPTED_SECRET_BUFFER_SIZE :  usize  = size_of :: < TPMU_ENCRYPTED_SECRET > ( ) ; 
201+     named_field_buffer_type ! ( 
202+         EncryptedSecret , 
203+         TPM2B_ENCRYPTED_SECRET_BUFFER_SIZE , 
204+         TPM2B_ENCRYPTED_SECRET , 
205+         secret
206+     ) ; 
182207} 
183208
184209pub  mod  id_object { 
185-     named_field_buffer_type ! ( IdObject ,  256 ,  TPM2B_ID_OBJECT ,  credential) ; 
210+     use  crate :: tss2_esys:: TPMS_ID_OBJECT ; 
211+     use  std:: mem:: size_of; 
212+     const  TPM2B_ID_OBJECT_BUFFER_SIZE :  usize  = size_of :: < TPMS_ID_OBJECT > ( ) ; 
213+     named_field_buffer_type ! ( 
214+         IdObject , 
215+         TPM2B_ID_OBJECT_BUFFER_SIZE , 
216+         TPM2B_ID_OBJECT , 
217+         credential
218+     ) ; 
186219} 
187220
188221pub  mod  initial_value { 
189-     buffer_type ! ( 
190-         InitialValue , 
191-         crate :: tss2_esys:: TPM2_MAX_SYM_BLOCK_SIZE  as  usize , 
192-         TPM2B_IV 
193-     ) ; 
222+     use  crate :: tss2_esys:: TPM2_MAX_SYM_BLOCK_SIZE ; 
223+     const  TPM2B_IV_BUFFER_SIZE :  usize  = TPM2_MAX_SYM_BLOCK_SIZE  as  usize ; 
224+     buffer_type ! ( InitialValue ,  TPM2B_IV_BUFFER_SIZE ,  TPM2B_IV ) ; 
194225} 
195226
196227pub  mod  max_buffer { 
197228    use  crate :: tss2_esys:: TPM2_MAX_DIGEST_BUFFER ; 
198-     buffer_type ! ( MaxBuffer ,  TPM2_MAX_DIGEST_BUFFER  as  usize ,  TPM2B_MAX_BUFFER ) ; 
229+     const  TPM2B_MAX_BUFFER_BUFFER_SIZE :  usize  = TPM2_MAX_DIGEST_BUFFER  as  usize ; 
230+     buffer_type ! ( MaxBuffer ,  TPM2B_MAX_BUFFER_BUFFER_SIZE ,  TPM2B_MAX_BUFFER ) ; 
199231} 
200232
201233pub  mod  max_nv_buffer { 
202234    use  crate :: tss2_esys:: TPM2_MAX_NV_BUFFER_SIZE ; 
235+     const  TPM2B_MAX_NV_BUFFER_BUFFER_SIZE :  usize  = TPM2_MAX_NV_BUFFER_SIZE  as  usize ; 
203236    buffer_type ! ( 
204237        MaxNvBuffer , 
205-         TPM2_MAX_NV_BUFFER_SIZE   as   usize , 
238+         TPM2B_MAX_NV_BUFFER_BUFFER_SIZE , 
206239        TPM2B_MAX_NV_BUFFER 
207240    ) ; 
208241} 
209242
210243pub  mod  nonce { 
211-     buffer_type ! ( Nonce ,  64 ,  TPM2B_NONCE ) ; 
244+     // Same size as TPM2B_DIGEST according to the specification. 
245+     use  crate :: tss2_esys:: TPMU_HA ; 
246+     use  std:: mem:: size_of; 
247+     const  TPM2B_NONCE_BUFFER_SIZE :  usize  = size_of :: < TPMU_HA > ( ) ; 
248+ 
249+     buffer_type ! ( Nonce ,  TPM2B_NONCE_BUFFER_SIZE ,  TPM2B_NONCE ) ; 
212250} 
213251
214252pub  mod  private { 
253+     use  std:: mem:: size_of; 
215254    use  tss_esapi_sys:: _PRIVATE; 
216-     buffer_type ! ( Private ,  :: std:: mem:: size_of:: <_PRIVATE>( ) ,  TPM2B_PRIVATE ) ; 
255+     const  TPM2B_PRIVATE_BUFFER_SIZE :  usize  = size_of :: < _PRIVATE > ( ) ; 
256+     buffer_type ! ( Private ,  TPM2B_PRIVATE_BUFFER_SIZE ,  TPM2B_PRIVATE ) ; 
217257} 
218258
219259pub  mod  private_key_rsa { 
@@ -224,31 +264,34 @@ pub mod private_key_rsa {
224264    // ((MAX_RSA_KEY_BYTES * 5) ./ 2. The larger size would only apply to keys that have fixedTPM parents. 
225265    // The larger size was added in revision 01.53." 
226266    // The TSS stack we use only accepts the smaller of the two sizes described above (for now). 
267+     const  TPM2B_PRIVATE_KEY_RSA_BUFFER_SIZE :  usize  = ( TPM2_MAX_RSA_KEY_BYTES  as  usize )  / 2 ; 
227268    buffer_type ! ( 
228269        PrivateKeyRsa , 
229-         ( TPM2_MAX_RSA_KEY_BYTES  /  2 )   as   usize , 
270+         TPM2B_PRIVATE_KEY_RSA_BUFFER_SIZE , 
230271        TPM2B_PRIVATE_KEY_RSA 
231272    ) ; 
232273} 
233274
234275pub  mod  private_vendor_specific { 
235276    use  crate :: tss2_esys:: TPM2_PRIVATE_VENDOR_SPECIFIC_BYTES ; 
236- 
277+     const  TPM2B_PRIVATE_VENDOR_SPECIFIC_BUFFER_SIZE :  usize  =
278+         TPM2_PRIVATE_VENDOR_SPECIFIC_BYTES  as  usize ; 
237279    // The spec states the maximum size as: 
238280    // "The value for PRIVATE_VENDOR_SPECIFIC_BYTES is determined by the vendor." 
239281    // Not very helpful, but the TSS exposes a generic value that we can use. 
240282    buffer_type ! ( 
241283        PrivateVendorSpecific , 
242-         TPM2_PRIVATE_VENDOR_SPECIFIC_BYTES   as   usize , 
284+         TPM2B_PRIVATE_VENDOR_SPECIFIC_BUFFER_SIZE , 
243285        TPM2B_PRIVATE_VENDOR_SPECIFIC 
244286    ) ; 
245287} 
246288
247289pub  mod  public_key_rsa { 
248290    use  crate :: { interface_types:: key_bits:: RsaKeyBits ,  tss2_esys:: TPM2_MAX_RSA_KEY_BYTES } ; 
291+     const  TPM2B_PUBLIC_KEY_RSA_BUFFER_SIZE :  usize  = TPM2_MAX_RSA_KEY_BYTES  as  usize ; 
249292    buffer_type ! ( 
250293        PublicKeyRsa , 
251-         TPM2_MAX_RSA_KEY_BYTES   as   usize , 
294+         TPM2B_PUBLIC_KEY_RSA_BUFFER_SIZE , 
252295        TPM2B_PUBLIC_KEY_RSA 
253296    ) ; 
254297
@@ -321,22 +364,31 @@ pub mod public_key_rsa {
321364} 
322365
323366pub  mod  sensitive_data { 
367+     // This should be size_of::<TPMU_SENSITIVE_CREATE>(), but this not available 
368+     // in old versions of tpm2-tss so the size calculated from sized buffer instead. 
369+     use  crate :: tss2_esys:: UINT16 ; 
370+     use  std:: mem:: size_of; 
371+     const  TPM2B_SENSITIVE_DATA_BUFFER_SIZE :  usize  =
372+         size_of :: < TPM2B_SENSITIVE_DATA > ( )  - size_of :: < UINT16 > ( ) ; 
324373    buffer_type ! ( 
325374        SensitiveData , 
326-         :: std :: mem :: size_of :: < TPM2B_SENSITIVE_DATA > ( ) , 
375+         TPM2B_SENSITIVE_DATA_BUFFER_SIZE , 
327376        TPM2B_SENSITIVE_DATA 
328377    ) ; 
329378} 
330379
331380pub  mod  symmetric_key { 
332381    use  crate :: tss2_esys:: TPM2_MAX_SYM_KEY_BYTES ; 
333- 
382+      const   TPM2B_SYM_KEY_BUFFER_SIZE :   usize  =  TPM2_MAX_SYM_KEY_BYTES   as   usize ; 
334383    // The spec states the maximum size as: 
335384    // "MAX_SYM_KEY_BYTES will be the larger of the largest symmetric key supported by the TPM and the 
336385    // largest digest produced by any hashing algorithm implemented on the TPM" 
337-     buffer_type ! ( SymmetricKey ,  TPM2_MAX_SYM_KEY_BYTES   as   usize ,  TPM2B_SYM_KEY ) ; 
386+     buffer_type ! ( SymmetricKey ,  TPM2B_SYM_KEY_BUFFER_SIZE ,  TPM2B_SYM_KEY ) ; 
338387} 
339388
340389pub  mod  timeout { 
341-     buffer_type ! ( Timeout ,  8 ,  TPM2B_TIMEOUT ) ; 
390+     use  crate :: tss2_esys:: UINT64 ; 
391+     use  std:: mem:: size_of; 
392+     const  TPM2B_TIMEOUT_BUFFER_SIZE :  usize  = size_of :: < UINT64 > ( ) ; 
393+     buffer_type ! ( Timeout ,  TPM2B_TIMEOUT_BUFFER_SIZE ,  TPM2B_TIMEOUT ) ; 
342394} 
0 commit comments