tpm2_hierarchy.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. /* SPDX-License-Identifier: BSD-3-Clause */
  2. #ifndef TOOLS_TPM2_HIERARCHY_H_
  3. #define TOOLS_TPM2_HIERARCHY_H_
  4. #include <stdbool.h>
  5. #include <tss2/tss2_esys.h>
  6. #include "tool_rc.h"
  7. #include "tpm2_session.h"
  8. typedef struct tpm2_hierarchy_pdata tpm2_hierarchy_pdata;
  9. struct tpm2_hierarchy_pdata {
  10. struct {
  11. TPMI_RH_PROVISION hierarchy;
  12. TPM2B_SENSITIVE_CREATE sensitive;
  13. TPM2B_PUBLIC public;
  14. TPM2B_DATA outside_info;
  15. TPML_PCR_SELECTION creation_pcr;
  16. ESYS_TR object_handle;
  17. } in;
  18. struct {
  19. ESYS_TR handle;
  20. TPM2B_PUBLIC *public;
  21. TPM2B_DIGEST *hash;
  22. struct {
  23. TPM2B_CREATION_DATA *data;
  24. TPMT_TK_CREATION *ticket;
  25. } creation;
  26. } out;
  27. };
  28. #define _PUBLIC_AREA_TPMA_OBJECT_DEFAULT_INIT { \
  29. .publicArea = { \
  30. .nameAlg = TPM2_ALG_SHA256, \
  31. .type = TPM2_ALG_RSA, \
  32. .objectAttributes = \
  33. TPMA_OBJECT_RESTRICTED|TPMA_OBJECT_DECRYPT \
  34. |TPMA_OBJECT_FIXEDTPM|TPMA_OBJECT_FIXEDPARENT \
  35. |TPMA_OBJECT_SENSITIVEDATAORIGIN|TPMA_OBJECT_USERWITHAUTH, \
  36. .parameters = { \
  37. .rsaDetail = { \
  38. .exponent = 0, \
  39. .symmetric = { \
  40. .algorithm = TPM2_ALG_AES, \
  41. .keyBits = { .aes = 128 }, \
  42. .mode = { .aes = TPM2_ALG_CFB }, \
  43. }, \
  44. .scheme = { .scheme = TPM2_ALG_NULL }, \
  45. .keyBits = 2048 \
  46. }, \
  47. }, \
  48. .unique = { .rsa = { .size = 0 } } \
  49. }, \
  50. }
  51. #define TPM2_HIERARCHY_DATA_INIT { \
  52. .in = { \
  53. .public = _PUBLIC_AREA_TPMA_OBJECT_DEFAULT_INIT, \
  54. .sensitive = TPM2B_SENSITIVE_CREATE_EMPTY_INIT, \
  55. .hierarchy = TPM2_RH_OWNER \
  56. }, \
  57. }
  58. /**
  59. * Creates a primary object.
  60. * @param context
  61. * The Enhanced System API (ESAPI) context
  62. * @param session
  63. * The authorised session for accessing the primary object
  64. * @param objdata
  65. * The objects data configuration.
  66. * @return
  67. * tool_rc indicating status.
  68. */
  69. tool_rc tpm2_hierarchy_create_primary(ESYS_CONTEXT *context, tpm2_session *sess,
  70. tpm2_hierarchy_pdata *objdata, TPM2B_DIGEST *cp_hash);
  71. /**
  72. * Free allocated memory in a tpm2_hierarchy_pdata structure
  73. *
  74. * @param objdata
  75. * The tpm2_hierarchy_pdata for which to free memory
  76. */
  77. void tpm2_hierarchy_pdata_free(tpm2_hierarchy_pdata *objdata);
  78. #endif /* TOOLS_TPM2_HIERARCHY_H_ */