tpm2.h 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513
  1. /* SPDX-License-Identifier: BSD-3-Clause */
  2. #ifndef LIB_TPM2_H_
  3. #define LIB_TPM2_H_
  4. #include <tss2/tss2_esys.h>
  5. #include "object.h"
  6. #include "tool_rc.h"
  7. tool_rc tpm2_from_tpm_public(ESYS_CONTEXT *esys_context, TPM2_HANDLE tpm_handle,
  8. ESYS_TR optional_session1, ESYS_TR optional_session2,
  9. ESYS_TR optional_session3, ESYS_TR *object);
  10. tool_rc tpm2_close(ESYS_CONTEXT *esys_context, ESYS_TR *rsrc_handle);
  11. tool_rc tpm2_tr_deserialize(ESYS_CONTEXT *esys_context, uint8_t const *buffer,
  12. size_t buffer_size, ESYS_TR *esys_handle);
  13. tool_rc tpm2_tr_serialize(ESYS_CONTEXT *esys_context, ESYS_TR object,
  14. uint8_t **buffer, size_t *buffer_size);
  15. tool_rc tpm2_nv_readpublic(ESYS_CONTEXT *esys_context, ESYS_TR nv_index,
  16. TPM2B_NV_PUBLIC **nv_public, TPM2B_NAME **nv_name);
  17. tool_rc tpm2_readpublic(ESYS_CONTEXT *esys_context, ESYS_TR object_handle,
  18. TPM2B_PUBLIC **out_public, TPM2B_NAME **name,
  19. TPM2B_NAME **qualified_name);
  20. tool_rc tpm2_getcap(ESYS_CONTEXT *esys_context,TPM2_CAP capability,
  21. UINT32 property, UINT32 property_count, TPMI_YES_NO *more_data,
  22. TPMS_CAPABILITY_DATA **capability_data);
  23. tool_rc tpm2_nv_read(ESYS_CONTEXT *esys_context,
  24. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index, UINT16 size,
  25. UINT16 offset, TPM2B_MAX_NV_BUFFER **data, TPM2B_DIGEST *cp_hash);
  26. tool_rc tpm2_context_save(ESYS_CONTEXT *esys_context, ESYS_TR save_handle,
  27. TPMS_CONTEXT **context);
  28. tool_rc tpm2_context_load(ESYS_CONTEXT *esys_context,
  29. const TPMS_CONTEXT *context, ESYS_TR *loaded_handle);
  30. tool_rc tpm2_flush_context(ESYS_CONTEXT *esys_context, ESYS_TR flush_handle);
  31. tool_rc tpm2_start_auth_session(ESYS_CONTEXT *esys_context, ESYS_TR tpm_key,
  32. ESYS_TR bind, const TPM2B_NONCE *nonce_caller, TPM2_SE session_type,
  33. const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH auth_hash,
  34. ESYS_TR *session_handle);
  35. tool_rc tpm2_sess_set_attributes(ESYS_CONTEXT *esys_context, ESYS_TR session,
  36. TPMA_SESSION flags, TPMA_SESSION mask);
  37. tool_rc tpm2_sess_get_attributes(ESYS_CONTEXT *esys_context, ESYS_TR session,
  38. TPMA_SESSION *flags);
  39. tool_rc tpm2_sess_get_noncetpm(ESYS_CONTEXT *esys_context,
  40. ESYS_TR session_handle, TPM2B_NONCE **nonce_tpm);
  41. tool_rc tpm2_policy_restart(ESYS_CONTEXT *esys_context, ESYS_TR session_handle,
  42. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
  43. tool_rc tpm2_get_capability(ESYS_CONTEXT *esys_context, ESYS_TR shandle1,
  44. ESYS_TR shandle2, ESYS_TR shandle3, TPM2_CAP capability,
  45. UINT32 property, UINT32 property_count, TPMI_YES_NO *more_data,
  46. TPMS_CAPABILITY_DATA **capability_data);
  47. tool_rc tpm2_create_primary(ESYS_CONTEXT *esys_context, ESYS_TR primary_handle,
  48. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3,
  49. const TPM2B_SENSITIVE_CREATE *in_sensitive, const TPM2B_PUBLIC *in_public,
  50. const TPM2B_DATA *outside_info, const TPML_PCR_SELECTION *creation_pcr,
  51. ESYS_TR *object_handle, TPM2B_PUBLIC **out_public,
  52. TPM2B_CREATION_DATA **creation_data, TPM2B_DIGEST **creation_hash,
  53. TPMT_TK_CREATION **creation_ticket);
  54. tool_rc tpm2_pcr_read(ESYS_CONTEXT *esys_context, ESYS_TR shandle1,
  55. ESYS_TR shandle2, ESYS_TR shandle3,
  56. const TPML_PCR_SELECTION *pcr_selection_in, UINT32 *pcr_update_counter,
  57. TPML_PCR_SELECTION **pcr_selection_out, TPML_DIGEST **pcr_values);
  58. tool_rc tpm2_policy_authorize(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  59. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3,
  60. const TPM2B_DIGEST *approved_policy, const TPM2B_NONCE *policy_ref,
  61. const TPM2B_NAME *key_sign, const TPMT_TK_VERIFIED *check_ticket);
  62. tool_rc tpm2_policy_or(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  63. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3,
  64. const TPML_DIGEST *p_hash_list);
  65. tool_rc tpm2_policy_namehash(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  66. const TPM2B_DIGEST *name_hash);
  67. tool_rc tpm2_policy_template(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  68. const TPM2B_DIGEST *template_hash);
  69. tool_rc tpm2_policy_cphash(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  70. const TPM2B_DIGEST *cphash);
  71. tool_rc tpm2_policy_pcr(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  72. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3,
  73. const TPM2B_DIGEST *pcr_digest, const TPML_PCR_SELECTION *pcrs);
  74. tool_rc tpm2_policy_password(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  75. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
  76. tool_rc tpm2_policy_signed(ESYS_CONTEXT *esys_context,
  77. tpm2_loaded_object *auth_entity_obj, ESYS_TR policy_session,
  78. const TPMT_SIGNATURE *signature, INT32 expiration,
  79. TPM2B_TIMEOUT **timeout, TPMT_TK_AUTH **policy_ticket,
  80. TPM2B_NONCE *policy_qualifier, TPM2B_NONCE *nonce_tpm,
  81. TPM2B_DIGEST *cphash);
  82. tool_rc tpm2_policy_ticket(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  83. const TPM2B_TIMEOUT *timeout, const TPM2B_NONCE *policyref,
  84. const TPM2B_NAME *authname, const TPMT_TK_AUTH *ticket);
  85. tool_rc tpm2_policy_authvalue(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  86. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3);
  87. tool_rc tpm2_policy_secret(ESYS_CONTEXT *esys_context,
  88. tpm2_loaded_object *auth_entity_obj, ESYS_TR policy_session,
  89. INT32 expiration, TPMT_TK_AUTH **policy_ticket,
  90. TPM2B_TIMEOUT **timeout, TPM2B_NONCE *nonce_tpm,
  91. TPM2B_NONCE *policy_qualifier, TPM2B_DIGEST *cp_hash);
  92. tool_rc tpm2_policy_getdigest(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  93. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3,
  94. TPM2B_DIGEST **policy_digest);
  95. tool_rc tpm2_policy_command_code(ESYS_CONTEXT *esys_context,
  96. ESYS_TR policy_session, ESYS_TR shandle1, ESYS_TR shandle2,
  97. ESYS_TR shandle3, TPM2_CC code);
  98. tool_rc tpm2_policy_locality(ESYS_CONTEXT *esys_context, ESYS_TR policy_session,
  99. ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3,
  100. TPMA_LOCALITY locality);
  101. tool_rc tpm2_policy_duplication_select(ESYS_CONTEXT *esys_context,
  102. ESYS_TR policy_session, ESYS_TR shandle1, ESYS_TR shandle2,
  103. ESYS_TR shandle3, const TPM2B_NAME *object_name,
  104. const TPM2B_NAME *new_parent_name, TPMI_YES_NO include_object);
  105. tool_rc tpm2_tr_get_name(ESYS_CONTEXT *esys_context, ESYS_TR handle,
  106. TPM2B_NAME **name);
  107. tool_rc tpm2_mu_tpm2_handle_unmarshal(uint8_t const buffer[], size_t size,
  108. size_t *offset, TPM2_HANDLE *out);
  109. tool_rc tpm2_mu_tpmt_public_marshal(TPMT_PUBLIC const *src, uint8_t buffer[],
  110. size_t buffer_size, size_t *offset);
  111. tool_rc tpm2_evictcontrol(ESYS_CONTEXT *esys_context,
  112. tpm2_loaded_object *auth_hierarchy_obj,
  113. tpm2_loaded_object *to_persist_key_obj,
  114. TPMI_DH_PERSISTENT persistent_handle, ESYS_TR *new_object_handle,
  115. TPM2B_DIGEST *cp_hash);
  116. tool_rc tpm2_hash(ESYS_CONTEXT *esys_context, ESYS_TR shandle1, ESYS_TR shandle2,
  117. ESYS_TR shandle3, const TPM2B_MAX_BUFFER *data, TPMI_ALG_HASH hash_alg,
  118. TPMI_RH_HIERARCHY hierarchy, TPM2B_DIGEST **out_hash,
  119. TPMT_TK_HASHCHECK **validation);
  120. tool_rc tpm2_hash_sequence_start(ESYS_CONTEXT *esys_context, const TPM2B_AUTH *auth,
  121. TPMI_ALG_HASH hash_alg, ESYS_TR *sequence_handle);
  122. tool_rc tpm2_sequence_update(ESYS_CONTEXT *esys_context, ESYS_TR sequence_handle,
  123. const TPM2B_MAX_BUFFER *buffer);
  124. tool_rc tpm2_sequence_complete(ESYS_CONTEXT *esys_context,
  125. ESYS_TR sequence_handle, const TPM2B_MAX_BUFFER *buffer,
  126. TPMI_RH_HIERARCHY hierarchy, TPM2B_DIGEST **result,
  127. TPMT_TK_HASHCHECK **validation);
  128. tool_rc tpm2_event_sequence_complete(ESYS_CONTEXT *ectx, ESYS_TR pcr,
  129. ESYS_TR sequence_handle, tpm2_session *session,
  130. const TPM2B_MAX_BUFFER *buffer, TPML_DIGEST_VALUES **results);
  131. tool_rc tpm2_tr_set_auth(ESYS_CONTEXT *esys_context, ESYS_TR handle,
  132. TPM2B_AUTH const *auth_value);
  133. tool_rc tpm2_activatecredential(ESYS_CONTEXT *esys_context,
  134. tpm2_loaded_object *activatehandle, tpm2_loaded_object *keyhandle,
  135. const TPM2B_ID_OBJECT *credential_blob,
  136. const TPM2B_ENCRYPTED_SECRET *secret, TPM2B_DIGEST **cert_info,
  137. TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  138. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle3);
  139. tool_rc tpm2_create(ESYS_CONTEXT *esys_context, tpm2_loaded_object *parent_obj,
  140. const TPM2B_SENSITIVE_CREATE *in_sensitive, const TPM2B_PUBLIC *in_public,
  141. const TPM2B_DATA *outside_info, const TPML_PCR_SELECTION *creation_pcr,
  142. TPM2B_PRIVATE **out_private, TPM2B_PUBLIC **out_public,
  143. TPM2B_CREATION_DATA **creation_data, TPM2B_DIGEST **creation_hash,
  144. TPMT_TK_CREATION **creation_ticket, TPM2B_DIGEST *cp_hash,
  145. TPM2B_DIGEST *rp_hash, TPMI_ALG_HASH parameter_hash_algorithm,
  146. ESYS_TR shandle2, ESYS_TR shandle3);
  147. tool_rc tpm2_create_loaded(ESYS_CONTEXT *esys_context,
  148. tpm2_loaded_object *parent_obj,
  149. const TPM2B_SENSITIVE_CREATE *in_sensitive,
  150. const TPM2B_TEMPLATE *in_public, ESYS_TR *object_handle,
  151. TPM2B_PRIVATE **out_private, TPM2B_PUBLIC **out_public,
  152. TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  153. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle2,
  154. ESYS_TR shandle3);
  155. tool_rc tpm2_object_change_auth(ESYS_CONTEXT *esys_context,
  156. tpm2_loaded_object *parent_object, tpm2_loaded_object *object,
  157. const TPM2B_AUTH *new_auth, TPM2B_PRIVATE **out_private,
  158. TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  159. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle2,
  160. ESYS_TR shandle3);
  161. tool_rc tpm2_nv_change_auth(ESYS_CONTEXT *esys_context, tpm2_loaded_object *nv,
  162. const TPM2B_AUTH *new_auth, TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  163. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle2,
  164. ESYS_TR shandle3);
  165. tool_rc tpm2_hierarchy_change_auth(ESYS_CONTEXT *esys_context,
  166. tpm2_loaded_object *hierarchy, const TPM2B_AUTH *new_auth,
  167. TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  168. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle2,
  169. ESYS_TR shandle3);
  170. tool_rc tpm2_certify(ESYS_CONTEXT *esys_context,
  171. tpm2_loaded_object *certifiedkey_obj,
  172. tpm2_loaded_object *signingkey_obj, TPM2B_DATA *qualifying_data,
  173. TPMT_SIG_SCHEME *scheme, TPM2B_ATTEST **certify_info,
  174. TPMT_SIGNATURE **signature, TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  175. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle3);
  176. tool_rc tpm2_rsa_decrypt(ESYS_CONTEXT *esys_context, tpm2_loaded_object *keyobj,
  177. const TPM2B_PUBLIC_KEY_RSA *cipher_text,
  178. const TPMT_RSA_DECRYPT *in_scheme, const TPM2B_DATA *label,
  179. TPM2B_PUBLIC_KEY_RSA **message, TPM2B_DIGEST *cp_hash);
  180. tool_rc tpm2_rsa_encrypt(ESYS_CONTEXT *ectx, tpm2_loaded_object *keyobj,
  181. const TPM2B_PUBLIC_KEY_RSA *message, const TPMT_RSA_DECRYPT *scheme,
  182. const TPM2B_DATA *label, TPM2B_PUBLIC_KEY_RSA **cipher_text);
  183. tool_rc tpm2_load(ESYS_CONTEXT *esys_context, tpm2_loaded_object *parentobj,
  184. const TPM2B_PRIVATE *in_private, const TPM2B_PUBLIC *in_public,
  185. ESYS_TR *object_handle, TPM2B_DIGEST *cp_hash);
  186. tool_rc tpm2_clear(ESYS_CONTEXT *esys_context,
  187. tpm2_loaded_object *auth_hierarchy, TPM2B_DIGEST *cp_hash);
  188. tool_rc tpm2_clearcontrol(ESYS_CONTEXT *esys_context,
  189. tpm2_loaded_object *auth_hierarchy, TPMI_YES_NO disable_clear,
  190. TPM2B_DIGEST *cp_hash);
  191. tool_rc tpm2_clockrateadjust(ESYS_CONTEXT *ectx, tpm2_loaded_object *object,
  192. TPM2_CLOCK_ADJUST rate_adjust, TPM2B_DIGEST *cp_hash);
  193. tool_rc tpm2_dictionarylockout_reset(ESYS_CONTEXT *esys_context,
  194. tpm2_loaded_object *auth_hierarchy, TPM2B_DIGEST *cp_hash);
  195. tool_rc tpm2_dictionarylockout_setup(ESYS_CONTEXT *esys_context,
  196. tpm2_loaded_object *auth_hierarchy, UINT32 max_tries,
  197. UINT32 recovery_time, UINT32 lockout_recovery_time,
  198. TPM2B_DIGEST *cp_hash);
  199. tool_rc tpm2_duplicate(ESYS_CONTEXT *esys_context,
  200. tpm2_loaded_object *duplicable_key, tpm2_loaded_object *new_parent_handle,
  201. const TPM2B_DATA *in_key, const TPMT_SYM_DEF_OBJECT *sym_alg,
  202. TPM2B_DATA **out_key, TPM2B_PRIVATE **duplicate,
  203. TPM2B_ENCRYPTED_SECRET **encrypted_seed, TPM2B_DIGEST *cp_hash);
  204. tool_rc tpm2_encryptdecrypt(ESYS_CONTEXT *esys_context,
  205. tpm2_loaded_object *encryption_key_obj, TPMI_YES_NO decrypt,
  206. TPMI_ALG_SYM_MODE mode, const TPM2B_IV *iv_in,
  207. const TPM2B_MAX_BUFFER *input_data, TPM2B_MAX_BUFFER **output_data,
  208. TPM2B_IV **iv_out, TPM2B_DIGEST *cp_hash);
  209. tool_rc tpm2_hierarchycontrol(ESYS_CONTEXT *esys_context,
  210. tpm2_loaded_object *auth_hierarchy, TPMI_RH_ENABLES enable,
  211. TPMI_YES_NO state, TPM2B_DIGEST *cp_hash);
  212. tool_rc tpm2_hmac(ESYS_CONTEXT *esys_context, tpm2_loaded_object *hmac_key_obj,
  213. TPMI_ALG_HASH halg, const TPM2B_MAX_BUFFER *input_buffer,
  214. TPM2B_DIGEST **out_hmac, TPM2B_DIGEST *cp_hash);
  215. tool_rc tpm2_hmac_start(ESYS_CONTEXT *esys_context,
  216. tpm2_loaded_object *hmac_key_obj, TPMI_ALG_HASH halg,
  217. ESYS_TR *sequence_handle);
  218. tool_rc tpm2_hmac_sequenceupdate(ESYS_CONTEXT *esys_context,
  219. ESYS_TR sequence_handle, tpm2_loaded_object *hmac_key_obj,
  220. const TPM2B_MAX_BUFFER *input_buffer);
  221. tool_rc tpm2_hmac_sequencecomplete(ESYS_CONTEXT *esys_context,
  222. ESYS_TR sequence_handle, tpm2_loaded_object *hmac_key_obj,
  223. const TPM2B_MAX_BUFFER *input_buffer, TPM2B_DIGEST **result,
  224. TPMT_TK_HASHCHECK **validation);
  225. tool_rc tpm2_import(ESYS_CONTEXT *esys_context, tpm2_loaded_object *parent_obj,
  226. const TPM2B_DATA *encryption_key, const TPM2B_PUBLIC *object_public,
  227. const TPM2B_PRIVATE *duplicate, const TPM2B_ENCRYPTED_SECRET *in_sym_seed,
  228. const TPMT_SYM_DEF_OBJECT *symmetric_alg, TPM2B_PRIVATE **out_private,
  229. TPM2B_DIGEST *cp_hash);
  230. tool_rc tpm2_nv_definespace(ESYS_CONTEXT *esys_context,
  231. tpm2_loaded_object *auth_hierarchy_obj, const TPM2B_AUTH *auth,
  232. const TPM2B_NV_PUBLIC *public_info, TPM2B_DIGEST *cp_hash,
  233. TPM2B_DIGEST *rp_hash, TPMI_ALG_HASH parameter_hash_algorithm,
  234. ESYS_TR shandle2, ESYS_TR shandle3);
  235. tool_rc tpm2_nvextend(ESYS_CONTEXT *esys_context,
  236. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  237. TPM2B_MAX_NV_BUFFER *data, TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  238. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle2,
  239. ESYS_TR shandle3);
  240. tool_rc tpm2_nv_increment(ESYS_CONTEXT *esys_context,
  241. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  242. TPM2B_DIGEST *cp_hash);
  243. tool_rc tpm2_nvreadlock(ESYS_CONTEXT *esys_context,
  244. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  245. TPM2B_DIGEST *cp_hash);
  246. tool_rc tpm2_nvglobalwritelock(ESYS_CONTEXT *esys_context,
  247. tpm2_loaded_object *auth_hierarchy_obj, TPM2B_DIGEST *cp_hash);
  248. tool_rc tpm2_nvwritelock(ESYS_CONTEXT *esys_context,
  249. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  250. TPM2B_DIGEST *cp_hash);
  251. tool_rc tpm2_tr_from_tpm_public(ESYS_CONTEXT *esys_context,
  252. TPM2_HANDLE handle, ESYS_TR *tr_handle);
  253. tool_rc tpm2_nvsetbits(ESYS_CONTEXT *esys_context,
  254. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  255. UINT64 bits, TPM2B_DIGEST *cp_hash);
  256. tool_rc tpm2_nvundefine(ESYS_CONTEXT *esys_context,
  257. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  258. TPM2B_DIGEST *cp_hash);
  259. tool_rc tpm2_nvundefinespecial(ESYS_CONTEXT *esys_context,
  260. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nv_index,
  261. tpm2_session *policy_session, TPM2B_DIGEST *cp_hash);
  262. tool_rc tpm2_nvwrite(ESYS_CONTEXT *esys_context,
  263. tpm2_loaded_object *auth_hierarchy_obj, TPM2_HANDLE nvindex,
  264. const TPM2B_MAX_NV_BUFFER *data, UINT16 offset, TPM2B_DIGEST *cp_hash);
  265. tool_rc tpm2_pcr_allocate(ESYS_CONTEXT *esys_context,
  266. tpm2_loaded_object *auth_hierarchy_obj,
  267. const TPML_PCR_SELECTION *pcr_allocation);
  268. tool_rc tpm2_sign(ESYS_CONTEXT *esys_context, tpm2_loaded_object *signingkey_obj,
  269. TPM2B_DIGEST *digest, TPMT_SIG_SCHEME *in_scheme,
  270. TPMT_TK_HASHCHECK *validation, TPMT_SIGNATURE **signature,
  271. TPM2B_DIGEST *cp_hash);
  272. tool_rc tpm2_quote(ESYS_CONTEXT *esys_context, tpm2_loaded_object *quote_obj,
  273. TPMT_SIG_SCHEME *in_scheme, TPM2B_DATA *qualifying_data,
  274. TPML_PCR_SELECTION *PCRselect, TPM2B_ATTEST **quoted,
  275. TPMT_SIGNATURE **signature, TPM2B_DIGEST *cp_hash);
  276. tool_rc tpm2_changeeps(ESYS_CONTEXT *ectx,
  277. tpm2_session *platform_hierarchy_session, TPM2B_DIGEST *cp_hash,
  278. TPM2B_DIGEST *rp_hash, TPMI_ALG_HASH parameter_hash_algorithm,
  279. ESYS_TR shandle2, ESYS_TR shandle3);
  280. tool_rc tpm2_changepps(ESYS_CONTEXT *ectx,
  281. tpm2_session *platform_hierarchy_session, TPM2B_DIGEST *cp_hash,
  282. TPM2B_DIGEST *rp_hash, TPMI_ALG_HASH parameter_hash_algorithm,
  283. ESYS_TR shandle2, ESYS_TR shandle3);
  284. tool_rc tpm2_unseal(ESYS_CONTEXT *esys_context, tpm2_loaded_object *sealkey_obj,
  285. TPM2B_SENSITIVE_DATA **out_data, TPM2B_DIGEST *cp_hash,
  286. TPM2B_DIGEST *rp_hash, TPMI_ALG_HASH parameter_hash_algorithm,
  287. ESYS_TR shandle2, ESYS_TR shandle3);
  288. tool_rc tpm2_policy_authorize_nv(ESYS_CONTEXT *esys_context,
  289. tpm2_loaded_object *auth_entity_obj, TPM2_HANDLE nv_index,
  290. ESYS_TR policy_session, TPM2B_DIGEST *cp_hash);
  291. tool_rc tpm2_incrementalselftest(ESYS_CONTEXT *ectx, const TPML_ALG *to_test,
  292. TPML_ALG **to_do_list);
  293. tool_rc tpm2_stirrandom(ESYS_CONTEXT *ectx, const TPM2B_SENSITIVE_DATA *data);
  294. tool_rc tpm2_selftest(ESYS_CONTEXT *ectx, TPMI_YES_NO full_test);
  295. tool_rc tpm2_gettestresult(ESYS_CONTEXT *ectx, TPM2B_MAX_BUFFER **out_data,
  296. TPM2_RC *test_result);
  297. tool_rc tpm2_loadexternal(ESYS_CONTEXT *ectx, const TPM2B_SENSITIVE *private,
  298. const TPM2B_PUBLIC *public, TPMI_RH_HIERARCHY hierarchy,
  299. ESYS_TR *object_handle);
  300. tool_rc tpm2_pcr_event(ESYS_CONTEXT *ectx, ESYS_TR pcr, tpm2_session *session,
  301. const TPM2B_EVENT *event_data, TPML_DIGEST_VALUES **digests);
  302. tool_rc tpm2_getrandom(ESYS_CONTEXT *ectx, UINT16 count,
  303. TPM2B_DIGEST **random, TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  304. ESYS_TR session_handle_1, ESYS_TR session_handle_2,
  305. ESYS_TR session_handle_3, TPMI_ALG_HASH param_hash_algorithm) ;
  306. tool_rc tpm2_startup(ESYS_CONTEXT *ectx, TPM2_SU startup_type);
  307. tool_rc tpm2_pcr_reset(ESYS_CONTEXT *ectx, ESYS_TR pcr_handle);
  308. tool_rc tpm2_makecredential(ESYS_CONTEXT *ectx, ESYS_TR handle,
  309. const TPM2B_DIGEST *credential, const TPM2B_NAME *object_name,
  310. TPM2B_ID_OBJECT **credential_blob, TPM2B_ENCRYPTED_SECRET **secret);
  311. tool_rc tpm2_verifysignature(ESYS_CONTEXT *ectx, ESYS_TR key_handle,
  312. const TPM2B_DIGEST *digest, const TPMT_SIGNATURE *signature,
  313. TPMT_TK_VERIFIED **validation);
  314. tool_rc tpm2_readclock(ESYS_CONTEXT *ectx, TPMS_TIME_INFO **current_time);
  315. tool_rc tpm2_setclock(ESYS_CONTEXT *ectx, tpm2_loaded_object *object,
  316. UINT64 new_time, TPM2B_DIGEST *cp_hash);
  317. tool_rc tpm2_shutdown(ESYS_CONTEXT *ectx, TPM2_SU shutdown_type);
  318. tool_rc tpm2_policy_nv(ESYS_CONTEXT *esys_context,
  319. tpm2_loaded_object *auth_entity_obj, TPM2_HANDLE nv_index,
  320. ESYS_TR policy_session, const TPM2B_OPERAND *operand_b, UINT16 offset,
  321. TPM2_EO operation, TPM2B_DIGEST *cp_hash);
  322. tool_rc tpm2_policy_countertimer(ESYS_CONTEXT *esys_context,
  323. ESYS_TR policy_session, const TPM2B_OPERAND *operand_b, UINT16 offset,
  324. TPM2_EO operation);
  325. tool_rc tpm2_policy_nv_written(ESYS_CONTEXT *esys_context,
  326. ESYS_TR policy_session, ESYS_TR shandle1, ESYS_TR shandle2,
  327. ESYS_TR shandle3, TPMI_YES_NO written_set);
  328. TSS2_RC fix_esys_hierarchy(uint32_t in, uint32_t *out);
  329. tool_rc tpm2_certifycreation(ESYS_CONTEXT *esys_context,
  330. tpm2_loaded_object *signingkey_obj, tpm2_loaded_object *certifiedkey_obj,
  331. TPM2B_DIGEST *creation_hash, TPMT_SIG_SCHEME *in_scheme,
  332. TPMT_TK_CREATION *creation_ticket, TPM2B_ATTEST **certify_info,
  333. TPMT_SIGNATURE **signature, TPM2B_DATA *policy_qualifier,
  334. TPM2B_DIGEST *cp_hash, TPM2B_DIGEST *rp_hash,
  335. TPMI_ALG_HASH parameter_hash_algorithm, ESYS_TR shandle2, ESYS_TR shandle3);
  336. tool_rc tpm2_nvcertify(ESYS_CONTEXT *esys_context,
  337. tpm2_loaded_object *signingkey_obj, tpm2_loaded_object *nvindex_authobj,
  338. TPM2_HANDLE nv_index, UINT16 offset, UINT16 size,
  339. TPMT_SIG_SCHEME *in_scheme, TPM2B_ATTEST **certify_info,
  340. TPMT_SIGNATURE **signature, TPM2B_DATA *policy_qualifier,
  341. TPM2B_DIGEST *cp_hash);
  342. tool_rc tpm2_setprimarypolicy(ESYS_CONTEXT *esys_context,
  343. tpm2_loaded_object *hierarchy_object, TPM2B_DIGEST *auth_policy,
  344. TPMI_ALG_HASH hash_algorithm, TPM2B_DIGEST *cp_hash);
  345. tool_rc tpm2_gettime(ESYS_CONTEXT *ectx,
  346. tpm2_loaded_object *privacy_admin,
  347. tpm2_loaded_object *signing_object,
  348. const TPM2B_DATA *qualifying_data,
  349. const TPMT_SIG_SCHEME *scheme,
  350. TPM2B_ATTEST **time_info,
  351. TPMT_SIGNATURE **signature,
  352. TPM2B_DIGEST *cp_hash);
  353. tool_rc tpm2_setcommandcodeaudit(ESYS_CONTEXT *esys_context,
  354. tpm2_loaded_object *auth_entity_obj, TPMI_ALG_HASH hash_algorithm,
  355. const TPML_CC *setlist, const TPML_CC *clearlist);
  356. tool_rc tpm2_getcommandauditdigest(ESYS_CONTEXT *esys_context,
  357. tpm2_loaded_object *privacy_object, tpm2_loaded_object *sign_object,
  358. TPMT_SIG_SCHEME *in_scheme, TPM2B_DATA *qualifying_data,
  359. TPM2B_ATTEST **audit_info, TPMT_SIGNATURE **signature);
  360. tool_rc tpm2_getsessionauditdigest(ESYS_CONTEXT *esys_context,
  361. tpm2_loaded_object *privacy_object, tpm2_loaded_object *sign_object,
  362. TPMT_SIG_SCHEME *in_scheme, TPM2B_DATA *qualifying_data,
  363. TPM2B_ATTEST **audit_info, TPMT_SIGNATURE **signature,
  364. ESYS_TR audit_session_handle);
  365. tool_rc tpm2_geteccparameters(ESYS_CONTEXT *esys_context,
  366. TPMI_ECC_CURVE curve_id, TPMS_ALGORITHM_DETAIL_ECC **parameters);
  367. tool_rc tpm2_ecephemeral(ESYS_CONTEXT *esys_context, TPMI_ECC_CURVE curve_id,
  368. TPM2B_ECC_POINT **Q, uint16_t *counter);
  369. tool_rc tpm2_commit(ESYS_CONTEXT *esys_context,
  370. tpm2_loaded_object *signing_key_object, TPM2B_ECC_POINT *P1,
  371. TPM2B_SENSITIVE_DATA *s2, TPM2B_ECC_PARAMETER *y2, TPM2B_ECC_POINT **K,
  372. TPM2B_ECC_POINT **L, TPM2B_ECC_POINT **E, uint16_t *counter);
  373. tool_rc tpm2_ecdhkeygen(ESYS_CONTEXT *esys_context,
  374. tpm2_loaded_object *ecc_public_key, TPM2B_ECC_POINT **Z,
  375. TPM2B_ECC_POINT **Q);
  376. tool_rc tpm2_ecdhzgen(ESYS_CONTEXT *esys_context,
  377. tpm2_loaded_object *ecc_key_object, TPM2B_ECC_POINT **Z,
  378. TPM2B_ECC_POINT *Q);
  379. tool_rc tpm2_zgen2phase(ESYS_CONTEXT *esys_context,
  380. tpm2_loaded_object *ecc_key_object, TPM2B_ECC_POINT *Q1,
  381. TPM2B_ECC_POINT *Q2, TPM2B_ECC_POINT **Z1, TPM2B_ECC_POINT **Z2,
  382. TPMI_ECC_KEY_EXCHANGE keyexchange_scheme, UINT16 commit_counter);
  383. tool_rc tpm2_getsapicontext(ESYS_CONTEXT *esys_context,
  384. TSS2_SYS_CONTEXT **sys_context);
  385. tool_rc tpm2_sapi_getcphash(TSS2_SYS_CONTEXT *sys_context,
  386. const TPM2B_NAME *name1, const TPM2B_NAME *name2, const TPM2B_NAME *name3,
  387. TPMI_ALG_HASH halg, TPM2B_DIGEST *cp_hash);
  388. tool_rc tpm2_sapi_getrphash(TSS2_SYS_CONTEXT *sys_context,
  389. TSS2_RC response_code, TPM2B_DIGEST *rp_hash, TPMI_ALG_HASH halg);
  390. #endif /* LIB_TPM2_H_ */