session-util.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. /* SPDX-License-Identifier: BSD-2-Clause */
  2. /***********************************************************************
  3. * Copyright (c) 2017-2018, Intel Corporation
  4. *
  5. * All rights reserved.
  6. ***********************************************************************/
  7. #ifndef _SESSION_UTIL_H_
  8. #define _SESSION_UTIL_H_
  9. #include <stdbool.h>
  10. #include <uthash.h>
  11. #include "tss2_tpm2_types.h"
  12. #include "tss2_sys.h"
  13. #include "util/tpm2b.h"
  14. typedef struct {
  15. TPMI_DH_OBJECT tpmKey;
  16. TPMI_DH_ENTITY bind;
  17. TPM2B_ENCRYPTED_SECRET encryptedSalt;
  18. TPM2B_MAX_BUFFER salt;
  19. TPM2_SE sessionType;
  20. TPMT_SYM_DEF symmetric;
  21. TPMI_ALG_HASH authHash;
  22. TPMI_SH_AUTH_SESSION sessionHandle;
  23. TPM2B_NONCE nonceTPM;
  24. TPM2B_DIGEST sessionKey;
  25. TPM2B_DIGEST authValueBind;
  26. TPM2B_NONCE nonceNewer;
  27. TPM2B_NONCE nonceOlder;
  28. TPM2B_NONCE nonceTpmDecrypt;
  29. TPM2B_NONCE nonceTpmEncrypt;
  30. TPM2B_NAME name;
  31. void *hmacPtr;
  32. UT_hash_handle hh;
  33. } SESSION;
  34. typedef struct{
  35. TPM2_HANDLE entityHandle;
  36. TPM2B_AUTH entityAuth;
  37. UT_hash_handle hh;
  38. } ENTITY;
  39. /*
  40. * Helper function used to calculate cpHash and rpHash
  41. * if command is true cpHash is calculated,
  42. * otherwise rpHash rpHash is calculated.
  43. */
  44. TSS2_RC
  45. tpm_calc_phash(
  46. TSS2_SYS_CONTEXT *sysContext,
  47. TPM2_HANDLE handle1,
  48. TPM2_HANDLE handle2,
  49. TPM2_HANDLE handle3,
  50. TPMI_ALG_HASH auth_hash,
  51. bool command,
  52. TPM2B_DIGEST *result);
  53. UINT32
  54. tpm_handle_to_name(
  55. TSS2_TCTI_CONTEXT *tcti_context,
  56. TPM2_HANDLE handle,
  57. TPM2B_NAME *name);
  58. void
  59. roll_nonces(
  60. SESSION *session,
  61. TPM2B_NONCE *new_nonce);
  62. TSS2_RC
  63. KDFa(TPMI_ALG_HASH hash,
  64. TPM2B *key,
  65. const char *label,
  66. TPM2B *contextU,
  67. TPM2B *contextV,
  68. UINT16 bits,
  69. TPM2B_MAX_BUFFER *resultKey );
  70. SESSION *
  71. get_session(TPMI_SH_AUTH_SESSION hndl);
  72. TSS2_RC create_auth_session(
  73. SESSION **psession,
  74. TPMI_DH_OBJECT tpmKey,
  75. TPM2B_MAX_BUFFER *salt,
  76. TPMI_DH_ENTITY bind,
  77. TPM2B_AUTH *bindAuth,
  78. TPM2B_NONCE *nonceCaller,
  79. TPM2B_ENCRYPTED_SECRET *encryptedSalt,
  80. TPM2_SE sessionType,
  81. TPMT_SYM_DEF *symmetric,
  82. TPMI_ALG_HASH algId,
  83. TSS2_TCTI_CONTEXT *tctiContext);
  84. TSS2_RC
  85. compute_command_hmac(
  86. TSS2_SYS_CONTEXT *sysContext,
  87. TPM2_HANDLE handle1,
  88. TPM2_HANDLE handle2,
  89. TPM2_HANDLE handle3,
  90. TSS2L_SYS_AUTH_COMMAND *pSessionsDataIn);
  91. TSS2_RC
  92. check_response_hmac(
  93. TSS2_SYS_CONTEXT *sysContext,
  94. TSS2L_SYS_AUTH_COMMAND *pSessionsDataIn,
  95. TPM2_HANDLE handle1,
  96. TPM2_HANDLE handle2,
  97. TPM2_HANDLE handle3,
  98. TSS2L_SYS_AUTH_RESPONSE *pSessionsDataOut);
  99. void
  100. end_auth_session(SESSION *session);
  101. int
  102. AddEntity(TPM2_HANDLE handle, TPM2B_AUTH *auth);
  103. void
  104. DeleteEntity(TPM2_HANDLE handle);
  105. int
  106. GetEntityAuth(TPM2_HANDLE handle, TPM2B_AUTH *auth);
  107. ENTITY *
  108. GetEntity(TPM2_HANDLE handle);
  109. TSS2_RC
  110. encrypt_command_param(
  111. SESSION *session,
  112. TPM2B_MAX_BUFFER *encryptedData,
  113. TPM2B_MAX_BUFFER *clearData,
  114. TPM2B_AUTH *authValue);
  115. TSS2_RC
  116. decrypt_response_param(
  117. SESSION *session,
  118. TPM2B_MAX_BUFFER *clearData,
  119. TPM2B_MAX_BUFFER *encryptedData,
  120. TPM2B_AUTH *authValue);
  121. #endif