group__fapi__crypto.html 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
  5. <meta http-equiv="X-UA-Compatible" content="IE=9"/>
  6. <meta name="generator" content="Doxygen 1.8.13"/>
  7. <meta name="viewport" content="width=device-width, initial-scale=1"/>
  8. <title>tpm2-tss: Internal Cryptographic Backend</title>
  9. <link href="tabs.css" rel="stylesheet" type="text/css"/>
  10. <script type="text/javascript" src="jquery.js"></script>
  11. <script type="text/javascript" src="dynsections.js"></script>
  12. <link href="navtree.css" rel="stylesheet" type="text/css"/>
  13. <script type="text/javascript" src="resize.js"></script>
  14. <script type="text/javascript" src="navtreedata.js"></script>
  15. <script type="text/javascript" src="navtree.js"></script>
  16. <script type="text/javascript">
  17. $(document).ready(initResizable);
  18. </script>
  19. <link href="doxygen.css" rel="stylesheet" type="text/css" />
  20. </head>
  21. <body>
  22. <div id="top"><!-- do not remove this div, it is closed by doxygen! -->
  23. <div id="titlearea">
  24. <table cellspacing="0" cellpadding="0">
  25. <tbody>
  26. <tr style="height: 56px;">
  27. <td id="projectalign" style="padding-left: 0.5em;">
  28. <div id="projectname">tpm2-tss
  29. &#160;<span id="projectnumber">3.2.0</span>
  30. </div>
  31. <div id="projectbrief">TPM Software stack 2.0 TCG spec compliant implementation</div>
  32. </td>
  33. </tr>
  34. </tbody>
  35. </table>
  36. </div>
  37. <!-- end header part -->
  38. <!-- Generated by Doxygen 1.8.13 -->
  39. <script type="text/javascript" src="menudata.js"></script>
  40. <script type="text/javascript" src="menu.js"></script>
  41. <script type="text/javascript">
  42. $(function() {
  43. initMenu('',false,false,'search.php','Search');
  44. });
  45. </script>
  46. <div id="main-nav"></div>
  47. </div><!-- top -->
  48. <div id="side-nav" class="ui-resizable side-nav-resizable">
  49. <div id="nav-tree">
  50. <div id="nav-tree-contents">
  51. <div id="nav-sync" class="sync"></div>
  52. </div>
  53. </div>
  54. <div id="splitbar" style="-moz-user-select:none;"
  55. class="ui-resizable-handle">
  56. </div>
  57. </div>
  58. <script type="text/javascript">
  59. $(document).ready(function(){initNavTree('group__fapi__crypto.html','');});
  60. </script>
  61. <div id="doc-content">
  62. <div class="header">
  63. <div class="summary">
  64. <a href="#func-members">Functions</a> </div>
  65. <div class="headertitle">
  66. <div class="title">Internal Cryptographic Backend<div class="ingroups"><a class="el" href="group__fapi.html">Feature API</a> &raquo; <a class="el" href="group__ifapi.html">Internals of Feature API</a></div></div> </div>
  67. </div><!--header-->
  68. <div class="contents">
  69. <table class="memberdecls">
  70. <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
  71. Functions</h2></td></tr>
  72. <tr class="memitem:gaf7e99f1f5064793629b00608c1567d9e"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaf7e99f1f5064793629b00608c1567d9e">get_crl_from_cert</a> (X509 *cert, X509_CRL **crl)</td></tr>
  73. <tr class="separator:gaf7e99f1f5064793629b00608c1567d9e"><td class="memSeparator" colspan="2">&#160;</td></tr>
  74. <tr class="memitem:ga335ce751f0d6d9288608568872cec24b"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga335ce751f0d6d9288608568872cec24b">ifapi_cert_to_pem</a> (const uint8_t *certBuffer, size_t certBufferSize, char **pemCert, TPM2_ALG_ID *certAlgorithmId, TPM2B_PUBLIC *tpmPublic)</td></tr>
  75. <tr class="separator:ga335ce751f0d6d9288608568872cec24b"><td class="memSeparator" colspan="2">&#160;</td></tr>
  76. <tr class="memitem:ga037db3129ad84c8a032e1f3ac3233f0d"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga037db3129ad84c8a032e1f3ac3233f0d">ifapi_crypto_hash_abort</a> (<a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> **context)</td></tr>
  77. <tr class="separator:ga037db3129ad84c8a032e1f3ac3233f0d"><td class="memSeparator" colspan="2">&#160;</td></tr>
  78. <tr class="memitem:gae2feeff96f78225620819f2f6217964e"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gae2feeff96f78225620819f2f6217964e">ifapi_crypto_hash_finish</a> (<a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> **context, uint8_t *digest, size_t *digestSize)</td></tr>
  79. <tr class="separator:gae2feeff96f78225620819f2f6217964e"><td class="memSeparator" colspan="2">&#160;</td></tr>
  80. <tr class="memitem:ga1bae9ed161278e58f8e39d70f110b046"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga1bae9ed161278e58f8e39d70f110b046">ifapi_crypto_hash_start</a> (<a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> **context, TPM2_ALG_ID hashAlgorithm)</td></tr>
  81. <tr class="separator:ga1bae9ed161278e58f8e39d70f110b046"><td class="memSeparator" colspan="2">&#160;</td></tr>
  82. <tr class="memitem:gaf9c318cab007a23adef270f9c4a606b4"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaf9c318cab007a23adef270f9c4a606b4">ifapi_crypto_hash_update</a> (<a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> *context, const uint8_t *buffer, size_t size)</td></tr>
  83. <tr class="separator:gaf9c318cab007a23adef270f9c4a606b4"><td class="memSeparator" colspan="2">&#160;</td></tr>
  84. <tr class="memitem:ga487ac222f6bd4074c34128627af14825"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga487ac222f6bd4074c34128627af14825">ifapi_der_sig_to_tpm</a> (const TPMT_PUBLIC *tpmPublic, const unsigned char *signature, size_t signatureSize, TPMI_ALG_HASH hashAlgorithm, TPMT_SIGNATURE *tpmSignature)</td></tr>
  85. <tr class="separator:ga487ac222f6bd4074c34128627af14825"><td class="memSeparator" colspan="2">&#160;</td></tr>
  86. <tr class="memitem:gac56f0fce6cbb0ff4e4cba9c398f695df"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gac56f0fce6cbb0ff4e4cba9c398f695df">ifapi_get_hash_alg_for_size</a> (uint16_t size, TPMI_ALG_HASH *hashAlgorithm)</td></tr>
  87. <tr class="separator:gac56f0fce6cbb0ff4e4cba9c398f695df"><td class="memSeparator" colspan="2">&#160;</td></tr>
  88. <tr class="memitem:gaa97941ce97a4bc07441db3cd6b7d47f6"><td class="memItemLeft" align="right" valign="top">TPM2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaa97941ce97a4bc07441db3cd6b7d47f6">ifapi_get_profile_sig_scheme</a> (const <a class="el" href="struct_i_f_a_p_i___p_r_o_f_i_l_e.html">IFAPI_PROFILE</a> *profile, const TPMT_PUBLIC *tpmPublic, TPMT_SIG_SCHEME *signatureScheme)</td></tr>
  89. <tr class="separator:gaa97941ce97a4bc07441db3cd6b7d47f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
  90. <tr class="memitem:gaf713079ae0eaa00544909915b126e4b7"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaf713079ae0eaa00544909915b126e4b7">ifapi_get_public_from_pem_cert</a> (const char *pem_cert, TPM2B_PUBLIC *tpm_public)</td></tr>
  91. <tr class="separator:gaf713079ae0eaa00544909915b126e4b7"><td class="memSeparator" colspan="2">&#160;</td></tr>
  92. <tr class="memitem:ga2749271fc949a0587ea33fd35b20c651"><td class="memItemLeft" align="right" valign="top">TPM2_ALG_ID&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga2749271fc949a0587ea33fd35b20c651">ifapi_get_signature_algorithm_from_pem</a> (const char *pemKey)</td></tr>
  93. <tr class="separator:ga2749271fc949a0587ea33fd35b20c651"><td class="memSeparator" colspan="2">&#160;</td></tr>
  94. <tr class="memitem:gaf0acb921826dd121e027f6a7ffe2e6ca"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaf0acb921826dd121e027f6a7ffe2e6ca">ifapi_get_tpm2b_public_from_pem</a> (const char *pemKey, TPM2B_PUBLIC *tpmPublic)</td></tr>
  95. <tr class="separator:gaf0acb921826dd121e027f6a7ffe2e6ca"><td class="memSeparator" colspan="2">&#160;</td></tr>
  96. <tr class="memitem:ga30a2dbc9555d38d2cc07ae8039d52d42"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga30a2dbc9555d38d2cc07ae8039d52d42">ifapi_get_tpm_key_fingerprint</a> (const TPM2B_PUBLIC *tpmPublicKey, TPMI_ALG_HASH hashAlg, TPM2B_DIGEST *fingerprint)</td></tr>
  97. <tr class="separator:ga30a2dbc9555d38d2cc07ae8039d52d42"><td class="memSeparator" colspan="2">&#160;</td></tr>
  98. <tr class="memitem:ga817996f764dc590b0fcde8b2479ebd14"><td class="memItemLeft" align="right" valign="top">size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga817996f764dc590b0fcde8b2479ebd14">ifapi_hash_get_digest_size</a> (TPM2_ALG_ID hashAlgorithm)</td></tr>
  99. <tr class="separator:ga817996f764dc590b0fcde8b2479ebd14"><td class="memSeparator" colspan="2">&#160;</td></tr>
  100. <tr class="memitem:gaca515b7a38f631d79c814709f8506e0e"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaca515b7a38f631d79c814709f8506e0e">ifapi_initialize_sign_public</a> (TPM2_ALG_ID signatureAlgorithm, TPM2B_PUBLIC *public)</td></tr>
  101. <tr class="separator:gaca515b7a38f631d79c814709f8506e0e"><td class="memSeparator" colspan="2">&#160;</td></tr>
  102. <tr class="memitem:ga67cac597edb51e7aeab416e3b3d46194"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga67cac597edb51e7aeab416e3b3d46194">ifapi_pub_pem_key_from_tpm</a> (const TPM2B_PUBLIC *tpmPublicKey, char **pemKey, int *pemKeySize)</td></tr>
  103. <tr class="separator:ga67cac597edb51e7aeab416e3b3d46194"><td class="memSeparator" colspan="2">&#160;</td></tr>
  104. <tr class="memitem:ga48d5eaba0929c2509a637e7e6a35990d"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#ga48d5eaba0929c2509a637e7e6a35990d">ifapi_tpm_ecc_sig_to_der</a> (const TPMT_SIGNATURE *tpmSignature, uint8_t **signature, size_t *signatureSize)</td></tr>
  105. <tr class="separator:ga48d5eaba0929c2509a637e7e6a35990d"><td class="memSeparator" colspan="2">&#160;</td></tr>
  106. <tr class="memitem:gaad2a4c24b2a55638bcb84fca8b5fc2f6"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaad2a4c24b2a55638bcb84fca8b5fc2f6">ifapi_verify_ek_cert</a> (char *root_cert_pem, char *intermed_cert_pem, char *ek_cert_pem)</td></tr>
  107. <tr class="separator:gaad2a4c24b2a55638bcb84fca8b5fc2f6"><td class="memSeparator" colspan="2">&#160;</td></tr>
  108. <tr class="memitem:gae1b2637abec3a461a863360c0e76cc35"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gae1b2637abec3a461a863360c0e76cc35">ifapi_verify_signature</a> (const <a class="el" href="struct___i_f_a_p_i___o_b_j_e_c_t.html">IFAPI_OBJECT</a> *keyObject, const uint8_t *signature, size_t signatureSize, const uint8_t *digest, size_t digestSize)</td></tr>
  109. <tr class="separator:gae1b2637abec3a461a863360c0e76cc35"><td class="memSeparator" colspan="2">&#160;</td></tr>
  110. <tr class="memitem:gaf974aab23bced5dd22e422b5ad5cbb51"><td class="memItemLeft" align="right" valign="top">TSS2_RC&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fapi__crypto.html#gaf974aab23bced5dd22e422b5ad5cbb51">ifapi_verify_signature_quote</a> (const <a class="el" href="struct___i_f_a_p_i___o_b_j_e_c_t.html">IFAPI_OBJECT</a> *keyObject, const uint8_t *signature, size_t signatureSize, const uint8_t *digest, size_t digestSize, const TPMT_SIG_SCHEME *signatureScheme)</td></tr>
  111. <tr class="separator:gaf974aab23bced5dd22e422b5ad5cbb51"><td class="memSeparator" colspan="2">&#160;</td></tr>
  112. </table>
  113. <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
  114. <p>The types and functions used internally by FAPI for cryptographic operations. Multiple implementations of these functions for different cryptographic backends may exist. </p>
  115. <h2 class="groupheader">Function Documentation</h2>
  116. <a id="gaf7e99f1f5064793629b00608c1567d9e"></a>
  117. <h2 class="memtitle"><span class="permalink"><a href="#gaf7e99f1f5064793629b00608c1567d9e">&#9670;&nbsp;</a></span>get_crl_from_cert()</h2>
  118. <div class="memitem">
  119. <div class="memproto">
  120. <table class="memname">
  121. <tr>
  122. <td class="memname">TSS2_RC get_crl_from_cert </td>
  123. <td>(</td>
  124. <td class="paramtype">X509 *&#160;</td>
  125. <td class="paramname"><em>cert</em>, </td>
  126. </tr>
  127. <tr>
  128. <td class="paramkey"></td>
  129. <td></td>
  130. <td class="paramtype">X509_CRL **&#160;</td>
  131. <td class="paramname"><em>crl</em>&#160;</td>
  132. </tr>
  133. <tr>
  134. <td></td>
  135. <td>)</td>
  136. <td></td><td></td>
  137. </tr>
  138. </table>
  139. </div><div class="memdoc">
  140. <p>Get url to download crl from certificate. </p><dl class="retval"><dt>Return values</dt><dd>
  141. <table class="retval">
  142. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if not enough memory can be allocated. </td></tr>
  143. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if an invalid value was passed into the function. </td></tr>
  144. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an internal error occurred. </td></tr>
  145. <tr><td class="paramname">TSS2_FAPI_RC_NO_CERT</td><td>if an error did occur during certificate downloading. </td></tr>
  146. </table>
  147. </dd>
  148. </dl>
  149. </div>
  150. </div>
  151. <a id="ga335ce751f0d6d9288608568872cec24b"></a>
  152. <h2 class="memtitle"><span class="permalink"><a href="#ga335ce751f0d6d9288608568872cec24b">&#9670;&nbsp;</a></span>ifapi_cert_to_pem()</h2>
  153. <div class="memitem">
  154. <div class="memproto">
  155. <table class="memname">
  156. <tr>
  157. <td class="memname">TSS2_RC ifapi_cert_to_pem </td>
  158. <td>(</td>
  159. <td class="paramtype">const uint8_t *&#160;</td>
  160. <td class="paramname"><em>certBuffer</em>, </td>
  161. </tr>
  162. <tr>
  163. <td class="paramkey"></td>
  164. <td></td>
  165. <td class="paramtype">size_t&#160;</td>
  166. <td class="paramname"><em>certBufferSize</em>, </td>
  167. </tr>
  168. <tr>
  169. <td class="paramkey"></td>
  170. <td></td>
  171. <td class="paramtype">char **&#160;</td>
  172. <td class="paramname"><em>pemCert</em>, </td>
  173. </tr>
  174. <tr>
  175. <td class="paramkey"></td>
  176. <td></td>
  177. <td class="paramtype">TPM2_ALG_ID *&#160;</td>
  178. <td class="paramname"><em>certAlgorithmId</em>, </td>
  179. </tr>
  180. <tr>
  181. <td class="paramkey"></td>
  182. <td></td>
  183. <td class="paramtype">TPM2B_PUBLIC *&#160;</td>
  184. <td class="paramname"><em>tpmPublic</em>&#160;</td>
  185. </tr>
  186. <tr>
  187. <td></td>
  188. <td>)</td>
  189. <td></td><td></td>
  190. </tr>
  191. </table>
  192. </div><div class="memdoc">
  193. <p>Converts a TPM certificate buffer to the PEM format.</p>
  194. <dl class="params"><dt>Parameters</dt><dd>
  195. <table class="params">
  196. <tr><td class="paramdir">[in]</td><td class="paramname">certBuffer</td><td>A byte buffer holding the certificate </td></tr>
  197. <tr><td class="paramdir">[in]</td><td class="paramname">certBufferSize</td><td>The size of certBuffer in bytes </td></tr>
  198. <tr><td class="paramdir">[out]</td><td class="paramname">pemCert</td><td>A byte buffer where the PEM-formatted certificate is stored </td></tr>
  199. <tr><td class="paramdir">[out]</td><td class="paramname">certAlgorithmId</td><td>The key type of the certified key </td></tr>
  200. <tr><td class="paramdir">[out]</td><td class="paramname">tpmPublic</td><td>The public key of the certificate in TPM format.</td></tr>
  201. </table>
  202. </dd>
  203. </dl>
  204. <dl class="retval"><dt>Return values</dt><dd>
  205. <table class="retval">
  206. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  207. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if certBuffer or pemCert is NULL </td></tr>
  208. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  209. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the certificate is invalid </td></tr>
  210. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  211. </table>
  212. </dd>
  213. </dl>
  214. </div>
  215. </div>
  216. <a id="ga037db3129ad84c8a032e1f3ac3233f0d"></a>
  217. <h2 class="memtitle"><span class="permalink"><a href="#ga037db3129ad84c8a032e1f3ac3233f0d">&#9670;&nbsp;</a></span>ifapi_crypto_hash_abort()</h2>
  218. <div class="memitem">
  219. <div class="memproto">
  220. <table class="memname">
  221. <tr>
  222. <td class="memname">void ifapi_crypto_hash_abort </td>
  223. <td>(</td>
  224. <td class="paramtype"><a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> **&#160;</td>
  225. <td class="paramname"><em>context</em></td><td>)</td>
  226. <td></td>
  227. </tr>
  228. </table>
  229. </div><div class="memdoc">
  230. <p>Aborts a hash operation and finalizes the hash context. It will be set to NULL.</p>
  231. <dl class="params"><dt>Parameters</dt><dd>
  232. <table class="params">
  233. <tr><td class="paramdir">[in,out]</td><td class="paramname">context</td><td>The context of the digest object. </td></tr>
  234. </table>
  235. </dd>
  236. </dl>
  237. </div>
  238. </div>
  239. <a id="gae2feeff96f78225620819f2f6217964e"></a>
  240. <h2 class="memtitle"><span class="permalink"><a href="#gae2feeff96f78225620819f2f6217964e">&#9670;&nbsp;</a></span>ifapi_crypto_hash_finish()</h2>
  241. <div class="memitem">
  242. <div class="memproto">
  243. <table class="memname">
  244. <tr>
  245. <td class="memname">TSS2_RC ifapi_crypto_hash_finish </td>
  246. <td>(</td>
  247. <td class="paramtype"><a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> **&#160;</td>
  248. <td class="paramname"><em>context</em>, </td>
  249. </tr>
  250. <tr>
  251. <td class="paramkey"></td>
  252. <td></td>
  253. <td class="paramtype">uint8_t *&#160;</td>
  254. <td class="paramname"><em>digest</em>, </td>
  255. </tr>
  256. <tr>
  257. <td class="paramkey"></td>
  258. <td></td>
  259. <td class="paramtype">size_t *&#160;</td>
  260. <td class="paramname"><em>digestSize</em>&#160;</td>
  261. </tr>
  262. <tr>
  263. <td></td>
  264. <td>)</td>
  265. <td></td><td></td>
  266. </tr>
  267. </table>
  268. </div><div class="memdoc">
  269. <p>Gets the digest value from a hash context and closes it.</p>
  270. <dl class="params"><dt>Parameters</dt><dd>
  271. <table class="params">
  272. <tr><td class="paramdir">[in,out]</td><td class="paramname">context</td><td>The hash context that is released </td></tr>
  273. <tr><td class="paramdir">[out]</td><td class="paramname">digest</td><td>The buffer for the digest value </td></tr>
  274. <tr><td class="paramdir">[out]</td><td class="paramname">digestSize</td><td>The size of digest in bytes. Can be NULL</td></tr>
  275. </table>
  276. </dd>
  277. </dl>
  278. <dl class="retval"><dt>Return values</dt><dd>
  279. <table class="retval">
  280. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  281. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if context or digest is NULL </td></tr>
  282. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  283. </table>
  284. </dd>
  285. </dl>
  286. </div>
  287. </div>
  288. <a id="ga1bae9ed161278e58f8e39d70f110b046"></a>
  289. <h2 class="memtitle"><span class="permalink"><a href="#ga1bae9ed161278e58f8e39d70f110b046">&#9670;&nbsp;</a></span>ifapi_crypto_hash_start()</h2>
  290. <div class="memitem">
  291. <div class="memproto">
  292. <table class="memname">
  293. <tr>
  294. <td class="memname">TSS2_RC ifapi_crypto_hash_start </td>
  295. <td>(</td>
  296. <td class="paramtype"><a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> **&#160;</td>
  297. <td class="paramname"><em>context</em>, </td>
  298. </tr>
  299. <tr>
  300. <td class="paramkey"></td>
  301. <td></td>
  302. <td class="paramtype">TPM2_ALG_ID&#160;</td>
  303. <td class="paramname"><em>hashAlgorithm</em>&#160;</td>
  304. </tr>
  305. <tr>
  306. <td></td>
  307. <td>)</td>
  308. <td></td><td></td>
  309. </tr>
  310. </table>
  311. </div><div class="memdoc">
  312. <p>Starts the computation of a hash digest.</p>
  313. <dl class="params"><dt>Parameters</dt><dd>
  314. <table class="params">
  315. <tr><td class="paramdir">[out]</td><td class="paramname">context</td><td>The created hash context (callee-allocated). </td></tr>
  316. <tr><td class="paramdir">[in]</td><td class="paramname">hashAlgorithm</td><td>The TSS hash identifier for the hash algorithm to use.</td></tr>
  317. </table>
  318. </dd>
  319. </dl>
  320. <dl class="retval"><dt>Return values</dt><dd>
  321. <table class="retval">
  322. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success. </td></tr>
  323. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if hashAlgorithm is invalid </td></tr>
  324. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if context is NULL </td></tr>
  325. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory cannot be allocated </td></tr>
  326. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  327. </table>
  328. </dd>
  329. </dl>
  330. </div>
  331. </div>
  332. <a id="gaf9c318cab007a23adef270f9c4a606b4"></a>
  333. <h2 class="memtitle"><span class="permalink"><a href="#gaf9c318cab007a23adef270f9c4a606b4">&#9670;&nbsp;</a></span>ifapi_crypto_hash_update()</h2>
  334. <div class="memitem">
  335. <div class="memproto">
  336. <table class="memname">
  337. <tr>
  338. <td class="memname">TSS2_RC ifapi_crypto_hash_update </td>
  339. <td>(</td>
  340. <td class="paramtype"><a class="el" href="struct___i_f_a_p_i___c_r_y_p_t_o___c_o_n_t_e_x_t.html">IFAPI_CRYPTO_CONTEXT_BLOB</a> *&#160;</td>
  341. <td class="paramname"><em>context</em>, </td>
  342. </tr>
  343. <tr>
  344. <td class="paramkey"></td>
  345. <td></td>
  346. <td class="paramtype">const uint8_t *&#160;</td>
  347. <td class="paramname"><em>buffer</em>, </td>
  348. </tr>
  349. <tr>
  350. <td class="paramkey"></td>
  351. <td></td>
  352. <td class="paramtype">size_t&#160;</td>
  353. <td class="paramname"><em>size</em>&#160;</td>
  354. </tr>
  355. <tr>
  356. <td></td>
  357. <td>)</td>
  358. <td></td><td></td>
  359. </tr>
  360. </table>
  361. </div><div class="memdoc">
  362. <p>Updates the digest value of a hash object with data from a byte buffer.</p>
  363. <dl class="params"><dt>Parameters</dt><dd>
  364. <table class="params">
  365. <tr><td class="paramdir">[in,out]</td><td class="paramname">context</td><td>The hash context that will be updated </td></tr>
  366. <tr><td class="paramdir">[in]</td><td class="paramname">buffer</td><td>The data for the update </td></tr>
  367. <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>The size of data in bytes</td></tr>
  368. </table>
  369. </dd>
  370. </dl>
  371. <dl class="retval"><dt>Return values</dt><dd>
  372. <table class="retval">
  373. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success. </td></tr>
  374. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>for invalid parameters. </td></tr>
  375. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  376. </table>
  377. </dd>
  378. </dl>
  379. </div>
  380. </div>
  381. <a id="ga487ac222f6bd4074c34128627af14825"></a>
  382. <h2 class="memtitle"><span class="permalink"><a href="#ga487ac222f6bd4074c34128627af14825">&#9670;&nbsp;</a></span>ifapi_der_sig_to_tpm()</h2>
  383. <div class="memitem">
  384. <div class="memproto">
  385. <table class="memname">
  386. <tr>
  387. <td class="memname">TSS2_RC ifapi_der_sig_to_tpm </td>
  388. <td>(</td>
  389. <td class="paramtype">const TPMT_PUBLIC *&#160;</td>
  390. <td class="paramname"><em>tpmPublic</em>, </td>
  391. </tr>
  392. <tr>
  393. <td class="paramkey"></td>
  394. <td></td>
  395. <td class="paramtype">const unsigned char *&#160;</td>
  396. <td class="paramname"><em>signature</em>, </td>
  397. </tr>
  398. <tr>
  399. <td class="paramkey"></td>
  400. <td></td>
  401. <td class="paramtype">size_t&#160;</td>
  402. <td class="paramname"><em>signatureSize</em>, </td>
  403. </tr>
  404. <tr>
  405. <td class="paramkey"></td>
  406. <td></td>
  407. <td class="paramtype">TPMI_ALG_HASH&#160;</td>
  408. <td class="paramname"><em>hashAlgorithm</em>, </td>
  409. </tr>
  410. <tr>
  411. <td class="paramkey"></td>
  412. <td></td>
  413. <td class="paramtype">TPMT_SIGNATURE *&#160;</td>
  414. <td class="paramname"><em>tpmSignature</em>&#160;</td>
  415. </tr>
  416. <tr>
  417. <td></td>
  418. <td>)</td>
  419. <td></td><td></td>
  420. </tr>
  421. </table>
  422. </div><div class="memdoc">
  423. <p>Convert signature from DER to TPM format.</p>
  424. <p>The signature in DER format is converted to TPM format to enable verification by the TPM.</p>
  425. <dl class="params"><dt>Parameters</dt><dd>
  426. <table class="params">
  427. <tr><td class="paramdir">[in]</td><td class="paramname">tpmPublic</td><td>The public information of the signature key </td></tr>
  428. <tr><td class="paramdir">[in]</td><td class="paramname">signature</td><td>A byte buffer holding the DER encoded signature </td></tr>
  429. <tr><td class="paramdir">[in]</td><td class="paramname">signatureSize</td><td>The size of signature in bytes </td></tr>
  430. <tr><td class="paramdir">[in]</td><td class="paramname">hashAlgorithm</td><td>The TSS identifier for the hash algorithm used to compute the digest </td></tr>
  431. <tr><td class="paramdir">[out]</td><td class="paramname">tpmSignature</td><td>The signature in TPM format</td></tr>
  432. </table>
  433. </dd>
  434. </dl>
  435. <dl class="retval"><dt>Return values</dt><dd>
  436. <table class="retval">
  437. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  438. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  439. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if tpmPublic, signature or tpmSignature is NULL </td></tr>
  440. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  441. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if an invalid value was passed into the function. </td></tr>
  442. </table>
  443. </dd>
  444. </dl>
  445. </div>
  446. </div>
  447. <a id="gac56f0fce6cbb0ff4e4cba9c398f695df"></a>
  448. <h2 class="memtitle"><span class="permalink"><a href="#gac56f0fce6cbb0ff4e4cba9c398f695df">&#9670;&nbsp;</a></span>ifapi_get_hash_alg_for_size()</h2>
  449. <div class="memitem">
  450. <div class="memproto">
  451. <table class="memname">
  452. <tr>
  453. <td class="memname">TSS2_RC ifapi_get_hash_alg_for_size </td>
  454. <td>(</td>
  455. <td class="paramtype">uint16_t&#160;</td>
  456. <td class="paramname"><em>size</em>, </td>
  457. </tr>
  458. <tr>
  459. <td class="paramkey"></td>
  460. <td></td>
  461. <td class="paramtype">TPMI_ALG_HASH *&#160;</td>
  462. <td class="paramname"><em>hashAlgorithm</em>&#160;</td>
  463. </tr>
  464. <tr>
  465. <td></td>
  466. <td>)</td>
  467. <td></td><td></td>
  468. </tr>
  469. </table>
  470. </div><div class="memdoc">
  471. <p>Returns a suitable hash algorithm for a given digest size.</p>
  472. <dl class="params"><dt>Parameters</dt><dd>
  473. <table class="params">
  474. <tr><td class="paramdir">[in]</td><td class="paramname">size</td><td>The size of the digest </td></tr>
  475. <tr><td class="paramdir">[out]</td><td class="paramname">hashAlgorithm</td><td>A suitable hash algorithm for the digest size</td></tr>
  476. </table>
  477. </dd>
  478. </dl>
  479. <dl class="retval"><dt>Return values</dt><dd>
  480. <table class="retval">
  481. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  482. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if hashAlgorithm is NULL </td></tr>
  483. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the digest size is invalid </td></tr>
  484. </table>
  485. </dd>
  486. </dl>
  487. </div>
  488. </div>
  489. <a id="gaa97941ce97a4bc07441db3cd6b7d47f6"></a>
  490. <h2 class="memtitle"><span class="permalink"><a href="#gaa97941ce97a4bc07441db3cd6b7d47f6">&#9670;&nbsp;</a></span>ifapi_get_profile_sig_scheme()</h2>
  491. <div class="memitem">
  492. <div class="memproto">
  493. <table class="memname">
  494. <tr>
  495. <td class="memname">TPM2_RC ifapi_get_profile_sig_scheme </td>
  496. <td>(</td>
  497. <td class="paramtype">const <a class="el" href="struct_i_f_a_p_i___p_r_o_f_i_l_e.html">IFAPI_PROFILE</a> *&#160;</td>
  498. <td class="paramname"><em>profile</em>, </td>
  499. </tr>
  500. <tr>
  501. <td class="paramkey"></td>
  502. <td></td>
  503. <td class="paramtype">const TPMT_PUBLIC *&#160;</td>
  504. <td class="paramname"><em>tpmPublic</em>, </td>
  505. </tr>
  506. <tr>
  507. <td class="paramkey"></td>
  508. <td></td>
  509. <td class="paramtype">TPMT_SIG_SCHEME *&#160;</td>
  510. <td class="paramname"><em>signatureScheme</em>&#160;</td>
  511. </tr>
  512. <tr>
  513. <td></td>
  514. <td>)</td>
  515. <td></td><td></td>
  516. </tr>
  517. </table>
  518. </div><div class="memdoc">
  519. <p>Returns the signature scheme that is currently used in the FAPI context.</p>
  520. <dl class="params"><dt>Parameters</dt><dd>
  521. <table class="params">
  522. <tr><td class="paramdir">[in]</td><td class="paramname">profile</td><td>The FAPI profile from which the signing scheme is retrieved </td></tr>
  523. <tr><td class="paramdir">[in]</td><td class="paramname">tpmPublic</td><td>The public key for which the signing key is fetched from the FAPI </td></tr>
  524. <tr><td class="paramdir">[out]</td><td class="paramname">signatureScheme</td><td>The currently used signature scheme</td></tr>
  525. </table>
  526. </dd>
  527. </dl>
  528. <dl class="retval"><dt>Return values</dt><dd>
  529. <table class="retval">
  530. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>if the signature scheme was successfully fetched </td></tr>
  531. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if one of the parameters is NULL </td></tr>
  532. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the key type is not TPM2_ALG_RSA or TPM2_ALG_ECC </td></tr>
  533. </table>
  534. </dd>
  535. </dl>
  536. </div>
  537. </div>
  538. <a id="gaf713079ae0eaa00544909915b126e4b7"></a>
  539. <h2 class="memtitle"><span class="permalink"><a href="#gaf713079ae0eaa00544909915b126e4b7">&#9670;&nbsp;</a></span>ifapi_get_public_from_pem_cert()</h2>
  540. <div class="memitem">
  541. <div class="memproto">
  542. <table class="memname">
  543. <tr>
  544. <td class="memname">TSS2_RC ifapi_get_public_from_pem_cert </td>
  545. <td>(</td>
  546. <td class="paramtype">const char *&#160;</td>
  547. <td class="paramname"><em>pem_cert</em>, </td>
  548. </tr>
  549. <tr>
  550. <td class="paramkey"></td>
  551. <td></td>
  552. <td class="paramtype">TPM2B_PUBLIC *&#160;</td>
  553. <td class="paramname"><em>tpm_public</em>&#160;</td>
  554. </tr>
  555. <tr>
  556. <td></td>
  557. <td>)</td>
  558. <td></td><td></td>
  559. </tr>
  560. </table>
  561. </div><div class="memdoc">
  562. <p>Get public information for key of a pem certificate.</p>
  563. <dl class="params"><dt>Parameters</dt><dd>
  564. <table class="params">
  565. <tr><td class="paramdir">[in]</td><td class="paramname">pem_cert</td><td>The pem certificate. </td></tr>
  566. <tr><td class="paramdir">[out]</td><td class="paramname">tpm_public</td><td>The public information of the key in TPM format.</td></tr>
  567. </table>
  568. </dd>
  569. </dl>
  570. <dl class="retval"><dt>Return values</dt><dd>
  571. <table class="retval">
  572. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  573. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the conversion fails. </td></tr>
  574. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if openssl errors occur. </td></tr>
  575. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>a invalid null pointer is passed. </td></tr>
  576. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if not enough memory can be allocated. </td></tr>
  577. </table>
  578. </dd>
  579. </dl>
  580. </div>
  581. </div>
  582. <a id="ga2749271fc949a0587ea33fd35b20c651"></a>
  583. <h2 class="memtitle"><span class="permalink"><a href="#ga2749271fc949a0587ea33fd35b20c651">&#9670;&nbsp;</a></span>ifapi_get_signature_algorithm_from_pem()</h2>
  584. <div class="memitem">
  585. <div class="memproto">
  586. <table class="memname">
  587. <tr>
  588. <td class="memname">TPM2_ALG_ID ifapi_get_signature_algorithm_from_pem </td>
  589. <td>(</td>
  590. <td class="paramtype">const char *&#160;</td>
  591. <td class="paramname"><em>pemKey</em></td><td>)</td>
  592. <td></td>
  593. </tr>
  594. </table>
  595. </div><div class="memdoc">
  596. <p>Returns the TPM algorithm identifier that matches to the signature algorithm of a given PEM key.</p>
  597. <dl class="params"><dt>Parameters</dt><dd>
  598. <table class="params">
  599. <tr><td class="paramdir">[in]</td><td class="paramname">pemKey</td><td>The public key from which the signature algorithm is retrieved</td></tr>
  600. </table>
  601. </dd>
  602. </dl>
  603. <dl class="retval"><dt>Return values</dt><dd>
  604. <table class="retval">
  605. <tr><td class="paramname">TPM2_ALG_RSA</td><td>if pemKey holds an RSA key </td></tr>
  606. <tr><td class="paramname">TPM2_ALG_ECC</td><td>if pemKey holds an ECC key </td></tr>
  607. <tr><td class="paramname">TPM2_ALG_ERROR</td><td>if the signature algorithm could not be determined </td></tr>
  608. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>a invalid null pointer is passed. </td></tr>
  609. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if not enough memory can be allocated. </td></tr>
  610. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if an invalid value was passed into the function. </td></tr>
  611. </table>
  612. </dd>
  613. </dl>
  614. </div>
  615. </div>
  616. <a id="gaf0acb921826dd121e027f6a7ffe2e6ca"></a>
  617. <h2 class="memtitle"><span class="permalink"><a href="#gaf0acb921826dd121e027f6a7ffe2e6ca">&#9670;&nbsp;</a></span>ifapi_get_tpm2b_public_from_pem()</h2>
  618. <div class="memitem">
  619. <div class="memproto">
  620. <table class="memname">
  621. <tr>
  622. <td class="memname">TSS2_RC ifapi_get_tpm2b_public_from_pem </td>
  623. <td>(</td>
  624. <td class="paramtype">const char *&#160;</td>
  625. <td class="paramname"><em>pemKey</em>, </td>
  626. </tr>
  627. <tr>
  628. <td class="paramkey"></td>
  629. <td></td>
  630. <td class="paramtype">TPM2B_PUBLIC *&#160;</td>
  631. <td class="paramname"><em>tpmPublic</em>&#160;</td>
  632. </tr>
  633. <tr>
  634. <td></td>
  635. <td>)</td>
  636. <td></td><td></td>
  637. </tr>
  638. </table>
  639. </div><div class="memdoc">
  640. <p>Gets an object with the TPM-relevant public information of a PEM encoded public key. The information is gathered from the key itself and the currently used FAPI profile.</p>
  641. <dl class="params"><dt>Parameters</dt><dd>
  642. <table class="params">
  643. <tr><td class="paramdir">[in]</td><td class="paramname">pemKey</td><td>A byte buffer holding the PEM encoded public key for which the public information is retrieved </td></tr>
  644. <tr><td class="paramdir">[out]</td><td class="paramname">tpmPublic</td><td>The public information of pemKey</td></tr>
  645. </table>
  646. </dd>
  647. </dl>
  648. <dl class="retval"><dt>Return values</dt><dd>
  649. <table class="retval">
  650. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  651. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if profile, pemKey or tpmPublic is NULL </td></tr>
  652. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  653. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  654. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if an invalid value was passed into the function. </td></tr>
  655. </table>
  656. </dd>
  657. </dl>
  658. </div>
  659. </div>
  660. <a id="ga30a2dbc9555d38d2cc07ae8039d52d42"></a>
  661. <h2 class="memtitle"><span class="permalink"><a href="#ga30a2dbc9555d38d2cc07ae8039d52d42">&#9670;&nbsp;</a></span>ifapi_get_tpm_key_fingerprint()</h2>
  662. <div class="memitem">
  663. <div class="memproto">
  664. <table class="memname">
  665. <tr>
  666. <td class="memname">TSS2_RC ifapi_get_tpm_key_fingerprint </td>
  667. <td>(</td>
  668. <td class="paramtype">const TPM2B_PUBLIC *&#160;</td>
  669. <td class="paramname"><em>tpmPublicKey</em>, </td>
  670. </tr>
  671. <tr>
  672. <td class="paramkey"></td>
  673. <td></td>
  674. <td class="paramtype">TPMI_ALG_HASH&#160;</td>
  675. <td class="paramname"><em>hashAlg</em>, </td>
  676. </tr>
  677. <tr>
  678. <td class="paramkey"></td>
  679. <td></td>
  680. <td class="paramtype">TPM2B_DIGEST *&#160;</td>
  681. <td class="paramname"><em>fingerprint</em>&#160;</td>
  682. </tr>
  683. <tr>
  684. <td></td>
  685. <td>)</td>
  686. <td></td><td></td>
  687. </tr>
  688. </table>
  689. </div><div class="memdoc">
  690. <p>Compute the fingerprint of a TPM public key.</p>
  691. <dl class="params"><dt>Parameters</dt><dd>
  692. <table class="params">
  693. <tr><td class="paramdir">[in]</td><td class="paramname">tpmPublicKey</td><td>The public key created by the TPM </td></tr>
  694. <tr><td class="paramdir">[in]</td><td class="paramname">hashAlg</td><td>The hash algorithm used for fingerprint computation. </td></tr>
  695. <tr><td class="paramdir">[out]</td><td class="paramname">fingerprint</td><td>The fingerprint digest.</td></tr>
  696. </table>
  697. </dd>
  698. </dl>
  699. <dl class="retval"><dt>Return values</dt><dd>
  700. <table class="retval">
  701. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  702. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  703. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  704. <tr><td class="paramname">TSS2_FAPI_BAD_REFERENCE</td><td>if tpmPublicKey or pemKeySize are NULL </td></tr>
  705. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>a invalid null pointer is passed. </td></tr>
  706. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if an invalid value was passed into the function. </td></tr>
  707. </table>
  708. </dd>
  709. </dl>
  710. </div>
  711. </div>
  712. <a id="ga817996f764dc590b0fcde8b2479ebd14"></a>
  713. <h2 class="memtitle"><span class="permalink"><a href="#ga817996f764dc590b0fcde8b2479ebd14">&#9670;&nbsp;</a></span>ifapi_hash_get_digest_size()</h2>
  714. <div class="memitem">
  715. <div class="memproto">
  716. <table class="memname">
  717. <tr>
  718. <td class="memname">size_t ifapi_hash_get_digest_size </td>
  719. <td>(</td>
  720. <td class="paramtype">TPM2_ALG_ID&#160;</td>
  721. <td class="paramname"><em>hashAlgorithm</em></td><td>)</td>
  722. <td></td>
  723. </tr>
  724. </table>
  725. </div><div class="memdoc">
  726. <p>Returns the digest size of a given hash algorithm.</p>
  727. <dl class="params"><dt>Parameters</dt><dd>
  728. <table class="params">
  729. <tr><td class="paramdir">[in]</td><td class="paramname">hashAlgorithm</td><td>The TSS identifier of the hash algorithm</td></tr>
  730. </table>
  731. </dd>
  732. </dl>
  733. <dl class="section return"><dt>Returns</dt><dd>The size of the digest produced by the hash algorithm if hashAlgorithm is valid </dd></dl>
  734. <dl class="retval"><dt>Return values</dt><dd>
  735. <table class="retval">
  736. <tr><td class="paramname">0</td><td>if hashAlgorithm is invalid </td></tr>
  737. </table>
  738. </dd>
  739. </dl>
  740. </div>
  741. </div>
  742. <a id="gaca515b7a38f631d79c814709f8506e0e"></a>
  743. <h2 class="memtitle"><span class="permalink"><a href="#gaca515b7a38f631d79c814709f8506e0e">&#9670;&nbsp;</a></span>ifapi_initialize_sign_public()</h2>
  744. <div class="memitem">
  745. <div class="memproto">
  746. <table class="memname">
  747. <tr>
  748. <td class="memname">TSS2_RC ifapi_initialize_sign_public </td>
  749. <td>(</td>
  750. <td class="paramtype">TPM2_ALG_ID&#160;</td>
  751. <td class="paramname"><em>signatureAlgorithm</em>, </td>
  752. </tr>
  753. <tr>
  754. <td class="paramkey"></td>
  755. <td></td>
  756. <td class="paramtype">TPM2B_PUBLIC *&#160;</td>
  757. <td class="paramname"><em>public</em>&#160;</td>
  758. </tr>
  759. <tr>
  760. <td></td>
  761. <td>)</td>
  762. <td></td><td></td>
  763. </tr>
  764. </table>
  765. </div><div class="memdoc">
  766. <p>Initializes a FAPI key template for a given signature algorithm.</p>
  767. <dl class="params"><dt>Parameters</dt><dd>
  768. <table class="params">
  769. <tr><td class="paramdir">[in]</td><td class="paramname">signatureAlgorithm</td><td>The signature algorithm to use. Must be TPM2_ALG_RSA or TPM2_ALG_ECC </td></tr>
  770. <tr><td class="paramdir">[out]</td><td class="paramname">public</td><td>The template to initialize</td></tr>
  771. </table>
  772. </dd>
  773. </dl>
  774. <dl class="retval"><dt>Return values</dt><dd>
  775. <table class="retval">
  776. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  777. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if template is NULL </td></tr>
  778. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if signatureAlgorithm is not TPM2_ALG_RSA or TPM2_ALG_ECC </td></tr>
  779. </table>
  780. </dd>
  781. </dl>
  782. </div>
  783. </div>
  784. <a id="ga67cac597edb51e7aeab416e3b3d46194"></a>
  785. <h2 class="memtitle"><span class="permalink"><a href="#ga67cac597edb51e7aeab416e3b3d46194">&#9670;&nbsp;</a></span>ifapi_pub_pem_key_from_tpm()</h2>
  786. <div class="memitem">
  787. <div class="memproto">
  788. <table class="memname">
  789. <tr>
  790. <td class="memname">TSS2_RC ifapi_pub_pem_key_from_tpm </td>
  791. <td>(</td>
  792. <td class="paramtype">const TPM2B_PUBLIC *&#160;</td>
  793. <td class="paramname"><em>tpmPublicKey</em>, </td>
  794. </tr>
  795. <tr>
  796. <td class="paramkey"></td>
  797. <td></td>
  798. <td class="paramtype">char **&#160;</td>
  799. <td class="paramname"><em>pemKey</em>, </td>
  800. </tr>
  801. <tr>
  802. <td class="paramkey"></td>
  803. <td></td>
  804. <td class="paramtype">int *&#160;</td>
  805. <td class="paramname"><em>pemKeySize</em>&#160;</td>
  806. </tr>
  807. <tr>
  808. <td></td>
  809. <td>)</td>
  810. <td></td><td></td>
  811. </tr>
  812. </table>
  813. </div><div class="memdoc">
  814. <p>Convert a TPM public key into a PEM formatted byte buffer. This can be used by TLS libraries.</p>
  815. <dl class="params"><dt>Parameters</dt><dd>
  816. <table class="params">
  817. <tr><td class="paramdir">[in]</td><td class="paramname">tpmPublicKey</td><td>The public key created by the TPM </td></tr>
  818. <tr><td class="paramdir">[out]</td><td class="paramname">pemKey</td><td>A byte buffer that will hold the PEM representation of the public key (callee allocated) </td></tr>
  819. <tr><td class="paramdir">[out]</td><td class="paramname">pemKeySize</td><td>The size of pemKey in bytes</td></tr>
  820. </table>
  821. </dd>
  822. </dl>
  823. <dl class="retval"><dt>Return values</dt><dd>
  824. <table class="retval">
  825. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  826. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  827. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  828. <tr><td class="paramname">TSS2_FAPI_BAD_REFERENCE</td><td>if tpmPublicKey or pemKeySize are NULL </td></tr>
  829. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>a invalid null pointer is passed. </td></tr>
  830. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if an invalid value was passed into the function. </td></tr>
  831. </table>
  832. </dd>
  833. </dl>
  834. </div>
  835. </div>
  836. <a id="ga48d5eaba0929c2509a637e7e6a35990d"></a>
  837. <h2 class="memtitle"><span class="permalink"><a href="#ga48d5eaba0929c2509a637e7e6a35990d">&#9670;&nbsp;</a></span>ifapi_tpm_ecc_sig_to_der()</h2>
  838. <div class="memitem">
  839. <div class="memproto">
  840. <table class="memname">
  841. <tr>
  842. <td class="memname">TSS2_RC ifapi_tpm_ecc_sig_to_der </td>
  843. <td>(</td>
  844. <td class="paramtype">const TPMT_SIGNATURE *&#160;</td>
  845. <td class="paramname"><em>tpmSignature</em>, </td>
  846. </tr>
  847. <tr>
  848. <td class="paramkey"></td>
  849. <td></td>
  850. <td class="paramtype">uint8_t **&#160;</td>
  851. <td class="paramname"><em>signature</em>, </td>
  852. </tr>
  853. <tr>
  854. <td class="paramkey"></td>
  855. <td></td>
  856. <td class="paramtype">size_t *&#160;</td>
  857. <td class="paramname"><em>signatureSize</em>&#160;</td>
  858. </tr>
  859. <tr>
  860. <td></td>
  861. <td>)</td>
  862. <td></td><td></td>
  863. </tr>
  864. </table>
  865. </div><div class="memdoc">
  866. <p>Convert a TPM ECDSA signature into a DER formatted byte buffer. This can be used by TLS libraries.</p>
  867. <dl class="params"><dt>Parameters</dt><dd>
  868. <table class="params">
  869. <tr><td class="paramdir">[in]</td><td class="paramname">tpmSignature</td><td>The signature created by the TPM </td></tr>
  870. <tr><td class="paramdir">[out]</td><td class="paramname">signature</td><td>A byte buffer that will hold the DER representation of the signature (callee allocated) </td></tr>
  871. <tr><td class="paramdir">[out]</td><td class="paramname">signatureSize</td><td>The size of signature in bytes. May be NULL</td></tr>
  872. </table>
  873. </dd>
  874. </dl>
  875. <dl class="retval"><dt>Return values</dt><dd>
  876. <table class="retval">
  877. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  878. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if tpmSignature is NULL </td></tr>
  879. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  880. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  881. </table>
  882. </dd>
  883. </dl>
  884. </div>
  885. </div>
  886. <a id="gaad2a4c24b2a55638bcb84fca8b5fc2f6"></a>
  887. <h2 class="memtitle"><span class="permalink"><a href="#gaad2a4c24b2a55638bcb84fca8b5fc2f6">&#9670;&nbsp;</a></span>ifapi_verify_ek_cert()</h2>
  888. <div class="memitem">
  889. <div class="memproto">
  890. <table class="memname">
  891. <tr>
  892. <td class="memname">TSS2_RC ifapi_verify_ek_cert </td>
  893. <td>(</td>
  894. <td class="paramtype">char *&#160;</td>
  895. <td class="paramname"><em>root_cert_pem</em>, </td>
  896. </tr>
  897. <tr>
  898. <td class="paramkey"></td>
  899. <td></td>
  900. <td class="paramtype">char *&#160;</td>
  901. <td class="paramname"><em>intermed_cert_pem</em>, </td>
  902. </tr>
  903. <tr>
  904. <td class="paramkey"></td>
  905. <td></td>
  906. <td class="paramtype">char *&#160;</td>
  907. <td class="paramname"><em>ek_cert_pem</em>&#160;</td>
  908. </tr>
  909. <tr>
  910. <td></td>
  911. <td>)</td>
  912. <td></td><td></td>
  913. </tr>
  914. </table>
  915. </div><div class="memdoc">
  916. <p>Verify EK certificate read from TPM.</p>
  917. <dl class="params"><dt>Parameters</dt><dd>
  918. <table class="params">
  919. <tr><td class="paramdir">[in]</td><td class="paramname">root_cert_pem</td><td>The vendor root certificate. </td></tr>
  920. <tr><td class="paramdir">[in]</td><td class="paramname">intermed_cert_pem</td><td>The vendor intermediate certificate. </td></tr>
  921. <tr><td class="paramdir">[in]</td><td class="paramname">ek_cert_pem</td><td>The ek certificate from TPM.</td></tr>
  922. </table>
  923. </dd>
  924. </dl>
  925. <dl class="retval"><dt>Return values</dt><dd>
  926. <table class="retval">
  927. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  928. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the verification was no successful. </td></tr>
  929. <tr><td class="paramname">TSS2_FAPI_RC_NO_CERT</td><td>if an error did occur during certificate downloading. </td></tr>
  930. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an internal error occurred. </td></tr>
  931. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if not enough memory can be allocated. </td></tr>
  932. </table>
  933. </dd>
  934. </dl>
  935. </div>
  936. </div>
  937. <a id="gae1b2637abec3a461a863360c0e76cc35"></a>
  938. <h2 class="memtitle"><span class="permalink"><a href="#gae1b2637abec3a461a863360c0e76cc35">&#9670;&nbsp;</a></span>ifapi_verify_signature()</h2>
  939. <div class="memitem">
  940. <div class="memproto">
  941. <table class="memname">
  942. <tr>
  943. <td class="memname">TSS2_RC ifapi_verify_signature </td>
  944. <td>(</td>
  945. <td class="paramtype">const <a class="el" href="struct___i_f_a_p_i___o_b_j_e_c_t.html">IFAPI_OBJECT</a> *&#160;</td>
  946. <td class="paramname"><em>keyObject</em>, </td>
  947. </tr>
  948. <tr>
  949. <td class="paramkey"></td>
  950. <td></td>
  951. <td class="paramtype">const uint8_t *&#160;</td>
  952. <td class="paramname"><em>signature</em>, </td>
  953. </tr>
  954. <tr>
  955. <td class="paramkey"></td>
  956. <td></td>
  957. <td class="paramtype">size_t&#160;</td>
  958. <td class="paramname"><em>signatureSize</em>, </td>
  959. </tr>
  960. <tr>
  961. <td class="paramkey"></td>
  962. <td></td>
  963. <td class="paramtype">const uint8_t *&#160;</td>
  964. <td class="paramname"><em>digest</em>, </td>
  965. </tr>
  966. <tr>
  967. <td class="paramkey"></td>
  968. <td></td>
  969. <td class="paramtype">size_t&#160;</td>
  970. <td class="paramname"><em>digestSize</em>&#160;</td>
  971. </tr>
  972. <tr>
  973. <td></td>
  974. <td>)</td>
  975. <td></td><td></td>
  976. </tr>
  977. </table>
  978. </div><div class="memdoc">
  979. <p>Verifies a signature using a given FAPI public key.</p>
  980. <dl class="params"><dt>Parameters</dt><dd>
  981. <table class="params">
  982. <tr><td class="paramdir">[in]</td><td class="paramname">keyObject</td><td>The FAPI public key used for verification </td></tr>
  983. <tr><td class="paramdir">[in]</td><td class="paramname">signature</td><td>The signature to verify </td></tr>
  984. <tr><td class="paramdir">[in]</td><td class="paramname">signatureSize</td><td>The size of signature in bytes </td></tr>
  985. <tr><td class="paramdir">[in]</td><td class="paramname">digest</td><td>The digest of the signature </td></tr>
  986. <tr><td class="paramdir">[in]</td><td class="paramname">digestSize</td><td>The size of digest in bytes</td></tr>
  987. </table>
  988. </dd>
  989. </dl>
  990. <dl class="retval"><dt>Return values</dt><dd>
  991. <table class="retval">
  992. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>In case of success </td></tr>
  993. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if keyObject, signature or digest is NULL </td></tr>
  994. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the type of the key is wrong </td></tr>
  995. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  996. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  997. <tr><td class="paramname">TSS2_FAPI_RC_SIGNATURE_VERIFICATION_FAILED</td><td>if the verification of the signature fails </td></tr>
  998. </table>
  999. </dd>
  1000. </dl>
  1001. </div>
  1002. </div>
  1003. <a id="gaf974aab23bced5dd22e422b5ad5cbb51"></a>
  1004. <h2 class="memtitle"><span class="permalink"><a href="#gaf974aab23bced5dd22e422b5ad5cbb51">&#9670;&nbsp;</a></span>ifapi_verify_signature_quote()</h2>
  1005. <div class="memitem">
  1006. <div class="memproto">
  1007. <table class="memname">
  1008. <tr>
  1009. <td class="memname">TSS2_RC ifapi_verify_signature_quote </td>
  1010. <td>(</td>
  1011. <td class="paramtype">const <a class="el" href="struct___i_f_a_p_i___o_b_j_e_c_t.html">IFAPI_OBJECT</a> *&#160;</td>
  1012. <td class="paramname"><em>keyObject</em>, </td>
  1013. </tr>
  1014. <tr>
  1015. <td class="paramkey"></td>
  1016. <td></td>
  1017. <td class="paramtype">const uint8_t *&#160;</td>
  1018. <td class="paramname"><em>signature</em>, </td>
  1019. </tr>
  1020. <tr>
  1021. <td class="paramkey"></td>
  1022. <td></td>
  1023. <td class="paramtype">size_t&#160;</td>
  1024. <td class="paramname"><em>signatureSize</em>, </td>
  1025. </tr>
  1026. <tr>
  1027. <td class="paramkey"></td>
  1028. <td></td>
  1029. <td class="paramtype">const uint8_t *&#160;</td>
  1030. <td class="paramname"><em>digest</em>, </td>
  1031. </tr>
  1032. <tr>
  1033. <td class="paramkey"></td>
  1034. <td></td>
  1035. <td class="paramtype">size_t&#160;</td>
  1036. <td class="paramname"><em>digestSize</em>, </td>
  1037. </tr>
  1038. <tr>
  1039. <td class="paramkey"></td>
  1040. <td></td>
  1041. <td class="paramtype">const TPMT_SIG_SCHEME *&#160;</td>
  1042. <td class="paramname"><em>signatureScheme</em>&#160;</td>
  1043. </tr>
  1044. <tr>
  1045. <td></td>
  1046. <td>)</td>
  1047. <td></td><td></td>
  1048. </tr>
  1049. </table>
  1050. </div><div class="memdoc">
  1051. <p>Verifies the signature created by a Quote command.</p>
  1052. <dl class="params"><dt>Parameters</dt><dd>
  1053. <table class="params">
  1054. <tr><td class="paramdir">[in]</td><td class="paramname">keyObject</td><td>A FAPI key with which the signature is verified </td></tr>
  1055. <tr><td class="paramdir">[in]</td><td class="paramname">signature</td><td>A byte buffer holding the signature </td></tr>
  1056. <tr><td class="paramdir">[in]</td><td class="paramname">signatureSize</td><td>The size of signature in bytes </td></tr>
  1057. <tr><td class="paramdir">[in]</td><td class="paramname">digest</td><td>The digest of the signature </td></tr>
  1058. <tr><td class="paramdir">[in]</td><td class="paramname">digestSize</td><td>The size of digest in bytes </td></tr>
  1059. <tr><td class="paramdir">[in]</td><td class="paramname">signatureScheme</td><td>The signature scheme</td></tr>
  1060. </table>
  1061. </dd>
  1062. </dl>
  1063. <dl class="retval"><dt>Return values</dt><dd>
  1064. <table class="retval">
  1065. <tr><td class="paramname">TSS2_RC_SUCCESS</td><td>on success </td></tr>
  1066. <tr><td class="paramname">TSS2_FAPI_RC_BAD_REFERENCE</td><td>if keyObject, signature, digest or signatureScheme is NULL </td></tr>
  1067. <tr><td class="paramname">TSS2_FAPI_RC_MEMORY</td><td>if memory could not be allocated </td></tr>
  1068. <tr><td class="paramname">TSS2_FAPI_RC_BAD_VALUE</td><td>if the PEM encoded key could not be decoded </td></tr>
  1069. <tr><td class="paramname">TSS2_FAPI_RC_GENERAL_FAILURE</td><td>if an error occurs in the crypto library </td></tr>
  1070. <tr><td class="paramname">TSS2_FAPI_RC_SIGNATURE_VERIFICATION_FAILED</td><td>if the verification of the signature fails </td></tr>
  1071. </table>
  1072. </dd>
  1073. </dl>
  1074. </div>
  1075. </div>
  1076. </div><!-- contents -->
  1077. </div><!-- doc-content -->
  1078. <!-- start footer part -->
  1079. <div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  1080. <ul>
  1081. <li class="footer">Generated by
  1082. <a href="http://www.doxygen.org/index.html">
  1083. <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  1084. </ul>
  1085. </div>
  1086. </body>
  1087. </html>